关于 Canvas API MCP
Canvas API MCP 将 AI 客户端连接到个人 Canvas LMS 账户,支持学生处理课程事务。它既提供常用课程工具,也可搜索并调用 Canvas 实例开放的接口。
主要功能
- 01查看截止日期与成绩
- 02读取课程文件和内容
- 03查看并提交作业
- 04阅读并回复讨论
- 05搜索和调用 Canvas 接口
适用场景
- 01查看近期课程任务和截止日期
- 02阅读讲义文件与课程大纲
- 03查看作业反馈
- 04查找较少见的 Canvas API 操作
MCP 相关
MCP 服务将 Canvas LMS 数据与操作封装为工具,并提供提示词和资源。它使用个人访问令牌连接用户自己的账户。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
uvx canvas-api-mcpCANVAS_BASE_URLBase URL of your Canvas LMS instance, e.g. https://yourschool.instructure.comCANVAS_TOKEN密钥Canvas API access token (Canvas: Account > Settings > New Access Token)CANVAS_MAX_PAGESOptional cap on the number of pages fetched per paginated Canvas API call本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
19收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| course_id | integer | 是 | 课程 ID,来自 my_courses |
详细介绍
canvas-api-mcp
再也不会错过作业截止日期。
问问你的 AI 哪些作业即将截止,它会直接从 Canvas 读取答案:
真实的截止日期、真实的提交状态,无需在不同平台间复制任何内容。
适用于 Canvas LMS 的 MCP 服务。提供 16 个精选工具,满足日常学习需求;此外还有一个网关,可访问 Canvas 实例公开的所有端点。
📖 文档:mcp.johannsenlum.com/canvas-lms · 安装指南 · 工具参考 · 技能 · 合规说明
供个人使用的软件。 Canvas 的 API 政策要求供多人使用的应用采用 OAuth,而 Canvas OAuth 无法通过本地安装的软件安全实现(不支持 PKCE,且不能将
client_secret随软件包一起发布)。 请在自己的账户中使用自己的令牌。详见合规说明。
你可以这样提问
实际提示词及回答问题的工具。
你: 这周有哪些作业要交? Claude: (调用
whats_due):你有 3 项作业要交:问题集 4(周四,CS3230)、讨论回复(周五,IS4302)和里程碑 2 报告(周日,EE2211)。
你: 我数据库课程的成绩怎么样?第 6 周的教学大纲有什么内容? Claude: (依次调用
my_grades、get_syllabus,然后调用course_content获取第 6 周的模块):你的总成绩为 87%。第 6 周讲解规范化,并安排了一篇阅读材料和一个需在周五提交的实验文件。
你: 总结第 8 讲的 PDF 讲义,并调出我的作文提交内容,让我看看反馈。 Claude: (调用
list_files+read_file获取 PDF,然后调用my_submission获取作文):……
你: 回复“Project teams”讨论,说我下午 3 点之后有空参加小组会议。 Claude: (调用
post_discussion_reply✏️):已在讨论串中发布。
你: Canvas 是否提供过按题目分类的测验统计?覆盖整个学期的那种。 Claude: (调用
search_canvas_api查找合适的端点,然后调用canvas_request请求该端点):……
最后一个例子正是网关工具的用武之地:只要你的 Canvas 实例上存在某个端点,search_canvas_api 就能找到它,canvas_request 就能调用它,即使只有 16 个工具经过了人工精选。
安装
先决条件
-
Python 3.11+
-
Canvas 个人访问令牌。你的机构必须允许学生创建此类令牌:前往 Canvas → Account → Settings → Approved Integrations,查看是否有 “+ New access token” 按钮。附截图的完整操作指南: mcp.johannsenlum.com/canvas-lms/install。
请注意,令牌会过期。 自 Instructure 于 2025 年 10 月进行安全更新以来,仅持有学生角色的账户必须将有效期设为不超过 120 天,且机构通常会设定更短的上限(NUS 允许 90 天)。请记下过期日期:令牌一旦过期,所有工具会立即返回
401,看起来像是安装出错,而不是凭据过期。
运行服务
canvas-api-mcp 已发布到 PyPI。运行方式如下:
uvx canvas-api-mcp
从源代码安装(贡献者 / 尚未发布的 main)。 这不属于上述常规安装流程,只有在你想使用最新的未发布代码,而不是 PyPI 上已发布的版本时才需要:
uvx --from git+https://github.com/JohannsenLum/canvas-api-mcp canvas-api-mcp
或者从本地克隆运行:
git clone https://github.com/JohannsenLum/canvas-api-mcp
cd canvas-api-mcp
uv sync
快速安装(一键安装)
只有 Cursor、VS Code 和 LM Studio 支持一键深层链接。其他客户端均没有已记录的安装链接格式。这些链接会预填下方的配置,但之后仍需填写 CANVAS_BASE_URL 和 CANVAS_TOKEN。
所有客户端(手动配置)
你的令牌保留在自己的设备上,存放于你自己的配置文件中。除直接发送到你的 Canvas 实例外,它绝不会传输到任何地方。
| 客户端 | 深层链接? |
|---|---|
| Claude Code | 否 |
| Claude Desktop | 否 |
| Cursor | 是,见上文 |
| VS Code | 是,见上文 |
| LM Studio | 是,见上文 |
| Zed | 否 |
| Windsurf | 否(Windsurf 仅会解析其自身注册表中的服务) |
Claude Code:~/.claude.json
{
"mcpServers": {
"canvas": {
"command": "uvx",
"args": ["canvas-api-mcp"],
"env": {
"CANVAS_BASE_URL": "https://canvas.yourschool.edu",
"CANVAS_TOKEN": "your-token-here"
}
}
}
}
Claude Desktop:claude_desktop_config.json
macOS:~/Library/Application Support/Claude/claude_desktop_config.json
Windows:%APPDATA%\Claude\claude_desktop_config.json
Claude Desktop 没有一键安装方式(它安装的是 .mcpb 捆绑包,而非深层链接)。通过 Settings → Developer → Edit Config 复制并粘贴此 JSON:
{
"mcpServers": {
"canvas": {
"command": "uvx",
"args": ["canvas-api-mcp"],
"env": {
"CANVAS_BASE_URL": "https://canvas.yourschool.edu",
"CANVAS_TOKEN": "your-token-here"
}
}
}
}
Cursor:~/.cursor/mcp.json
作为上方按钮的备用方案,或者如果你更愿意直接粘贴:
{
"mcpServers": {
"canvas": {
"command": "uvx",
"args": ["canvas-api-mcp"],
"env": {
"CANVAS_BASE_URL": "https://canvas.yourschool.edu",
"CANVAS_TOKEN": "your-token-here"
}
}
}
}
VS Code:.vscode/mcp.json
作为上方按钮的备用方案,或者如果你更愿意直接粘贴。请注意,VS
Code 使用 servers 键,而非 mcpServers:
{
"servers": {
"canvas": {
"type": "stdio",
"command": "uvx",
"args": ["canvas-api-mcp"],
"env": {
"CANVAS_BASE_URL": "https://canvas.yourschool.edu",
"CANVAS_TOKEN": "your-token-here"
}
}
}
}
LM Studio:mcp.json(Program → Install → Edit mcp.json)
作为上方按钮的备用方案,或者如果你更愿意直接粘贴:
{
"mcpServers": {
"canvas": {
"command": "uvx",
"args": ["canvas-api-mcp"],
"env": {
"CANVAS_BASE_URL": "https://canvas.yourschool.edu",
"CANVAS_TOKEN": "your-token-here"
}
}
}
}
Zed:settings.json
Zed 没有深层链接。请在 Zed
设置的 context_servers 下添加以下内容:
{
"context_servers": {
"canvas": {
"source": "custom",
"command": "uvx",
"args": ["canvas-api-mcp"],
"env": {
"CANVAS_BASE_URL": "https://canvas.yourschool.edu",
"CANVAS_TOKEN": "your-token-here"
}
}
}
}
Windsurf:~/.codeium/windsurf/mcp_config.json
Windsurf 没有深层链接。它只会解析其自身注册表中的服务,因此必须通过 Windsurf Settings → MCP Servers → Edit raw config 手动粘贴:
{
"mcpServers": {
"canvas": {
"command": "uvx",
"args": ["canvas-api-mcp"],
"env": {
"CANVAS_BASE_URL": "https://canvas.yourschool.edu",
"CANVAS_TOKEN": "your-token-here"
}
}
}
}
工具
| 工具 | 功能 |
|---|---|
whoami | 身份信息以及你在每门课程中的角色 |
get_calendar_feed_url | 你的私人日历 .ics 链接(仅在你提出请求时提供) |
my_courses | 正在进行的课程及其代码、学期和角色 |
whats_due | 所有截止事项,按截止时间从近到远排列 |
my_grades | 每门课程的当前成绩 |
list_assignments | 某门课程的作业及提交状态 |
get_assignment | 一份完整的作业及其评分标准 |
my_submission | 你的提交、成绩和反馈 |
submit_assignment ✏️ | 提交作业 |
course_announcements | 最新公告 |
course_content | 模块及其内容 |
list_files | 某门课程中的文件 |
read_file | 从 PDF/DOCX/PPTX/文本文件中提取文本 |
get_page | 按 slug 指定的 Canvas wiki 页面 |
get_syllabus | 某门课程的教学大纲 |
read_discussion | 讨论主题,或某个主题的回复 |
post_discussion_reply ✏️ | 在讨论中发帖 |
search_canvas_api | 按关键字查找任意端点(网关) |
canvas_request ✏️ | 执行任意端点(网关) |
✏️ 会向 Canvas 写入数据。总共有 3 个写入工具:submit_assignment、
post_discussion_reply,以及在使用非 GET 方法调用时的 canvas_request
(通过 canvas_request 发起的 GET 调用是只读的)。
search_canvas_api + canvas_request 可以访问你的实例公开的全部约 1,116 个端点。它们能执行的操作由 Canvas 根据你的令牌权限决定:教师令牌可解锁教育工作者端点,无需更改此服务。
提示词
week_ahead、study_pack、grade_check。
资源
canvas://me、canvas://courses、canvas://api/catalog。
技能
如果你的客户端支持 skills 约定:
npx skills add JohannsenLum/canvas-api-mcp
其他机构
适用于任何 Canvas 实例:设置 CANVAS_BASE_URL。约 1,116 个端点的目录随软件包一同提供,位于
canvas_api_mcp/data/catalog.json。若要与部署中的确切功能集相匹配,请重新生成:
python scripts/build_catalog.py https://canvas.yourschool.edu -o data/catalog.json
合规
- 学术诚信。
submit_assignment可以提交任何内容,包括 AI 生成的作品。提交非本人完成的作品违反几乎所有机构的学术诚信规则,Canvas 的 API Policy 也明确禁止违反这些规则的使用。责任由你承担。 - 速率限制。 客户端会遵守 Canvas 公布的配额进行限流。请勿移除限流:超负荷调用 API 是被禁止的。
- 课程资料。
read_file用于获取供你本人学习的资料。请勿重新分发。 - 你的令牌等同于密码。 它可以读取你的成绩,也可以以你的身份提交作业。请设置有效期。切勿将其提交到代码库。
- 仅限个人使用。 第一阶段面向使用本人令牌的单个学生。没有专门为教育工作者打造的工具;Canvas 的 OAuth 流程不支持 PKCE,因此这个本地安装的服务无法实现 Canvas API Policy 对更广泛用途所要求的多用户 OAuth。请勿将其重新打包为多租户服务。
开发
uv sync
uv run pytest -v
# Live tests against your real account (read-only)
CANVAS_LIVE_TESTS=1 uv run pytest tests/test_live.py -v
环境变量:CANVAS_BASE_URL、CANVAS_TOKEN,以及可选的
CANVAS_MAX_PAGES(默认值为 10)和 CANVAS_TIMEOUT(秒,默认值为 30)。
请参阅 env.template。
贡献
欢迎提交问题和拉取请求:请参阅 CONTRIBUTING.md,了解设置方法、修改前应了解的架构规则,以及添加新精选工具的标准。
发现安全问题?请勿公开提交问题。 请参阅 SECURITY.md 了解私密报告方式;这在此处尤其重要,因为本项目会处理等同于密码的 Canvas 令牌。
变更记录见 CHANGELOG.md。
许可证
MIT © 2026 Johannsen Lum。
你可以使用、修改、重新分发它,也可以基于它开发商业产品;唯一的条件是保留版权声明和许可证文本。本软件不提供任何形式的担保。
贡献内容也遵循相同的许可证。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。