Edupage MCP服务器

Edupage MCP服务器是一款通过模型上下文协议连接Claude与欧洲学校信息系统Edupage的服务,提供课表、成绩、作业、消息、师生信息等学校数据的统一访问,适用于学生、家长及教师获取与查询校园信息。

  • by mhlavac
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 mhlavac/edupage-mcp

使用说明

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:

  1. Environment variables (recommended) — set EDUPAGE_USERNAME, EDUPAGE_PASSWORD, and EDUPAGE_SUBDOMAIN. The server logs in automatically at startup.
  2. Manual login tool — call the login or login_auto tool 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 SDK
  • edupage-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_message tool 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_events parses that title date and filters on it, so events announced months ahead still surface. get_timeline / get_notifications expose an opt-in by_event_date flag to apply their date range to the parsed event date instead of the timestamp.
  • get_school_days does 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 back in_school: null (unknown), never true. 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.