EduPage MCP Server について
EduPage MCP Server は、学生、保護者、教師向けに EduPage アカウントの操作を単一の MCP サーバーから AI エージェントに提供します。コミュニティ運営の edupage-api ライブラリを使い、読み取りと書き込み、ロール別の動作、複数校の検出に対応します。
主な機能
- 01時間割、成績、変更情報の照会
- 02宿題の閲覧と添付ファイルのダウンロード
- 03食事の選択内容の確認と管理
- 04メッセージ送信と生徒アカウントの切り替え
- 052FA と複数校への対応
- 06学校のデイリーサマリーの生成
活用シーン
- 01時間割、成績、学校からのお知らせの確認
- 02課題の確認と添付ファイルの保存
- 03食事注文と学校へのメッセージの管理
- 04複数校に通う子どもの情報の集約
MCP 対応
edupage-api の機能を MCP ツールとして AI エージェントや他の MCP クライアントに提供します。stdio と任意の HTTP トランスポートに対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
uvx edupage-mcp-fullEDUPAGE_USERNAMEシークレットYour EduPage usernameEDUPAGE_PASSWORDシークレットYour EduPage passwordEDUPAGE_SUBDOMAINSComma-separated school subdomains (optional)ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
31掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| method | any | いいえ | |
| password | any | いいえ | |
| username | any | いいえ | |
| subdomain | any | いいえ | |
| session_id | any | いいえ |
詳細
EduPage MCP サーバー
プロジェクト
edupage-api Python ライブラリの全機能を、opencode、Claude、Cursor などの AI エージェントや、その他すべての MCP クライアントに公開する Model Context Protocol(MCP)サーバーです。
EduPage は、ヨーロッパ各地で利用されている学校情報システムです。このサーバーを使うと、エージェントから生徒・教師・保護者の EduPage アカウントに直接アクセスし、時間割、成績、宿題、時間割変更、食事(注文を含む)、メッセージ、名簿、保護者による子どもの切り替えなどを照会・操作できます。複数の学校(たとえば、2人の子どもが別々の学校に通っている場合)にも対応しています。
⚠️ 非公式 API です。 すべての EduPage MCP サーバーと同様に、コミュニティがメンテナンスしている
edupage-apiライブラリに依存しており、このライブラリは EduPage の非公開エンドポイントと通信します。読み取り専用機能は自由にお使いいただけます。書き込み機能(send_message、食事の注文、子どもの切り替え)は慎重にご利用ください。
目次
- 別の EduPage MCP サーバーが必要な理由
- 提供機能
- はじめに
- プロンプトの例
- 複数の学校(サブドメイン)
- ツールリファレンス
- データと安全性に関する注意事項
- コントリビューション
- 制限事項
- サポート
- ライセンス
EduPage MCP サーバーをもう一つ作る理由
EduPage MCP サーバーは、すでにほかに2つあります。
mrtineu/edupage-mcp— PyPI ではedupage-mcpとしても公開されていますmhlavac/edupage-mcp
どちらも優れたサーバーであり、私は一切関係ありません。ここでは、公平に比較するために参照しているだけです。どちらも主に API の読み取り専用機能に焦点を当てています。
このプロジェクトでは、意図的にさらに踏み込んでいます。
| 機能 | mhlavac | mrtineu(PyPI) | このプロジェクト |
|---|---|---|---|
高度なログイン — ポータルの自動検出、2FA、セッション ID(PHPSESSID) | 一部(ポータル) | 基本機能のみ | ✅ |
| 時間割(自分+任意の教師/クラス/教室) | ✅ | ✅ | ✅ |
| 成績(すべて/学期・年度別) | ✅ | ✅ | ✅ |
| 代講/時間割の変更 | ✅ | ✅ | ✅ |
| 給食 — メニューの表示 | ✅ | ✅ | ✅ |
| 給食 — 選択/取り消し/評価 | ❌ | ❌ | ✅ |
メッセージの送信(send_message) | ✅ | ❌ | ✅ |
| 保護者による生徒の切り替え(生徒への切り替え/生徒からの切り替え) | 一部(一覧) | ❌ | ✅ |
| 次のチャイム時刻/チャイムスケジュール | ❌ | ❌ | ✅ |
| セッションを使ったカスタムリクエスト | ❌ | ❌ | ✅ |
| 複数の学校(自動ログイン+検出) | ❌ | ❌ | ✅ |
| 役割に応じた動作(保護者/生徒/教師) | ❌ | ❌ | ✅ |
| 日次サマリー(1回の呼び出しで日次レポートを取得) | ❌ | ❌ | ✅ |
| 宿題 — 本文+添付ファイル | ❌ | ✅ | ✅ |
| 宿題ファイルをディスクにダウンロード | ❌ | ✅ | ✅ |
主な差別化要因:
- 複数の学校を自動検出。 共通のログイン情報で
EDUPAGE_SUBDOMAINSを設定すると、サーバーがすべての学校から生徒を自動検出します。「生徒 → 学校1、生徒 → 学校2」のような対応表を手動で管理する必要はありません。2つの学校(例:school1とschool2)に在籍する生徒も、学校ごとの個別の結果とともに自動で見つかります。 - 役割に応じたツール。 サーバーは各学校でのユーザーの役割(保護者、生徒、教師)を検出し、それに応じて動作します。
get_student_timetableは保護者の場合は生徒のアカウントに切り替え、生徒の場合は時間割を直接返します。ツールを重複して用意する必要はありません。 - すべての書き込み機能に対応。 給食の注文/評価、メッセージの送信、生徒の切り替えに対応しています。ほかのサーバーはこれらの機能をカバーしていません。
比較確認日:2026-09-28。内容に誤りがあれば、issue を作成してください。
提供する機能
31 個のツールを公開する単一の stdio MCP サーバーです(PyPI では
edupage-mcp-full として公開されています)。
- 認証 —
login(認証情報、ポータルの自動検出、またはmethod=によるPHPSESSIDCookie を使用)、login_all(複数の学校に一度の呼び出しでログイン)、two_factor_finish(保留中の 2FA を完了)、get_subdomains(アカウントで利用可能な 学校と、学校ごとのロール/ユーザー ID、環境設定。保護者向けのライブなサブドメイン検出)。 以前の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(ID または 名前で指定。保護者のみ)、switch_to_parent、clear_student_cache(キャッシュされた生徒リストを強制更新) - 学校 —
get_subdomains(アカウントで利用可能なサブドメイン。保護者向けにはライブ検出し、EDUPAGE_SUBDOMAINSが設定されている場合はその値により制限されます。学校ごとのセッション状態も返します) - 成績 —
get_grades - タイムライン/通知 —
get_timeline(宿題、課題、欠席、イベント、ニュース、または指定日以降の 全履歴を取得するcategory=) - 宿題 — 課題を一覧表示するには
get_timeline(category='homework')(ID はadditional_data.superid内にあります)、課題 1 件の本文、日付、 添付ファイル一覧を取得するにはget_homework_material(通知だけではタイトルと期限しか取得できません)、 添付ファイル 1 件をディスクに保存するにはdownload_attachment - 変更 —
get_timetable_changes、get_missing_teachers - 食事 —
get_meals、choose_meal、sign_off_meal、rate_meal - 1 日の概要 —
get_day_summary(1 回の呼び出しで、指定日の時間割、変更、 不在の教師、成績、食事、宿題、課題、欠席、ニュース、イベント、通知を取得します。 「昨日、学校で何があったか」を 1 回の往復で確認できます。各セクションは個別に処理されるため、 1 つの取得に失敗してもレポート全体には影響しません)。同梱のエージェントスキル(school-day-summary)を使うと、 この JSON を人が読みやすい日次レポートに変換できます。edupage-mcp-full install-skillでインストールしてください(スキルを参照)。どのクライアントからもget_day_summaryを直接呼び出して 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 コーディングクライアントを使用している場合は、たとえば「この GitHub リポジトリ oliverhruby/edupage-mcp に記載されているとおりに EduPage MCP をインストールして」 という簡単なプロンプトだけで、開始できることがよくあります。その後、ほとんどの MCP 対応クライアントが、 利用可能なセットアップ方法を案内してくれます。
オプション A — エージェントプラグインとして利用(推奨:サーバーとスキルをまとめてインストール)
VS Code、GitHub Copilot、Claude Code 向けに、このリポジトリではサーバーと
school-day-summary エージェントスキルを一緒にインストールするプラグインを提供しています。
copilot plugin marketplace add oliverhruby/edupage-mcp
copilot plugin install edupage@edupage-plugins
Claude Code は同じマーケットプレイスを読み込みます。
claude plugin marketplace add oliverhruby/edupage-mcp
claude plugin install edupage@edupage-plugins
opencode、Cursor、Windsurf は Agent Skills を読み込みますが、プラグインには対応していません。 これらのクライアント向けの方法や、その他すべてのインストール方法については、 docs/PLUGINS.md を参照してください。
オプション B — APM で一度にインストール(サーバーとスキルを 1 つのコマンドでインストール。任意、普及しつつある標準) APM(Agent Package Manager)は、エージェントのコンテキストを配布するための新たなオープン標準です。エージェントのスキル、MCP サーバー、指示を扱う npm のようなものと考えてください。この方法は任意です。オプション A と以下のすべての方法は、これまでどおり動作します。すでに APM を使っている場合(または試してみたい場合)、ここで紹介する方法のうち、唯一、異なるハーネスにまたがってワンコマンドでインストールできます。
-
CLI を一度インストールします。必要なもの:
gitと、サーバーのランタイム用のuv。- Windows:
winget install --id Microsoft.APM -e(またはscoop bucket add apm https://github.com/microsoft/scoop-apm; scoop install apm) - macOS / Linux:
brew install apm - Python 3.10 以降を使用できるプラットフォーム:
pip install apm-cli - その他の方法:インストール手順
- Windows:
-
このパッケージをインストールします:
apm install oliverhruby/edupage-mcp1 つのコマンドで、次の両方を実行します。
school-day-summaryスキルをハーネスのスキルディレクトリ(.claude/skills/、.agents/skills/など)に配置します。- APM が検出したすべてのハーネス(Claude Code、GitHub Copilot、Cursor、opencode、Codex、Gemini、Windsurf、Kiro など)の MCP 設定に、
uvx edupage-mcp-fullの stdio サーバーエントリを書き込みます。対象のハーネスを 1 つに限定する場合は、--target claude(または別のターゲット)を追加してください。
-
確認します:
apm mcp list # server registered?apm uninstall oliverhruby/edupage-mcpを実行すると、パッケージと配置済みのスキルファイルが削除されますが、.mcp.json(およびその他のハーネス設定)に書き込まれたMCP サーバーのエントリは残ります。削除する場合は、そのエントリを手動で削除してください。
認証情報がパッケージに埋め込まれることはありません。apm install の実行前に EDUPAGE_USERNAME / EDUPAGE_PASSWORD(複数の学校のアカウントの場合は EDUPAGE_SUBDOMAINS も)を設定してください。2. 認証情報の設定を参照してください。
バージョンの固定。 正確なリビジョンに固定して APM の「依存関係が固定されていません」という警告を抑制するには、#<sha>(または、リリースに apm.yml が含まれるようになったら #<tag>)を追加します。固定しない場合、解決されたコミットが apm.lock.yaml に記録されます。v0.7.0 までのリリースにはマニフェストが含まれていないため、次のリリースまではコミット sha を使用してください。
Claude Code のプラグイン/マーケットプレイスからのインストール(オプション A)も、引き続きサポートされ、従来どおり変更はありません。APM は追加のインストール方法として、このリポジトリの apm.yml で宣言されています。
オプション C — MCP Registry から(ワンクリック、サーバーのみ、スキルなし)
サーバーは MCP Registry に登録されています。VS Code または GitHub Copilot で「EduPage MCP」を検索し、ワンクリックでインストールしてください。または、直接リンクを使用してください:mcp://install/io.github.oliverhruby/edupage-mcp
オプション D — PyPI から
リリース済みバージョンを通常どおり使用する場合は、この方法を使用してください。
必要なもの:uvx を使う場合は uv、pip を使う場合は Python 3.10 以降。
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)。
オプション E — GitHub から(最新のソース)
PyPI でリリースされる前に最新の変更を使いたい場合は、この方法を使用してください。
必要なもの:uvx を使う場合は uv、pip を使う場合は Python 3.10 以降。
uvx --from "git+https://github.com/oliverhruby/edupage-mcp.git" edupage-mcp-full
# or
pip install "git+https://github.com/oliverhruby/edupage-mcp.git"
オプション F — 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-httpMCP_HOST:バインドするホスト(デフォルトは127.0.0.1)MCP_PORT:バインドするポート(デフォルトは8000)MCP_API_KEY:HTTP 認証用の任意のベアラートークンMCP_API_KEYが設定されている場合、HTTP リクエストにはAuthorization: Bearer <key>を含める必要があります。MCP_API_KEYが設定されていない場合、HTTP エンドポイントは認証なしで利用できます。本番環境では、 リバースプロキシまたは API ゲートウェイを介して、適切な認証と TLS を使用してください。
pyproject.tomlではmcp<2(安定版の FastMCP v1 API)が固定されています。mcp 2.xではFastMCPがMCPServerに改名され、API の仕様が変更されています。このサーバーでは、 シンプルさと安定性を重視して FastMCP v1 API を対象としています。
オプション G — ソースから開発する
ローカルでコントリビュートやデバッグを行う場合に使用します。
要件: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
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
学校が1校の場合: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 | 今日の時間割の簡潔な概要。 |
| "2026-09-10 の 9.A の時間割を表示して" | 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 の時間割。複数の学校で見つかった場合は、学校ごとに結果を1件ずつ表示します。 |
| "先生の一覧を表示して、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" | 検出を先に実行:名前を指定しない呼び出しで、学校ごとに子どもを一覧表示します。その後、子どもごとに1回ずつ完全な日次レポートを呼び出します(時間割、時間割変更、担当教員の不在、成績、食事、宿題、課題、欠席、ニュース、イベント、通知)。各応答を簡潔に保ち、学校や生徒の情報が混在するのを防ぎます。 |
| "今日は Student A の学校はどうでしたか?" | get_day_summary name="Student A"(今日がデフォルト) | 同梱の school-day-summary スキル(edupage-mcp-full install-skill)をインストールすると、人が読みやすい要約を返します。 |
複数の学校と生徒の自動検出
各サブドメイン(学校)は、独自のログイン済みセッションを保持します。複数の学校に同時にログインする方法は2つあります。
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 を1回呼び出して、セッションを順次追加・検索することもできます。
学校が1つの場合は?
EDUPAGE_SUBDOMAINSを設定する必要はありません。サーバーは起動時にポータル経由で学校を自動検出します。学校が2つ以上の場合は、EDUPAGE_SUBDOMAINSを設定する(自動ログイン)か、login_allまたはloginの繰り返し呼び出しを使用してください。
名前による生徒の検索(例:「Student A の時間割」)
サーバーは設定された EDUPAGE_SUBDOMAINS 内の学校(または、この変数が設定されていない場合はログイン済みのすべての学校)から生徒を自動検出するため、生徒がどの学校に所属しているかを把握したり指定したりする必要はありません。名前を指定して時間割を尋ねるだけで、サーバーが対象範囲内のすべての学校を検索します。
"timetable for Student A" -> get_student_timetable name="Student A"
get_student_timetable(subdomain なし)は、次の処理を行います。
- 生徒検出の対象範囲に含まれるすべての学校(設定された
EDUPAGE_SUBDOMAINS、または未設定の場合はログイン済みのすべての学校)で、名/姓/フルネームが一致する生徒を検索します(scan_studentsは検出処理のみを行います)。 - 生徒が見つかった各学校で、保護者としてログインしている場合は生徒アカウントに切り替え、その生徒の指定日の時間割を返した後、保護者アカウントに戻します。
- 学校ごとに1件の結果を返します。
複数の学校(例:school1 と school2)に通う生徒の場合、学校ごとの時間割が2件のリストとして返されます。結果は個別に返され、統合されることはありません。これは、手動で「生徒 → school1」のマッピングを管理する方法に代わる機能です。EDUPAGE_SUBDOMAINS を設定すると、生徒は完全に自動で検出されます。
ツールリファレンス
| ツール | 説明 | 書き込み? |
|---|---|---|
login | ユーザー名とパスワードでログインします。method="credentials"(デフォルト)、method="auto"(ポータルを自動検出。以前の login_auto)、または PHPSESSID Cookie を指定する method="session"(以前の login_from_session)を使用します。環境変数に対応しています。 | ✅ セッション |
login_all | 1 回の呼び出しで複数の学校にログインします | ✅ セッション |
two_factor_finish | 保留中の 2FA ログインを完了します(メール/アプリの code、またはデバイス確認の poll_seconds。以前の two_factor_check_confirmed と two_factor_finish) | ✅ セッション |
get_subdomains | アカウントで利用可能なサブドメイン(保護者の場合は実行時に検出。EDUPAGE_SUBDOMAINS が設定されている場合はその値に限定)に加え、学校ごとの役割/ユーザー ID、アクティブなサブドメイン、ログイン失敗、環境設定を取得します(以前の auth_status、user_id) | |
get_school_year | 現在の学年 | |
get_my_timetable | ログイン中のユーザーの指定日の時間割 | |
get_timetable | 教師/生徒/クラス/教室の時間割。日ごとの範囲には end_date を指定します(以前の get_timetable_range) | |
get_student_timetable | 名前または ID で生徒の時間割を取得します(役割を考慮、複数の学校に対応) | ✅ セッション |
get_next_week_timetable | 来週の月曜から金曜までの時間割 | |
get_next_ringing_time | 指定時刻における次のベル(休み時間/授業) | |
get_periods | ベルスケジュール(各時限の開始/終了時刻) | |
get_grades | 成績。年度と学期を指定できます | |
get_timeline | タイムライン通知。category= は一度に 1 つ指定します: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 | get_timeline(category='homework') → additional_data.superid で取得した superid を指定して、課題 1 件の全文、日付、添付ファイル一覧を取得します | |
download_attachment | 認証が必要な添付ファイルをディスクにダウンロードします。絶対 URL、または get_timeline の相対 /elearning/… キーを指定します。学校/ログインページは拒否します(デフォルトは <tempdir>/homework。既存ファイルは上書きしません) | ✅ ディスク |
get_timetable_changes | 指定日の代講/時間割変更 | |
get_missing_teachers | 指定日に不在の教師 | |
get_day_summary | 指定日の 1 回の呼び出しで日次レポートを取得します(時間割、代講、教師、成績、食事〔公開されている場合は朝食/夕食を含む〕、宿題、課題、欠席、ニュース、イベント、通知)。名前/ID で生徒を指定できます(役割を考慮)。検出優先:名前/student_id を指定しない保護者には、学校ごとの簡易な生徒インデックスを返します(mode:"discovery")。すべての子どもの詳細レポートを作成するには full=True を渡します。人が読みやすい出力のための school-day-summary エージェントスキル(edupage-mcp-full install-skill でインストール)を同梱しています。 | |
get_meals | 食事メニュー(全 5 枠:朝食、軽食、昼食、午後の軽食、夕食) | |
choose_meal | 食事を注文します | ✅ |
sign_off_meal | 注文済みの食事をキャンセルします | ✅ |
rate_meal | 食事を評価します(品質/量) | ✅ |
get_roster | roster_type= は一度に 1 つ指定します:students(ログイン中のユーザーのクラス)、all_students(全校の生徒、簡易一覧)、teachers、classes、classrooms、subjects(以前の get_students、get_all_students、get_teachers、get_classes、get_classrooms、get_subjects) | |
get_my_students | ログイン中のアカウントから閲覧できる生徒(1 校) | |
find_student | 名前から生徒の person_id を検索します(複数の学校に対応) | |
scan_students | 設定済みの EDUPAGE_SUBDOMAINS(未設定の場合はログイン済みのすべての学校)から生徒を自動検出します | |
clear_student_cache | 生徒名簿のキャッシュを消去します(1 校または全校) | ✅ キャッシュ |
get_subdomains | 利用可能な学校のサブドメインと、学校ごとの役割/セッション | |
send_message | ユーザーにメッセージを送信します | ✅ |
switch_to_student | ID または名前で生徒アカウントに切り替えます(保護者のみ) | ✅ セッション |
switch_to_parent | 保護者アカウントに戻します | ✅ セッション |
custom_request | アクティブなセッションを通じて生のテキストリクエストを送信します(GET/POST)。バイナリ本文は拒否し、download_attachment を案内します | ✅ |
データと安全性に関する注意事項
- ほとんどのツールは読み取り専用です。**書き込み? ✅**と表示されているツールは、EduPage の状態(送信済みメッセージ、注文済みの食事、切り替えたアカウント)を変更します。慎重に使用してください。
download_attachmentはローカルディスクに書き込む唯一のツールです。dest_dir(デフォルトは<tempdir>/homework)に保存し、サーバーのcontent-dispositionがある場合はそこから名前を取得して、上書きする代わりに(1)、(2)、…を追加します。HTML のログインページやエラーページは、添付ファイルとして書き出さずに拒否されます。custom_requestはテキストのみを返します。バイナリの本文は拒否され、download_attachmentを案内します。60000 文字を超えるテキスト本文は、truncated: trueと明示されて切り詰められて返されます。get_timelineのカテゴリhomework、assignments、absences、events、newsは、タイムライン通知からデータを取得します。学校から特定の種類のイベントが通知されない場合、これらのカテゴリは空のリストを返すことがあります。get_missing_teachersは上流で実験的とされています(代替授業ページの HTML を解析します)。教師の名前が一致しなくなると、エラーが発生することがあります。- 食事の
rate_mealと注文機能は、学校が一致する識別子を持つメニューを公開していることを前提としています。評価機能を提供していない学校もあります。 get_mealsはまず、生徒ごとの食事注文エンドポイント(注文や評価に必要)を試します。学校でこれが有効になっていない場合は、学校の公開食堂メニューウィジェット(/menu/?wid=menu_CanteenMenu_1)にフォールバックします。5 つの枠(breakfast/snack/lunch/afternoon_snack/dinner)は常に返されます。学校が公開していない枠はNoneになります。
スキル
このパッケージには、1 つのエージェントスキル(school-day-summary)が含まれています。このスキルは、コーディングエージェントが get_day_summary の JSON を、人が読みやすい学校の一日レポート(「子どもたちの昨日はどうだった?」)にまとめる方法を説明します。
プラグインをインストールすると、このスキルもサーバーと一緒にインストールされます。スキルだけをインストールするには:
# already installed with the server:
edupage-mcp-full install-skill
# ...or with nothing but uv:
uvx --from edupage-mcp-full edupage-mcp-full install-skill --agent copilot
対象となる各エージェントについて、1 行が表示されます:
installed -> C:\Users\you\.copilot\skills\school-day-summary\SKILL.md
skipped (identical) -> /home/you/.claude/skills/school-day-summary/SKILL.md
skipped (exists, differs, use --force) -> /home/you/.agents/skills/school-day-summary/SKILL.md
スキルを読み込ませるため、実行後にエージェントを再起動してください。
オプション
| オプション | 効果 |
|---|---|
--agent {opencode,copilot,claude,agents,all} | 指定したエージェントだけにインストールします。フラグを指定しない場合は、すでに存在するすべてのエージェントディレクトリにインストールします。all を指定すると 4 つすべてが対象になり、不足しているディレクトリが作成されます。 |
--print | 解決された SKILL.md のパスを表示して終了します。何も書き込みません。 |
--dry-run | 書き込まれる内容を報告しますが、何も書き込みません。 |
--force | 既存の SKILL.md と内容が異なる場合、上書きします。 |
インストール先
--agent | インストール先 |
|---|---|
opencode | ~/.config/opencode/skills/ |
copilot | ~/.copilot/skills/ |
claude | ~/.claude/skills/ |
agents | ~/.agents/skills/ — ベンダー共通の場所です(Copilot、Codex、Cursor、opencode がすべて使用します)。 |
再実行しても安全です。すでに同一のファイルは skipped (identical) と報告され、内容が異なるファイルは --force を指定しない限りそのまま残るため、ローカルで編集したスキルが知らないうちに上書きされることはありません。
ファイルを自分で配置したい場合は、edupage-mcp-full install-skill --print を実行すると、インストール済みパッケージに含まれる SKILL.md の正確なパスが表示されます。
その他の MCP クライアント(Claude、Cursor、またはスキルシステムのないクライアント)は、get_day_summary を直接呼び出すだけで、構造化された JSON 全体を受け取れます。書式設定はクライアントによって異なります。基本の MCP プロトコルにはスキルの概念がありません(io.modelcontextprotocol/skills 拡張が仕様化されていますが、このサーバーではまだ実装されていません)。そのため、スキルは上記のプラグインとインストーラーを通じて配布されます。すべてのインストール方法については、docs/PLUGINS.md を参照してください。
貢献
貢献者およびメンテナー向けのガイダンスは CONTRIBUTING.md にあります。
- 貢献のワークフローとローカル環境のセットアップ
- アーキテクチャと実装の詳細
- リリースプロセス(PyPI、GitHub Releases、GHCR)
- CI の品質チェックと上流のカバレッジ変動チェック
制限事項
- 非公式であり、設計上、読み取り中心です。 EduPage はエンドポイントをいつでも変更する可能性があり、信頼性は最終的にはこのラッパーではなく
edupage-apiに依存します。 - CAPTCHA の回避には対応していません。 EduPage がログイン時に CAPTCHA を表示した場合は、まずブラウザーからログインし、その結果得られた
PHPSESSIDを使ってlogin method="session"を実行してください。 - 2FA には人間による操作が必要です(デバイスで承認するか、コードを入力してください)。
- 保護者/教師アカウントは上流での検証が部分的なため、保護者向けの一部のメソッドはベストエフォートでの対応となります。
- 認証セッションは MCP サーバープロセスの実行中のみ保持されます。クライアントを再起動すると、再度ログインが必要です。
- 学校をまたいだ生徒の検索には、関連するすべての学校にログインしている必要があります(
EDUPAGE_SUBDOMAINS、login_all、またはloginの繰り返し呼び出しを使用)。学校にログインしていない場合、その学校における生徒の成績は検索できません。
サポート
このプロジェクトを気に入っていただき、支援や機能のリクエストをお寄せいただける場合は、ビールを一杯おごってください。気持ちが落ち着き、アイデアが湧いてきます :-)
ライセンス
MIT © Oliver Hrubý
このプロジェクトは、Ascora(EduPage)または edupage-api の作者とは無関係であり、承認も受けていません。EduPage は、それぞれの所有者の登録商標です。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。
