Full-coverage EduPage MCP server for timetables, grades, homework., daily summary. Also supports meal ordering, multi-school discovery, role-aware student switching, and 2FA.
- ✓Open-source license (MIT)
- ✓Actively maintained (<30d)
- ✓Clear description
- ✓Documented (README)
claude mcp add edupage-mcp -- uvx edupage-mcp-full{
"mcpServers": {
"edupage-mcp": {
"command": "uvx",
"args": ["edupage-mcp-full"],
"env": {
"EDUPAGE_USERNAME": "<edupage_username>",
"EDUPAGE_PASSWORD": "<edupage_password>"
}
}
}
}EDUPAGE_USERNAMEEDUPAGE_PASSWORDResumen de MCP Servers
# EduPage MCP Server <!-- mcp-name: io.github.oliverhruby/edupage-mcp --> [](https://github.com/oliverhruby/edupage-mcp/releases) [](https://github.com/oliverhruby/edupage-mcp/actions/workflows/quality-gates.yml) [](https://github.com/oliverhruby/edupage-mcp/actions/workflows/security.yml) [](https://github.com/oliverhruby/edupage-mcp/actions/workflows/container-security.yml) [](https://github.com/oliverhruby/edupage-mcp/actions/workflows/upstream-coverage.yml) ## Project A Model Context Protocol (MCP) server that exposes the full functionality of the [`edupage-api`](https://github.com/EdupageAPI/edupage-api) Python library to AI agents such as opencode, Claude, Cursor and any other MCP client. EduPage is a school information system used across Europe. This server lets you query and operate a student / teacher / parent EduPage account directly from your agent: timetables, grades, homework, substitutions, meals (including ordering), messages, rosters, parent child-switching and more — including **multiple schools** (e.g. two children attending different schools). > **⚠️ Unofficial API.** Like all EduPage MCP servers, this relies on the > community-maintained [`edupage-api`](https://github.com/EdupageAPI/edupage-api) > library, which talks to EduPage's undocumented endpoints. Use read-only > features freely; use the write features (`send_message`, meal ordering, child > switching) carefully. --- ## Table of Contents - [Why another EduPage MCP server?](#why-another-edupage-mcp-server) - [What it provides](#what-it-provides) - [Getting started](#getting-started) - [Prerequisites](#prerequisites) - [1. Install](#1-install) - [2. Configure credentials](#2-configure-credentials) - [3. Register with your MCP client](#3-register-with-your-mcp-client) - [Prompt examples](#prompt-examples) - [Multiple schools (subdomains)](#multiple-schools-subdomains) - [Tool reference](#tool-reference) - [Data & safety notes](#data--safety-notes) - [Contributing](#contributing) - [Limitations](#limitations) - [Support](#support) - [License](#license) --- ## Why another EduPage MCP server? Two other EduPage MCP servers already exist: - [`mrtineu/edupage-mcp`](https://github.com/mrtineu/edupage-mcp) — also published on PyPI as [`edupage-mcp`](https://pypi.org/project/edupage-mcp/) - [`mhlavac/edupage-mcp`](https://github.com/mhlavac/edupage-mcp) Both are good and I have **no affiliation** with them — they are simply referenced here for honest comparison. They primarily focus on the **read-only** surface of the API. This project deliberately goes further: | Capability | mhlavac | mrtineu (PyPI) | **this project** | |---|---|---|---| | Timetables (own + any teacher/class/room) | ✅ | ✅ | ✅ | | Grades (all / by term & year) | ✅ | ✅ | ✅ | | Substitutions / timetable changes | ✅ | ✅ | ✅ | | Meals — **read menu** | ✅ | ✅ | ✅ | | Meals — **choose / sign-off / rate** | ❌ | ❌ | ✅ | | Send messages (`send_message`) | ✅ | ❌ | ✅ | | Parent **student switching** (switch to/from student) | partial (list) | ❌ | ✅ | | **2FA** login flow (device + email code) | ❌ | ❌ | ✅ | | Login via **session id** (`PHPSESSID`) | ❌ | ❌ | ✅ | | Portal login (`login_auto`) | ✅ | ❌ | ✅ | | Next ringing time / bell schedule | ❌ | ❌ | ✅ | | Raw session **custom request** | ❌ | ❌ | ✅ | | **Multiple schools** (auto-login + discovery) | ❌ | ❌ | ✅ | | **Role-aware** (parent / student / teacher) | ❌ | ❌ | ✅ | **Key differentiators:** - **Multi-school automatic discovery.** Set `EDUPAGE_SUBDOMAINS` with one shared login and the server auto-discovers students across all schools — no need to maintain a manual "Viktor → school A, Tamara → school B" mapping. A student at two schools (e.g. Tamara at `iprskola` + `cvcmalacky`) is found automatically with separate per-school results. - **Role-aware tools.** The server detects whether you're a parent, student, or teacher at each school and behaves accordingly — `get_student_timetable` switches to the student account for parents, returns direct timetables for students. No tool duplication. - **Full write surface.** Meal ordering/rating, message sending, student switching — the other servers don't cover these. --- ## What it provides A single stdio MCP server exposing **46 tools** (published on PyPI as [`edupage-mcp-full`](https://pypi.org/project/edupage-mcp-full/)): - **Authentication** — `login`, `login_auto`, `login_all`, `login_from_session`, `two_factor_check_confirmed`, `two_factor_finish`, `auth_status`, `user_id` - **Timetables** — `get_my_timetable`, `get_timetable` (teacher/student/class/ classroom), `get_student_timetable` (student by name, cross-school), `get_next_week_timetable`, `get_next_ringing_time`, `get_periods`, `school_year` - **Students** — `find_student` (name → person_id, cross-school), `get_student_timetable` (cross-school, role-aware), `scan_students` (auto-discover all students across schools), `get_my_students` (classmates or school-wide for parents), `switch_to_student` (by id **or** name, parent only), `switch_to_parent`, `clear_student_cache` (force refresh cached student lists) - **Schools** — `get_schools` (logged-in schools with role per school) - **Grades** — `get_grades` - **Notifications / timeline** — `get_notifications`, `get_notification_history`, `get_homework`, `get_assignments`, `get_absences`, `get_upcoming_events`, `get_news` - **Substitutions** — `get_timetable_changes`, `get_missing_teachers` - **Meals** — `get_meals`, `choose_meal`, `sign_off_meal`, `rate_meal` - **Day summaries** — `get_day_summary` (one call: timetable, substitutions, missing teachers, grades, meals, homework, assignments, absences, news, events, notifications for a date — "what happened yesterday at school" in a single round trip; each section is isolated so one failure doesn't kill the report). Bundles an OpenCode skill (`school-day-summary`) for turning it into a human-readable daily report; see [Skills](#skills). - **Rosters** — `get_students`, `get_all_students`, `get_teachers`, `get_classes`, `get_classrooms`, `get_subjects`, `get_my_students` - **Actions** — `send_message`, `switch_to_student`, `switch_to_parent`, `custom_request` --- ## Getting started You need an MCP-capable client (opencode, Claude Desktop, Cursor, etc.). ### 1. Install If you are using an AI coding client, a simple prompt is often enough to get started, for example: "Install the EduPage MCP as described in this GitHub repository oliverhruby/edupage-mcp". Most MCP-capable clients can then guide you through the available setup options. **Option A — from MCP Registry (recommended, one-click in VS Code / GitHub Copilot)** The server is listed in the [MCP Registry](https://registry.modelcontextprotocol.io/). In VS Code or GitHub Copilot, search for "EduPage MCP" and install with one click. Or use the direct deeplink: `mcp://install/io.github.oliverhruby/edupage-mcp` **Option B — from PyPI** Use this for normal usage with a released version. Requirements: `uv` for `uvx`, or Python **3.10+** for `pip`. ```bash uvx edupage-mcp-full # or, if you prefer pip (into whatever environment your MCP client uses): pip install edupage-mcp-full ``` `uvx` runs the package without a persistent install. If `uvx` is unavailable, install `uv` first (`pip install uv` or `winget install astral-sh.uv`). **Option C — from GitHub (latest source)** Use this if you want the latest changes before a PyPI release. Requirements: `uv` for `uvx`, or Python **3.10+** for `pip`. ```bash uvx --from "git+https://github.com/oliverhruby/edupage-mcp.git" edupage-mcp-full # or pip install "git+https://github.com/oliverhruby/edupage-mcp.git" ``` **Option D — Docker** Use this for an isolated container runtime. Requirements: Docker. Pull a prebuilt image (recommended): ```bash docker pull ghcr.io/oliverhruby/edupage-mcp:latest docker run --rm -i \ -e EDUPAGE_USERNAME=your_username \ -e EDUPAGE_PASSWORD=your_password \ ghcr.io/oliverhruby/edupage-mcp:latest ``` Version tags are also available (for example `v0.4.0`) if you prefer pinned images. Build locally from source (fallback): ```bash docker build -t edupage-mcp-full . docker run --rm -i \ -e EDUPAGE_USERNAME=your_username \ -e EDUPAGE_PASSWORD=your_password \ edupage-mcp-full ``` The container uses the same environment variables described in [Configure credentials](#2-configure-credentials). It also includes a `HEALTHCHECK` (stdio process liveness by default; local TCP check in HTTP transport modes). For HTTP transports, set optional runtime vars: - `MCP_TRANSPORT`: `stdio` (default), `sse`, or `streamable-http` - `MCP_HOST`: bind host (default `127.0.0.1`) - `MCP_PORT`: bind port (default `8000`) - `MCP_API_KEY`: optional bearer token for HTTP auth When `MCP_API_KEY` is set, HTTP requests must include `Authorization: Bearer <key>`. If `MCP_API_KEY` is not set, HTTP endpoints are unauthenticated. For production, prefer proper authentication and TLS via a reverse proxy or API gateway. > `pyproject.toml` pins `mcp<2` (the stable FastMCP v1 API). `mcp 2.x` renamed > `FastMCP` to `MCPServer` and changed the API surface; this server targets the > FastMCP v1 API for simplicity and stability. **Option C — development from source** Use this if you are contributing or debugging loc
Lo que la gente pregunta sobre edupage-mcp
¿Qué es oliverhruby/edupage-mcp?
+
oliverhruby/edupage-mcp es mcp servers para el ecosistema de Claude AI. Full-coverage EduPage MCP server for timetables, grades, homework., daily summary. Also supports meal ordering, multi-school discovery, role-aware student switching, and 2FA. Tiene 1 estrellas en GitHub y su última actualización registrada es del 2026-09-09.
¿Cómo se instala edupage-mcp?
+
Puedes instalar edupage-mcp clonando el repositorio (https://github.com/oliverhruby/edupage-mcp) o siguiendo las instrucciones del README en GitHub. ClaudeWave también te ofrece bloques de instalación rápida en esta misma página.
¿Es seguro usar oliverhruby/edupage-mcp?
+
Nuestro agente de seguridad ha analizado oliverhruby/edupage-mcp y le ha asignado un Trust Score de 87/100 (tier: Trusted). Revisa el desglose completo de comprobaciones superadas y flags en esta página.
¿Quién mantiene oliverhruby/edupage-mcp?
+
oliverhruby/edupage-mcp es mantenido por oliverhruby. La última actividad registrada en GitHub es del 2026-09-09, con 1 issues abiertos.
¿Hay alternativas a edupage-mcp?
+
Sí. En ClaudeWave puedes explorar mcp servers similares en /categories/mcp, ordenados por popularidad o actividad reciente.
Despliega edupage-mcp en tu cloud
Lleva este repo a producción en minutos. Cada plataforma genera su propio entorno con variables de entorno editables.
¿Mantienes este repo? Añade un badge a tu README
Pega el badge en tu README de GitHub para mostrar que está auditado por ClaudeWave. Cada badge enlaza de vuelta a esta página y muestra el Trust Score actual.
[](https://claudewave.com/repo/oliverhruby-edupage-mcp)<a href="https://claudewave.com/repo/oliverhruby-edupage-mcp"><img src="https://claudewave.com/api/badge/oliverhruby-edupage-mcp" alt="Featured on ClaudeWave: oliverhruby/edupage-mcp" width="320" height="64" /></a>Más MCP Servers
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.
User-friendly AI Interface (Supports Ollama, OpenAI API, ...)
An open-source AI agent that brings the power of Gemini directly into your terminal.
Real-time global intelligence dashboard. AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface
The fastest path to AI-powered full stack observability, even for lean teams.
🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!