API ВЕГА

EduPage MCP Server

Проект

MCP-сервер Model Context Protocol (MCP), который предоставляет AI-агентам, таким как opencode, Claude, Cursor и другим MCP-клиентам, полный набор возможностей библиотеки Python edupage-api.

EduPage — школьная информационная система, используемая по всей Европе. Этот сервер позволяет напрямую запрашивать данные и выполнять действия в учётной записи ученика, учителя или родителя EduPage через агента: просматривать расписание, оценки, домашние задания, замены, информацию о питании (в том числе заказывать блюда), сообщения и списки учащихся, переключаться между учётными записями родителя и ребёнка и многое другое. Поддерживается работа с несколькими школами — например, если двое детей учатся в разных школах.

⚠️ Неофициальный API. Как и другие MCP-серверы EduPage, этот проект использует библиотеку edupage-api, которую поддерживает сообщество. Библиотека взаимодействует с недокументированными конечными точками EduPage. Функции только для чтения можно использовать свободно. К функциям, изменяющим данные (send_message, заказ питания, переключение между учётными записями детей), следует относиться осторожно.


Содержание

  • Почему появился ещё один MCP-сервер EduPage?

  • Возможности

  • Начало работы

    • Требования

      1. Установка
      1. Настройка учётных данных
      1. Регистрация в MCP-клиенте
  • Примеры запросов

  • Несколько школ (субдомены)

  • Справочник инструментов

  • Данные и безопасность

  • Участие в разработке

  • Ограничения

  • Поддержка

  • Лицензия


Почему появился ещё один MCP-сервер EduPage?

Уже существуют два других MCP-сервера EduPage:

опубликован в PyPI под именем edupage-mcp

Оба проекта достойны внимания. Я не связан с их авторами — они упомянуты здесь исключительно для объективного сравнения. В основном эти серверы ориентированы на чтение данных через API.

Этот проект намеренно предлагает больше возможностей:

Возможностьmhlavacmrtineu (PyPI)этот проект
Расширенный вход — автоматическое определение портала, 2FA, идентификатор сессии (PHPSESSID)частично (портал)только базовый вход✅
Расписание (собственное, а также любого учителя, класса или кабинета)✅✅✅
Оценки (все, по учебному периоду и году)✅✅✅
Замены и изменения в расписании✅✅✅
Питание — просмотр меню✅✅✅
Питание — выбор блюда, отказ от заказа, оценка❌❌✅
Отправка сообщений (send_message)✅❌✅
Переключение родителя на учётную запись ученика и обратночастично (список)❌✅
Время следующего звонка и расписание звонков❌❌✅
Пользовательский запрос через текущую сессию❌❌✅
Несколько школ (автоматический вход и поиск)❌❌✅
Учёт роли (родитель, ученик, учитель)❌❌✅
Сводки за день (ежедневный отчёт одним вызовом)❌❌✅
Домашние задания — текст и вложения❌✅✅
Скачивание файла с домашним заданием на диск❌✅✅

Ключевые отличия:

  • Автоматический поиск в нескольких школах. Укажите EDUPAGE_SUBDOMAINS и используйте один общий логин — сервер автоматически найдёт учеников во всех школах. Не нужно вручную составлять сопоставления вида «ученик → школа 1, ученик → школа 2». Если ученик числится в двух школах, например school1 и school2, сервер найдёт его автоматически и предоставит отдельные результаты для каждой школы.

  • Инструменты с учётом роли. Сервер определяет, кем вы являетесь в каждой школе — родителем, учеником или учителем, — и выбирает подходящий способ работы. Например, get_student_timetable переключается на учётную запись ученика для родителя и напрямую возвращает расписание ученика, если пользователь сам является учеником. Дублировать инструменты не нужно.

  • Полный набор функций для изменения данных. Заказ и оценка питания, отправка сообщений и переключение между учётными записями учеников — эти возможности отсутствуют в других серверах.

Сравнение проверено 2026-09-28. Если заметите неточность, пожалуйста, создайте issue.


Возможности

