Skip to main content
Glama
israelroldan

unofficial-magister-mcp

by israelroldan

unofficial-magister-mcp

An MCP (Model Context Protocol) server for accessing Dutch school schedules from Magister. Enables Claude and other MCP-compatible AI assistants to query school schedules, drop-off times, and pick-up times.

Note: This is an unofficial package and is not affiliated with Magister or Iddink Group.

Why I Built This

As a parent, I found myself constantly checking the Magister app to plan our mornings and afternoons. "What time does school start tomorrow?" "When's the last class on Friday?" These questions came up daily, and I wanted my AI assistant to just... know.

This MCP server lets you ask your AI agent natural questions like:

  • "What time do I need to drop off the kids tomorrow?"

  • "What's the schedule for next Monday?"

  • "When does school end on Wednesday?"

No more app switching. Just ask and plan.

Related MCP server: pronote-mcp

Features

  • Schedule queries - Get daily or weekly school schedules

  • Drop-off/pick-up times - Quickly find first and last class times for planning

  • Parent account support - Works with both student and parent accounts

  • Session persistence - Saves auth state to avoid repeated logins

  • Smart caching - 5-minute cache with stale-while-revalidate pattern

  • API with DOM fallback - Uses Magister API with automatic fallback to DOM scraping

Requirements

  • Node.js 20 or later

  • A Magister account (student or parent)

  • ~150MB disk space (Playwright browsers)

Installation

npm install -g unofficial-magister-mcp

Or run directly with npx:

npx unofficial-magister-mcp

Configuration

Create a .env file or set environment variables:

MAGISTER_SCHOOL=schoolname.magister.net
MAGISTER_USER=your-username
MAGISTER_PASS=your-password

Usage with Claude Code

Add to your Claude Code MCP configuration (~/.claude/claude_code_config.json):

{
  "mcpServers": {
    "magister": {
      "command": "npx",
      "args": ["-y", "unofficial-magister-mcp"],
      "env": {
        "MAGISTER_SCHOOL": "schoolname.magister.net",
        "MAGISTER_USER": "your-username",
        "MAGISTER_PASS": "your-password"
      }
    }
  }
}

Available Tools

get_schedule

Get the school schedule for a specific date.

Parameters:

  • date (required): Date string - "today", "tomorrow", weekday name, or YYYY-MM-DD format

Example response:

Schedule for Sat Jan 04 2025:

08:30 - 09:20: Mathematics (Mr. de Vries) @ Room 101
09:25 - 10:15: Dutch (Ms. Jansen) @ Room 203
10:30 - 11:20: English (Mr. Smith) @ Room 105

get_week_schedule

Get the school schedule for the next 7 days.

Parameters: None

get_dropoff_time

Get the first class time for drop-off planning.

Parameters:

  • date (required): Date string - "today", "tomorrow", weekday name, or YYYY-MM-DD format

Example response:

First class on Mon Jan 06 2025: Mathematics at 08:30 @ Room 101

get_pickup_time

Get the last class end time for pick-up planning.

Parameters:

  • date (required): Date string - "today", "tomorrow", weekday name, or YYYY-MM-DD format

Example response:

Last class on Mon Jan 06 2025: History ends at 15:45 @ Room 301

How It Works

  1. Authentication: Uses Playwright to automate Magister login, capturing OAuth tokens

  2. Session persistence: Saves browser state to .auth-state.json to avoid re-login

  3. API access: Fetches schedules via Magister's internal API

  4. Fallback: If API fails, falls back to DOM scraping

  5. Caching: Caches results for 5 minutes with SWR pattern

Parent Accounts

If you log in with a parent account, the server automatically detects linked children and uses the first child's schedule. Multi-child selection is planned for a future release.

Troubleshooting

"Missing required environment variables"

Make sure all three environment variables are set:

  • MAGISTER_SCHOOL - The school's Magister subdomain (e.g., schoolname.magister.net)

  • MAGISTER_USER - Your username

  • MAGISTER_PASS - Your password

Authentication issues

  1. Check the log file at /tmp/magister-mcp.log for details

  2. Delete .auth-state.json to force a fresh login

  3. Verify your credentials work on the Magister website

Schedule not updating

The server caches schedules for 5 minutes. If you need fresh data, wait for the cache to expire or restart the server.

Development

# Clone the repository
git clone https://github.com/israelroldan/unofficial-magister-mcp.git
cd unofficial-magister-mcp

# Install dependencies
npm install

# Run in development mode
npm run dev

# Build for production
npm run build

# Run linting
npm run lint

# Format code
npm run format

License

MIT - see LICENSE

Disclaimer

This is an unofficial tool that interacts with Magister.net through browser automation. It may break if Magister changes their website. Use at your own risk.

The author is not affiliated with Magister, Schoolmaster B.V., Iddink Group, or any of their subsidiaries. "Magister" is a trademark of Iddink Group.

Available Tools

4 tools
get_dropoff_timeA

