新工具 GitHub · boyuchengz/canvas-mcp
用 canvas-mcp 把 Canvas 课程接给 Claude,问截止和成绩直接答
部署一个只读 MCP 服务器并接入 Claude/ChatGPT,就能用自然语言问课程截止、缺交作业、成绩权重和公告,得到汇总回答。
效果
README 未提供结果截图或示例对话截图,只展示了工具列表与调用流程图;原站没有结果截图。
这是什么
新在哪里:以前查课程作业、成绩和公告要逐门课在 Canvas 里点开或自己写 API 脚本;现在把 canvas-mcp 部署一次接入 AI 助手,直接一句话问出跨课程汇总。
怎么做到的:在 Canvas 生成个人访问令牌,用 node 命令生成连接器密钥,把仓库部署到 Railway(或 Render/Fly.io/VPS/本地)并配置 CANVAS_BASE_URL、CANVAS_API_TOKEN、MCP_SECRET,得到 https://<your-domain>/<MCP_SECRET>/mcp;在 Claude 的 Settings → Connectors 添加自定义连接器,或在 ChatGPT 开启连接器开发者模式新建连接器(No authentication),或用 claude mcp add --transport http 添加,然后问“List my Canvas courses”验证。服务器把工具调用翻译成 Canvas REST API 的 GET 请求并裁剪返回内容。
- 适合谁
- 使用 Canvas LMS、想用 AI 助手一次性汇总作业与成绩的学生(以及愿意自托管的学生助手开发者)。
- 能帮你
- 把 Canvas 的只读数据变成对话式查询,跨课程汇总截止、缺交与成绩权重。
评分 三项分开看,不合成总分;热度不等于好用
- 新颖性
- 全新做法 · 2026-10-26 出现
- 热度
- 未知
- 易上手
- 需要一些准备
怎么评的
三项都由本站记录的事实按固定规则算出,编辑不能直接改档位;规则改动会写进更新说明。
新颖性
- ●●● 全新做法,且有来源依据的出现时间在最近 30 天内
- ●●○ 老工具新用法或近期刚开放,且有来源依据的时间在最近 30 天内
- ●○○ 出现时间超过 30 天、未核实到精确日期,或已不再是新做法
- 其他 出现时间未核实、晚于今天,或新颖类型未核实时按最低一档处理,不靠猜测加分
热度
- ●●● 最近一次每周人工确认为“热门”:最近 14 天里独立讨论、实际案例、持续时间、传播平台、相对关注五项门槛全部满足(规则 heat-v1)
- ●●○ 最近一次人工确认为“观察中”:前三项至少一项达到,或讨论增长 ≥ 50%,且至少 2 个独立案例
- ●○○ 最近一次人工确认为“未进入跟踪”
- 其他 还没有人工确认过的热度记录时显示“未知”。热度只统计本站已接入的信源,不代表全网
易上手
- ●●● 准备门槛低且难度入门:不需要新账号或付费,首次尝试不超过 30 分钟,公开可用,会复制粘贴即可
- ●●○ 准备门槛中等,或门槛低但需要改少量代码或配置
- ●○○ 准备门槛高:需要商业软件或付费服务、首次尝试超过 2 小时、特殊硬件或网络、排队或邀请且无替代方案,或需要专业知识
- 其他 只有介绍、还没有站内步骤,或关键步骤已失效时显示“暂不可试”;门槛未核实时显示“未核实”
怎么尝试
- 时间 首次约 40 分钟
- 费用 免费:代码 MIT 开源、免费;本地部署免费,Railway / Render 等托管平台可能有费用,原站未说明具体价格。
- 账号 不需要新账号
- 环境 Node.js 20+ 的服务端环境(Railway / Render / Fly.io / VPS 或本地);客户端为 Claude 网页/桌面/移动版、ChatGPT(连接器开发者模式)或 Claude Code 等支持 Streamable HTTP 的 MCP 客户端。
- 准备 Canvas 个人访问令牌:服务器用它调用 Canvas REST API 的 GET 接口
- 准备 Canvas 实例地址:填写 CANVAS_BASE_URL,如 https://canvas.instructure.com 或学校域名
- 准备 支持 HTTPS 的 Node.js 20+ 部署环境:运行 canvas-mcp,README 以 Railway 为例
- 准备 支持自定义连接器 / MCP 的 AI 客户端:Claude(网页/桌面/移动)、ChatGPT 连接器开发者模式或 Claude Code
- 准备 浏览器:在 Canvas 生成令牌、在 Railway 面板配置变量
替代方案:官方 Canvas App / 网页 + 自己调 Canvas REST API。能做到:不部署服务器也能查作业、成绩与公告,或写脚本直接请求 Canvas API;差别:需要手动逐页查找或自己维护脚本,无法获得对话式的跨课程汇总。
完成替代方案不算复现本实践。
按下面的步骤就能做出第一个结果。复制命令不会自动执行。
创建 Canvas 访问令牌
在 Canvas 打开 Account → Settings,滚动到 Approved Integrations,点击 + New Access Token,填写用途(如 canvas-mcp)和有效期,复制令牌(只显示一次)。
预期结果:得到一个 Canvas 个人访问令牌,并已保存到安全位置
生成连接器密钥
在命令行运行以下命令生成 24 字节随机十六进制字符串,作为 MCP_SECRET(至少 24 位 URL 安全字符)。
bash原始来源命令node -e " console.log(require('crypto').randomBytes(24).toString('hex')) "预期结果:输出一串 48 位十六进制字符串,即连接器 URL 中的密钥
安装 Railway CLI
README 的 Quick start 第 3 步先安装 Railway CLI。
bash原始来源命令npm i -g @railway/cli预期结果:命令执行成功,终端可调用 railway 命令
登录、初始化并部署
依次执行 log in、init 与 up 三条命令完成部署:
bash原始来源命令railway login railway init railway up预期结果:登录成功、项目初始化并在 Railway 面板出现已上传的服务
配置变量与域名
在 Railway 控制台 Variables 添加 CANVAS_BASE_URL、CANVAS_API_TOKEN、MCP_SECRET;在 Settings → Networking 点击 Generate Domain。连接器 URL 为 https://<your-domain>/<MCP_SECRET>/mcp。服务器启动时会校验所有变量,缺失会带提示退出。
预期结果:配置齐全后服务启动,得到可访问的 HTTPS 域名
接入客户端并验证
Claude(网页/桌面/移动)在 Settings → Connectors 选择 Add custom connector 粘贴连接器 URL(OAuth 留空);ChatGPT 开启连接器开发者模式,新建连接器粘贴 URL 并选 No authentication;或用 claude mcp add --transport http canvas https://<your-domain>/<MCP_SECRET>/mcp。随后发起对话“List my Canvas courses”。
预期结果:对话中返回当前活跃课程列表,说明服务器连通 Canvas