Один MCP-сервер, работающий через stdio и предоставляющий 31 инструмент (опубликован в PyPI под именем edupage-mcp-full):

  • Аутентификация — login (вход по учётным данным, с автоматическим определением портала или с помощью cookie PHPSESSID через method=), login_all (вход в несколько школ одним вызовом), two_factor_finish (завершение ожидающей проверки 2FA), get_subdomains (доступные учётной записи школы, роль и идентификатор пользователя для каждой школы, настройки окружения и динамический поиск субдоменов для родителей). Прежние инструменты auth_status, user_id, login_auto, login_from_session и two_factor_check_confirmed объединены с этими.

  • Расписание — get_my_timetable, get_timetable (учитель, ученик, класс или кабинет; end_date задаёт диапазон, ранее использовался инструмент get_timetable_range), get_student_timetable (поиск ученика по имени в разных школах), get_next_week_timetable, get_next_ringing_time, get_periods, get_school_year

  • Ученики — find_student (поиск person_id по имени в разных школах), get_student_timetable (поиск в разных школах с учётом роли), scan_students (автоматический поиск всех учеников во всех школах), get_my_students (одноклассники или все ученики школы для родителей), switch_to_student (переключение по идентификатору или имени; только для родителей), switch_to_parent, clear_student_cache (принудительное обновление сохранённых списков учеников)

  • Школы — get_subdomains (субдомены, доступные учётной записи: для родителей определяются динамически; если задана EDUPAGE_SUBDOMAINS, поиск ограничивается указанными значениями; также возвращается состояние сессии для каждой школы)

  • Оценки — get_grades

  • Хронология и уведомления — get_timeline (category= позволяет выбрать домашние задания, задания, отсутствия, события, новости или всю историю начиная с указанной даты)

  • Домашние задания — get_timeline(category='homework') для просмотра заданий (идентификаторы находятся в additional_data.superid), get_homework_material для чтения текста задания, дат и списка вложений (в уведомлении есть только название и срок сдачи), download_homework_file для сохранения одного вложения на диск

  • Замены — get_timetable_changes, get_missing_teachers

  • Питание — get_meals, choose_meal, sign_off_meal, rate_meal

  • Сводки за день — get_day_summary (один вызов собирает расписание, замены, отсутствующих учителей, оценки, питание, домашние задания, задания, отсутствия, новости, события и уведомления за указанную дату — то есть позволяет одним запросом узнать, «что вчера происходило в школе». Каждый раздел обрабатывается отдельно, поэтому сбой в одном из них не прерывает формирование отчёта). В комплект входит навык OpenCode school-day-summary, который формирует удобную для чтения сводку в OpenCode. В других клиентах доступны исходные данные в формате JSON.

  • Списки — get_roster (roster_type= позволяет получить список учеников, всех учащихся, учителей, классов, кабинетов или предметов), get_my_students

  • Действия — send_message, switch_to_student, switch_to_parent, custom_request


Начало работы

Понадобится MCP-клиент, например opencode, Claude Desktop или Cursor.

1. Установка

Если вы используете AI-клиент для программирования, часто достаточно простого запроса, например: «Установи EduPage MCP, следуя инструкциям в репозитории GitHub oliverhruby/edupage-mcp». Большинство клиентов с поддержкой MCP помогут выбрать подходящий вариант настройки.

Вариант A — через MCP Registry (рекомендуется; установка в один клик в VS Code / GitHub Copilot)

Сервер опубликован в MCP Registry.

В VS Code или GitHub Copilot найдите «EduPage MCP» и установите сервер одним нажатием.

Также можно воспользоваться прямой ссылкой: mcp://install/io.github.oliverhruby/edupage-mcp

Вариант B — из PyPI

Выберите этот вариант для обычного использования опубликованной версии.

Требования: uv для запуска через uvx или Python 3.10+ для установки через pip.

uvx edupage-mcp-full
# or, if you prefer pip (into whatever environment your MCP client uses):
pip install edupage-mcp-full

uvx запускает пакет без постоянной установки. Если uvx недоступен, сначала установите uv (pip install uv или winget install astral-sh.uv).

