关于 ENT ONE (Edifice)
ENT ONE(Edifice)的非官方 MCP 服务,让家长通过兼容 MCP 的助手读写学校工作空间内容。它涵盖消息、作业、通知和文件等,并以 Rust 实现且不在磁盘存储数据。
主要功能
- 01读取和发送教师消息
- 02查看并签署联系簿内容
- 03查看作业并标记完成状态
- 04浏览学校新闻、博客和日历
- 05上传与下载文档及文件
- 06以 stdio 或 HTTP 提供服务
适用场景
- 01查看未读教师消息并起草回复
- 02检查并签署联系簿通知
- 03查看孩子的作业并标记已完成
- 04向教师收件箱上传证明文件
MCP 相关
作为 MCP 服务,通过 48 个工具向客户端提供 ENT ONE 的读取与写入能力,涵盖消息、作业、新闻、日历、文件等。支持 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 是一个适用于 ENT ONE 的 MCP(Model Context Protocol) 服务。ENT ONE 是基于 Edifice 平台(前身为 Open Digital Education)构建的学校数字工作空间。它允许 Claude、ChatGPT 或任何其他兼容 MCP 的助手代您在 ENT 中读取和写入内容:与教师通信、联系簿、作业本、学校新闻、班级博客、日历、储物柜、文档、表单……
它使用 Rust 编写,无需依赖浏览器,可使用您的常用凭据登录,并且不会存储任何内容。
重要
这是一个非官方社区项目。它既非由 Edifice、法国国民教育部或任何学区开发,也未获得他们的支持或认可。它使用的是 ENT 网页应用自身调用的内部 API,该 API 可能会在不另行通知的情况下发生变化。
目录
您可以提出哪些请求
“这周 ENT 上发生了什么?”
“联系簿里有没有我还没签字的通知?帮我签了。”
“Léa 周四有哪些作业?把她已经做完的勾选掉。”
“给 CM1 的老师写封信,告诉她 Léa 周五上午会缺席(要去看语言治疗师)。发送前先给我看看。”
“总结学校最近的三条新闻,并把重要日期添加到我的列表里。”
“把保险证明放到老师的储物柜里。”
助手会自行依次调用各项工具:在名录中查找老师,起草消息并提交给您,然后发送。
功能
48 个工具,按 ENT 应用分组。读取工具标注为 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 格式传输,双向单个文件最大 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 登录名(例如 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 拒绝凭据,服务将停止所有尝试,直到重新启动,以免导致您的账户被锁定。
- 重新连接会串行执行:十个请求发现会话已过期时,只会触发一次连接。
- 助手提供的每个标识符在放入 URL 前都会经过验证:无法将调用转向 ENT 的其他路由。
- 每次写入都会携带 ENT 的 anti-CSRF 令牌(
X-XSRF-TOKEN),与 Web 应用相同。 - 在 HTTP 模式下:必须提供令牌,并以恒定时间进行比较;防止 DNS rebinding(允许的主机列表);整个代码中禁止使用
unsafe。
您需要了解的事项
- 助手读取的内容(消息、单词、儿童和教师的姓名)会发送给助手供应商(Anthropic、OpenAI……)。请阅读其隐私政策,并尽可能停用将对话用于训练。
- 助手会代表您行事。请要求它发送消息前始终先给您查看;服务端指令会提醒它这一点,而且大多数客户端会在每次调用写入工具前要求确认。
- 切勿在没有 HTTPS 和令牌的情况下公开 HTTP 模式。
发现漏洞?请私下报告(参见 SECURITY.md),不要在公开 issue 中报告。
其他 Edifice ENT
ENT ONE 是开源平台 Edifice 的一个变体,该平台也以其他名称使用(NEO、其他学区的 ONE、地方政府的 ENT……)。由于使用的路由属于公共基础层,ent1-mcp 应该也能在其他地方使用,只需更改 ENT1_URL。目前仅测试过留尼汪岛的实例(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 响应或被重定向到登录页面时,会触发重新连接,并对请求进行一次重试。 - 每个进程一个账户: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 要求执行某项操作(接受新的 CGU、更改密码),服务端会提示;请在浏览器中完成一次。
- 表单:可读取问题并获取答题链接;答案需在浏览器中填写。
- 日历和 wiki:只读。在作业本中,只有“已完成”复选框可以修改(与 ENT 中相同)。
- 未公开的 API:ENT 更新可能导致某个工具无法使用。验证脚本可帮助快速发现此类问题。
路线图
- OAuth 2.1,用于 claude.ai 和 ChatGPT:集成授权服务端(动态客户端注册、PKCE)、ENT 登录页面、每位家长一个 ENT 会话。
- 通过助手回答表单。
- 在个人日历中创建事件。
- MCP 征询:每次发送前进行原生确认。
- 已发布 Docker 镜像(GHCR),并已收录至 MCP 官方注册表。
- 预编译二进制文件(macOS、Linux、Windows)。
- 在模拟 ENT 服务端上进行集成测试。
贡献
欢迎用法语贡献:提交 issue、分享其他学区的反馈、添加新工具、修正文档。请参阅 CONTRIBUTING.md。
许可证
可任选以下双重许可证之一:MIT 或 Apache 2.0。
“ONE”、“Edifice”以及各学区的名称归其各自所有者所有。本项目与其无关联。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。