mcpField
E
EduPage Keyring

EduPage Keyring

本地服务
github.com/stefanbackor科研与教育03 天前更新

关于 EduPage Keyring

EduPage Keyring 是一个 MCP 服务,可读取多个 EduPage 学校及儿童的账户信息。它将会话 Cookie 保存在 macOS Keychain,而不保存密码,并通过 Chrome 登录学校账户。

主要功能

  1. 01读取课表、成绩和作业
  2. 02查看考试、缺勤和消息
  3. 03查询餐食和学校信息
  4. 04支持多个学校和账户
  5. 05在 macOS Keychain 保存会话

适用场景

  1. 01查看孩子的课表和待完成作业
  2. 02检查成绩和即将到来的考试
  3. 03汇总近期学校消息
  4. 04跟踪缺勤情况和餐食菜单

MCP 相关

该服务向 MCP 客户端开放 EduPage 账户、课表、成绩、作业、消息、餐食等相关工具。可作为 Claude Desktop 扩展运行,也可通过 uvx 启动为 stdio 服务。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"stefanbackor-edupage-keyring": {
"command": "uvx",
"args": [
"edupage-keyring-mcp"
],
"env": {
"EDUPAGE_USERNAME": "<EDUPAGE_USERNAME>"
}
}
}
}
启动命令uvx edupage-keyring-mcp
需要配置的环境变量
EDUPAGE_USERNAMEOptional. Only to keep two EduPage accounts at the same school apart. The password is never configured.

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

安装包
pypiedupage-keyring-mcp0.6.0

工具

还没有获取到工具列表

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

详细介绍

EduPage Keyring MCP

一个 MCP 服务,让 Claude(或任何 MCP 客户端)读取你的 EduPage 学校账户:课表、 成绩、作业、考试、缺勤、消息、菜单等,适用于你所在的每所学校和每个孩子, 且绝不会存储你的密码。

你只需在 Chrome 中为每所学校登录一次,使用 EduPage 自带的页面,也包括双重身份验证。 仅会将生成的会话 Cookie 保存到 macOS 钥匙串。基于 edupage-api 构建。

你可以询问什么

  • “每个孩子明天有什么安排?这周有什么作业要交?”
  • “Šimon 最近有考试吗?考哪些主题?”
  • “Ema 这学期斯洛伐克语成绩怎么样?”
  • “Peter 今天准时到学校了吗?”
  • “总结学校过去两周发来的消息,并标出我必须处理的事项。”
  • “今天 5.C 班有哪些课程被代课了?”
  • “告诉班主任 Ema 周五会缺席。”(Claude Desktop 会在发送前询问)

安装

Claude Desktop:一键安装扩展
  1. 从最新版本下载 edupage-keyring-mcp.mcpb。
  2. 双击该文件(或将其拖到 Claude Desktop 中的 设置 → 扩展),然后选择 安装。
  3. 输入你的 学校:.edupage.org 前面的名称,或学校的 EduPage 地址。多所学校:用逗号分隔 (first, second);第一所为默认学校。同一所学校有两个账户: 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: 打开 设置 → 本地 MCP 服务 → 编辑配置(旧版本:设置 → 开发者 → 编辑配置),然后添加:

{
  "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:打开用户配置:

{
  "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 会给出回答。如果 macOS 询问是否允许 Python 使用钥匙串,请选择 始终允许。

想在连接客户端前先登录?运行 uvx edupage-keyring-mcp login myschool(Claude Desktop 扩展也适用:两者使用相同的钥匙串会话)。

选项

将这些选项添加到 args 列表中(或在命令行的 --school myschool 后面添加)。 Claude Desktop 扩展只有 School 字段,因此要在该字段中填写多个学校和账户标签。

  • **多个学校:**重复使用 --school:"--school", "first", "--school", "second", 或用逗号分隔:"--school", "first,second"。第一个是默认学校。没有已保存会话的学校会返回 AUTH_REQUIRED,且不会影响其他学校。
  • 同一所学校的两个账户(例如,分别以家长和教师身份登录):为每个账户指定 各自的标签,例如 "--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

运行每条命令时都使用 uvx edupage-keyring-mcp@latest ...,即使你使用的是 Claude Desktop 扩展也一样:这些命令会使用同一组 Keychain 会话。 logout 只会移除本地会话;不会退出 EduPage。报告问题时,probe 很有用:其输出不包含学校数据。

功能

共 36 个工具。每个工具都接受可选的 school 参数。面向儿童的工具接受 child 参数:名字(可省略重音符号,因此 simon 可以匹配 Šimon)、全名、学生 ID,或 list_children 返回的 ref。

账户和儿童
工具返回内容
auth_status已保存的会话是否有效,以及通过 sign_in 发起的登录进展如何
sign_in会话缺失或过期时,在 Chrome 中打开 EduPage 的登录页面
wait_for_sign_in等待登录完成(每次调用最多 50 s),然后返回新会话状态
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消息中附带的 PDF、PNG、JPEG 或 GIF 文件,最大 3 MB,以 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 命令。只有在已保存的会话缺失或过期时才会打开窗口;每所学校同时最多打开一个窗口,并且只返回该命令的状态码。窗口显示 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-api 构建。这是一个用于 EduPage 账号的社区 Python 库,采用 GPL-3.0 许可证。它负责发送 EduPage 请求并解析数据;本项目则添加了钥匙串会话、浏览器登录、网络限制和 MCP 工具。该库固定为确切版本,因此只有发布本项目的新版本,新的 edupage-api 版本才会提供给用户。

免责声明

这是一个独立的开源项目,与制作 EduPage 的 aSc Applied Software Consultants, s.r.o. 公司没有关联,也未获其认可或支持。使用 EduPage 名称仅用于说明本软件适用的服务。所有 EduPage 访问都通过 edupage-api 进行;这是一个独立的社区库,同样不属于本项目。它依赖 EduPage 未公开文档的 Web 端点,这些端点可能在没有通知的情况下发生变化;发生变化后,此服务可能会停止工作,直到 edupage-api 更新,随后本项目也完成更新。使用风险由你自行承担。

许可证

GPL-3.0-or-later。版权所有 © 2026 Stefan Backor。

评论

支持 Markdown

第一次接触 MCP?

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

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