Вариант C — из GitHub (последняя версия исходного кода)

Выберите этот вариант, если хотите получить последние изменения до их публикации в PyPI.

Требования: uv для запуска через uvx или Python 3.10+ для установки через pip.

uvx --from "git+https://github.com/oliverhruby/edupage-mcp.git" edupage-mcp-full
# or
pip install "git+https://github.com/oliverhruby/edupage-mcp.git"

Вариант D — Docker

Выберите этот вариант для запуска в изолированном контейнере.

Требования: Docker.

Загрузите готовый образ (рекомендуется):

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

Если вы хотите зафиксировать версию образа, доступны также теги версий, например v0.4.0.

Соберите образ локально из исходного кода (запасной вариант):

docker build -t edupage-mcp-full .

docker run --rm -i \
  -e EDUPAGE_USERNAME=your_username \
  -e EDUPAGE_PASSWORD=your_password \
  edupage-mcp-full

Контейнер использует те же переменные окружения, которые описаны в разделе «Настройка учетных данных». Кроме того, он включает HEALTHCHECK (по умолчанию проверяется работоспособность процесса stdio; в режимах HTTP-транспорта выполняется локальная проверка TCP).

Для HTTP-транспорта при необходимости задайте переменные:

  • MCP_TRANSPORT: stdio (по умолчанию), sse или streamable-http

  • MCP_HOST: адрес для привязки (по умолчанию 127.0.0.1)

  • MCP_PORT: порт для привязки (по умолчанию 8000)

  • MCP_API_KEY: необязательный bearer-токен для HTTP-аутентификации

Если задан MCP_API_KEY, HTTP-запросы должны содержать заголовок Authorization: Bearer .

Если MCP_API_KEY не задан, HTTP-конечные точки не требуют аутентификации. В рабочей среде рекомендуется настроить надлежащую аутентификацию и TLS через обратный прокси или API gateway.

В pyproject.toml закреплена версия mcp FastMCPдляMCPServer`, а поверхность API была изменена; для простоты и стабильности этот сервер рассчитан на API FastMCP v1.

Вариант C — разработка из исходного кода

Выберите этот вариант, если собираетесь вносить изменения или отлаживать проект локально.

Требования: Python 3.10+.

git clone https://github.com/oliverhruby/edupage-mcp.git
cd edupage-mcp
uv sync               # or: python -m venv .venv && .venv/bin/python -m pip install -e .
uv run edupage-mcp-full

Вариант D — Docker

Выберите этот вариант для запуска в изолированном контейнере.

Требования: Docker.

Загрузите готовый образ (рекомендуется):

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

Если вы хотите зафиксировать версию образа, доступны также теги версий, например v0.4.0.

Соберите образ локально из исходного кода (запасной вариант):

docker build -t edupage-mcp-full .

docker run --rm -i \
  -e EDUPAGE_USERNAME=your_username \
  -e EDUPAGE_PASSWORD=your_password \
  edupage-mcp-full

Контейнер использует те же переменные окружения, которые описаны в разделе «Настройка учетных данных». Кроме того, он включает HEALTHCHECK (по умолчанию проверяется работоспособность процесса stdio; в режимах HTTP-транспорта выполняется локальная проверка TCP).

Для HTTP-транспорта при необходимости задайте переменные:

  • MCP_TRANSPORT: stdio (по умолчанию), sse или streamable-http

  • MCP_HOST: адрес для привязки (по умолчанию 127.0.0.1)

  • MCP_PORT: порт для привязки (по умолчанию 8000)

  • MCP_API_KEY: необязательный bearer-токен для HTTP-аутентификации

Если задан MCP_API_KEY, HTTP-запросы должны содержать заголовок Authorization: Bearer .

Если MCP_API_KEY не задан, HTTP-конечные точки не требуют аутентификации. В рабочей среде рекомендуется настроить надлежащую аутентификацию и TLS через обратный прокси или API gateway.

В pyproject.toml закреплена версия mcp FastMCPдляMCPServer`, а поверхность API была изменена; для простоты и стабильности этот сервер рассчитан на API FastMCP v1.

