mcpField
E
ENT ONE (Edifice)

ENT ONE (Edifice)

本地服务
github.com科研与教育11 周前更新

关于 ENT ONE (Edifice)

ENT ONE(Edifice)的非官方 MCP 服务,让家长通过兼容 MCP 的助手读写学校工作空间内容。它涵盖消息、作业、通知和文件等,并以 Rust 实现且不在磁盘存储数据。

主要功能

  1. 01读取和发送教师消息
  2. 02查看并签署联系簿内容
  3. 03查看作业并标记完成状态
  4. 04浏览学校新闻、博客和日历
  5. 05上传与下载文档及文件
  6. 06以 stdio 或 HTTP 提供服务

适用场景

  1. 01查看未读教师消息并起草回复
  2. 02检查并签署联系簿通知
  3. 03查看孩子的作业并标记已完成
  4. 04向教师收件箱上传证明文件

MCP 相关

作为 MCP 服务,通过 48 个工具向客户端提供 ENT ONE 的读取与写入能力,涵盖消息、作业、新闻、日历、文件等。支持 stdio 和 Streamable HTTP 传输。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"edouard-claude-ent1": {
"command": "docker",
"args": [
"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.1"
],
"env": {
"ENT1_IDENTIFIANT": "<ENT1_IDENTIFIANT>",
"ENT1_MOT_DE_PASSE": "<ENT1_MOT_DE_PASSE>",
"ENT1_URL": "<ENT1_URL>",
"ENT1_FUSEAU": "<ENT1_FUSEAU>"
}
}
}
}
启动命令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.1
需要配置的环境变量
ENT1_IDENTIFIANTENT login (same as on the ENT sign-in page)
ENT1_MOT_DE_PASSE密钥ENT password
ENT1_URLENT address
ENT1_FUSEAUTime zone of returned dates

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
ocighcr.io/edouard-claude/ent1-mcp:0.1.1

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

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✅链接
Wikiwiki_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_URLhttps://ent1d.ac-reunion.fr您的 ENT 地址
ENT1_FUSEAUIndian/Reunion返回日期所用的时区
ENT1_TRANSPORTstdiostdio(本地客户端)或 http(远程服务)
ENT1_ECOUTE127.0.0.1:8080HTTP 模式下的监听地址
ENT1_MCP_JETONHTTP 模式下必填HTTP 模式的访问令牌,至少 32 个字符
ENT1_HOTES本地回环地址HTTP 模式下允许的公共主机名,以逗号分隔
RUST_LOGent1_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
添加工具
  1. 在 ENT 的 Web 应用中找到网络调用(浏览器开发者工具的“网络”标签页)。
  2. 在对应的 src/outils/<application>.rs 模块中添加方法,使用 #[tool(...)]、清晰易懂的法语描述供助手使用,并添加适当的注解(read_only_hint、destructive_hint……)。
  3. 使用 ent::chemin(&[...]) 构造路径,该函数会拒绝不安全的标识符。
  4. 输出为法语编写的 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”以及各学区的名称归其各自所有者所有。本项目与其无关联。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。