EduPage Keyring について
EduPage Keyringは、複数のEduPage学校や子どものアカウント情報を読み取るMCPサーバーです。パスワードではなくセッションCookieをmacOS Keychainに保存し、Chromeから学校アカウントにサインインします。
主な機能
- 01時間割、成績、宿題の取得
- 02テスト、欠席、メッセージの確認
- 03食事や学校情報の確認
- 04複数の学校とアカウントへの対応
- 05macOS Keychainへのセッション保存
活用シーン
- 01子どもの時間割と課題の確認
- 02成績と近日中のテストの確認
- 03最近の学校メッセージの要約
- 04欠席状況と食事メニューの把握
MCP 対応
EduPageのアカウント、時間割、成績、宿題、メッセージ、食事などのツールをMCPクライアントに公開します。Claude Desktop拡張機能、またはuvx経由のstdioサーバーとして実行できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
EduPage Keyring MCP
Claude(または任意のMCPクライアント)が、学校の EduPage アカウントから時間割、成績、宿題、テスト、欠席、メッセージ、献立などを、在籍するすべての子どもと学校について読み取れる MCP サーバーです。パスワードを保存することは一切ありません。
学校ごとに一度、ChromeでEduPageのページにサインインします。二要素認証にも対応しています。保存されるのは、その結果得られたセッションCookieのみで、macOSキーチェーンに保管されます。edupage-api を基盤にしています。
質問できること
- 「それぞれの子どもは明日何がある?今週の提出物は?」
- 「Šimonのテストは近いうちにある?範囲は?」
- 「今学期のスロバキア語で、Emaの成績はどう?」
- 「Peterは今日、時間どおりに登校した?」
- 「過去2週間に学校から届いた内容を要約して、対応が必要なものに印を付けて。」
- 「今日の5.Cの授業のうち、代講になっているのはどれ?」
- 「金曜日にEmaが欠席することを、担任の先生に伝えて。」(Claude Desktopでは送信前に確認を求められます)
インストール
Claude Desktop:ワンクリック拡張機能
- 最新リリースから
edupage-keyring-mcp.mcpbをダウンロードします。 - ダブルクリックするか、Claude Desktopの Settings → Extensions にドラッグして、Install を選択します。
- School を入力します。
.edupage.orgより前の名前、または学校のEduPageアドレスを指定します。複数の学校がある場合は、カンマで区切って入力します(first, second)。最初の学校が既定になります。同じ学校に2つのアカウントがある場合は、myschool=teacherと入力します(オプションを参照)。
macOSとGoogle Chromeが必要です。ほかにインストールするものはありません。拡張機能をインストールすると、Claude Desktopが独自のuvをダウンロードし、Pythonと拡張機能の依存関係をセットアップします。拡張機能はほかのローカルMCPサーバーと同様にMac上で動作し、同じキーチェーンのセッションを使用します。その後は質問するに進んでください。
アップデートは手動です。 拡張機能は自動更新されません。新しいバージョンを入手するには、上記のリンクから
edupage-keyring-mcp.mcpbを再度ダウンロードし、古いバージョンに上書きインストールしてください。再起動のたびに更新したい場合は、uvxを使う方法をご利用ください。
任意のクライアント:uvxで実行
1. 必要なものを用意する
macOS、Google Chrome、uvが必要です。
brew install uv # or: curl -LsSf https://astral.sh/uv/install.sh | sh
ほかにインストールするものはありません。uvx がこのサーバーをPyPIからダウンロードし、独立した環境で実行します。
2. クライアントを接続する
デスクトップアプリでは uvx のフルパスが必要です。which uvx で確認してください。通常は /opt/homebrew/bin/uvx(Homebrew)または /Users/YOU/.local/bin/uvx(インストールスクリプト)です。myschool は学校名に置き換えてください。.edupage.org より前の名前、または学校のEduPageアドレス全体を指定します。例:https://myschool.edupage.org。
Claude Desktop: Settings → Local MCP servers → Edit Config(旧バージョンでは Settings → Developer → Edit Config)を開き、次を追加します。
{
"mcpServers": {
"edupage": {
"command": "/opt/homebrew/bin/uvx",
"args": ["edupage-keyring-mcp@latest", "--school", "myschool"]
}
}
}
Claude Desktopを終了し(⌘Q)、再度開きます。
Claude Code:
claude mcp add edupage --scope user -- uvx edupage-keyring-mcp@latest --school myschool
Codex CLI:
codex mcp add edupage -- uvx edupage-keyring-mcp@latest --school myschool
Cursor: 上記のClaude Desktop用JSONを ~/.cursor/mcp.json に追加します。
VS Code: .vscode/mcp.json、または MCP: Open User Configuration を使用します。
{
"servers": {
"edupage": {
"type": "stdio",
"command": "/opt/homebrew/bin/uvx",
"args": ["edupage-keyring-mcp@latest", "--school", "myschool"]
}
}
}
その他のクライアント: uvx edupage-keyring-mcp@latest --school myschool をstdioサーバーとして実行します。
質問する
たとえば「明日の時間割は?」のように、学校についてClaudeに質問してください。初回は、ClaudeがChromeウィンドウで学校のEduPageを開きます(Claude Desktopでは事前に確認を求められます)。いつもの方法でサインインしてください。パスワード、二要素認証、QRコードが使えます。ウィンドウは自動的に閉じ、セッションがmacOSキーチェーンに保存された後、Claudeが回答します。Pythonによるキーチェーンの使用をmacOSから尋ねられたら、Always Allow を選択してください。
クライアントを接続する前にサインインしておきたい場合は、uvx edupage-keyring-mcp login myschool を実行してください(Claude Desktop拡張機能でも使用できます。どちらも同じキーチェーンのセッションを使用します)。
オプション
これらを args リストに追加するか、コマンドラインで --school myschool の後に指定してください。
Claude Desktop 拡張機能では「School」フィールドしかないため、学校名やアカウントラベルをこのフィールドに入力します。
- 複数の学校:
--schoolを繰り返し指定します。例:"--school", "first", "--school", "second"。または、カンマで区切ります。例:"--school", "first,second"。最初の学校がデフォルトになります。保存済みのセッションがない学校ではAUTH_REQUIREDが返されますが、ほかの学校には影響しません。 - 1 つの学校で 2 つのアカウントを使う場合(たとえば、保護者と教師として使う場合):それぞれに独自のラベルを付けます。例:
"--school", "myschool=teacher"。それぞれで一度サインインしてください。ラベルは Keychain のエントリ名にのみ使われます。 - サーバーからサインインウィンドウを開かない場合:
"--no-browser-signin"を指定します。その場合、sign_inはSIGNIN_UNAVAILABLEを返します。ターミナルでloginを使ってサインインしてください(コマンドラインを参照)。 - EduPage ファイルサーバー上の添付ファイル:
get_attachmentがREDIRECT_NOT_ALLOWEDを返す場合は、"--download-host", "cloud-4.edupage.org"を指定して、そのホストを許可します。*.edupage.orgに一致するホストのみ使用できます。
更新
- uvx:
@latestを指定すると、クライアントがサーバーを起動するたびにuvxが PyPI を確認するため、クライアントを次回再起動したときに新しいリリースが適用されます。 - Claude Desktop 拡張機能: 手動でのみ更新できます。新しい
edupage-keyring-mcp.mcpbをダウンロードし、古いものに上書きしてインストールしてください。
変更内容はリリースページで確認できます。
再サインイン
セッションは EduPage の有効期限が切れるまで保持されます。有効期限が切れると、Claude は初回と同じように AUTH_REQUIRED を受け取り、sign_in を呼び出します。すると、お使いの学校の EduPage を開いた Chrome ウィンドウが表示されます。サインイン中、Claude は wait_for_sign_in で待機します。このツールはサインインが完了するとすぐに戻り、Claude は質問への回答を続けます。再起動は不要で、完了したことを Claude に伝える必要もありません。ウィンドウは最大 10 分間待機します。
バージョン 0.2 より前に EDUPAGE_USERNAME を使って設定しましたか?そのときに保存したセッションを引き続き使う場合は設定を残し、もう一度サインインする場合は削除してください。
コマンドライン
edupage-keyring-mcp [serve] --school NAME[=LOGIN] [--school ...] [--download-host HOST] [--no-browser-signin]
edupage-keyring-mcp login NAME [--username LOGIN] [--timeout SECONDS]
edupage-keyring-mcp logout NAME [--username LOGIN]
edupage-keyring-mcp status --school NAME [...]
edupage-keyring-mcp probe --school NAME [...] # every read tool once; statuses and counts only
Claude Desktop 拡張機能を使う場合も含め、各コマンドは uvx edupage-keyring-mcp@latest ... を付けて実行してください。コマンドは同じ Keychain セッションを使用します。logout はローカルのセッションのみを削除し、EduPage からはログアウトしません。probe は問題を報告するときに便利です。出力に学校のデータは含まれません。
機能
36 個のツールがあります。各ツールでは school を省略できます。子どもを指定するツールでは child を指定します。名、フルネーム、学生 ID、または list_children の ref を使えます。名のアクセント記号は省略可能なため、simon で Šimon が見つかります。
アカウントと子ども
| ツール | 戻り値 |
|---|---|
auth_status | 保存済みセッションが有効かどうか、および sign_in で開始したサインインの状況 |
sign_in | セッションがない場合や期限切れの場合に、Chrome で EduPage のサインインページを開きます |
wait_for_sign_in | サインインが完了するまで(呼び出しごとに最大 50 秒)待機し、新しいセッションを報告します |
list_schools | 学校、セッションの状態、役割(保護者、学生、教師)、子どもの人数 |
list_children | 子どもの名前、クラス、学生 ID、ref |
user_id, school_year | アカウント ID と役割、現在の学年度 |
時間割
| ツール | 戻り値 |
|---|---|
get_timetable | 指定日の子どもの授業。代講を反映した時刻、教科、教師、教室、グループ、トピック、キャンセルフラグ |
get_week_timetable | 子どもの月曜日から金曜日までの時間割 |
get_timetable_for | 任意の教師、クラス、教室、または学生の時間割 |
get_periods, get_next_ringing_time | チャイムの時間割、次の授業または休み時間 |
get_timetable_changes | 指定日の学校全体の代講と授業のキャンセル |
get_missing_teachers | 指定日に欠席する教師 |
成績とタイムライン
| ツール | 返される内容 |
|---|---|
get_grades | 教科、タイトル、成績、コメント、配点、得点と割合、クラス平均、教師。現在または過去の学期 |
get_homework | 宿題の全文、教科、作成者、提出期限 |
get_assignments | 宿題、テスト、試験 |
get_upcoming_events | イベントとして告知されたテスト(トピックと日付)、遠足、会議、休日 |
get_absences | 欠席、欠席理由、登校時と下校時の記録 |
get_news | 学校のお知らせ |
get_notifications | タイムラインのすべての項目。EduPage の種類(znamka、homework、...)で絞り込むこともできます |
タイムラインツールは最大90日前までさかのぼって取得します(デフォルトは30日です)。各項目には
for_children があり、名前またはクラスによって、どのお子さま宛てかが示されます。
child を設定すると、きょうだい宛ての項目は除外されます。
メッセージ
| ツール | 返される内容 |
|---|---|
list_messages | 送信者、受信者、for_children、抜粋、添付ファイルの数を含むメッセージ |
get_message | メッセージの全文と添付ファイル。開封確認は送信されません |
get_attachment | メッセージに添付された最大3 MBのPDF、PNG、JPEG、GIFファイルをbase64形式で取得します |
人物と学校のデータ
get_students、get_all_students、find_student、get_teachers(send_message 用のID)、get_classes、get_classrooms、get_subjects。
食事
get_meals は、ある日の子どもの献立(料理、アレルゲン、ポーションの重量)、配膳時間、現在の注文、選択可能な献立を返します。学校に食堂モジュールがない場合は MEALS_NOT_AVAILABLE を返します。edupage-api 0.13.3 は現在のページ形式を解析できないため、サーバーは学校の /menu/ ページを直接読み取ります。
choose_meal、sign_off_meal、rate_meal は引き続き edupage-api を経由します。現在のページを読み取るリリースが公開されるまでは、これらのツールは何も送信せず、簡単な説明とともに MEAL_ACTIONS_UNAVAILABLE を返します。注文、キャンセル、評価は EduPage 自体で行ってください。
アクション
| ツール | 実行内容 | チェック項目 |
|---|---|---|
send_message | あなたの名前で EduPage メッセージを送信します | 受信者は実在する教師、生徒、または保護者のIDである必要があります。文字数は1~5,000文字です |
choose_meal | 子どものメニューA~Hを注文します | 食事の種類、30日以内の日付、選択可能なメニューであること |
sign_off_meal | 子どもの食事をキャンセルします | 食事の種類、日付 |
rate_meal | 提供された昼食を1~5で評価します | 昼食のみ、過去14日以内 |
これらは destructiveHint としてマークされているため、Claude Desktop などのクライアントでは、呼び出しごとに確認が求められます。
セキュリティモデル
- パスワードはどこにも保存しません。 パスワードを入力するのは、使い捨ての Chrome ウィンドウに表示される EduPage のページだけです。キーチェーン項目には、EduPage のセッション Cookie、アカウント ID、EduPage が返すログイン名が保存されます。
ユーザー名も必要ありません。任意の
EDUPAGE_USERNAMEラベルを除き、EDUPAGE_*環境変数が設定されていると、サーバーは起動を拒否します。 - サーバーからのサインインはローカルで行われます。
sign_inが受け取るのは設定済みの学校だけで、別プロセスで同じloginコマンドを実行します。保存済みセッションがないか期限切れの場合に限りウィンドウを開き、学校ごとに同時に開くのは最大 1 つです。返すのはそのコマンドのステータスコードのみです。ウィンドウには EduPage の実際のログインページが表示されるため、悪意のあるモデルにできるのはウィンドウを開くことまでです。--no-browser-signinで無効にできます。Claude Desktop 拡張機能にはこの設定がないため、必要な場合は uvx インストールを使用してください。 - キーチェーンのみを使用します。 macOS キーチェーンのバックエンド以外ではサーバーは起動を拒否するため、セッションがプレーンテキストのキーリングファイルに保存されることはありません。
- ネットワークを制限します。
edupage-apiには、設定済みの学校ホストへの HTTPS 通信のみを許可し、すべてのリダイレクトを確認し、すべてのレスポンスを 8 MB(添付ファイルは 3 MB)に制限し、プロキシと.netrcの設定を無視する、置き換え済みのセッションを渡します。キーチェーンから読み込んだ Cookie も、最初にそのホスト向けかどうか検証します。 - 入力を限定しています。 URL、Cookie、セッション ID、ヘッダー、パスワードを受け取るツールはありません。日付は ISO 形式で、期間も制限されています。
schoolで選べるのは設定済みの学校だけです。添付ファイルはファイル ID で取得し、モデルに URL が渡ることはありません。 - 子どもごとの呼び出しで、対象の子どもを選択します。 EduPage は、保護者のセッションで最後に選択した子どもを記憶しており、成績やメニューなど一部のページにはその子どもが表示されます。そのため、子どもを対象とする呼び出しでは、読み取りの直前に学校ごとのロックの下で対象の子どもを選択します。選択に失敗した場合はセッションを破棄します。保護者向けのページ(タイムライン、メッセージ、送信)には、この選択の影響はありません。子どもを選択した後にメッセージを送信しても、送信元は保護者のままです。
- エラーは詳細を明かしません。 失敗時には固定コード(および例外クラス名まで)だけを返し、サーバーのページやメッセージは返しません。
- 信頼できないコンテンツ。 学校からのテキストにはすべて
untrusted_contentのラベルを付けます。 - EduPage ライブラリのバージョンを固定しています。
edupage-apiはレビュー済みの特定バージョンに固定し、その他の依存関係にはメジャーバージョンの範囲内で互換性のある更新を適用します。
読み取り操作は、ブラウザーでページを開く場合と同様に EduPage から確認できることがあります。
脆弱性の報告については、SECURITY.md をご覧ください。
貢献
開発環境のセットアップ、テスト、リリースについては、CONTRIBUTING.md をご覧ください。
クレジット
EduPage アカウント向けのコミュニティ製 Python ライブラリである edupage-api を基盤としており、ライセンスは GPL-3.0 です。EduPage へのリクエストと解析はこのライブラリが行い、このプロジェクトはキーチェーンセッション、ブラウザーサインイン、ネットワーク制限、MCP ツールを追加しています。バージョンを厳密に固定しているため、新しい edupage-api のリリースがユーザーに届くのは、このプロジェクトがリリースされた後だけです。
免責事項
これは独立したオープンソースプロジェクトです。EduPage を提供する aSc Applied Software Consultants, s.r.o. とは提携しておらず、同社からの承認やサポートも受けていません。EduPage という名称は、このソフトウェアが対応するサービスを示す目的でのみ使用しています。EduPage へのアクセスはすべて、独立したコミュニティライブラリである edupage-api を経由します。このライブラリも本プロジェクトの一部ではありません。EduPage の非公開ウェブエンドポイントに依存しているため、予告なく変更されることがあります。変更があった場合、edupage-api、続いて本プロジェクトが更新されるまで、このサーバーは動作しなくなる可能性があります。ご自身の責任でご利用ください。
ライセンス
GPL-3.0-or-later。Copyright © 2026 Stefan Backor。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。