2. Настройка учетных данных

Учетные данные можно задать либо через переменные окружения, либо передать их при вызове login (см. раздел «Примеры запросов»).

# Windows (persistent, per-user)
setx EDUPAGE_USERNAME "your_username"
setx EDUPAGE_PASSWORD "your_password"
setx EDUPAGE_SUBDOMAINS "s1,s2,s3"       # optional: multiple schools (auto-login + discovery)

# macOS / Linux
export EDUPAGE_USERNAME="your_username"
export EDUPAGE_PASSWORD="your_password"
export EDUPAGE_SUBDOMAINS="s1,s2,s3"     # optional

Одна школа? Достаточно задать EDUPAGE_USERNAME и EDUPAGE_PASSWORD. При запуске сервер автоматически определит вашу школу через портал EduPage — указывать поддомен не нужно.

Несколько школ? Добавьте EDUPAGE_SUBDOMAINS, указав поддомены через запятую. При запуске сервер войдет во все школы, используя общие учетные данные.

3. Регистрация в MCP-клиенте

opencode — добавьте конфигурацию в ~/.config/opencode/opencode.json (или opencode.jsonc):

{
  "mcp": {
    "edupage": {
      "type": "local",
      "enabled": true,
      "command": ["uvx", "edupage-mcp-full"],
      "env": {
        "EDUPAGE_USERNAME": "{env:EDUPAGE_USERNAME}",
        "EDUPAGE_PASSWORD": "{env:EDUPAGE_PASSWORD}",
        "EDUPAGE_SUBDOMAINS": "{env:EDUPAGE_SUBDOMAINS}"
      }
    }
  }
}

Задайте учетные данные в оболочке или окружении (либо в .env) и ссылайтесь на них с помощью {env:VAR}. Также можно указать их непосредственно в env:. При первом запуске uvx автоматически установит пакет; команда должна быть доступна в PATH.

Claude Desktop / Cursor — используйте claude_desktop_config.json /

.mcp.json со стандартной записью mcpServers. В ней укажите command/args, ведущие к Python из виртуального окружения и файлу edupage_mcp.py, а также блок env с учетными данными.

После изменения конфигурации клиента перезапустите его, чтобы загрузить MCP-сервер.


Примеры запросов

Запрос пользователяВероятные вызовы инструментовОжидаемый ответ
«Мы подключены и вошли в систему?»get_subdomainsДоступные поддомены школ (для родителей — определенные в реальном времени), активная школа/поддомен, настройки окружения и состояние входа для каждой школы.
«Какие у меня сегодня уроки?»get_my_timetableКраткое расписание на сегодня.
«Покажи расписание 9.A на 2026-09-10»get_timetable target_type="class" target_id="9.A" date_str="2026-09-10"Расписание класса на указанную дату.
«Какие у меня оценки за этот семестр?»get_grades term="FIRST" year=2026Сводка оценок по предметам за выбранный семестр и год.
«Сегодня есть замены?»get_timetable_changesИзменения в расписании, отмены и замены на сегодня.
«Что сегодня на обед и закажи на завтра вариант 2»get_meals → choose_meal date_str="2026-09-10" meal_type="lunch" number=2Меню и подтверждение заказа либо понятное сообщение об ошибке, если заказ недоступен.
«Найди расписание Student A на завтра»get_student_timetable name="Student A" date_str="2026-09-10"Расписание Student A; если ученик найден в нескольких школах, для каждой школы будет отдельный результат.
«Покажи список учителей и отправь привет Teacher456»get_roster roster_type="teachers" → send_message recipient_id="Teacher456" body="Hello!"Список учителей и подтверждение отправки сообщения.
«Что вчера происходило в школе у моих детей?»get_day_summary date_str="2026-09-09" (индекс для поиска) → get_day_summary date_str="2026-09-09" name="Student A" subdomain="school-a" → ... name="Student B" subdomain="school-b"Сначала выполняется поиск: вызов без имени перечисляет каждого ребенка в каждой школе. Затем для каждого ребенка отдельно формируется полный отчет за день (расписание, замены, отсутствующие учителя, оценки, питание, домашние задания, задания, пропуски, новости, мероприятия, уведомления). Такой подход сохраняет ответы компактными и не смешивает школы и учеников.
«Как прошел сегодняшний школьный день у Student A?»get_day_summary name="Student A" (по умолчанию — за сегодня)Понятная сводка, сформированная с помощью встроенного навыка OpenCode school-day-summary.

