boyuchengz/canvas-mcp

效率与系统工具

把 Claude、ChatGPT 等支持 MCP 的 AI 助手接到 Canvas LMS,用自然语言查询课程、截止日期和成绩。

101
0
JavaScript
MIT
今天创建

如果你已经在用支持 MCP 的 AI 助手,又不想在 Canvas 的模块、作业和成绩页之间来回点,这个项目值得一试;如果你不想自己部署服务,或者学校限制个人访问令牌,它的价值会明显打折。

解决什么问题

学生真正想要的是一个直接答案——这周有什么要交、哪些还没交、期末考多少分才能保住 A——但 Canvas 把这些信息分散在课程面板、To Do 列表、成绩册和教学大纲里。通常的做法是逐门课点进去,打开作业,再手动核对提交状态。这个项目把提问搬进已经在用的 AI 客户端:助手调用服务端,服务端把每次请求转成对 Canvas REST API 的读取,再返回整理好的结果。得到的信息并没有超出学生本来就能看到的范围,只是跨课程汇总到一条回答里。

有什么不同

设计核心是只读边界。全部 26 个工具只发 GET 请求,收件箱和讨论区读取时不会被标记为已读,服务端没有写回 Canvas 的代码路径 只读设计。客户端通过一个带长随机连接密钥的 URL 访问服务端,服务端校验密钥后把工具调用翻译成 Canvas API 请求、处理分页并裁剪响应 工作原理。由于走 Streamable HTTP,它可以作为自定义连接器加到网页和手机客户端里,而不限于桌面端。服务端还是无状态的:每个请求都拿到一个新实例,不缓存也不存储任何内容。

实际好处是比从零写一个 Canvas 集成省事——只有三个运行时依赖,没有构建步骤。代价在于它需要你自己部署,而不是装一个插件。连接器 URL 相当于密码,拿到的人就能读该账户的 Canvas 数据,泄露后的处理方式是更换 MCP_SECRET 并重新部署 安全说明。

谁值得试

比较合适的是单个学生:熟悉 Node.js 部署,愿意把它放到 Railway、Render、Fly.io 或 VPS 上,希望 AI 助手能回答跨课程的问题,比如近期截止日期、缺交作业和成绩权重。一次部署只服务一个用户,因为服务端以令牌所有者的身份行事,所以学习小组没法共用一个实例,每个人都需要自己的令牌和部署。不太合适的是没有地方托管 Node.js 20+ 的学生,或者所在学校限制个人访问令牌的学生——README 明确建议先查学校的可接受使用政策。

使用条件与边界

需要 Node.js 20+、从 Account → Settings 创建的 Canvas 个人访问令牌,以及能提供 HTTPS 的主机;部署文档覆盖 Railway、Render、Fly.io、VPS 和本地环境 快速开始。日常维护主要是管好密钥:Canvas 令牌不会离开服务端,但连接器 URL 要按密码对待,令牌一旦泄露就要到 Approved Integrations 里删除。

内容上有几处预期内的缺口。PDF、幻灯片和 Office 文件不会被解析,get_file 只返回临时下载链接;New Quizzes 出现在作业列表而不是测验列表里,Canvas API 也不向学生暴露测验题目。列表每次最多 500 条,长文本上限 20,000 字符,不带 course_id 的日历事件最多覆盖 10 门课。如果课程很多,或者老师习惯用幻灯片发材料,助手常常只会给你链接而不是摘要。

HotRepo 点评

HotRepo 在 2026-10-26 记录到 101 个总星标,以及 JavaScript 新项目榜第 #9 名;这只是单日快照,不是每日增长数据。可比历史不足,无法判断关注度能否持续。部署前值得确认的一点是学校是否允许 Canvas 个人访问令牌,这一条政策直接决定其余部分是否可用。

本文由 AI 根据项目 README 生成,更新于 2026年10月26日,以项目官方文档为准。