Skip to main content
Glama
oliverhruby

EduPage MCP Server

by oliverhruby

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
MCP_HOSTNoBind host for HTTP transport (default localhost)
MCP_PORTNoBind port for HTTP transport (default 8000)
MCP_API_KEYNoOptional bearer token for HTTP transport auth
MCP_TRANSPORTNoTransport mode for the MCP serverstdio
EDUPAGE_PASSWORDYesEduPage password
EDUPAGE_USERNAMEYesEduPage username or login
EDUPAGE_SUBDOMAINSNoComma-separated list of school subdomains for multi-school auto-login (optional)

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
loginA

Log in to Edupage for a subdomain. If username/password/subdomain are omitted, env vars EDUPAGE_USERNAME, EDUPAGE_PASSWORD, EDUPAGE_SUBDOMAINS are used. Multiple schools are supported: each login call adds/replaces that subdomain's session (see login_all). If 2FA is enabled, returns instructions to call two_factor_check_confirmed / two_factor_finish.

login_allB

Log in to one or more schools using multiple subdomains in a single call. Pass comma-separated values: subdomains="school1,school2", usernames="u1,u2", passwords="p1,p2" (or pairs with one shared username/ password). Uses env vars for anything not provided.

login_autoC

Log in to Edupage via the portal (auto-detect school). Optionally tag the resulting session with subdomain so multi-school tools can reference it.

login_from_sessionB

Create a logged-in Edupage instance from an existing PHPSESSID cookie.

two_factor_check_confirmedA

After a login that required 2FA, check whether the confirmation has been approved on a device. Returns True when safe to call two_factor_finish.

two_factor_finishA

Finish 2FA authentication. If code is provided it is used as an email/app code; otherwise the device-confirmation flow is used (call two_factor_check_confirmed first).

auth_statusA

Show login status for all configured subdomains and the active one.

user_idC

Return the logged-in user's Edupage user id.

school_yearB

Return the current school year (starting year).

get_my_timetableB

Get the timetable for the logged-in user for a date (YYYY-MM-DD, default today).

get_student_timetableA

Get a student's timetable by first/last name OR person_id. Without a subdomain, searches every school in the discovery scope (the configured EDUPAGE_SUBDOMAINS, or all logged-in schools when unset) and returns one result per school where the student is found — so a student attending multiple schools yields separate per-school timetables. If logged in as a parent, this switches to (and back from) the student account for the lookup. Returns the student's lessons plus which student/account/school was used.

get_timetableC

Get the timetable for a teacher, student, class or classroom on a date. target_type: 'teacher' | 'student' | 'class' | 'classroom'.

get_next_ringing_timeA

Get the type (break/lesson) and time of the next ringing for a given datetime (ISO, default now).

get_next_week_timetableB

Get the Mon-Fri timetable for next week for the logged-in user, grouped by weekday.

get_timetable_rangeA

Get timetable for a target (class, student, teacher, classroom) for every day between start_date and end_date (inclusive). Returns a dict keyed by date (YYYY‑MM‑DD) with each value being the result of get_timetable for that day. Days with no published data get an empty lessons list.

get_periodsB

Get the bell schedule (periods with start/end times) from the logged-in data.

get_gradesA

Get grades. Optionally filter by year (school year start) and term ('FIRST' or 'SECOND'). Returns list of grades (subject, teacher, percent, etc.).

get_notificationsC

Get the list of available timeline notifications (homework, tests, messages, grades, events...).

get_notification_historyC

Get timeline notifications since a date (YYYY-MM-DD), including older ones.

get_homeworkB

Get homework assignments from the recent timeline notifications.

get_assignmentsB

Get all assignments (homework, tests, exams, projects) from the timeline.

get_absencesC

Get the student's absence records from the timeline notifications.

get_upcoming_eventsC

Get upcoming school events (trips, excursions, meetings, holidays...).

get_newsC

Get school news from the timeline notifications.

get_timetable_changesB

Get substitution/timetable changes for a date (default today).

get_missing_teachersC

Get teachers missing on a date (default today).

get_mealsA

Get the meal menu (snack/lunch/afternoon snack) for a date (default today).

