aula-mcp
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
aula-mcp
MCP server (stdio) for Aula, the Danish school and daycare platform. It logs in with MitID over plain HTTP (no browser), keeps itself logged in with refresh tokens, and gives an LLM client compact, family-centred tools: today's digest, check-in status and pick-up plans, calendar, messages, posts, notifications, weekly plans and homework from every vendor widget, photos and attachments.
Built after reading the existing implementations in full: Casperjuel/aula-mcp (the MitID login is ported from it, MIT), scaarup/aula, miklen/aula_mcp, ilenhart/aula-mcp-server, madslundt/aula-mcp-ha and fhvilshoj/aula-mcp. See docs/DESIGN.md for what it does differently and why.
What is different
Children by name. Every tool takes
child: "Ørn"(case, prefix and æøå insensitive, refuses to guess between same-name siblings) or nothing for all children. The server maps names to the five different ids Aula and the vendors want.Local time everywhere. Aula's calendar answers in UTC; everything shown is Europe/Copenhagen, and "today"/"this week" are local.
Small answers. Plain text, HTML converted once, no raw payloads, per-call size budget that says what it left out. A week of calendar for two children is a few kilobytes, not 200.
One weekly-plan tool.
aula_weekplanmerges EasyIQ (ugeplan, SkolePortal, lektier), Meebook, Min Uddannelse (ugebrev, opgaver) and Systematic Huskelisten, routed by the widgets the account has.Self-healing session. Timeouts, retries on reads, refresh-and-retry on auth errors, API version bump on 410 with the request replayed, profile-context bootstrap, cross-process refresh lock.
Safer by default. stdio only; tokens encrypted at rest with the key in the Keychain; downloads by reference only (no model-supplied URLs), Aula hosts only; write tools off unless enabled, annotated as destructive.
Related MCP server: schoolsoft-mcp-server
Install
git clone https://github.com/thrugz/aula-mcp.git
cd aula-mcp
npm install
npm run buildLog in (once, then it refreshes itself)
AULA_MITID_USERNAME=<your MitID user ID> node dist/index.js loginOpen the MitID app and scan the QR code shown in the terminal (it alternates between two frames, like on the web), or type the code it shows. If your MitID has several identities you pick one. Code token users: --method token asks for the six digits and the password.
node dist/index.js status shows the children and the enabled sources; node dist/index.js doctor calls every endpoint once and reports what works.
The interactive login must run from a home connection: STIL's bot protection blocks it from datacenter IPs. Refresh only talks to login.aula.dk and works anywhere, so to run on a server, log in at home and copy ~/.config/aula-mcp/tokens.enc with the same AULA_MCP_KEY.
Register with Claude Code
claude mcp add aula -- node /path/to/aula-mcp/dist/index.jsAny MCP client that runs stdio servers works the same way: the command is node /path/to/aula-mcp/dist/index.js.
Tools
Tool | What it answers |
| Logged in? Children, institutions, classes, enabled weekly-plan sources |
| One day at a glance: check-in or plan, events, plan items and homework, unread messages and posts |
| Checked in now (present, sick, gone home, at a location...) and the drop-off/pick-up plan |
| Lessons and events in local time; substitutes, moved lessons, replies needed; |
| Threads with unread flag; |
| One thread as text, with attachment ids |
| News feed posts as text |
| Notification feed |
| Weekly plan, homework, weekly letters, reminders from every vendor, merged |
| Albums and photos |
| Save an attachment or photo by reference; returns the local path |
| Report a child sick today, or undo it (write) |
| Set drop-off/pick-up for a date, optionally weekly (write) |
| Mark a thread read (write) |
Write tools are registered only with AULA_ENABLE_WRITE=1.
Configuration
Variable | Default | Purpose |
| MitID user ID for | |
| macOS Keychain item | Token encryption key: 64 hex chars, or a passphrase (scrypt) |
| default keychain | Keychain file for the key item |
| Use a | |
|
| Tokens ( |
|
| Where |
| off | Register the write tools |
| off | Request log on stderr, tokens redacted |
Status of the parts
Verified by tests (71, npm test): the MitID SRP math against the Python reference's golden vectors and against a simulated MitID server; the whole login chain against a simulated Aula/broker/NemLog-in/MitID (identity picker, first-broker-login redirects, confirmation page, S4-only accounts, bot defense); token encryption, rotation and the refresh lock; the API client's version bump, bootstrap and refresh paths; time zones and ISO weeks; the MCP surface.
Verified live: the real chain from Aula's authorize endpoint to the MitID identity claim, from Node on macOS.
Not yet verified live (needs a MitID approval): the steps after the app approval, and the shape of each Aula and vendor response on a real account. The vendor request shapes follow the upstream code that is in use; where Casperjuel and scaarup disagree (EasyIQ child ids, the SkolePortal x-login value, Huskelisten children), this follows Casperjuel's released version. Gallery and notification shapes are read defensively. aula-mcp doctor is the first thing to run after logging in.
About
Made by Skarnlabs in Denmark, shared for the Danish community.
Licence
MIT. The MitID/UniLogin login code is ported from Casperjuel/aula-mcp (MIT, copyright Casper Juel), see LICENSE.
This server cannot be deployed
Maintenance
Related MCP Connectors
Your household's calendar, tasks, messages and apps. Read, update, or build new apps with AI.
Family calendars, tasks, reminders, and pickup coordination for your AI assistant.
Daily planner: read and update tasks, events, habits, courses, meals and shared lists.
Connect AI assistants to Edusign attendance, courses, learners, documents, and API docs via OAuth.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceThis server enables MCP clients (LLMs) to access data from the Danish school platform Aula, such as messages, schedules, and child profiles, by authenticating via MitID and running locally.6 npm64MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to securely access a guardian's SchoolSoft data—such as schedules, lunch menus, assignments, news, and subjects—using a BankID-authenticated session without exposing credentials.1MIT
- AlicenseNot gradedqualityAmaintenanceLets AI agents log in as a parent to ForældreIntra (SkoleIntra) and read news, messages, weekly plans, homework, documents, photos, contacts, and sign-ups as callable MCP tools. The server is read-only unless write tools are explicitly enabled.MIT
- AlicenseCqualityBmaintenanceEnables an agent to read and act on a Norwegian school parent portal through its unofficial API, covering message threads and attachments, timetables, absences, consent forms, news and scheduling events. Tokens are stored locally, and raw GET tools allow further endpoint exploration.122MIT