Aula MCP Server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Aula MCP ServerWhat's happening at school this week?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Aula MCP Server
An MCP (Model Context Protocol) server that gives Claude real-time access to Aula.dk — the Danish school communication platform. Ask Claude about your child's school day, upcoming events, messages from teachers, and more — all translated from Danish on the fly.
Prerequisites
Node.js 18+
Google Chrome installed (used for MitID authentication)
A MitID account linked to your child's Aula profile
Claude Desktop (Windows, macOS, or Linux)
Related MCP server: aula-mcp
Quick Start
Add this to your Claude Desktop config file:
Windows: %APPDATA%\Claude\claude_desktop_config.json
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"aula": {
"command": "npx",
"args": ["-y", "@ilenhart/aula-mcp-server"],
"env": {
"BROWSER_EXECUTABLE_PATH": "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe",
"AULA_CHILD_NAME": "YourChildFirstName"
}
}
}
}Restart Claude Desktop. Then just ask Claude: "Log me into Aula" — a Chrome window will open for MitID authentication.
How Authentication Works
Aula.dk uses Denmark's MitID national 2FA system. There's no API key — you authenticate by scanning a QR code with the MitID phone app.
Ask Claude to log into Aula
A Chrome window opens with the Aula login page
Click through to the MitID screen, enter your username, and scan the QR code with your MitID app
The server detects the completed login, captures the session cookie, and closes the browser
The session is kept alive automatically with background pings every 15 minutes
Sessions persist across Claude Desktop restarts (stored in ~/.aula-mcp/session.json). You only need to re-authenticate if the session expires (typically after server maintenance).
Available Tools
Authentication
Tool | Description |
| Start MitID auth flow or confirm existing session |
| Poll for completed QR scan (called automatically) |
| Check if current session is valid |
School Data
Tool | Description |
| Recent school announcements and updates |
| Recent messages from teachers and parents |
| Full conversation thread by ID |
| All active message threads |
| Calendar events with type filtering |
| Today's attendance status and notes |
| Recent photo albums and media |
| Search for parents, teachers, and staff |
| Weekly lesson plans and book lists |
Configuration
All configuration is via environment variables, set in the "env" block of your Claude Desktop config.
Variable | Required | Default | Description |
| Yes | — | Path to Chrome executable |
| Yes | — | Your child's first name (for profile selection) |
| No | (first found) | School name (partial match) |
| No |
| Aula API base URL |
| No |
| Session keepalive interval |
| No |
| Directory for session data |
Common Chrome paths
Windows:
C:\Program Files\Google\Chrome\Application\chrome.exemacOS:
/Applications/Google Chrome.app/Contents/MacOS/Google ChromeLinux:
/usr/bin/google-chrome
Example Conversations
You: What's happening at school this week?
Claude: Fetches posts, calendar events, and messages, translates from Danish, and gives you a summary
You: Are there any messages from the teacher I should respond to?
Claude: Checks recent message threads, identifies ones needing a reply
You: What does my child's schedule look like next week?
Claude: Pulls calendar events and MeeBook weekly plans
Development
If you want to contribute or run from source:
git clone https://github.com/ilenhart/aula-mcp-server.git
cd aula-mcp-server
npm install
npm run buildFor local development with auto-reload:
npm run devTo use the local version in Claude Desktop, update your config to point at the built file:
{
"mcpServers": {
"aula": {
"command": "node",
"args": ["C:/path/to/aula-mcp-server/dist/index.js"],
"env": {
"BROWSER_EXECUTABLE_PATH": "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe",
"AULA_CHILD_NAME": "YourChildFirstName"
}
}
}
}Troubleshooting
"No session stored" / "Session expired"
Call aula_login to re-authenticate via MitID.
Chrome doesn't open
Verify BROWSER_EXECUTABLE_PATH points to your actual Chrome installation. The path must be the full path to the executable, not just the directory.
"Failed to start login flow" Chrome may already be running with a conflicting profile. Try closing all Chrome windows first.
Session dies frequently
The default 15-minute ping interval should keep sessions alive. If you're still losing sessions, try reducing PING_INTERVAL_MINUTES to 10.
How It Works
This server uses the @ilenhart/aula-apiclient-ts library to communicate with Aula's internal API. Authentication is handled via puppeteer-core (using your installed Chrome — no bundled browser) to capture the session cookie after MitID login.
All content from Aula is in Danish. Claude translates and interprets it conversationally when presenting it to you.
License
MIT
Available Tools
14 toolsaula_check_authA
Check if the MitID QR code was scanned and authentication completed. Call this after aula_login. May return a refreshed QR screenshot if the previous one expired.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It adds valuable behavioral context, such as the possibility of receiving a refreshed QR screenshot if the previous one expired. This is beyond the empty schema and gives the agent useful expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with the core purpose. Every word earns its place; no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, no-output-schema tool, the description covers the essential context: what it does, when to call it, and a possible edge-case output. It could mention the exact return format, but this is not critical for a simple status check.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is nothing for the description to explain. The baseline of 4 applies, and the description appropriately focuses on behavior rather than parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: checking if MitID QR code scan and authentication completed. It uses a specific verb ('check') and resource, but it does not explicitly distinguish this from the sibling tool 'aula_session_status'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to call after 'aula_login', providing clear timing context. It does not mention alternatives or when not to use, but the 'after login' guideline is practical and direct.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aula_find_peopleB
Search for people (parents, children, teachers, employees) connected to your school on Aula.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name or partial name to search for | |
| role | No | Filter by role (default: any) | any |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden for behavioral disclosure. It does not mention authentication needs, read-only nature, search behavior (e.g., partial matching, case sensitivity), or return value characteristics. It only states the subject and scope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence of 14 words, front-loaded with the verb 'Search', and contains no waste. It is concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even for a simple two-parameter tool, the description omits details about return format, search behavior, and operational constraints. With no output schema and no annotations, this is insufficient for an agent to fully understand what happens upon invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of parameters with clear descriptions for both 'name' and 'role'. The tool description adds no extra parameter semantics, but the high schema coverage sets the baseline at 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Search for people'), specifies the resource ('people connected to your school on Aula'), and lists relevant categories (parents, children, teachers, employees). This clearly differentiates it from sibling tools that handle posts, messages, calendar, and auth.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives, no exclusions, and no prerequisites are mentioned. The description merely states the tool's function; an agent must infer usage from sibling tool names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aula_get_attachmentA
Download an attachment (image or file) from Aula and save it locally. Returns metadata and local file path WITHOUT including the actual file content in the response (to avoid overwhelming context). Use the attachment URL from aula_get_posts or aula_get_messages results.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | No | Optional filename for saving and MIME type detection | |
| attachment_id | No | Optional attachment ID from Aula for tracking | |
| attachment_url | Yes | The S3 URL of the attachment (from post/message attachment metadata) | |
| attachment_type | Yes | Type of attachment: "image" for photos/pictures, "file" for PDFs/documents |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the key behavioral trait of returning no file content to avoid context bloat, and notes the local save side effect, which is valuable context for the agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary action, and the second sentence adds critical output behavior without any fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description adequately summarizes the return (metadata and local path) and input source, though it could further elaborate on error handling or file naming edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides complete descriptions for all parameters (100% coverage). The description adds minimal value beyond schema, only reinforcing the URL source already mentioned in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool downloads and saves an attachment locally, and explicitly distinguishes its output behavior (metadata and path, no content) from siblings like aula_view_attachment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context on how to obtain the attachment URL (from aula_get_posts or aula_get_messages) and when to use it (to download/save), but does not explicitly exclude alternatives such as aula_view_attachment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aula_get_calendarB
Get calendar events from Aula (school events, excursions, holidays, lessons, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | Which event types to include (default: all_except_lessons) | all_except_lessons |
| days_back | No | Days to look back (default: 3) | |
| days_forward | No | Days to look forward (default: 14) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must disclose behavioral traits. It only says 'Get', which implies a read operation, but does not mention any side effects, authentication needs, rate limits, or whether the response is paginated. The absence of any detail beyond the action leaves a transparency gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that directly states the purpose without extraneous words. It is appropriately sized for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a simple schema with no output schema and no annotations. The description lists event types but does not explain return format, pagination, date range behavior, or when it is appropriate to use. It is minimally adequate but leaves gaps in context that could affect correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add any parameter-specific meaning beyond what the schema already provides (e.g., filter enum, days_back/days_forward with defaults and bounds). No additional semantic value is contributed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's purpose with a specific verb ('Get') and resource ('calendar events from Aula'), and enumerates event types (school events, excursions, holidays, lessons). It is not vague, but it does not explicitly differentiate from sibling tools like aula_get_daily_overview, which could overlap in scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention any exclusions, preferred contexts, or references to sibling tools, leaving the agent without direction for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aula_get_daily_overviewA
Get today's daily overview for your child (attendance status, check-in/out times, notes).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the burden of disclosure. It accurately indicates a read operation ('Get') and describes the returned content, but it does not mention authentication requirements, data freshness, timezone behavior, or any other potential side effects. Basic but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that directly states the action and the included items. It is concise without unnecessary words, and every word contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters, no output schema, and no annotations, the description sufficiently covers what the tool does and what it returns. The low complexity means the description is complete enough for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, and schema coverage is 100% (trivially). The description doesn't need to compensate for parameter documentation. Baseline for zero-parameter tools is 4, and no additional parameter semantics are required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: retrieving today's daily overview for a child, listing the specific content (attendance, check-in/out times, notes). This uses a specific verb and resource, distinguishing it from sibling tools that handle posts, messages, calendar, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for your child' implies the intended use context (parent accessing child's daily overview), which is clear enough for selecting the tool. However, it does not explicitly state when not to use it or name alternative tools, so it misses the explicit exclusion guidance that would earn a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aula_get_galleryA
Get recent photo albums and media from Aula. Returns album metadata and media URLs (not the actual images).
| Name | Required | Description | Default |
|---|---|---|---|
| days_back | No | Number of days to look back (default: 7) | |
| album_limit | No | Maximum albums to return (default: 5) | |
| media_limit | No | Maximum media items per album (default: 10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral disclosure. It does convey a key trait: it does not return actual image data, only URLs. However, it omits details like authentication requirements, pagination behavior, or any side effects. This is moderate disclosure for a read-only fetch tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the main purpose and critical limitation. Every word earns its place, with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with no output schema and no annotations, so the description must explain return values. It states 'album metadata and media URLs' but 'album metadata' is vague, lacking fields or structure. Given the low complexity, the description is minimally complete but leaves room for clarification about the metadata contents.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with all three parameters having descriptions. The description itself adds no parameter-specific information, so it barely benefits above the schema baseline. It implicitly references time range via 'recent' but does not detail the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves recent photo albums and media, and explicitly notes it returns metadata and URLs, not actual images. This specific verb+resource statement distinguishes it from sibling tools like get_posts or get_messages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied (use when you need gallery/media information), but there is no explicit guidance on when not to use it or which alternative to prefer for actual image downloads. The note about returning URLs instead of images hints at using other tools, but no sibling tool is named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aula_get_meebookA
Get MeeBook weekly plans and book lists for your child's class. Includes lesson plans, learning goals, and assigned reading.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It states what the tool returns but does not disclose authentication requirements, read-only nature, or any error conditions. As a simple getter, it is adequate but not rich, scoring a 3.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence contains all key information with no wasted words. The description is concise, front-loaded, and easily understood.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (zero params, no output schema), the description provides enough detail about the contents (lesson plans, goals, reading). It could mention the return format or potential absence of data, but for a simple getter it is essentially complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema coverage is 100% (empty). The baseline for zero params is 4, and the description adds context about what is retrieved, which is sufficient without needing parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: getting MeeBook weekly plans and book lists for a child's class. It specifies the resource (MeeBook) and the content (lesson plans, learning goals, reading), distinguishing it from sibling tools like daily overview or posts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies clear usage context (when you need weekly plans or reading assignments), but it does not explicitly mention when not to use it or alternatives. Since the purpose is obvious from the resource type, it earns a 4 for clear context without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aula_get_messagesA
Get recent messages from Aula (individual or group messages from teachers/parents). Content is in Danish.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum messages to return (default: 20) | |
| days_back | No | Number of days to look back (default: 3) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It adds useful context (content is in Danish, messages are individual or group), but does not disclose authentication requirements, side effects, or behavior such as pagination, even though the schema hints at limit/days_back. This is adequate but incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences, front-loaded with the primary action ('Get recent messages') and free of redundant information. Every word adds value, and the language clarification is placed neatly at the end.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with two well-documented parameters and no output schema, the description adequately covers the core behavior, scope, and a key cultural detail (Danish content). It lacks explicit return format details, but given the tool's simplicity and the schema's completeness, it is sufficiently contextual for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 100% coverage with clear descriptions, defaults, and ranges for both parameters, so the baseline is 3. The description adds no extra meaning beyond what the schema already states, but it does provide the overall context of 'recent messages' that frames the parameter usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves recent messages from Aula, specifying the type (individual or group) and source (teachers/parents). This distinguishes it from sibling tools like aula_get_posts or aula_get_threads, which target different content types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when recent messages are needed, but provides no explicit guidance on when to use this tool versus alternatives. No exclusions or alternative tool names are mentioned, so the agent must infer context from the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aula_get_postsA
Get recent general posts from Aula (announcements, updates from school). Content is in Danish — Claude can translate.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of posts to return (default: 10) | |
| days_back | No | Number of days to look back (default: 3) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It states the content is in Danish, a useful behavioral trait, and 'get' implies read-only, but it doesn't disclose pagination, sorting, or other behavioral details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose and a useful language note. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list-retrieval tool with no output schema, the description conveys essential information: what is retrieved and the language of the content. It could describe the return structure, but the tool name and description make it reasonably clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema descriptions cover both parameters fully (100% coverage), so the description adds no additional parameter information. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves recent general posts from Aula, specifying the content type as announcements and school updates. This distinguishes it from sibling tools like get_messages or get_threads.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for fetching general announcements and updates, providing clear context. However, it doesn't explicitly name alternative tools or provide when-not-to-use scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aula_get_threadA
Get a full message thread by thread ID, including all messages in the conversation.
| Name | Required | Description | Default |
|---|---|---|---|
| thread_id | Yes | The thread ID to fetch |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the response includes all messages, but it does not mention read-only nature, authentication, or return format. This adds some context but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that directly states the purpose without any waste. It is front-loaded and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter get tool, the description is adequate: it explains what is returned (full thread with all messages). However, there is no output schema and no explicit alternatives, leaving some gaps for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents thread_id with a description, and coverage is 100%. The tool description repeats the concept but does not add format or retrieval details, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets a full message thread by thread ID, including all messages. It uses a specific verb 'Get' and resource 'message thread', and the singular form distinguishes it from siblings like 'aula_get_threads' and 'aula_get_messages', though without explicit naming.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you have a thread ID and need the full conversation. However, it does not explicitly say when to use this over alternatives or provide exclusions, so guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aula_get_threadsA
Get all message threads with recent activity, including full message history for each thread.
| Name | Required | Description | Default |
|---|---|---|---|
| days_back | No | Number of days to look back for active threads (default: 3) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It adds that full message history is included, which is a useful behavior detail. However, it lacks information about potential large payloads, pagination, or any side effects. It's adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence that is front-loaded with the main action and includes the key benefit ('full message history'). No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description conveys what the tool returns and the filter concept. With no output schema, it would benefit from more detail on the response structure or potential limits, but for a simple read-only list tool with one parameter, it's reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (days_back is fully described). The description adds no extra parameter semantics beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets all message threads with recent activity and includes full message history. The verb 'Get' plus specific resource 'message threads' and scope 'recent activity' distinguishes it from sibling tools like aula_get_thread (singular) and aula_get_messages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for listing active threads via 'recent activity' but doesn't explicitly name alternatives or exclusion criteria. There is no 'when not to use' guidance, but the context and sibling tool names indirectly suggest it's for bulk retrieval vs. single-thread access.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aula_loginA
Start Aula authentication. If a valid session exists, confirms it. Otherwise opens a Chrome window with the MitID QR code and returns a screenshot for you to scan with your phone.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully discloses the tool's side effects: it may open a Chrome window, displays a MitID QR code, and returns a screenshot. This goes beyond a simple 'login' label by describing the interactive flow and the expected output, which is critical for an agent to know about the browser-launching behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, with the primary verb and resource front-loaded in the first sentence. Every sentence adds meaningful behavioral detail, and there is no irrelevant or redundant content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool, the description is fairly complete: it explains the purpose, the conditional behavior (existing session vs. new authentication), and the output (screenshot). However, it does not mention what happens after the screenshot is scanned or how to confirm completion, leaving some uncertainty about the full workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema is empty. The description correctly avoids describing any parameters. Per the baseline rule for zero params, a score of 4 is appropriate; there is nothing more needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's primary action: 'Start Aula authentication.' It also distinguishes itself from sibling tools like aula_session_status and aula_check_auth by describing the actual login initiation process (opening Chrome with a QR code) rather than just checking status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: when authentication is needed or when you want to ensure a valid session. It also explains that it confirms existing sessions, which implies it can be used as a first step. However, it does not explicitly name alternative tools or state when to prefer a status-only check, so some guidance is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aula_session_statusA
Check if the current Aula session is valid without starting an auth flow.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states the tool does not start an auth flow, which is a key behavioral trait. However, with no annotations, it does not disclose return values, side effects, or error conditions. The provided detail adds some transparency but is minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The entire description is a single concise sentence that directly states the tool's purpose without any filler or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity (no params, no output schema), the description covers the basic purpose and one key behavior. However, it lacks return value information and does not clarify the difference from the sibling 'aula_check_auth', leaving some contextual gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description adds no parameter semantics. The baseline score of 4 applies because there is nothing to document.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Check' and identifies the resource 'current Aula session', clearly stating the tool's function. It adds 'without starting an auth flow' which partially distinguishes it from auth-flow tools, but it does not explicitly differentiate it from the sibling 'aula_check_auth'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for checking session validity without triggering authentication, but it does not name alternatives or specify when to prefer this over 'aula_check_auth' or 'aula_login'. Usage context is inferred rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
aula_view_attachmentA
Load and view a previously downloaded attachment. Returns the actual file content (as base64 for images/files or text for text files). ONLY call this when the user explicitly asks to view/see/analyze an attachment. WARNING: MCP tool responses have a 1MB limit. Files larger than ~750KB will fail when base64-encoded. For large files, provide the user with the S3 URL or local file path instead.
| Name | Required | Description | Default |
|---|---|---|---|
| local_path | Yes | The local file path from a previous aula_get_attachment response | |
| max_size_mb | No | Maximum file size in MB to load (default: 0.75MB to stay under 1MB MCP response limit when base64-encoded) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries behavioral transparency. It discloses return format (base64/text), the 1MB MCP response limit, the ~750KB failure threshold, and fallback behavior for large files. This is rich operational context beyond the raw schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three focused sentences: primary action, explicit usage condition, and critical warning/fallback. No wasted words, front-loaded with the core purpose, and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter tool with no output schema, the description covers return format, constraints, failure modes, and alternative action. It is complete enough for an agent to use correctly without further clarification.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaningful context: explains that local_path comes from a previous response and clarifies why max_size_mb defaults to 0.75MB to stay under the MCP limit. This adds value beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool loads and views a previously downloaded attachment, returning file content as base64 or text. The phrase 'previously downloaded' distinguishes this from sibling aula_get_attachment, making the purpose specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states 'ONLY call this when the user explicitly asks to view/see/analyze an attachment,' giving clear when-to-use guidance. It also provides a concrete alternative for large files (S3 URL or local file path), effectively stating when not to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
14 tool updates
v1.0.2- First observed
aula_check_auth - First observed
aula_find_people - First observed
aula_get_attachment - First observed
aula_get_calendar - First observed
aula_get_daily_overview - First observed
aula_get_gallery - First observed
aula_get_meebook - First observed
aula_get_messages - First observed
aula_get_posts - First observed
aula_get_thread - First observed
aula_get_threads - First observed
aula_login - First observed
aula_session_status - First observed
aula_view_attachment
TDQS
Scored across 14 tools
Each tool targets a clearly distinct resource or action: auth status, login initiation, auth polling, daily overview, posts, messages, threads, calendar, gallery, people search, MeeBook, and attachment handling. Even the three auth-related tools are well separated by their specific roles.
All tools share the 'aula_' prefix and snake_case format, with most following the verb_noun pattern (get_posts, get_thread, find_people). Minor deviations like 'aula_login' and 'aula_session_status' break the pattern slightly, but the overall style is consistent and readable.
14 tools is well within the ideal range for a domain-specific server. Each tool covers a distinct feature of the Aula platform, from authentication to content retrieval, without unnecessary redundancy or bloat.
The server provides comprehensive read-only coverage for Aula: authentication, daily overview, posts, messages, threads, calendar, gallery, people, MeeBook, and attachments. However, it lacks any write operations (e.g., sending messages or creating posts) and does not explicitly address multiple children, leaving notable gaps for a full parent-facing integration.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
- platform7nOAuthtech.p7n
Connect Claude to your Platform7n workspaces — chat, links, and tasks. One-click OAuth.
Connect any mailbox to Claude, ChatGPT & AI: read, send, reply, schedule & search emails.
Give Claude only the Google Drive files you choose. Every action logged.
GA4, Google Ads and Search Console in Claude. Read-only OAuth, multi-account for agencies.
Related MCP Servers
- FlicenseAqualityDmaintenanceEnables natural language queries about grades, GPA, attendance, and schedules by connecting Claude to StudentVue school dashboards. Includes analytical tools for grade simulation, what-if scenarios, and academic performance tracking based on live school data.19-
- 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.744MIT
- AlicenseAqualityAmaintenanceEnables Claude to access ParentSquare school-parent communication platform, including feeds, calendar, conversations, and media files.486MIT
- AlicenseBqualityCmaintenanceEnables Claude to interact with Canvas LMS, allowing natural language queries about courses, deadlines, grades, and feedback.29MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ilenhart/aula-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server