Несколько школ и автоматическое обнаружение учеников

Для каждого поддомена (школы) хранится отдельная авторизованная сессия. Есть два способа одновременно войти в несколько школ:

A) Автоматический вход при запуске (рекомендуется). Задайте EDUPAGE_SUBDOMAINS (список через запятую), а также общие EDUPAGE_USERNAME / EDUPAGE_PASSWORD — сервер войдёт во все школы при запуске. Все инструменты сразу будут готовы к работе, а ученики будут автоматически обнаружены во всех школах. Вызывать вход и вручную сопоставлять учеников со школами не потребуется:

setx EDUPAGE_SUBDOMAINS "school1,school2,school3"   # Windows
export EDUPAGE_SUBDOMAINS="school1,school2,school3" # macOS / Linux
get_subdomains   # lists school1, school2, school3 (logged in, with role)
scan_students      # discovers Student A and Student B across those schools
get_student_timetable name="Student A"   # is found at school1 AND school2

B) Вход по запросу с помощью login_all. Авторизуйтесь сразу в нескольких школах, а затем указывайте subdomain при вызове любого инструмента для работы с данными. Если параметр не задан, используется последний активный поддомен:

login_all subdomains="school1,school2" usernames="u1,u2" passwords="p1,p2"

get_my_timetable subdomain="school1"
get_my_timetable subdomain="school2"
get_subdomains         # shows all logged-in subdomains + which is active

Также можно вызывать login отдельно для каждой школы, чтобы постепенно добавлять сессии или находить уже созданные.

Только одна школа? Переменная EDUPAGE_SUBDOMAINS не нужна — при запуске сервер автоматически определит школу через портал. Если школ две или больше, задайте EDUPAGE_SUBDOMAINS для автоматического входа или используйте login_all / несколько вызовов login.


Поиск учеников по имени (например, «расписание для Student A»)

Сервер автоматически обнаруживает учеников во всех школах, перечисленных в EDUPAGE_SUBDOMAINS, или во всех школах с активной сессией, если переменная не задана. Поэтому указывать, в какой школе учится ученик, не нужно. Просто запросите расписание по имени — сервер выполнит поиск во всех школах, доступных для поиска:

get_student_timetable name="Student A"">

"timetable for Student A"  ->  get_student_timetable name="Student A"

get_student_timetable (без subdomain):

  • ищет ученика во всех школах, доступных для поиска: в школах из EDUPAGE_SUBDOMAINS или во всех школах с активной сессией, если переменная не задана. Инструмент scan_students выполняет только поиск учеников;

  • для каждой школы, где найден ученик, переключается на его учётную запись, если выполнен вход как родитель, возвращает расписание ученика на указанную дату и затем снова переключается на учётную запись родителя;

  • возвращает отдельный результат для каждой школы.

Если ученик посещает несколько школ (например, учится в school1 и school2), инструмент вернёт список из двух расписаний — по одному для каждой школы. Результаты не объединяются. Это встроенная замена ручному сопоставлению вида «ученик → school1»: при заданной EDUPAGE_SUBDOMAINS поиск выполняется автоматически.


Справочник по инструментам