Tries the personal meal-ordering endpoint first; when the school hasn't enabled it, falls back to the school's public canteen menu widget. By default only snack/lunch/afternoon_snack are returned; set include_breakfast / include_dinner to also include those extra meals (only available via the public widget).

choose_mealC

Order/choose a meal for a date. meal_type: 'snack'|'lunch'|'afternoon_snack'. number: 1-based menu choice among the chooseable menus.

sign_off_mealB

Cancel an ordered meal for a date. meal_type: 'snack'|'lunch'|'afternoon_snack'.

rate_mealC

Rate a meal (1-5 quality and quantity) for a date and meal type.

get_day_summaryA

One-call daily school report for a date (default today): timetable, substitutions, missing teachers, grades received that day, meals, homework, assignments, absences, news, events, and timeline notifications.

Composes the individual section tools so you don't need to fire 8-10 calls to answer "what happened yesterday at school" or "what's coming tomorrow".

  • If name/student_id is provided: report for that specific student (found across all schools unless subdomain scopes it).

  • If omitted: discovery-first — for a parent this returns a lightweight per-school index of the account's children (no per-child section fetching), so you can then call per child with name/student_id. Set full=True to instead build the full report for every child.

  • If omitted and logged in as student/teacher: report on the logged-in account. Every section is isolated — a failure in one section yields {"ok": false, "error": ...} without failing the report.

get_studentsC

Get all students in the logged-in user's class.

get_all_studentsC

Get a short list of all students in the school.

get_teachersB

Get all teachers in the school.

get_classesC

Get all classes in the school.

get_classroomsC

Get all classrooms in the school.

get_subjectsC

Get all subjects in the school.

send_messageB

Send a message to a recipient. recipient_id is an edupage id like 'Student123' or 'Teacher456' (see get_students/get_teachers).

get_my_studentsA

Get students visible to the logged-in account: parent accounts see their linked children (parsed from the school homepage); student accounts see classmates. Uses cached data. Returns person_id, name, class_id — usable with switch_to_student and get_student_timetable.

switch_to_studentB

Switch to a student account (parent accounts only). Provide student_id (person_id) or name (first/last/full name).

find_studentA

Look up a student by first/last/full name using tiered matching. Without a subdomain, searches ALL logged-in schools and returns one result per school where the student is found. Returns student info with match confidence tiers (1=exact, 2=first name, 3=last name, 4=substring). Use student_id from results with get_student_timetable for unambiguous lookups.

get_schoolsA

List all schools the server is logged into (from auto-discovery or login_all). Returns each subdomain with its login state, role (student/parent/teacher), 2FA pending status, and user id.

clear_student_cacheA

Force refresh of cached student data. Call this after students are added/removed from a school, or if scan_students/find_student returns stale results. Without a subdomain, clears the cache for ALL schools.

scan_studentsA

Discover all students visible to the logged-in account across the discovery scope (the configured EDUPAGE_SUBDOMAINS, or every school when unset). For a parent account: their linked children in each school. For a student account: classmates in each school. Returns one entry per student per school, so a multi-school student appears with separate per-school records. Uses cached data to avoid redundant API calls.

switch_to_parentC

Switch back to the parent account (parent accounts only).

custom_requestC

Send a raw request to the Edupage server using the active session. method: 'GET'|'POST'. Returns status code and body text.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

B3/5.0

Scored across 46 tools

Disambiguation3/5

Many tools have distinct purposes, but significant overlap exists among student-related tools (get_students, get_all_students, get_my_students, scan_students, find_student) and timetable tools (get_my_timetable, get_student_timetable, get_timetable, get_next_week_timetable, get_timetable_range). The descriptions help but an agent could easily misselect without careful reading.

Naming Consistency4/5

Most tool names follow a consistent verb_noun or noun pattern (get_, login_, switch_), but a few deviate (school_year, user_id, two_factor_check_confirmed). Overall predictable and readable.

Tool Count2/5

46 tools is excessive for the domain, with many overlapping functions and niche authentication/2FA tools that could be consolidated. The count feels heavy and increases selection complexity.

Completeness4/5

The surface covers a wide range of school operations (timetables, grades, meals, messaging, authentication), but lacks explicit update/delete operations for most resources (e.g., no update_homework, no delete_message). Minor gaps that agents can work around via custom_request.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive