关于 canvas-lms-mcp-local
canvas-lms-mcp-local 为使用 Canvas 的学生提供本地 MCP 服务,可在 AI 助手中查看课程、成绩、作业和日程,并规划学习。它通过本机标准输入输出连接,不开放网络端口;提交或发送等写入操作需先预览并确认。
主要功能
- 01查看课程、作业和截止日期
- 02分析成绩并计算目标分数
- 03提交文本、链接和文件
- 04读取讨论、收件箱与课程内容
- 05写入操作先预览再确认
适用场景
- 01汇总本周各课程的到期作业
- 02估算期末成绩所需分数
- 03找出对成绩影响最大的缺交作业
MCP 相关
作为本地 MCP 服务,通过 stdio 连接桌面或命令行 MCP 客户端,并调用 Canvas API。使用 Canvas 访问令牌进行身份验证。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y canvas-lms-mcp-localCANVAS_API_TOKEN密钥Canvas personal access token (Account > Settings > Approved Integrations > New Access Token)CANVAS_BASE_URLYour school's Canvas address, e.g. https://yourschool.instructure.com本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
209收录的工具列表 · 更新于 1 天前
此工具无需参数。
详细介绍
提示
想在手机、网页或多台电脑上使用? 请前往 🌐 远程版 →。它包含相同的 209 个工具,通过受密码保护的 ngrok 隧道提供服务,并在多台电脑之间自动故障切换。
💻 Canvas LMS MCP:本地版
在自己的电脑上通过 AI 助手使用 Canvas。无需隧道、无需密码、无需后台服务。
209 个工具 · 一个配置文件 · 不会暴露到互联网
🤔 本地版还是远程版?
| 💻 本地版(此仓库) | 🌐 远程版 | |
|---|---|---|
| 适用范围 | 此电脑上的桌面端和命令行 MCP 客户端 | 任何设备上支持远程服务的 MCP 客户端 |
| 运行时间 | 仅在 AI 应用打开时运行,因为应用会启动它 | 始终在后台运行 |
| 所需条件 | Node.js 和 Canvas 令牌 | Node.js、Canvas 令牌、ngrok 账号和密码 |
| 互联网暴露 | 无:不会开放端口 | 公开的 HTTPS 地址,受密码保护 |
| 多台电脑 | 需在每台电脑上分别安装 | 内置电脑之间的自动故障切换 |
| 设置时间 | 约 5 分钟 | 约 15 分钟,每增加一台电脑约需 5 分钟 |
✨ 亮点
- 📊 成绩分析:
what_if_grade、compute_needed_score、grade_impact_ranking、完整的加权成绩明细 - 📅 规划:
get_week_ahead、semester_snapshot、study_priority_ranking,一次调用即可查看所有课程的未完成作业 - 📝 提交作业:提交文本、URL 和文件,并可先预览模拟提交结果
- 💬 讨论区和收件箱:一次请求即可阅读完整讨论串,并给教师发送消息
- 📁 内容:文件、页面、模块、讲座字幕以及完整的
.imscc课程导出
🧭 工作原理
Your AI app (MCP client) ──stdio──► node index.js ──HTTPS──► your school's Canvas API
(starts the server) (209 tools, runs only
while your app is open)
无需 Web 服务器,无需开放端口,也无需保持服务运行。AI 应用打开时会启动服务,关闭时会停止服务。
🚀 快速开始
你需要: Node.js 18+ 和一个 Canvas 账号。无需自行下载任何内容:AI 应用会通过 npx 获取服务。
1. 创建 Canvas 访问令牌
在 Canvas 中,前往 Account → Settings → Approved Integrations → + New Access Token。Canvas 只会显示一次令牌,请立即复制。学生令牌通常会在 30–120 天后过期。
2. 将其添加到你的 AI 应用
桌面应用
-
打开应用的 MCP 配置文件。它通常位于 Settings → Developer 或 Settings → MCP servers 下,大多数应用使用
mcpServersJSON 块。 -
添加此
canvas条目,并填入你的令牌和学校地址(另见mcp_config.example.json):{ "mcpServers": { "canvas": { "command": "npx", "args": ["-y", "canvas-lms-mcp-local"], "env": { "CANVAS_API_TOKEN": "your_token_here", "CANVAS_BASE_URL": "https://yourschool.instructure.com" } } } } -
完全退出应用:在 Windows 上,右键单击系统托盘图标并选择 Quit;在 macOS 上,按 ⌘Q。然后重新打开应用。仅关闭窗口是不够的。
命令行客户端
将此命令注册为名为 canvas 的 stdio MCP 服务,并在其环境中设置 CANVAS_API_TOKEN 和 CANVAS_BASE_URL:
npx -y canvas-lms-mcp-local
然后检查客户端的 MCP 状态,确认连接成功。
3. 试用
向助手询问:“运行 test_connection。” 它会检查你的身份、课程、计划表、收件箱和未提交的作业,并报告学校禁用的功能。
然后试试这些问题:“这周有哪些截止事项?”、“期末考试需要考多少分才能拿到 B?” 或 “哪些未提交的作业对我的成绩影响最大?”
更喜欢从源代码运行?
git clone https://github.com/Fireiscoolsolo/canvas-lms-mcp-local.git
cd canvas-lms-mcp-local
npm install
将 .env.example 复制到与 index.js 相同的文件夹下并命名为 .env,填入你的令牌和学校地址,然后将配置指向该文件,而不是使用 npx:
{ "mcpServers": { "canvas": { "command": "node", "args": ["C:/Users/YOUR-NAME/Documents/canvas-lms-mcp-local/index.js"] } } }
在 Windows 上可以使用正斜杠。在 macOS 上,路径类似 /Users/you/canvas-lms-mcp-local/index.js。在 Windows 上,请确保文件名为 .env,而不是 .env.txt。要检查文件名,请在文件资源管理器中开启 View → File name extensions。
⚙️ 配置
按照第 2 步的示例,将设置放在配置的 env 块中。如果从源代码运行,也可以使用 index.js 同目录下的 .env 文件。
| 变量 | 必需 | 默认值 | 说明 |
|---|---|---|---|
CANVAS_API_TOKEN | ✅ | — | 你的 Canvas 个人访问令牌 |
CANVAS_BASE_URL | ✅ | — | 例如:https://yourschool.instructure.com |
CANVAS_ALLOW_WRITES | true | false = 只读模式 | |
CANVAS_PROFILE | full | core = 精选工具子集 | |
CANVAS_CACHE_TTL | 60 | 响应缓存时间,单位为秒 | |
CANVAS_TIMEZONE | system | 用于计算截止日期的 IANA 时区 | |
CANVAS_DOWNLOAD_DIR | canvas-downloads,位于 index.js 同目录 | 下载工具保存文件的位置 |
🧰 工具
| 分组 | 数量 | 亮点 |
|---|---|---|
| 身份 | 24 | check_token_expiry、get_rate_limit_status、自定义数据存储 |
| 课程 | 16 | 权限、昵称、收藏 |
| 作业 | 12 | list_missing_submissions、get_late_policy |
| 提交 | 16 | 文本、URL 和文件提交、评论、评分标准评估 |
| 成绩 | 13 | what_if_grade、compute_needed_score、grade_impact_ranking |
| 测验 | 12 | 只读:日期、尝试记录、复查 |
| 讨论 | 17 | get_full_topic_view、回复、评分 |
| 收件箱 | 14 | 消息、find_recipients、对话线程 |
| 日历 | 11 | 事件、办公时间预约 |
| 内容 | 33 | 文件、页面、模块、字幕、.imscc 导出 |
| 小组 | 11 | 小组工作区 |
| 评分标准 | 11 | 同伴评审 |
| 搜索 | 3 | smart_search,支持关键词回退 |
| 规划 | 11 | get_week_ahead、semester_snapshot、study_priority_ranking |
| 元数据 | 4 | 使用 raw_canvas_request 调用上述列表中未列出的任何端点 |
🔐 安全
- **不会暴露任何内容:**服务不会监听任何端口。只有启动它的应用能通过专用管道与它通信。
- **确认门控:**发送、提交、发布或删除内容的工具会先返回预览,只有在调用时传入
confirm: true才会执行操作。 - **提示注入隔离:**其他人编写的文本会用
<<<CANVAS_CONTENT>>>标记括起来,并标注为不可信内容。 - **不参与测验:**不会提供测验作答端点。
切勿提交
.env。它已列入.gitignore。请参阅 SECURITY.md。
🎓 负责任地使用
这是一款用于学习和组织事务的工具,可帮助你查看截止日期、了解成绩并规划每周安排。它不会代你参加测验;在你查看预览并确认之前,不会发送或提交任何内容。
- 请遵守学校的学术诚信和可接受使用政策。有些学校会限制使用个人 API 令牌或第三方工具。
- 想要完全避免意外更改?将
CANVAS_ALLOW_WRITES=false设为只读模式。
🛠️ 故障排除
| 症状 | 解决方法 |
|---|---|
| 应用中没有显示 Canvas 工具 | 检查配置是否为有效的 JSON,以及 index.js 的路径是否为绝对路径,然后完全退出并重新打开应用 |
spawn npx ENOENT / 找不到“npx” | 安装 Node.js,然后重启应用。如果仍然失败,请将 command 设为完整路径,例如 "C:/Program Files/nodejs/npx.cmd" |
| 首次启动速度较慢 | npx 首次运行时会下载软件包。之后启动会很快 |
| “CANVAS_API_TOKEN is not set” | 将其添加到配置中 canvas 条目的 env 块。如果从源代码运行,请确认 .env 与 index.js 位于同一目录,且文件名不是 .env.txt |
| Canvas 返回 401 | 你的令牌已过期。请创建一个新令牌(步骤 2) |
修改 index.js 后未生效 | 请重启 AI 应用,因为工具列表会在连接时加载 |
| 日志在哪里? | 在 AI 应用的 MCP 日志文件夹中。此服务的每一行日志都以 [canvas-mcp] 开头 |
已知限制: 学生令牌无法访问管理端点、成绩册历史记录、课程分析或测验统计信息。smart_search 是 Canvas 的测试版功能,且经常返回 404。
📄 许可证
MIT。本项目与 Instructure 无关。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。