ENT ONE (Edifice) について
Edifice上の学校ワークスペースENT ONEを保護者が利用するための非公式MCPサーバーです。対応アシスタントから連絡、宿題、ニュース、ファイルなどを読み書きでき、Rust製でデータをディスクに保存しません。
主な機能
- 01教師とのメッセージの閲覧と送信
- 02連絡帳の内容確認と署名
- 03宿題の確認と完了状態の変更
- 04学校ニュース、ブログ、カレンダーの閲覧
- 05書類やファイルのアップロードとダウンロード
- 06stdioまたはHTTPでの提供
活用シーン
- 01未読の教師メッセージを確認して返信を下書き
- 02連絡帳のお知らせを確認して署名
- 03子どもの宿題を確認して完了にする
- 04教師の受信箱に書類をアップロード
MCP 対応
MCPサーバーとして、メッセージ、宿題、ニュース、カレンダー、ファイルなどENT ONEの読み書きを行う48個のツールを公開します。stdioとStreamable HTTPに対応しています。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
docker run -i --rm -e ENT1_IDENTIFIANT -e ENT1_MOT_DE_PASSE -e ENT1_URL -e ENT1_FUSEAU ghcr.io/edouard-claude/ent1-mcp:0.1.1ENT1_IDENTIFIANTENT login (same as on the ENT sign-in page)ENT1_MOT_DE_PASSEシークレットENT passwordENT1_URLENT addressENT1_FUSEAUTime zone of returned datesローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ghcr.io/edouard-claude/ent1-mcp:0.1.1stdioツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
ent1-mcp
AI アシスタントから、お子さまのENTにアクセスできます。
ent1-mcpは、Edifice(旧 Open Digital Education)プラットフォーム上に構築された学校向けデジタルワークスペース、ENT ONE用の M C P(Model Context Protocol)サーバーです。Claude、ChatGPT、その他のMCP対応アシスタントを使って、保護者に代わりENTの情報を読み書きできます。教師とのメッセージ、連絡帳、課題、学校のお知らせ、クラスブログ、カレンダー、ロッカー、書類、フォームなどに対応しています。
Rustで記述されており、ブラウザーへの依存はありません。普段お使いの認証情報で接続し、情報は一切保存しません。
重要
非公式のコミュニティプロジェクトです。Edifice、フランス国民教育省、各地域の教育機関が開発、支援、承認しているものではありません。ENTのウェブアプリ自体が呼び出す内部APIを使用しているため、予告なく変更される可能性があります。
目次
依頼できること
「今週、ENTでは何がありましたか?」
「まだ署名していない連絡帳のお知らせはありますか?署名してください。」
「木曜日のLéaの宿題は何ですか?すでに終わったものにチェックを付けてください。」
「CM1の担任に、金曜日の午前中はLéaが欠席すること(言語聴覚士の診察)を伝えてください。送信前にメッセージを見せてください。」
「学校の最新のお知らせを3件要約して、重要な日付を私のリストに追加してください。」
「保険証明書を先生のロッカーに入れてください。」
アシスタントはツールを自動的に連携して使います。連絡先一覧から先生を探し、メッセージを作成して提示したうえで、送信します。
機能
ENT のアプリケーションごとに分類された48個のツールがあります。読み取りツールには readOnlyHint、削除ツールには destructiveHint が付与されています。MCP クライアントはこれらを使って、確認を求めるかどうかを判断します。
| アプリケーション | ツール | 読み取り | 書き込み |
|---|---|---|---|
| アカウント | profil, deconnexion | ✅ | |
| 最新情報 | fil_nouveautes | ✅ | |
| メッセージ | messagerie_lister, messagerie_lire, messagerie_non_lus, messagerie_envoyer, messagerie_enregistrer_brouillon, messagerie_joindre_fichier, messagerie_telecharger_piece_jointe, messagerie_marquer, messagerie_deplacer, messagerie_supprimer, messagerie_restaurer, messagerie_rappeler, messagerie_dossiers, messagerie_creer_dossier | ✅ | ✅ |
| 名簿 | annuaire_rechercher, annuaire_fiche | ✅ | |
| 連絡帳 | carnet_lister, carnet_signer, carnet_repondre | ✅ | ✅ |
| 課題ノート | cahier_lister, cahier_lire, cahier_marquer(課題の完了/未完了) | ✅ | ✅ |
| ニュース | actualites_lister, actualites_fils, actualites_lire, actualites_commenter | ✅ | ✅ |
| ブログ | blog_lister, blog_billets, blog_commentaires, blog_commenter, blog_supprimer_commentaire | ✅ | ✅ |
| カレンダー | calendrier_lister, calendrier_evenements | ✅ | |
| ドキュメントスペース | documents_lister, documents_telecharger, documents_deposer | ✅ | ✅ |
| ロッカー | casier_lister, casier_destinataires, casier_deposer, casier_telecharger, casier_supprimer | ✅ | ✅ |
| フォーム | formulaires_lister, formulaires_lire | ✅ | リンク |
| Wiki | wiki_lister, wiki_lire_page | ✅ |
参考情報:
- すべてプレーンテキストです。 ENT の HTML は読み取り時にテキストに変換され、書き込み時には入力したテキストがエスケープされて段落に変換されます。HTML インジェクションは発生しません。
- 構造化されたレスポンスです。 各ツールはテキストに加え、出力スキーマを備えた型付き JSON(
structuredContent)を返します。 - ファイルは Base64 形式で、送受信ともに1ファイルあたり最大10 MBです。
- 日付はお使いのタイムゾーン(デフォルトは
Indian/Reunion)で表示されます。 - メッセージは60分間取り消し可能(
messagerie_rappeler)で、ENT と同様です。
インストール
Cargo を使う場合
Rust 1.88 以降が必要です。
cargo install --git https://github.com/edouard-claude/ent1-mcp
バイナリ ent1-mcp は ~/.cargo/bin にインストールされます。
ソースから
git clone https://github.com/edouard-claude/ent1-mcp
cd ent1-mcp
cargo build --release
# binaire : target/release/ent1-mcp
Docker を使う場合
イメージはリリースごとに GitHub Container Registry に公開されます。デフォルトではバイナリと同様に stdio で通信します。
docker run --rm -i -e ENT1_IDENTIFIANT -e ENT1_MOT_DE_PASSE ghcr.io/edouard-claude/ent1-mcp
HTTP モードの場合:
docker run --rm -p 8080:8080 \
-e ENT1_TRANSPORT=http -e ENT1_ECOUTE=0.0.0.0:8080 \
-e ENT1_IDENTIFIANT -e ENT1_MOT_DE_PASSE -e ENT1_MCP_JETON \
ghcr.io/edouard-claude/ent1-mcp
公式 MCP レジストリから
サーバーは MCP レジストリに io.github.edouard-claude/ent1-mcp という名前で登録されています。レジストリを利用するクライアントでは、設定が必要な変数とともに直接表示されます。
設定
すべて環境変数で設定します。シークレットはコマンドライン引数として渡せません。プロセス一覧に表示されてしまうためです。
| 変数 | 必須 | デフォルト | 役割 |
|---|---|---|---|
ENT1_IDENTIFIANT | ✅* | ENT のログイン ID(例:prenom.nom) | |
ENT1_MOT_DE_PASSE | ✅* | ENT のパスワード | |
ENT1_URL | https://ent1d.ac-reunion.fr | お使いの ENT のアドレス | |
ENT1_FUSEAU | Indian/Reunion | 返される日付のタイムゾーン | |
ENT1_TRANSPORT | stdio | stdio(ローカルクライアント)または http(リモートサーバー) | |
ENT1_ECOUTE | 127.0.0.1:8080 | HTTP モードでの待ち受けアドレス | |
ENT1_MCP_JETON | HTTP モードでは必須 | HTTP モードのアクセストークン。32 文字以上 | |
ENT1_HOTES | ループバック | HTTP で許可する公開ホスト名。カンマ区切り | |
RUST_LOG | ent1_mcp=info | ログレベル(標準エラー出力に書き込まれます) |
.env.exemple にテンプレートがあります。
起動時に、サーバーは ENT にログインします。認証情報に誤りがある場合は、最初のツール呼び出し時ではなく、すぐに通知されます。
* どちらも設定されていなくてもサーバーは起動します(調査や参照に便利です)。ツール一覧を表示し、各ツールはアカウントが設定されていないことを応答します。
アシスタントとの接続
Claude Desktop
設定 → 開発者 → 設定を編集 を開き、次の内容を追加します。
{
"mcpServers": {
"ent": {
"command": "/Users/vous/.cargo/bin/ent1-mcp",
"env": {
"ENT1_IDENTIFIANT": "prenom.nom",
"ENT1_MOT_DE_PASSE": "votre-mot-de-passe"
}
}
}
}
Claude Desktop を再起動すると、ENT のツールがコネクターのメニューに表示されます。
Claude Code
claude mcp add ent --env ENT1_IDENTIFIANT=prenom.nom --env ENT1_MOT_DE_PASSE=votre-mot-de-passe -- ent1-mcp
HTTP モード(リモートアシスタント、API)
お使いのマシン上で動作しないアシスタントの場合は、HTTPS リバースプロキシの背後でサーバーを Streamable HTTP モードで起動します。
export ENT1_TRANSPORT=http
export ENT1_ECOUTE=0.0.0.0:8080
export ENT1_HOTES=ent-mcp.mondomaine.fr
export ENT1_MCP_JETON="$(openssl rand -hex 32)"
ent1-mcp
エンドポイントは https://ent-mcp.mondomaine.fr/mcp で、Authorization: Bearer <jeton> ヘッダーによって保護されています。ヘルスチェックは /sante で応答します。
Claude API の MCP コネクターを使用する例:
"mcp_servers": [{
"type": "url",
"url": "https://ent-mcp.mondomaine.fr/mcp",
"name": "ent",
"authorization_token": "<jeton>"
}]
claude.ai と ChatGPT(ウェブおよびモバイル)
claude.ai と ChatGPT のカスタムコネクターは固定トークンを受け付けず、OAuth 2.1 が必要です。そのため、現在の HTTP モードでは利用できません。これはプロジェクトの次のステップです(ロードマップを参照)。親がそれぞれの ENT 認証情報を入力するログインページを用意し、アシスタントに認証情報を渡さずに済むようにします。
セキュリティとプライバシー
ENTには子どものデータが含まれています。このプロジェクトは、その前提に立っています。
サーバーの動作
- 何も保存しません。メッセージ、ドキュメント、識別子をディスクに保存することはありません。ENTのセッション(Cookie)はメモリ上に保持され、停止すると消去されます。
- パスワードは環境変数からのみ読み込まれ、
secrecy型でラップされたままです。ログ、エラーメッセージ、Debugには表示されません。 - ENTが認証情報を拒否した場合、アカウントがロックされないよう、サーバーは再起動するまですべての試行を停止します。
- 再接続は直列化されます。セッションの有効期限切れを検知したリクエストが10件あっても、接続は1回だけ実行されます。
- アシスタントから渡された識別子は、URLに含める前に検証されるため、ENTの別のルートに呼び出しを転送することはできません。
- すべての書き込み処理には、Webアプリケーションと同じようにENTのCSRF対策トークン(
X-XSRF-TOKEN)が付与されます。 - HTTPでは、必須トークンを一定時間で比較し、DNSリバインディング対策(許可ホストのリスト)を適用します。また、コード全体で
unsafeは禁止されています。
知っておくべきこと
- アシスタントが読み取った内容(メッセージ、単語、子どもや教員の名前)は、アシスタントのプロバイダー(Anthropic、OpenAIなど)に送信されます。各プロバイダーのプライバシーポリシーを確認し、可能であれば会話を学習に使用しないよう設定してください。
- アシスタントはあなたに代わって操作します。メッセージを送信する前に必ず表示するよう指示してください。サーバーの指示でもそのように促しており、ほとんどのクライアントでは書き込みツールを使う前に確認が求められます。
- HTTPモードをHTTPSもトークンもなしで公開しないでください。
脆弱性を見つけた場合は、公開Issueではなく、非公開でご報告ください(SECURITY.mdを参照)。
その他のEdifice ENT
ENT ONEは、オープンソースプラットフォームEdificeの派生版であり、別の名称(NEO、他のアカデミーのONE、自治体のENTなど)でも利用されています。使用されているルートは共通基盤のものなので、ENT1_URLを変更すれば、ent1-mcpは他でも動作するはずです。テスト済みなのはレユニオンのインスタンス(ent1d.ac-reunion.fr)のみです。フィードバックをお待ちしています。
ÉduConnectによるログイン、または二要素認証を必須とするENTには、現時点では対応していません(既知の制限を参照)。
アーキテクチャ
Assistant (Claude, ChatGPT…)
│ MCP : stdio ou Streamable HTTP (+ jeton)
▼
┌──────────────────────────────┐
│ ent1-mcp │
│ outils/ 48 outils MCP │ un module par application de l'ENT
│ texte.rs HTML ⇄ texte │
│ ent/ client HTTP │ session, reconnexion, XSRF, identifiants typés
└──────────────┬───────────────┘
│ HTTPS, cookie de session
▼
ENT ONE / Edifice
(/conversation, /schoolbook, /homeworks, /actualites, /blog, /rack…)
- 接続:
POST /auth/loginでログインフォームを送信し、その後セッションCookieを取得します。401応答、またはログインページへのリダイレクトを検知すると再接続し、リクエストを1回だけ再送します。 - プロセスごとに1アカウント:ENTクライアントは、プロセス内のすべてのMCPセッションで共有されます。複数の家族にサービスを提供するには、アカウントごとにプロセスを起動してください(またはOAuthモードの実装をお待ちください)。
- スタック:
rmcp(公式MCP SDK)、reqwest+ rustls、axum、tokio、schemars、html2text、jiff。
開発
cargo build
cargo test
cargo clippy --all-targets -- -D warnings # lints pedantic activés dans Cargo.toml
cargo fmt --check
実際のENTに対して検証する
scripts/verifier.pyスクリプトはサーバーを起動し、すべての読み取りツールを呼び出して、内容を表示せずに概要(返された項目数、エラー)を表示します。ENTには何も書き込みません。
cargo build --release
export ENT1_IDENTIFIANT=prenom.nom
read -rs ENT1_MOT_DE_PASSE && export ENT1_MOT_DE_PASSE
python3 scripts/verifier.py
MCPインスペクターで探索する
npx @modelcontextprotocol/inspector target/release/ent1-mcp
ツールを追加する
- ENTのWebアプリケーションでネットワークリクエストを特定します(ブラウザーの開発者ツールの「ネットワーク」タブを使用)。
- 対応する
src/outils/<application>.rsモジュールに#[tool(...)]を付けてメソッドを追加し、アシスタント向けの明確なフランス語の説明と、適切な注釈(read_only_hint、destructive_hintなど)を設定します。 - 危険な識別子を拒否する
ent::chemin(&[...])を使ってパスを構築します。 - 出力はフランス語の
Serialize + JsonSchema構造体にします。
既知の制限事項
- ÉduConnect、FranceConnect、二要素認証:対応しているのは、ENTのユーザー名とパスワードによるログインのみです。
- 初回ログイン:新しい利用規約への同意やパスワードの変更など、ENTで操作が必要な場合はサーバーが通知します。ブラウザーで一度操作してください。
- フォーム:質問の読み取りと回答ページへのリンクに対応しています。回答の入力はブラウザーで行います。
- カレンダーとWiki:読み取り専用です。連絡帳では「完了」のチェックボックスのみ変更できます(ENTと同様です)。
- 未文書化のAPI:ENTの更新によってツールが動作しなくなる場合があります。検証スクリプトを使えば、すぐに検出できます。
ロードマップ
- claude.aiとChatGPT向けのOAuth 2.1:認可サーバーの組み込み(クライアントの動的登録、PKCE)、ENTログインページ、保護者ごとに1つのENTセッション。
- アシスタントからのフォーム回答。
- 個人カレンダーへのイベント作成。
- MCPエリシテーション:送信前のネイティブな確認。
- Dockerイメージの公開(GHCR)と公式MCPレジストリへの登録。
- コンパイル済みバイナリ(macOS、Linux、Windows)。
- 模擬ENTサーバーでの統合テスト。
貢献
フランス語での貢献を歓迎します。issue、他の学区からのフィードバック、新しいツール、ドキュメントの修正などをお寄せください。CONTRIBUTING.mdをご覧ください。
ライセンス
次のいずれかを選べるデュアルライセンスです:MITまたはApache 2.0。
「ONE」、「Edifice」および学区名は、それぞれの所有者に帰属します。本プロジェクトはそれらと提携していません。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。