WilmAI

ai.wilm由 wilm.ai 发布v2.4.0更新于 Nov 7, 2026

芬兰面向家长和学生的Wilma学校系统:课程表、作业、考试和消息。

AI 翻译由 AI 模型根据下方的原文描述翻译,可能有误。

原文描述

Finland's Wilma school system for parents and students: schedule, homework, exams and messages.

已验证STDIO仅桌面

概览

WilmAI 的本地 MCP 服务,由 wilm.ai 发布;无需登录;STDIO;20 个工具。

暂无 AI 概览:以下信息来自注册中心条目和服务本身。

发布者
wilm.ai

安装

在 SourceWeft 中

  1. 打开 控制台中的 WilmAI,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

@wilm-ai/wilma-cli

Command line interface for Wilma (Finnish school system), built for parents and AI agents. Students can use it with their own Wilma login too.

Install

Needs Node.js 20.18.1 or newer.

bash
npm i -g @wilm-ai/wilma-cli# orpnpm add -g @wilm-ai/wilma-cli

Log in

bash
wilma login

Opens a one-time login page in your browser: pick your school's Wilma and log in. The login is saved to ~/.config/wilmai/config.json.

Without a browser: wilma login --tenant <url|city> --username <name> with the password in WILMA_PASSWORD or piped via --password-stdin. Or set WILMA_TENANT, WILMA_USERNAME, WILMA_PASSWORD (and WILMA_TOTP_SECRET) and skip the saved login.

Log out

bash
wilma logout                  # every saved login; `wilma logout 2` for one (numbers from `wilma accounts`)

Wilma allows one session per account: when WilmAI logs in, Wilma logs you out in your browser, and the other way round. wilma logout ends WilmAI's session, as Wilma's own Log out does, so you can use Wilma in the browser. The logins stay saved, and the next command logs in again. wilma config clear deletes the logins as well.

Use it

bash
wilma summary                 # the daily briefing for every child — start herewilma schedule tomorrow       # today | tomorrow | week | next-week | 2026-10-07 | thuwilma exams                   # upcoming exams, with topics and start timeswilma homeworkwilma notes --days 7          # lesson notes: absences and teachers' feedbackwilma notes summary           # those counted by kind for the school yearwilma messages                # newest first; [new] and reply countswilma messages 27164611       # one message with its whole threadwilma news                    # dated bulletins plus pinned ones; --older for the restwilma news 73291              # one bulletin with its linkswilma news 73291 download 1   # a file linked from itwilma grades                  # recent exam gradeswilma gradebook               # course and report-card gradeswilma printouts               # PDFs such as report cards; `wilma printouts <id>` saves onewilma studentswilma help <command>          # usage, examples and the JSON shape
  • Every child by default. --student <number|name> narrows to one (a number, the full name, or the start of a first or last name — never a loose match).
  • JSON for programs, text for people. Output is JSON when another program reads it (agents, pipes) and text in a terminal; --json or --text forces either. The JSON is the same as the MCP tools' — { students: [{ student, … }] } — compact, with times in Finnish time and their offset (2026-10-02T13:37:00+03:00).
  • Dates are YYYY-MM-DD, today, yesterday or tomorrow.
  • One login, not one per command. Commands continue the last Wilma session (saved next to the login, readable only by you) and log in again only when Wilma has ended it. Each login would otherwise log you out of Wilma in your browser and, with two-step verification, need a new code. WILMAI_NO_SESSION_CACHE=1 turns this off.
  • For daily runs: wilma summary --since yesterday returns only what is new: bulletins, messages, homework and lesson notes from that day on, plus anything unread.
  • Errors are JSON too: { "status": "error", "code": "unknown_student", "message": "…" }, with exit code 2 for usage errors, 3 when not logged in, and 1 otherwise. Codes include invalid_argument, unknown_command, not_logged_in, unknown_student, ambiguous_student, not_found, login_failed, mfa_required, network and wilma_error.

The 1.x spellings still work: kids list, tenants, attendance list, <command> list, messages read <id>, news read <id>, news resource download <id> <resource>, printouts download <id> and --all-students.

Running wilma without arguments in a terminal opens an interactive menu.

Use with AI assistants (MCP)

bash
wilma mcp

Starts a stdio MCP server with read-only Wilma tools (wilma_summary, wilma_schedule, wilma_read_news, …) that return the same data as the commands, plus wilma_logout, which ends WilmAI's Wilma session like wilma logout. Add it to any MCP client as npx -y @wilm-ai/wilma-cli@2 mcp. Setup guides for Claude, ChatGPT, Grok Bot and OpenClaw: https://wilm.ai

Bulletin attachments

