关于 Canvas LMS MCP for students
面向 Canvas 学生的开源 MCP 服务,可供 AI 应用查询课程、作业、成绩和公告。它只读取 Canvas,并可按需在本机生成 due-date 的 .ics 日历文件。
主要功能
- 01查询课程、作业和截止日期
- 02查看缺交作业与课程成绩
- 03读取课程内容、教学大纲和公告
- 04汇总近期动态与讨论
- 05导出截止日期为 .ics 文件
适用场景
- 01检查本周待交和逾期作业
- 02查看各课程成绩及作业得分
- 03汇总近期教师公告和课程更新
- 04将 Canvas 截止日期导入日历
MCP 相关
作为 MCP 服务向 AI 客户端提供 13 个 Canvas 只读工具;唯一写入操作是在指定本机文件夹生成 .ics 日历文件。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y canvas-lms-student-mcpCANVAS_BASE_URLYour school's Canvas address, for example https://myschool.instructure.comCANVAS_API_TOKEN密钥A Canvas access token, created in Canvas under Account > Settings > New Access Token本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
面向学生的 Canvas LMS MCP
询问 AI,Canvas 里究竟还有哪些任务待完成。
Canvas LMS MCP 是一款免费的开源 MCP 服务,可供 Claude、ChatGPT、Cursor 和其他 AI 应用使用。它会读取你的 Canvas 课程、截止日期、成绩和公告,并且在 Canvas 中只能读取:绝不会在其中提交、编辑或删除任何内容。它唯一会写入的内容,是你自己的电脑上的 .ics 日历文件,而且只有在你提出要求时才会写入。
使用 npx 安装并运行,无需安装步骤:
npx -y canvas-lms-student-mcp
它会读取两个环境变量:CANVAS_BASE_URL,即你学校的 Canvas 地址;以及 CANVAS_API_TOKEN,即你在 Canvas 中创建的令牌。
适用于任何使用 Canvas 的学校。与 Instructure 无关。永久免费,无需注册,也无需订阅。你的登录信息只会发送到你自己的学校。
快速开始
- 在 Canvas 中,前往 账户 > 设置,向下滚动到 已批准的集成,然后点击 新建访问令牌。复制令牌。
- 将以下内容添加到 AI 应用的 MCP 配置中(对于 Claude Desktop,该文件为
claude_desktop_config.json):
{
"mcpServers": {
"canvas": {
"command": "npx",
"args": ["-y", "canvas-lms-student-mcp"],
"env": {
"CANVAS_BASE_URL": "https://yourschool.instructure.com",
"CANVAS_API_TOKEN": "paste-your-token-here"
}
}
}
}
- 重启 AI 应用,然后询问类似“这周有哪些任务到期?”的问题。
如需先检查设置,请在设置好两个环境变量后运行 npx canvas-lms-student-mcp doctor。
有些学校会关闭学生访问令牌。如果你看不到“新建访问令牌”按钮,说明你的学校已将其禁用,此 MCP 服务无法连接到你的账户。
你可以询问的问题
- “这周有哪些任务到期?”
- “我有未完成或逾期的任务吗?”
- “我每门课的成绩是多少?由哪些作业构成?”
- “老师最近发布了哪些公告?”
- “从上周以来,Canvas 中有什么新内容?”
- “显示 Networking 第 3 周模块中的内容。”
- “我的 Networking 1 课程中还有哪些作业尚未到期?”
- “将我的 Canvas 截止日期添加到 Google Calendar。”
工具
全部 13 个工具都从 Canvas LMS 读取信息,没有任何工具能在其中提交、编辑或删除内容。每个工具的说明都包含一个 AI 可以直接使用的示例提示词,“可以这样询问”一栏也列出了这些提示词。最后一个工具 export_due_dates_calendar 会将 .ics 文件写入你指定的文件夹。
如果某个工具针对单门课程,你可以直接提供课程名称,无需查找课程编号。提供 Canvas 课程 ID 或课程名称即可,例如“Networking 1”;工具会在 get_my_courses 显示的列表中匹配名称。如果名称与任何课程都不匹配,工具会说明这一点,并提示你返回 get_my_courses 查看课程列表。
| 工具 | 功能 | 可以这样询问 |
|---|---|---|
get_my_courses | 你的当前课程及其 ID | “这学期我在 Canvas 上有哪些课程?” |
get_todo | 你的 Canvas 待办事项列表 | “Canvas 上还有哪些事情需要我完成?” |
get_upcoming_due_dates | 即将截止的作业和活动,按时间从近到远排列 | “Canvas 上这周有哪些截止事项?” |
get_missing_assignments | 你尚未提交且已过截止时间的作业 | “我在 Canvas 上有哪些作业没交?” |
get_assignments | 按 ID 或名称查询某门课程的作业,包括截止日期和提交状态 | “Networking 1 这门 Canvas 课程中,哪些作业已经逾期?” |
get_my_grades | 每门课程的当前成绩,以及组成该成绩的作业分数和提交状态 | “我在每门 Canvas 课程中的成绩是多少?哪些作业计入了成绩?” |
get_course_content | 按 ID 或名称查询某门课程的模块和项目 | “显示我的 Canvas Networking 课程中的 Week 3 模块。” |
get_syllabus | 按 ID 或名称查询某门课程的教学大纲文本 | “Canvas 上的 Scripting 教学大纲是怎么说明评分的?” |
get_announcements | 你指定课程或所有课程的近期公告 | “我的教师最近在 Canvas 上发布了什么公告?” |
get_whats_new | 一次性查看近期公告、新近评分的作业和未读讨论回复 | “自上周以来,Canvas 上有什么新内容?” |
get_discussions | 按 ID 或名称查询某门课程的讨论主题 | “我的 Canvas Networking 课程中有哪些讨论正在进行?” |
get_calendar_events | 两个日期之间的日历活动 | “2026-10-01 到 2026-10-31 之间,我的 Canvas 日历上有哪些事项?” |
export_due_dates_calendar | 包含你所有截止日期的 .ics 文件,可导入 Google Calendar 或 Apple Calendar | “把我的 Canvas 截止日期添加到 Google Calendar。” |
日历导出
export_due_dates_calendar 会将你的 Canvas 截止日期和 Canvas 日历活动转换为 iCalendar 文件。指定一个文件夹,文件就会保存到那里,例如“将我的 Canvas 截止日期保存到 Documents 文件夹,格式为 .ics 文件”。你可以打开该文件,或将其导入 Google Calendar、Apple Calendar 或 Outlook。
该文件包含接下来 30 天内的事项,且只包含你仍需完成的工作。使用 days_ahead 可设置更长的时间范围,使用 course_id 可按 ID 或名称指定一门课程,使用 include_submitted 可添加你已提交的工作。每项活动都包含课程名称、分数、提交状态、返回 Canvas 的链接,以及提前一天的提醒。如果不指定文件夹,工具会直接返回日历文本,你可以用任意名称保存。
隐私与安全
- 你的令牌会保留在自己的电脑上,只会发送到你所在学校的 Canvas 地址。
- 本项目不会向任何其他服务发送数据。
- 12 个工具标记为只读。日历导出会在你指定的文件夹中写入一个 .ics 文件,仅此而已。
- 你可以随时在 Canvas 设置中撤销令牌。
故障排查
Canvas 和连接返回的错误会说明出了什么问题,以及该如何修复。最常见的错误如下:
| 消息 | 修复方法 |
|---|---|
| 未登录 | 令牌缺失、已过期或已撤销。在 Canvas 中创建新令牌(Account > Settings > New Access Token),然后运行 npx canvas-lms-student-mcp doctor。 |
| 拒绝访问 | 学校关闭了学生使用该功能的权限,或者令牌属于其他 Canvas 账户。 |
| 未找到 | 使用 get_my_courses 检查课程名称或 ID。如果所有请求都显示未找到,则 CANVAS_BASE_URL 有误。 |
| 请求过多 | 等待消息中指定的秒数,然后重试。 |
| 无法连接 | CANVAS_BASE_URL 中的主机不存在。检查拼写,例如 https://myschool.instructure.com。 |
| 未返回 Canvas API JSON | CANVAS_BASE_URL 中的地址不是 Canvas 站点。请使用学校的 Canvas 地址,不要添加额外路径。 |
开发
npm install
npm run build
npm test
测试使用模拟的 Canvas 服务,因此无需账户或网络连接。测试套件涵盖 doctor 命令、令牌错误、拒绝访问、请求过多和回复内容不是 Canvas 格式时的错误消息、.ics 日历导出,以及按名称查找课程。元数据测试会确保 package.json、server.json、glama.json、llms.txt 和服务端代码中的版本号一致,检查文档中的工具列表是否仍与服务端注册的工具一致,根据代码统计只读工具的数量,让文档中的数量与工具保持一致,并检查注册表条目列出的环境变量是否与代码读取的变量相同。推送到 main 和创建拉取请求时都会运行相同的构建和测试,因此本页顶部的徽章会显示当前结果。
npm 包包含两个注册表文件:server.json 用于 Model Context Protocol 注册表,glama.json 用于 Glama 目录。两个文件都包含名称、描述、版本、许可证、关键词、代码仓库和主页,以便目录条目展示服务的用途和代码所在位置。server.json 条目还指定 npx 为运行时,并列出目录站点应询问的两个环境变量,其中 CANVAS_API_TOKEN 标记为机密值。条目还包含 GitHub 仓库 ID,即使仓库重命名,该 ID 也会保持不变。
为什么选择 Canvas MCP
如果学校使用 Canvas,请使用此服务。如果学校使用 Brightspace,请使用 brightspace-mcp-server。两者分别为各自的 LMS 提供相同范围的功能。
| Canvas MCP | brightspace-mcp-server | |
|---|---|---|
| LMS | Canvas(Instructure) | Brightspace(D2L) |
| 免费 | 是 | 是 |
| 不会更改 LMS 中的任何内容 | 是 | 是 |
| 一行 npx 命令 | 是 | 是 |
Canvas MCP 使用你在 Canvas 中创建的 API 令牌登录。brightspace-mcp-server 则通过一次性设置命令,使用学校账号登录。
更多免费的学生 MCP 服务
全部免费、开源;访问你的账户时均为只读。浏览完整列表:brightspacemcp.com/more-mcps。
| 服务 | 功能 |
|---|---|
| Brightspace MCP | 面向 AI 的 D2L Brightspace。提供截止日期及真实提交状态、成绩、目标成绩计算器和课程文件。 |
| Moodle MCP | 面向 AI 的 Moodle,只读。提供截止日期、逾期作业、成绩和公告。 |
| Google Classroom MCP | 面向 AI 的 Google Classroom,只读。提供待办事项、截止日期、缺交作业和成绩。 |
| GPA Calculator MCP | 面向 AI 的 GPA、成绩换算和期末考试所需成绩计算器。可离线使用,无需账户。 |
| Citations MCP | 根据 DOI、ISBN 或手动输入的信息生成 APA、MLA 和 Chicago 格式的引文。无需账户。 |
| Study Planner MCP | 考试学习计划、间隔重复日期、番茄工作法计划和作业里程碑。可离线使用。 |
| Paper Finder MCP | 通过 OpenAlex 搜索学术论文、查找开放获取版本和相关研究。无需密钥。 |
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。