Get the time of the first class (for drop-off planning)

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesDate to check. Can be "today", "tomorrow", a weekday name, or YYYY-MM-DD format

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the operation but does not mention what happens on invalid dates, return format, or any edge-case behavior. This is minimal transparency beyond the obvious read operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that gets straight to the point. Every word adds value, and the parenthetical provides context without fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple 1-parameter tool with full schema coverage, the description provides the core purpose. However, the lack of an output schema and annotations means it should offer more detail about return values or error behavior. Adequate but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage for the only parameter 'date' is 100%, and its description fully explains acceptable formats. The tool description adds no extra parameter meaning, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Get the time of the first class'. It specifies the resource (first class time) and context ('for drop-off planning'), which distinguishes it from sibling tools like get_pickup_time and get_schedule.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical 'for drop-off planning' implies a usage context, but the description does not explicitly state when to use this tool versus alternatives or provide exclusionary guidance. It lacks the explicit alternative naming seen in high-quality examples.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_pickup_timeA

Get the time of the last class (for pick-up planning)

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesDate to check. Can be "today", "tomorrow", a weekday name, or YYYY-MM-DD format

TDQS

A3.8/5.0
Behavior3/5

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 describes a safe read operation (get), but it does not disclose output format, error handling, or edge cases. For a simple getter, this is basic but incomplete transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that delivers the essential information without redundancy. It is appropriately front-loaded and every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (one parameter, no output schema, no annotations), the description is reasonably complete. It explains the core function and purpose, though it could mention return format or edge cases for extra clarity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the date parameter is fully documented in the schema. The description adds no additional parameter semantics, hence the baseline score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool gets the time of the last class, with a parenthetical clarifying its purpose (pick-up planning). This distinguishes it from siblings like get_schedule or get_dropoff_time, though it does not explicitly name alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'for pick-up planning' provides a clear context for when to use this tool. However, it does not explicitly state when not to use it or mention alternative tools, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_scheduleA

Get school schedule for a specific date

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesDate to get schedule for. Can be "today", "tomorrow", a weekday name, or YYYY-MM-DD format

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. It only states the function (get schedule) without mentioning return format, whether this is a read-only operation, or any potential side effects. For a simple get, this is minimal but still lacks transparency beyond the obvious.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence. It is front-loaded with the verb and resource, with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with one well-documented parameter and no output schema. The description covers the core purpose but does not clarify what the response contains or edge cases (e.g., holidays, invalid dates). It is adequate for a simple get but leaves some ambiguity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the date parameter is clearly documented with accepted formats. The description adds no extra semantic value beyond restating 'specific date', so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool gets a school schedule for a specific date. This distinguishes it from siblings like get_week_schedule (which covers a week) and get_dropoff_time/get_pickup_time (which target specific times).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The implied usage is for retrieving a single date's schedule, contrasting with the weekly variant. However, there is no explicit guidance on when to choose this tool over alternatives, no exclusions, and no mention of prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_week_scheduleA

Get school schedule for the entire week (next 7 days)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It only states that it retrieves the schedule but gives no information about the return format, content of the schedule, potential timezone considerations, or any side effects (though it's clearly a read operation). This is a minimal statement.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that front-loads the key information: the action and the scope. Every word adds value, and there is no superfluous detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple zero-parameter getter, the description is largely sufficient: it states the resource and the time window. It does not describe the structure of the returned schedule, but given the context and sibling names, this may be acceptable. It is complete enough for an agent to know when to call it and what it will receive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the description does not need to add parameter-level detail. The baseline for 0 parameters is 4, and nothing in the description detracts from that. The schema's 100% coverage of an empty properties object confirms no parameter ambiguity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get') with a clear resource ('school schedule') and explicit scope ('entire week (next 7 days)'). It clearly distinguishes this from sibling tools like get_dropoff_time and get_pickup_time, and even from get_schedule by specifying the week-long period.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool: when a week-long schedule is needed. The phrase '(next 7 days)' provides clear context. However, it does not explicitly mention alternatives or exclusion criteria (e.g., 'use get_schedule for a specific day').

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.

  1. 4 tool updatesv1.0.2
    • First observedget_dropoff_time
    • First observedget_pickup_time
    • First observedget_schedule
    • First observedget_week_schedule

TDQS

A4/5.0
Disambiguation5/5

Each tool serves a distinct purpose: get_schedule for a specific date, get_week_schedule for a weekly view, get_dropoff_time for the first class time, and get_pickup_time for the last class time. There is no overlap or ambiguity between them.

Naming Consistency5/5

All tool names follow the consistent pattern 'get_<noun>' (get_schedule, get_week_schedule, get_dropoff_time, get_pickup_time). The convention is uniform and predictable.

Tool Count5/5

With only 4 tools, the server is well-scoped and each tool serves a necessary function for schedule-related queries. The count is within the ideal range for a focused utility.

Completeness5/5

For the apparent purpose of reading school schedule information, the surface is complete: it covers daily schedules, weekly schedules, and the two key time points (first and last class). No obvious gaps exist.

Maintenance

ActivityInactive
ResponsivenessUnresponsive

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

Related MCP Servers

  • -
    license
    Not graded
    quality
    Not graded
    maintenance
    A local MCP server that exposes Pronote (French school management system) data via MCP, enabling AI assistants to retrieve schedules, homework, grades, absences, and more. Supports token-based authentication with QR code setup.
    -

Latest Blog Posts

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/israelroldan/unofficial-magister-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server