wilma news <id> lists every link in a bulletin (resources). Any resource can be downloaded with wilma news <id> download <resource> [--output <directory>] (the resource id also accepts a bare number, e.g. 1 for resource-1). Wilma-hosted files download through the session; external links are fetched without your Wilma login, and only from public websites. The result's status says what happened: downloaded (use the returned path) or not_a_file when the link answered with a web page (for example a sharing link that needs signing in — open it in a browser instead). --output defaults to the current directory; existing files are never overwritten.

Several Wilmas

Children at schools on different Wilmas need one login per Wilma. Run wilma login again (or press "Add another school's Wilma" on the login page); commands then cover every child, and each child carries the wilma it belongs to.

bash
wilma accounts                     # saved logins, numberedwilma accounts remove <number>     # or the Wilma name or username; also ends that login's Wilma session

Find your Wilma

bash
wilma find-school <city or school>

Other

bash
wilma update                       # when a newer version is out, a command says so on stderr, at most once a day (WILMAI_NO_UPDATE_CHECK=1 turns it off)wilma config clear                 # deletes every saved login and sessionwilma home                         # where to download WilmAI Home, the Wilma app for Mac and Windowswilma --version

MFA (Multi-Factor Authentication)

If your Wilma account has MFA/TOTP enabled:

Recommended: run wilma login. When Wilma asks for a code, the login page asks for your authenticator's setup key (base32 or otpauth:// URI) and saves it with the login, so later logins make their own codes. In the interactive menu (wilma), choose "Save TOTP secret for automatic login".

Without a saved login: set WILMA_TOTP_SECRET along with the other WILMA_* variables. --totp-secret <key> also works, but a key on the command line ends up in shell history and is visible to other programs on the computer.

Config

Logins are saved in ~/.config/wilmai/config.json (or $XDG_CONFIG_HOME/wilmai/config.json; override with WILMAI_CONFIG_PATH) and the current Wilma sessions in wilmai-sessions.json next to it, both readable only by you. wilma logout ends the sessions and deletes them, keeping the logins; wilma config clear deletes both.

Troubleshooting: TLS errors on a managed laptop

A TLS certificate error means the network is intercepting TLS and re-signing with a private root CA (common behind a corporate secure web gateway). Node ignores the OS trust store, so curl and your browser keep working while every Wilma request fails. A successful npm install is not evidence that TLS is healthy — the npm registry is commonly exempt from inspection.

bash
NODE_USE_SYSTEM_CA=1 wilma summary                        # Node >=22.19 / >=24.6node --use-system-ca "$(command -v wilma)" summary        # Node >=22.15NODE_EXTRA_CA_CERTS=/path/to/root-ca.pem wilma summary    # explicit root

Never use NODE_TLS_REJECT_UNAUTHORIZED=0 — it turns verification off entirely.

In JSON, transport failures have the code network, with the underlying cause and a hint, so agents can branch on it:

json
{  "status": "error",  "code": "network",  "message": "TLS certificate verification failed for https://example.inschool.fi (UNABLE_TO_GET_ISSUER_CERT_LOCALLY)",  "cause": "UNABLE_TO_GET_ISSUER_CERT_LOCALLY",  "hint": "..."}

Notes

  • Credentials and TOTP secrets are stored with lightweight obfuscation (not encryption) in a file only your user can read.
  • Bulletin links are fetched only from public websites (never local or private network addresses), without your Wilma login.
  • Commands cover every child; --student <number|name> narrows to one.

来源:packages/wilma-cli/README.md,提交 44e4595

工具

20

wilma_summary

School summary

