关于 canvas-mcp
canvas-mcp 是面向 Canvas LMS 的 MCP 服务,为学生、教育者、课程设计者和开发者提供按角色组织的工具。它涵盖课程查询、内容管理、评分和无障碍检查,并提供可选的工作流技能。
主要功能
- 01提供学生与课程信息查询工具
- 02管理作业、模块、页面和文件
- 03查看提交并执行批量评分
- 04扫描课程内容的无障碍问题
- 05提供课程工作流技能
适用场景
- 01检查作业截止日期和课程成绩
- 02创建课程内容或管理分组
- 03批量处理提交与评分
- 04审查课程结构和无障碍问题
MCP 相关
作为 MCP 服务,它向兼容客户端提供 Canvas LMS 操作工具,默认配置启用的工具较少,可选功能可扩展工具范围。部分技能为多步骤课程工作流提供操作配方。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Canvas MCP 服务
适用于 Canvas LMS 的 MCP 服务,提供最多 128 个工具和 8 项 Agent 技能。专为 Claude Desktop、Cursor、Codex、Windsurf 和 其他 40 多种 Agent设计;具体设置和功能因客户端而异。
快速开始
1. 安装 MCP 服务(包括技能在内的其他所有内容都需要服务保持运行):
- Claude Desktop: 从最新版本下载
canvas-mcp.mcpb,然后双击。系统会提示你输入 Canvas URL 和令牌;无需使用终端。查看详情。 - Cursor、Zed、Windsurf、Continue、Claude Code 和其他客户端: 将其
pip install到虚拟环境中,在.env中添加令牌,并将客户端指向canvas-mcp-server二进制文件。本地安装中提供了各客户端对应的配置代码块。
2. 验证: canvas-mcp-server --test 应报告已成功连接 Canvas。然后重启客户端。
3. 可选:添加工作流技能。 这些技能会教你的 Agent 使用基于工具的多步骤操作方案(每周计划、晨间检查、批量评分、同伴互评、课程质量检查):
npx skills add vishalsachdev/canvas-mcp
查看 Agent 技能了解技能列表。如果你的 Agent 是 Claude Code,这些操作方案也可作为斜杠命令使用。
面向 AI Agent
Canvas MCP 提供最多 128 个工具,用于与 Canvas LMS 交互;默认配置会注册较少的工具,启用可选功能的工具后总数可增至 128 个。工具按用户类型分类:
学生工具(点击展开)
| 工具 | 用途 | 示例提示词 |
|---|---|---|
get_my_upcoming_assignments | 接下来 N 天的截止日期 | “这周有哪些任务到期?” |
get_my_todo_items | Canvas 待办事项列表 | “显示我的待办事项列表” |
get_my_submission_status | 已提交与缺交情况 | “我都提交了吗?” |
get_my_course_grades | 当前成绩 | “我的成绩是多少?” |
get_my_peer_reviews_todo | 待完成的同伴互评 | “我需要完成哪些同伴互评?” |
list_my_announcements | 所有正在进行的课程公告 | “教授这周发布了什么公告?” |
get_my_activity_stream | 按类型分组的近期活动 | “Canvas 上有什么新动态?” |
list_my_groups | 你的小组及课程和小组 ID | “我在 BADM 350 属于哪个项目小组?” |
get_group_members | 你所在小组的成员(不含电子邮件) | “我的项目小组里有哪些人?” |
list_group_files | 存储在你所在小组中的文件 | “我的小组上传了哪些文件?” |
list_quizzes | 课程中的经典测验和新版测验,包含日期和你的提交状态(只读) | “我在 CS 161 有哪些测验?” |
get_quiz_details | 某个测验的设置,以及你已使用和剩余的尝试次数(只读) | “Quiz 3 我还剩几次机会?” |
list_calendar_events | 各课程的日历事件和截止日期 | “我下周的日历上有什么?” |
get_calendar_event | 某个日历事件的完整信息 | “显示那个考试事件的详细信息” |
list_planner_notes | 你自己的计划笔记 | “我这周的计划上有哪些笔记?” |
教师工具(点击展开)
| 工具 | 用途 | 示例提示词 | |------|---------|----------------| | `list_assignments` | 课程中的所有作业 | "Show assignments in BADM 350" | | `create_course_groups` | 从 CSV 预览并确认新的分组集、分组和成员资格 | "Create project groups from these Canvas user IDs" | | `resume_course_group_creation` | 预览并确认先前分组操作的剩余工作;拒绝存在成员资格冲突的操作 | "Resume the group run after resolving these conflicts" | | `create_assignment` | 创建新作业 | "Create an assignment due Jan 26 with online text submission" | | `update_assignment` | 更新现有作业 | "Change the due date for Assignment 3 to Feb 15" | | `list_submissions` | 学生提交内容 | "Who submitted Assignment 3?" | | `get_student_submission` | 单名学生的文本和可见评论;需要评分权限并保留删隐处理 | "Read student 123’s submission for Assignment 3" | | `bulk_grade_submissions` | 一次为多份提交评分 | "Grade these 10 students" | | `get_assignment_analytics` | 成绩表现统计 | "Show analytics for Quiz 2" | | `send_conversation` | 向学生发送消息 | "Message students who haven't submitted" | | `create_announcement` | 发布公告 | "Announce the exam date change" | | **模块管理** | | | | `create_module` | 创建课程模块 | "Create a module for Week 5" | | `update_module` | 更新模块设置 | "Rename the midterm module" | | `add_module_item` | 向模块添加内容 | "Add the syllabus page to Week 1" | | `delete_module` | 删除模块 | "Delete the empty test module" | | **页面与内容** | | | | `create_page` | 创建课程页面 | "Create a page for office hours" | | `edit_page_content` | 更新页面内容 | "Update the syllabus page" | | `update_page_settings` | 发布或取消发布页面 | "Publish all Week 3 pages" | | `bulk_update_pages` | 批量处理页面 | "Unpublish all draft pages" | | **文件管理** | | | | `upload_course_file` | 将本地文件上传到 Canvas | "Upload syllabus.pdf to the course" |共享工具(点击展开)
| 工具 | 用途 |
|---|---|
list_courses | 所有已选课程 |
get_course_details | 课程信息 + 教学大纲 |
list_pages | 课程页面 |
get_page_content | 读取页面内容 |
list_modules | 列出课程模块 |
list_module_items | 模块中的项目 |
list_discussion_topics | 讨论论坛 |
list_discussion_entries | 讨论中的帖子 |
post_discussion_entry | 添加讨论帖 |
reply_to_discussion_entry | 回复帖子 |
学习设计工具(课程设计与质量检查)
| 工具 | 用途 | 示例提示词 |
|---|---|---|
get_course_structure | 完整的模块→项目树(JSON) | "Show me the structure of CS 101" |
scan_course_content_accessibility | WCAG 违规扫描器(20 项检查:标题、表格、链接、对比度、替代文本、字幕、DesignPLUS) | "Audit accessibility for BADM 350" |
fetch_ufixit_report | 机构无障碍报告 | "Pull the UFIXIT report for this course" |
parse_ufixit_violations | 提取结构化违规项 | "Parse the UFIXIT violations" |
format_accessibility_summary | 易读的违规报告 | "Summarize the accessibility issues" |
技能: canvas-course-qc(学期开始前审查)、canvas-accessibility-auditor(面向 WCAG 的审查)、canvas-course-builder(根据规格说明/模板搭建课程)。
开发者工具(用于批量操作)
| 工具 | 用途 | 使用时机 |
|---|---|---|
search_canvas_tools | 发现 MCP 工具和代码 API 操作 | 查找可用工具和批量操作 |
execute_typescript | 在本地运行 TypeScript | 处理 30 项以上内容、自定义逻辑、本地逐项处理 |
快速参考
**课程标识符:**Canvas ID(12345)、课程代码(badm_350_120251_246794)或 SIS ID
**无法执行:**创建或删除课程、修改课程设置、访问其他用户的数据
**速率限制:**约 700 次请求/10 分钟。批量操作请使用 max_concurrent=5。
完整文档:AGENTS.md | tools/TOOL_MANIFEST.json | tools/README.md
概述
Canvas MCP Server 弥合了 AI 助手与 Canvas 学习管理系统之间的差距,为学生、教育工作者、学习设计师和开发者提供按角色区分的工作流。它基于 Model Context Protocol(MCP)构建,专为兼容 MCP 的客户端设计;设置和支持的功能因客户端而异。
最新版本:v1.16.0
**发布日期:**2026 年 10 月 | 完整更新日志 | 所有版本
这是一个安全版本。该版本修复了三个私下报告的问题,弥补了 1.13.0 提示词注入安全公告留下的最后一个漏洞,并新增课程分组创建功能。此版本会影响本地代码执行:本地沙箱现在需要 Node.js 22.18 或更高版本。
- 本地代码沙箱(GHSA-7pp5-29mw-9jq3):在本地沙箱模式(无容器运行时的默认模式)下,
execute_typescript在 Node 权限模型下运行。代码只能读取捆绑的代码 API;Node 会阻止子进程、工作线程、原生插件和文件写入。此变更会造成兼容性影响:需要 Node.js 22.18+,并且 TypeScript 会剥离类型,因此请使用import type导入类型,并避免使用枚举和命名空间。本地模式下的网络阻止仍尽力而为(#157)。 - Canvas 令牌仅留在 Canvas(GHSA-7mj9-4mcg-hvhv):从其他存储主机下载文件时,不再携带 Canvas 令牌(包括重定向后);对于 Canvas 之外的上传确认,也会拒绝处理。
- 文件内容已设防(GHSA-hmr8-mvr2-mvw5):
read_course_file会将返回的文件内容标记为不可信的 Canvas 数据,CI 注册表测试也会检查该负载。 - Windows 下载权限(GHSA-qf6c-jv93-38gv):在 Windows 上,下载的文件会继承目标文件夹的权限。现在每次 Windows 下载都会说明这一点。这是已记录的限制。
- 课程分组创建:
create_course_groups可预览并确认从 CSV 创建新的分组集、分组和成员关系;resume_course_group_creation可完成中断的操作(#526)。 - 按需获取提交文本:
list_submissions(include_body=True)会在通过manage_grades检查后,返回匿名化、设防且有长度限制的已提交文本(#523)。
感谢 @EQSTLab、@KKazuhaK 和 @bruchris 提交报告。
先前版本
v1.15.0 — 加固版本:隔离不同的 HTTP 调用方(#480、#491),在一次有界处理中解析 HTML(#515),发布流水线会验证实际发布的内容,并新增 get_student_submission(#487)。
v1.14.0 — 学生工具与正确性更新,大部分由 @KKazuhaK 贡献。新增只读学生工具,支持查看小组、成绩和假设情景、测验、日历及跨课程动态;此外还新增收件箱消息功能,默认关闭,需由运营者启用(#465 至 #476)。受保护的正文编辑现会在修改后回读确认(#437);新增小组讨论和匿名讨论的读取功能(#433、#439;感谢 @papatistos)、完整内容读取(#458)以及共享课程解析功能(#457)。行为变更:assign_peer_review 不再提交占位内容(#436)。CI 现已在 Windows 上运行测试套件(#456)。
v1.13.0 — 安全更新(GHSA-hmr8-mvr2-mvw5):只有在运营者允许时,才会提供任何可更改内容的工具。重大变更:除非设置 ALLOWED_WRITE_TOOLS,否则 HTTP 服务均为只读;send_conversation 始终先预览;get_conversation_details 不再支持 auto_mark_read;无法验证设置时,评分标准评分会停止;本地文件导出会拒绝 HTTP 调用方。此外新增:用于受保护地编辑现有评分标准的 update_rubric(#386),以及在替换现有内容前先预览的 update_syllabus。修复:不再将 Gradescope 等外部工具作业报告为缺失(#390,感谢 @EastArctica);TypeScript 分页会在页面预算内遵循 Link 标头(#403);确认和评分工作流得到加强(#394 至 #408)。execute_typescript 沙盒现以非 root 用户身份运行,并使用只读根文件系统(#317、#339)。基于 FastMCP 4 和 MCP SDK 2 构建(#354)。
v1.12.0 — 安全更新:每个删除工具都会先请求确认。重大变更:移除 delete_announcement;从公告删除工具中移除 dry_run;所有七个删除工具都必须提供 confirmation_token(#318);停止支持 Python 3.10(#315)。此外新增:delete_assignment_with_confirmation、ACCESSIBILITY_CHECKERS(#325)以及内容迁移工具(#309)。
v1.11.0 — 协议正确性更新。重大变更:send_peer_review_reminders 现更名为 send_peer_review_inbox_messages(#303);工具失败时会设置 MCP isError: true(#270);返回字符串的工具不再将其载荷重复写入 structuredContent.result(#271);FastMCP 最低版本为 3.4.7(#293)。感谢 @jonespm。
v1.10.0 — 由社区用户实时测试推动的错误修复版本。感谢 @khagyard、@zqian、@jonespm、@bruchris 和 @SHIL0018(这是我们的第二次外部代码贡献)。包含一项会造成不兼容的 search_canvas_tools 响应格式变更。
- 重大变更:
search_canvas_tools响应格式 v2(#281)。该工具现在会同时搜索约 99 个已注册的 MCP 工具和 TypeScript 代码 API 文件(此前仅搜索后者,因此尽管已有约 10 个同行评审工具,“同行评审”却搜索不到结果)。响应包含schema_version: 2,并分为带标签的mcp_tools/code_execution_api部分;旧的扁平tools键已移除。代码 API 的完整详细内容现在也限制为 2,000 个字符(#287) - 学生可以找到自己的同行评审(#275):
get_my_peer_reviews_todo新增了按作业直接查询和 Planner 信息流发现路径,使用的数据源与 Canvas 学生界面相同,并已通过报告者提供的真实生产环境载荷验证 - 学生令牌调用
create_announcement时会安全失败(#283):Canvas 会静默地将创建操作降级为普通讨论主题;该工具现在会预先检查课程权限,并在创建任何内容前拒绝操作;如果仍意外发生降级,则会自动删除创建的主题;同时引导 AI 客户端不要改用讨论工具发布该内容 - **安全:**加强 URL 验证(修复代码扫描发现的问题),Docker 基础镜像升级至
python:3.14-slim,更新 CI 操作
v1.9.0 — 提示词注入加固(#239):Canvas 编写的文本会通过来源标记与指令隔离,作为数据而非指令处理;向多个收件人发送消息改为两步流程:预览 → 确认(不兼容变更);写入工具会拒绝围栏标记;发布 OSSF Scorecard,CI 操作固定 SHA,.mcpb 包含 SLSA 来源证明;弃用 npm 向导(#249)。合并前进行了 11 轮对抗性审查
v1.8.0 — 修复安全扫描问题:12 项发现中修复了 11 项,其中 3 项为不兼容变更(Canvas URL 仅允许 HTTPS、文件传输工具仅支持 stdio、下载时不覆盖文件);在中心层关闭一项经过验证的提交授权绕过问题;增加 CSV 公式注入防护;代码执行采用失败关闭策略;提高依赖版本下限(PR #251、#255)
v1.7.0 — 根据教师错误报告发布的正确性修复版本:Canvas 悄悄少做了请求内容时,写入操作不再报告成功(#219–#221);通过 Planner API 获取即将到来的作业(#222);修复 check_enrollment 的 AMBIGUOUS 答案(#199);修复页面和收件箱的线格式(#207、#208);添加 MCP 规范工具注解(#204);修复 CSV 评分标准格式(#190);将匿名化逻辑统一移至客户端层(#179)。感谢 @khagyard 和 @zqian
v1.6.0 — 将 Tier 1 学生写入工具置于显式许可列表之后(#170)、get_my_enrollments / get_my_profile(#171)、三级匿名化(#166、#179)、修复评分标准关联问题(#180、#181)、execute_typescript 改为选择启用(#178)、ruff 门禁 CI(@w3lld1,PR #186)
v1.5.0 — get_syllabus(#134)、create_rubric_from_csv(#119)、update_discussion_topic(#154)、迁移至 fastmcp 2.x(#145)、通过门禁 CI 扫描清除依赖项安全公告:33 → 0(PR #156)
v1.4.0 — check_enrollment(PR #126)、Claude Desktop Extension .mcpb、通过 Entra ID 身份验证的机构托管(#115,PR #125)、HTTP 在未通过身份验证门禁时拒绝请求(PR #123)
v1.3.0 — create_rubric(PR #100)、read_course_file(@DomBarker99,PR #90)、修复用户范围工具的事件循环问题(PR #99)、批量删除安全上限(PR #96)、精简依赖项(PR #93)
v1.2.0 — 基于角色的工具筛选(@Promithius-DR,PR #84)、无障碍整改(fix_accessibility_issues,扫描器检查项从 4 项扩展至 20 项)、安全加固(路径遍历/符号链接防护)、支持 Windows 上的 execute_typescript(PR #85)、整合 CI(检查项从 11 项减至 8 项)
v1.1.0 — 托管服务(mcp.illinihunt.org)、学习设计工具和 3 个技能、skills.sh 上的 Agent Skills、文件管理(@Metzpapa,PR #75)、令牌优化、通用分发
v1.0.8 — 安全加固(PII 清理、审计日志、默认沙箱)、Ruff 代码检查、235+ 个测试
v1.0.7 — 作业更新工具(update_assignment)、完整 CRUD、9 个测试
v1.0.6 — 模块管理(7 个工具)、页面设置(2 个工具)、235+ 个测试
v1.0.5 — Claude Code Skills、GitHub Pages 站点
v1.0.4 — 用于高效处理批量操作的代码执行 API、符合 MCP 2.14 规范
面向学生 👨🎓
借助 AI 获取帮助:
- 跟踪即将到来的作业和截止日期
- 监控所有课程的成绩
- 管理同伴互评作业
- 访问课程内容和讨论
- 整理待办事项列表
面向教育工作者 👨🏫
提升教学体验:
- 管理作业和评分
- 分析学生数据并跟踪学习表现
- 协助开展讨论和同伴互评
- 提供旨在支持 FERPA 合规工作流的隐私控制
- 使用批量消息和沟通工具
面向学习设计师 🎨
AI 驱动的课程设计与质量保障:
- 课程搭建 — 根据规范、模板或克隆现有课程,构建完整的课程结构
- 质量审计 — 开学前检查课程结构、内容、发布状态和完整性
- 无障碍审查 — 20 项 WCAG 导向检查扫描(标题、表格、范围、对比度、替代文本、链接、字幕、DesignPLUS 迁移),提供按优先级排序的报告、指导式修复和验证
- 课程结构分析 — 一次调用即可获取完整的模块→条目树,快速审查课程
3 个专用技能(canvas-course-qc、canvas-accessibility-auditor、canvas-course-builder),以及 get_course_structure 工具。
🤖 Agent 技能
预先构建的工作流配方,指导 AI Agent 如何有效使用 Canvas MCP 工具。可通过 skills.sh 用于 40 多种编码 Agent,也可作为 Claude Code 专用斜杠命令使用。
通过 skills.sh 安装(适用于任何 Agent)
技能会调用 MCP 工具,因此请先安装服务;没有服务,技能就无法运行。
npx skills add vishalsachdev/canvas-mcp
这会启动交互式选择器,将技能安装到你选择的 Agent 中(Claude Code、Cursor、Codex、OpenCode、Cline、Zed,以及更多)。
| 技能 | 适用对象 | 功能 |
|---|---|---|
canvas-week-plan | 学生 | 每周计划:截止日期、提交状态、成绩、互评 |
canvas-morning-check | 教育工作者 | 课程健康状况仪表板:提交率、遇到困难的学生、截止日期 |
canvas-bulk-grading | 教育工作者 | 评分决策树:单项 → 批量 → 代码执行,并进行安全检查 |
canvas-peer-review-manager | 教育工作者 | 完整的互评流程:分析、质量分析、提醒、报告 |
canvas-discussion-facilitator | 两者皆可 | 浏览讨论、监控参与情况、回复、引导讨论 |
canvas-course-qc | 学习设计师 | 开学前质量审计:结构、内容、发布状态、完整性 |
canvas-accessibility-auditor | 学习设计师 | WCAG 扫描、优先级报告、指导式修复、验证 |
canvas-course-builder | 学习设计师 | 根据规范、模板或现有课程搭建课程 |
安装指定技能:
npx skills add vishalsachdev/canvas-mcp -s canvas-week-plan
Claude Code 斜杠命令
如果你使用 Claude Code,也可以通过斜杠命令使用相同的工作流:
You: /canvas-morning-check CS 101
Claude: [Generates comprehensive course status report]
You: /canvas-week-plan
Claude: [Shows prioritized weekly assignment plan]
Claude Code 技能位于 .claude/skills/ 中,可根据你的工作流进行自定义。
想要自定义技能? 提交请求,描述你重复执行的工作流!
🔒 隐私与数据保护
面向教育工作者:遵循 FERPA 要求的数据处理
Canvas MCP 提供可选的隐私控制,可帮助机构履行 FERPA 义务。是否合规仍取决于你的部署、配置、机构政策和 AI 提供商:
- 响应匿名化会将受支持的身份字段转换为一致的匿名 ID(Student_xxxxxxxx)
- 电子邮件屏蔽和受支持的个人身份信息模式过滤,适用于讨论帖和提交内容
- 本地服务部署,可配置隐私控制(
ENABLE_DATA_ANONYMIZATION=true) - 注重隐私的分析:询问“哪些学生需要支持?”,同时减少返回给 AI 客户端的身份数据
- 去匿名化映射工具,供教师在本地将匿名 ID 与真实学生对应
启用 ENABLE_DATA_ANONYMIZATION=true 后,受支持的身份字段会在工具结果传递给 AI 客户端之前进行匿名化。使用学生数据前,请查阅教育工作者指南和所在机构的相关要求。
面向学生:数据范围与隐私
- 仅限 Canvas 范围内的访问:面向学生的专属工具使用 Canvas 的“self”端点;共享课程内容工具遵循 Canvas 授予您账户的权限
- 不在共享服务中存储凭据:本地模式会从您自己的
.env读取 Canvas 令牌。在经过身份验证的机构 HTTP 部署中,每个请求都会提供用户的 Canvas 令牌,服务不会存储该令牌。 - 没有内置产品分析:Canvas MCP 不会添加遥测;Canvas 和您的 AI 客户端仍会执行各自的日志记录与数据政策
- 可选匿名化:学生工具仅限访问您自己的 Canvas 数据,但仍受 AI 客户端的隐私政策约束
托管服务(已停用)
公共托管服务(mcp.illinihunt.org)已停用。没有访问控制的公共 MCP 端点不适合运行,因为它会暴露内置的代码执行工具——因此,受支持的方式是使用下方的**本地安装**。
HTTP/流式传输本身仍完全受支持,可在您自己的身份验证机制后进行自托管(canvas-mcp-server --transport streamable-http)。您是否正在为所在机构运行共享的、经过身份验证的实例?请参阅 deploy/azure/,其中提供了经过生产环境测试的部署规范(Azure App Service + Entra ID 平台身份验证、按用户提供 Canvas 令牌),以及示例工作流和配置模板。
先决条件(本地安装)
- Python 3.11+ - 现代功能和类型提示所需
- Canvas API 访问权限 - API 令牌和机构 URL
- MCP 客户端 - 兼容 MCP 的客户端(Claude Desktop、Cursor、Zed、Windsurf、Continue 等);具体设置和功能因客户端而异
支持的 MCP 客户端
Canvas MCP 专为兼容 MCP 的客户端设计,包括 Claude Desktop、Codex、Cursor、Zed、Windsurf、Continue、Replit 和 Copilot Studio。具体设置方式和支持的功能因客户端而异。
Canvas MCP 使用有文档说明的 Canvas API 模式,例如 User-Agent 标头和 per_page 分页。它适用于 Canvas Cloud 和兼容的自托管实例。
安装为 Claude Desktop 扩展(最简单)
如果你使用 Claude Desktop,只需单击一次即可安装 Canvas MCP,无需使用终端或编辑配置文件:
- 从最新版本下载
canvas-mcp.mcpb。 - 双击该文件(或将其拖入 Claude Desktop → Settings → Extensions)。
- 按提示输入你的 Canvas API URL——必须包含
/api/v1路径(例如https://canvas.youruniversity.edu/api/v1)——以及你的 Canvas API token(Canvas → Account → Settings → New Access Token——部分院校会改用申请表发放,请参阅下文)。该 token 会存储在你的操作系统钥匙串中。
该扩展会在本地运行服务,并使用你自己的 token 调用 Canvas,因此请求将采用该 token 的 Canvas 权限。Canvas 和你的 AI 客户端可能会保留各自的活动记录。该扩展使用 uv 选择 Python 3.13 并管理依赖项;如果缺少 Python 3.13,uv 会在首次启动时下载(需要联网,并且必须允许下载 Python)。你无需单独安装 Python,也无需更改系统默认的 Python。对于其他客户端,或要从源代码运行,请使用下方的手动设置步骤。
Windows 故障排查: spawn uv ENOENT 表示 Claude Desktop 找不到 uv。请安装 uv,然后完全退出并重新打开 Claude Desktop,使其获取更新后的 PATH。较旧的扩展包可能会选择 Python 3.15,并在编译 cffi 时因 "Microsoft Visual C++ 14.0 or greater is required" 错误而失败;请在手动客户端配置中使用 uv run --python 3.13 明确选择 Python 3.13,而不是安装编译器。请参阅 issue #391。已发布的现有扩展包不会自动获得启动器变更,只有安装包含这些变更的版本后才会生效。
本地安装
1. 安装依赖项
# (Recommended) Use a dedicated virtualenv so the MCP binary is in a stable location
python3 -m venv .venv
. .venv/bin/activate
# Install the package editable
pip install -e .
2. 配置环境
# Copy environment template
cp env.template .env
# Edit with your Canvas credentials
# Required: CANVAS_API_TOKEN, CANVAS_API_URL
从以下位置获取 Canvas API token:Canvas → Account → Settings → New Access Token
部分院校会限制 token 的创建。 如果不允许自助创建,页面上会缺少 "New Access Token" 按钮,或点击后报错;此时需通过 IT 申请表获取 token。请先查看所在院校的 IT 知识库,再判断自己无法使用 API。
伊利诺伊大学厄巴纳-香槟分校对所有人——学生和教师——都采用这种方式。请通过 Canvas API Token Request form 申请 token(需要使用 NetID 登录)。申请获批后:
- 前往 Canvas → Account → Settings → Approved Integrations,找到新 token, 点击 Activate,然后刷新页面。
- 从 Technology Services 发给你的 U of I Box 链接中获取 token 值。
截至 2026 年 8 月,所有新发放的 Illinois token 均有 30 天有效期(这是 Instructure 的上游要求)。系统不会监控或通知 token 过期;过期后 token 会被移除,且不会另行通知——请在当前 token 失效前申请替换 token。 完整详情:Answers KB 150325。
其他院校的学生:如果看到 "There is a limit to the number of access tokens you can create",或找不到 token 创建选项,请联系所在院校的 Canvas 管理员或 IT 支持部门申请 API 访问权限。
3. MCP 客户端配置
Canvas MCP 专为兼容 MCP 的客户端设计。以下是常用客户端的配置示例;具体设置和功能因客户端而异:
Claude Desktop(最受欢迎)
配置文件位置:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
配置:
{
"mcpServers": {
"canvas-api": {
"command": "/absolute/path/to/canvas-mcp/.venv/bin/canvas-mcp-server"
}
}
}
注意:请使用虚拟环境二进制文件的绝对路径,以避免 shell 特定的 PATH 条目(例如,pyenv shim)导致问题。
Codex
Codex 可以将服务作为本地 stdio MCP 服务启动。将以下条目添加到 ~/.codex/config.toml,并将示例路径替换为计算机上的绝对路径:
[mcp_servers.canvas-api]
command = "/absolute/path/to/canvas-mcp/.venv/bin/canvas-mcp-server"
cwd = "/absolute/path/to/canvas-mcp"
将 cwd 设置为代码库路径后,即使你在其他位置启动 Codex,服务也能找到上文创建的 .env 文件。或者,使用 Codex CLI 注册命令:
codex mcp add canvas-api -- /absolute/path/to/canvas-mcp/.venv/bin/canvas-mcp-server
CLI 命令不会设置持久工作目录。运行后,请将 cwd 行添加到 ~/.codex/config.toml 中现有的 [mcp_servers.canvas-api] 表;不要创建同名的第二个表。
运行 codex mcp list 验证注册情况,然后重启 Codex。在 Codex TUI 中,/mcp 会显示活动服务及其工具。
Cursor
配置文件位置:
- macOS/Linux:
~/.cursor/mcp_config.json - Windows:
%USERPROFILE%\.cursor\mcp_config.json
配置:
{
"mcpServers": {
"canvas-api": {
"command": "/absolute/path/to/canvas-mcp/.venv/bin/canvas-mcp-server"
}
}
}
Zed
**配置:**将以下内容添加到 Zed 的 settings.json 中(可通过 Settings 菜单访问)
{
"context_servers": {
"canvas-api": {
"command": {
"path": "/absolute/path/to/canvas-mcp/.venv/bin/canvas-mcp-server",
"args": []
}
}
}
}
Windsurf IDE
配置文件位置:
- macOS:
~/Library/Application Support/Windsurf/mcp_config.json - Windows:
%APPDATA%\Windsurf\mcp_config.json
配置:
{
"mcpServers": {
"canvas-api": {
"command": "/absolute/path/to/canvas-mcp/.venv/bin/canvas-mcp-server"
}
}
}
Continue
**配置:**将以下内容添加到 Continue 的 config.json 中(可通过 Continue 设置访问)
{
"mcpServers": {
"canvas-api": {
"command": "/absolute/path/to/canvas-mcp/.venv/bin/canvas-mcp-server"
}
}
}
其他 MCP 客户端
对于其他兼容 MCP 的客户端,通常按以下步骤配置:
- 找到客户端的 MCP 配置文件
- 添加服务条目,包含:
- 服务名称:
canvas-api(或你偏好的名称) - 命令:
canvas-mcp-server二进制文件的完整路径 - 可选参数:按需添加额外参数
- 服务名称:
请查阅客户端的 MCP 文档,了解具体的配置格式和文件位置。
Windows 用户:请将路径中的正斜杠替换为反斜杠(例如,
C:\Users\YourName\canvas-mcp\.venv\Scripts\canvas-mcp-server.exe)
验证
测试配置:
# Test Canvas API connection
canvas-mcp-server --test
# View configuration
canvas-mcp-server --config
# Start server (for manual testing)
canvas-mcp-server
可用工具
Canvas MCP Server 提供了一组用于与 Canvas LMS API 交互的工具。这些工具按逻辑类别组织,便于查找和维护。
工具类别
学生工具(新增!)
- 跟踪个人作业并管理截止日期
- 监控所有课程的成绩
- 管理待办事项列表和同伴评审
- 跟踪提交状态
共享工具(学生和教育者均可使用)
- 课程工具 - 列出和管理课程、获取详细信息,以及根据教学大纲内容生成摘要
- 讨论与公告工具 - 管理讨论、公告和回复
- 页面与内容工具 - 访问页面、模块和课程内容
教育者工具
4. 作业工具 - 处理作业、提交内容和同伴评审,并提供分析
5. 评分标准工具 - 创建、稳妥更新和列出评分标准;将其关联到作业;并为提交内容评分(包括用于高效批量评分的 bulk_grade_submissions)。update_rubric 是受保护的完整替换操作:它会保留现有的标准/评分项 ID,需要预览和确认,并会验证结果。请参阅评分标准 API 行为和评分注意事项。
6. 用户与选课工具 - 管理选课、用户和小组
7. 分析工具 - 查看学生分析、作业统计和进度跟踪
8. 消息工具 - 向学生发送消息和公告
开发者工具
9. 发现工具 - 使用 search_canvas_tools 搜索已注册的 MCP 工具和代码执行 API 操作;使用 list_code_api_modules 列出代码执行模块
10. 代码执行工具 - 使用 execute_typescript 执行 TypeScript 代码,使批量项目处理无需占用模型的上下文
📖 查看完整工具文档,了解可用工具的详细信息。
代码执行 API
对于批量操作(30 项以上),Canvas MCP 支持 TypeScript 代码执行。在本地处理批量操作,无需将每个项目都加载到模型的上下文中。
| 方式 | 最适用于 | 上下文行为 |
|---|---|---|
| MCP 工具 | 简单查询、小型数据集 | 将工具结果返回给模型 |
bulk_grade_submissions | 批量评阅 10–29 项 | 在一次工具调用中处理指定批次 |
execute_typescript | 30 项以上、自定义逻辑 | 在本地处理项目并返回选定的输出 |
使用 search_canvas_tools 发现可用操作,然后使用 execute_typescript 在本地运行这些操作。默认沙箱会对时间、内存、环境和网络实施尽力而为的控制,但它并非完整的安全边界;如果需要运行不受信任的代码或严格控制出站流量,请使用更强的外部隔离(请参阅 issue #157)。支持 macOS、Linux 和 Windows。
代码执行示例和安全详情
批量评分示例
import { bulkGrade } from './canvas/grading/bulkGrade';
await bulkGrade({
courseIdentifier: "60366",
assignmentId: "123",
gradingFunction: (submission) => {
const notebook = submission.attachments?.find(f =>
f.filename.endsWith('.ipynb')
);
if (!notebook) return null;
return { points: 100, comment: "Great work!" };
}
});
安全模式
| 模式 | 配置 | 功能 |
|---|---|---|
| 本地沙箱(默认) | Node.js 22.18+ | Node 权限模型(仅读取代码 API;不写入文件、不创建子进程、不加载原生插件),超时 120 秒,内存 512MB,过滤环境变量,尽力而为的网络控制 |
| 容器沙箱 | TS_SANDBOX_MODE=container | 通过 Docker/Podman 隔离容器文件系统;出站流量保障取决于部署配置 |
| 无沙箱 | ENABLE_TS_SANDBOX=false | 完整的本地访问权限(不推荐) |
请参阅批量评分示例,了解详细操作指南。
使用方法
MCP 客户端会自动启动服务。只需自然地提出问题:
- “这周有哪些截止日期?” / “显示我的成绩” / “我需要完成哪些同伴评审?”
- “谁还没有提交作业 3?” / “给尚未提交的学生发送提醒”
快速入门指南:学生 | 教育者 | 实际工作流 | 故障排除
文档
- 工具文档 — 可用工具的参考文档,包括受可选功能开关控制的工具
- 学生指南 — 学生入门指南
- 教育工作者指南 — FERPA 注意事项和教育工作者工作流
- 批量评分示例 — 批量评分操作指南
- 开发指南 — 架构和贡献指南
技术详情
基于 FastMCP 构建,使用异步 httpx、pydantic 验证和 python-dotenv 配置。采用现代 src/ 布局,核心路径均包含类型提示,并支持连接池、分页和速率限制。自动化测试套件以及 ruff + black 可保障代码质量。
故障排除
如果遇到问题:
- 服务无法启动 — 检查你的本地安装配置:
.env文件、虚拟环境路径和依赖项 - 身份验证错误 — 检查你的 Canvas API 令牌是否有效,以及是否具备相应权限
- 连接问题 — 检查 Canvas API URL 是否正确,以及网络是否可访问
- 调试 — 查看 MCP 客户端的控制台日志(例如 Claude Desktop 的开发者控制台),或手动运行服务以查看错误输出
安全
运行时安全和隐私控制:
| 层级 | 默认设置 |
|---|---|
| 日志中的个人身份信息 (PII) 清理 | LOG_REDACT_PII=true |
| 启动时令牌验证 | 始终开启 |
| 结构化审计日志 | 可选启用:LOG_ACCESS_EVENTS=true |
| 代码执行防护措施 | ENABLE_TS_SANDBOX=true(本地模式下尽力而为) |
对于注重 FERPA 合规性的教育工作者工作流,可选择启用匿名化:ENABLE_DATA_ANONYMIZATION=true。有关适用范围和配置详情,请参阅教育工作者指南。
发布
已发布至 PyPI、MCP Registry 和 skills.sh(Agent 技能)。发布通过 GitHub Actions 自动完成——为版本打标签(git tag vX.Y.Z && git push origin vX.Y.Z),其余工作由 CI 处理。
相关项目:UIUC Course MCP
Canvas MCP 的创建者 Vishal Sachdev 推出了 UIUC Course MCP,可将伊利诺伊大学公开的课程搜索、课程描述和班级课表接入你的本地 AI 助手。它仅支持只读操作,且无需账户或 API 密钥。可使用它查找课程,并使用 Canvas MCP 处理 Canvas 课程中支持的工作流。两项服务需要分别设置,且不提供自动账户关联功能。
贡献
欢迎贡献!你可以:
- 提交问题报告 Bug 或提出功能请求
- 创建拉取请求以改进项目
- 分享你的使用场景和反馈
贡献者
感谢所有为 Canvas MCP 做出贡献的人:
- @KKazuhaK — 学生小组、年级、测验、日历、动态和收件箱工具;Windows CI;课程标识符解析器;完整读取全部内容(#456 至 #470)
- @bruchris — 在测试套件中,所有文本读写均使用 UTF-8(#445)
- @papatistos — 通过 GraphQL 读取小组空间讨论和匿名讨论(#433、#439)
- @lindsay-cheng — 为逾期提交添加 Canvas
missing标记(#423) - @EastArctica — 外部工具作业不再被报告为缺交(#390)
- @DomBarker99 — 用于远程 MCP 部署的
read_course_file工具(#90) - @Promithius-DR — 基于角色的工具筛选和工具注释(#84)
- @Metzpapa — 文件下载和列表工具(#75)
- @JCSnap — 学生工具错误修复(#72、#73)
许可证
本项目采用 MIT 许可证授权 — 详情请参阅 LICENSE 文件。
由 Vishal Sachdev 创建
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。