ИнструментОписаниеИзменяет данные?
loginВход по имени пользователя и паролю: method="credentials" (по умолчанию), method="auto" (автоматическое определение через портал, ранее login_auto) или method="session" с файлом cookie PHPSESSID (ранее login_from_session). Поддерживаются переменные среды.✅ сессия
login_allВход сразу в несколько школ одним вызовом✅ сессия
two_factor_finishЗавершение ожидающего подтверждения входа с 2FA: ввод code из письма или приложения либо подтверждение устройства через poll_seconds (ранее two_factor_check_confirmed + two_factor_finish)✅ сессия
get_subdomainsДоступные поддомены школ (для родителей обнаруживаются при запросе; при заданной EDUPAGE_SUBDOMAINS список ограничен её значениями), а также роль и идентификатор пользователя в каждой школе, активный поддомен, неудачные попытки входа и настройки среды (ранее auth_status, user_id)
get_school_yearТекущий учебный год
get_my_timetableРасписание вошедшего пользователя на указанную дату
get_timetableРасписание учителя, ученика, класса или кабинета; для диапазона дат используется end_date (ранее get_timetable_range)
get_student_timetableРасписание ученика по имени или идентификатору с учётом роли и поиском во всех школах✅ сессия
get_next_week_timetableРасписание с понедельника по пятницу на следующую неделю
get_next_ringing_timeВремя следующего звонка (перемена или урок) относительно указанного времени
get_periodsРасписание звонков: время начала и окончания уроков
get_gradesОценки; при необходимости можно указать учебный год и четверть
get_timelineУведомления в ленте. За один вызов указывается одна категория category=: recent, history (начиная с date_from), homework, assignments, absences, events, news (ранее get_notifications, get_notification_history, get_homework, get_assignments, get_absences, get_upcoming_events, get_news)
get_homework_materialПолный текст задания, даты и список вложений. Для поиска задания используется superid из get_timeline(category='homework') → additional_data.superid
download_homework_fileСкачивание одного вложения по URL из get_homework_material на диск (по умолчанию /homework; существующие файлы не перезаписываются)✅ диск
get_timetable_changesЗамены и изменения в расписании на указанную дату
get_missing_teachersОтсутствующие учителя на указанную дату
get_day_summaryЕжедневный отчёт одним вызовом: расписание, замены, учителя, оценки, питание (включая завтрак и ужин, если опубликованы), домашние задания, задания, отсутствия, новости, события и уведомления. Можно указать ученика по имени или идентификатору; учитывается роль. Сначала выполняется обнаружение: если родитель не указал name / student_id, возвращается краткий список учеников по школам (mode:"discovery"). Укажите full=True, чтобы сформировать полные отчёты для всех детей. В комплект входит навык OpenCode school-day-summary, формирующий понятный текстовый отчёт.
get_mealsМеню питания для всех пяти приёмов пищи: завтрак, перекус, обед, полдник и ужин
choose_mealЗаказ питания✅
sign_off_mealОтмена заказа питания✅
rate_mealОценка питания по качеству и количеству✅
get_rosterЗа один вызов можно указать один roster_type=: students (ученики класса вошедшего пользователя), all_students (краткий список учеников всей школы), teachers, classes, classrooms, subjects (ранее get_students, get_all_students, get_teachers, get_classes, get_classrooms, get_subjects)
get_my_studentsУченики, доступные вошедшей учётной записи (в одной школе)
find_studentПоиск идентификатора person_id ученика по имени во всех школах
scan_studentsАвтоматический поиск учеников во всех школах, указанных в EDUPAGE_SUBDOMAINS, или во всех школах с активной сессией, если переменная не задана
clear_student_cacheОчистка кэша списков учеников в одной или всех школах✅ кэш
get_subdomainsДоступные поддомены школ, а также роль и состояние сессии для каждой школы
send_messageОтправка сообщения пользователю✅
switch_to_studentПереключение на учётную запись ученика по идентификатору или имени (только для родителей)✅ сессия
switch_to_parentВозврат к учётной записи родителя✅ сессия
custom_requestОтправка произвольного запроса GET/POST через активную сессию✅