Daily briefing per child: today's and the next school day's lessons, upcoming exams (with start times when given), recent homework, lesson notes since the previous school day (teachers' feedback and absences), recent bulletins, and recent and unread messages (ids, unread, replyCount; event invitations with invitationStatus, as in wilma_list_messages). What Wilma didn't give is listed in unavailable ("news": this Wilma doesn't show this account its bulletins). The best starting point for any question about school.

输入参数dayssincestudent

wilma_schedule

Lesson schedule

List each child's lessons for one day or a school week: today, the next school day, this or next week (Monday to Friday), a date, or the next given weekday; or any other week or period with from/to (e.g. a week further ahead, or several weeks to see the usual school days). Lessons come in time order with the date, start and end time, subject, teacher and room (when Wilma gives one); a day without school has no lessons. Exams and homework are in wilma_upcoming_exams and wilma_homework.

输入参数todatefromwhenstudentweekday

wilma_homework

Homework

List the homework teachers have entered for each child, newest first: the date, subject, teacher and what to do. It reads the homework Wilma's front page lists (Wilma decides how far back that goes). wilma_summary already includes the last few days' homework.

输入参数limitstudent

wilma_upcoming_exams

Upcoming exams

List each child's exams from today on that have no grade yet, soonest first: the date, start time (when the school gives one), exam name, subject, topic (what to study) and teacher. Graded exams are in wilma_grades.

输入参数limitstudent

wilma_grades

Exam grades

List each child's graded exams, newest first: the date, exam name, subject, grade as Wilma shows it (e.g. 8+, 9½, S), the teacher's notes and when a guardian marked it seen. It reads the exams Wilma's front page lists (Wilma decides how far back that goes); with from, Wilma's list of past exams for that period instead, as far back as the school keeps them, including exams still waiting for a grade (grade: null). For course, term and report-card grades use wilma_gradebook.

输入参数tofromlimitstudent

wilma_lesson_notes

Lesson notes and absences

Lesson notes (merkinnät) teachers logged: absences, lateness, and feedback such as praise or missing books or homework, with the teacher's own words when given. One day (default today), the last N days, or a period with from/to, which can reach ahead (a teacher may note a make-up exam on a coming lesson).

输入参数todatedaysfromstudent

wilma_lesson_notes_summary

Absences and feedback summary

Lesson notes counted by kind (e.g. absences for health reasons, unexplained absences, lateness, praise, missing study materials): this school year by default, or from a date.

输入参数tofromstudent

wilma_gradebook

Gradebook

Get each child's gradebook (Suoritukset): completed courses and their grades, grouped by subject (subject > syllabus > course), with course codes, credits and completion dates, plus term and school-year (report card) grades. Use it for course and report-card grades; single exam grades are in wilma_grades.

输入参数student

wilma_contacts

Class and teachers

Each child's class (e.g. 9A), class teacher and other supervisors with their role as Wilma names it (e.g. Luokanvalvoja), and the child's own teachers as Wilma's message recipients list them, with the subjects each teaches the child in this and next week's timetable (empty when none). Other school staff aren't included. Lessons with times and rooms are in wilma_schedule.

输入参数student

wilma_list_printouts

List printouts

PDF documents the school offers (Tulosteet), such as report cards or absence reports. Fetch one with wilma_get_printout.

输入参数student

wilma_get_printout

Get printout

Fetch one printout PDF so you can read it. Set save=true to also save it to the user's Downloads folder.

输入参数id必填savestudent

wilma_list_messages

List messages

Wilma messages, newest first (subject, sender, date, id, unread, replyCount). The appointments folder holds event invitations (parents' evenings, learning discussions) with the family's answer as Wilma lists it: invitationStatus ("Applied": signed up, the time in invitationInfo; "ExpiredReg": sign-up closed; null: no answer shown). Use wilma_read_message for the full text, and for an invitation's time slots.

输入参数limitfolderstudent

wilma_read_message

Read message

Full text of one Wilma message, including thread replies.

输入参数id必填student

wilma_list_news

List school news

School bulletins (tiedotteet): the newest dated ones, then pinned ones (pinned: true, e.g. the school-year bulletin), and with include_older also older bulletins (archived: true). Use wilma_read_news for the full text and attachments. unavailable: ["news"] means this Wilma doesn't show this account its bulletins, which isn't the same as having none.

输入参数limitstudentinclude_older

wilma_read_news

Read news bulletin

Full text of one bulletin plus its linked resources (attachments and links). Fetch a resource with wilma_get_news_attachment.

输入参数id必填student

wilma_get_news_attachment

Get bulletin attachment

Fetch a file linked from a bulletin (e.g. a PDF letter or menu) so you can read it. Returns the file content when it is a file, or 'not_a_file' with the URL when the link is a web page. Set save=true to also save it to the user's Downloads folder.

输入参数savenews_id必填studentresource_id必填

wilma_account

Wilma account status

Which Wilma logins are connected: each one's Wilma, username, role ("guardian", or "student" for a student's own login) and the children it lists. Families with children on different Wilmas connect one login per Wilma (wilma_login adds another). When two logins on one Wilma list the same child (a parent's and the child's own), tools read that child through the guardian's login, and the other login's entry for the child says readVia. A child unticked on the login page (a profile Wilma lists twice) has hidden: true and isn't read.

无需输入参数。

wilma_find_school

Find a school's Wilma

Search Finland's Wilma addresses by city or by school or organisation name. Most city schools share their city's Wilma (big cities don't list each school), while many colleges, private schools and small municipalities' schools have their own. Use it to help the user pick their Wilma, e.g. when setting WILMA_TENANT; several can serve one city, so ask which is theirs.

输入参数query必填

wilma_login

Log in to Wilma

Open a login page in the user's browser to connect a Wilma account, or add another one (for a child at a school with a different Wilma). The password is entered on that page, never in the chat.

无需输入参数。

wilma_logout

Log out of Wilma

End WilmAI's Wilma session, as Wilma's own Log out does. Wilma allows one session per account, so use this when the user wants to use Wilma in their browser or asks to log out. The login stays saved: the next Wilma tool call logs in again, and that ends the user's session in the browser, so don't call other Wilma tools afterwards unless the user asks.

无需输入参数。

版本历史

1
  1. v2.4.0最新Nov 3, 2026

评分

已满足适用检查项的 90%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分
  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分