mcpField
C
canvas-mcp

canvas-mcp

本地服务
canvas-mcp.illinihunt.org科研与教育3081 天前更新

关于 canvas-mcp

canvas-mcp 是面向 Canvas LMS 的 MCP 服务,为学生、教育者、课程设计者和开发者提供按角色组织的工具。它涵盖课程查询、内容管理、评分和无障碍检查,并提供可选的工作流技能。

主要功能

  1. 01提供学生与课程信息查询工具
  2. 02管理作业、模块、页面和文件
  3. 03查看提交并执行批量评分
  4. 04扫描课程内容的无障碍问题
  5. 05提供课程工作流技能

适用场景

  1. 01检查作业截止日期和课程成绩
  2. 02创建课程内容或管理分组
  3. 03批量处理提交与评分
  4. 04审查课程结构和无障碍问题

MCP 相关

作为 MCP 服务,它向兼容客户端提供 Canvas LMS 操作工具,默认配置启用的工具较少,可选功能可扩展工具范围。部分技能为多步骤课程工作流提供操作配方。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"vishalsachdev-canvas": {
"command": "uvx",
"args": [
"canvas-mcp"
]
}
}
}
启动命令uvx canvas-mcp

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

安装包
pypicanvas-mcp1.16.0

工具

还没有获取到工具列表

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

详细介绍

Canvas MCP — Canvas LMS 的 AI 工具

Canvas MCP 服务

License: MIT skills.sh

适用于 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_itemsCanvas 待办事项列表“显示我的待办事项列表”
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_accessibilityWCAG 违规扫描器(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 项以上内容、自定义逻辑、本地逐项处理
**决策树:**简单查询 → MCP 工具。批量评分(10+)→ `bulk_grade_submissions`。复杂批量操作(30+)→ `execute_typescript`。
快速参考

**课程标识符:**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,无需使用终端或编辑配置文件:

  1. 从最新版本下载 canvas-mcp.mcpb。
  2. 双击该文件(或将其拖入 Claude Desktop → Settings → Extensions)。
  3. 按提示输入你的 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 登录)。申请获批后:

  1. 前往 Canvas → Account → Settings → Approved Integrations,找到新 token, 点击 Activate,然后刷新页面。
  2. 从 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 的客户端,通常按以下步骤配置:

  1. 找到客户端的 MCP 配置文件
  2. 添加服务条目,包含:
    • 服务名称: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 交互的工具。这些工具按逻辑类别组织,便于查找和维护。

工具类别

学生工具(新增!)

  • 跟踪个人作业并管理截止日期
  • 监控所有课程的成绩
  • 管理待办事项列表和同伴评审
  • 跟踪提交状态

共享工具(学生和教育者均可使用)

  1. 课程工具 - 列出和管理课程、获取详细信息,以及根据教学大纲内容生成摘要
  2. 讨论与公告工具 - 管理讨论、公告和回复
  3. 页面与内容工具 - 访问页面、模块和课程内容

教育者工具 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_typescript30 项以上、自定义逻辑在本地处理项目并返回选定的输出

使用 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?” / “给尚未提交的学生发送提醒”

快速入门指南:学生 | 教育者 | 实际工作流 | 故障排除

文档

技术详情

基于 FastMCP 构建,使用异步 httpx、pydantic 验证和 python-dotenv 配置。采用现代 src/ 布局,核心路径均包含类型提示,并支持连接池、分页和速率限制。自动化测试套件以及 ruff + black 可保障代码质量。

故障排除

如果遇到问题:

  1. 服务无法启动 — 检查你的本地安装配置:.env 文件、虚拟环境路径和依赖项
  2. 身份验证错误 — 检查你的 Canvas API 令牌是否有效,以及是否具备相应权限
  3. 连接问题 — 检查 Canvas API URL 是否正确,以及网络是否可访问
  4. 调试 — 查看 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 创建

评论

支持 Markdown

第一次接触 MCP?

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

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