Данные и безопасность

  • Большинство инструментов только считывают данные. Инструменты, отмеченные «Изменяет данные? ✅», изменяют состояние EduPage: отправляют сообщения, оформляют заказы питания или переключают учётные записи. Используйте их с осторожностью.

  • download_homework_file — единственный инструмент, который записывает файлы на локальный диск. Он сохраняет файлы в dest_dir (по умолчанию /homework), использует имя из content-disposition на сервере, если оно указано, и добавляет к имени (1), (2) и так далее, не перезаписывая существующие файлы.

  • Категории homework, assignments, absences, events и news инструмента get_timeline используют данные из уведомлений в ленте. Если школа не передаёт уведомления о некоторых типах событий, соответствующие категории могут возвращать пустые списки.

  • Инструмент get_missing_teachers помечен разработчиками как экспериментальный: он разбирает HTML-страницу замен и может завершиться ошибкой, если формат имени учителя изменится.

  • Оценка питания с помощью rate_meal и заказ блюд зависят от наличия в школе опубликованного меню с соответствующими идентификаторами. Не все школы поддерживают оценки.

  • Сначала get_meals обращается к специальной конечной точке заказа питания для учеников, необходимой для оформления заказов и выставления оценок. Если школа её не поддерживает, инструмент использует общедоступный виджет меню столовой школы (/menu/?wid=menu_CanteenMenu_1). Результат всегда содержит все пять приёмов пищи: breakfast, snack, lunch, afternoon_snack и dinner. Для приёмов пищи, которые школа не публикует, возвращается значение None.


Навыки

В пакет входит навык OpenCode (school-day-summary) по адресу

/edupage_mcp/skills/school-day-summary/SKILL.md. Он помогает

агентам OpenCode преобразовывать JSON от get_day_summary в понятный ежедневный

отчёт о школьных событиях.

Только для OpenCode: чтобы добавить навык:

/edupage_mcp/skills/school-day-summary/SKILL.md
~/.config/opencode/skills/school-day-summary/SKILL.md">

mkdir -p ~/.config/opencode/skills/school-day-summary
cp <site-packages>/edupage_mcp/skills/school-day-summary/SKILL.md \
   ~/.config/opencode/skills/school-day-summary/SKILL.md

Перезапустите OpenCode. После этого агент сможет ответить на вопрос *«Что вчера

происходило в школе у моих детей?»*, вызвав get_day_summary для каждого ребёнка.

Другие MCP-клиенты (Copilot, Claude, Cursor и т. д.) — вызывайте get_day_summary

напрямую: в ответ они получат полный структурированный JSON. Способ форматирования

зависит от клиента: в протоколе MCP нет системы навыков.


Участие в проекте

Рекомендации для участников и сопровождающих проекта приведены в файле CONTRIBUTING.md.

  • Процесс внесения изменений и настройка локальной среды

  • Архитектура и детали реализации

  • Процесс выпуска релизов (PyPI, GitHub Releases, GHCR)

  • Проверки качества в CI и отслеживание изменений покрытия в upstream-проекте


Ограничения

  • Проект неофициальный и по своей сути в основном предназначен для чтения. EduPage может в любой

момент изменить свои конечные точки; надёжность в конечном счёте зависит от edupage-api, а не от этой оболочки.

  • Обход CAPTCHA не поддерживается. Если при входе EduPage запрашивает CAPTCHA, сначала войдите через

браузер, затем используйте login method="session" с полученным значением PHPSESSID.

  • Для 2FA требуется участие человека: подтвердите вход на устройстве или укажите код.

  • Аккаунты родителей и учителей проверены в upstream-проекте лишь частично; некоторые методы для родителей работают по возможности.

  • Сеанс авторизации существует, пока работает процесс MCP-сервера. После перезапуска клиента потребуется войти снова.

  • Поиск учащихся в нескольких школах зависит от того, выполнен ли вход во все нужные школы

(через EDUPAGE_SUBDOMAINS, login_all или повторные вызовы login).

Если вход в школу не выполнен, найти данные учащегося из этой школы не удастся.


Поддержка

Если вам нравится этот проект и вы хотите поддержать его или предложить новую функцию, угостите меня

пивом: это помогает расслабиться и наводит на новые идеи :-)


Лицензия

MIT © Oliver Hrubý

Этот проект не связан с Ascora (EduPage) и не одобрен этой компанией,

а также не связан с авторами edupage-api и не одобрен ими. EduPage — зарегистрированная торговая марка

соответствующих владельцев.