使用说明
Edupage MCP Server
MCP server that connects Claude to Edupage — a school information system used across Europe. Provides access to timetables, grades, homework, messages, students, teachers, and more.
Quick Setup
1. Install
cd /path/to/edupage-mcp
uv sync
Or if you prefer a one-liner without cloning:
uv pip install "mcp>=1.2.0" "edupage-api>=0.12.3"
2. Configure for Claude Code
The easiest way — just open the project folder and the .mcp.json will be picked up automatically. Set environment variables first:
export EDUPAGE_USERNAME=your_user
export EDUPAGE_PASSWORD=your_pass
export EDUPAGE_SUBDOMAIN=your_school
Or add the server manually:
claude mcp add edupage -- uv run --directory /path/to/edupage-mcp python -m edupage_mcp
With auto-login via environment variables:
claude mcp add --env EDUPAGE_USERNAME=your_user --env EDUPAGE_PASSWORD=your_pass --env EDUPAGE_SUBDOMAIN=your_school edupage -- uv run --directory /path/to/edupage-mcp python -m edupage_mcp
3. Configure for Claude Desktop
Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
{
"mcpServers": {
"edupage": {
"command": "uv",
"args": ["run", "--directory", "/path/to/edupage-mcp", "python", "-m", "edupage_mcp"],
"env": {
"EDUPAGE_USERNAME": "your_username",
"EDUPAGE_PASSWORD": "your_password",
"EDUPAGE_SUBDOMAIN": "your_school"
}
}
}
}
4. Configure for Cowork
Use the .mcp.json file included in this repo — just set the environment variables.
Authentication
Two options:
- Environment variables (recommended) — set
EDUPAGE_USERNAME,EDUPAGE_PASSWORD, andEDUPAGE_SUBDOMAIN. The server logs in automatically at startup. - Manual login tool — call the
loginorlogin_autotool at the start of your session.
The subdomain is the part before .edupage.org in your school's URL (e.g. myschool for https://myschool.edupage.org).
Available Tools
| Tool | Description |
|---|---|
login |
Log in with username, password, subdomain |
login_auto |
Log in via portal (auto-detect school) |
get_timetable |
Get timetable for a date |
get_next_week_timetable |
Get Mon-Fri timetable for next week |
get_timetable_changes |
Get substitutions / changes for a date |
get_grades |
Get student grades/marks |
get_students |
Get students in your class |
get_all_students |
Get all students in the school |
get_teachers |
Get all teachers |
get_classes |
Get all classes |
get_classrooms |
Get all classrooms |
get_homework |
Get homework assignments |
get_assignments |
Get all assignments (homework, tests, etc.) |
get_timeline |
Get recent timeline items |
get_notifications |
Get recent notifications |
get_notification_history |
Get notifications since a date |
get_news |
Get school news |
get_meals |
Get meal information |
send_message |
Send a message to users |
get_subjects |
Get all subjects |
get_periods |
Get bell schedule / periods |
get_my_children |
Get children linked to a parent account |
get_absences |
Get student absences |
get_upcoming_events |
Get upcoming school events (filters on the real event date parsed from the title, not the post date) |
get_student_summary |
All-in-one summary: grades, homework, exams, absences |
get_school_days |
Per-date "is the kid at school over lunch?" view fusing trips, excursions, and absences (⚠️ holidays NOT covered) |
Project Structure
edupage-mcp/
├── CLAUDE.md # Developer guide
├── pyproject.toml # Package config (uv/hatch)
├── .mcp.json # Claude Code project config
├── .env.example # Example environment variables
└── src/
└── edupage_mcp/
├── __init__.py
├── __main__.py
└── server.py # MCP server implementation
Development
Run the server directly for testing:
uv run python -m edupage_mcp
Test with MCP Inspector:
npx @modelcontextprotocol/inspector uv run python -m edupage_mcp
Dependencies
mcp>= 1.2.0 — Model Context Protocol Python SDKedupage-api>= 0.12.3 — Unofficial Edupage API client (GitHub)
Notes
- The server uses stdio transport (reads stdin, writes stdout)
- All logging goes to stderr to avoid corrupting the MCP protocol
- Session persists for the lifetime of the server process
- The
send_messagetool sends real messages — use with care - If Edupage requests a CAPTCHA, log in via browser first then retry
- Event dates vs. post dates: Edupage "event" timeline items store the
post date (when the announcement was published) in their
timestamp; the real event date lives in the title (e.g.Udalosť: Sternwarte - 17.06.2026).get_upcoming_eventsparses that title date and filters on it, so events announced months ahead still surface.get_timeline/get_notificationsexpose an opt-inby_event_dateflag to apply their date range to the parsed event date instead of the timestamp. get_school_daysdoes NOT cover holidays. It surfaces trips, excursions, and absences only. Public / Brandenburg state holidays and school-closure days are not reliably present in Edupage data, so undisrupted days come backin_school: null(unknown), nevertrue. Cross-check a public-holiday source or the caterer's menu before assuming a child is at school.
License
This project is licensed under the GPL-3.0-or-later — see the LICENSE file for details.
The edupage-api dependency is GPL-3.0 licensed, which requires derivative works to use a compatible license.