使用说明
Canvas LMS MCP服务器
MCP(模型上下文协议)服务器,将Claude等AI助手连接到Canvas LMS 账户通过自然语言查询成绩、作业、缺失的工作等。
非常适合: 家长监督孩子的学业进步,学生跟踪自己的 工作,或任何想通过人工智能与Canvas数据交互的人。
它能做什么?
问克劳德这样的问题:
- “本周有什么作业要交?”
- “显示所有课程中缺失的作业”
- “我的生物学成绩是多少?”
- “有什么迟交的作业我应该知道吗?”
- “未来7天的待办事项清单上有什么?”
安装选项
选择最适合您的方法:
| 方法 | 最适合 | 凭证存储 |
|---|---|---|
| 桌面扩展 | 轻松一键安装 | OS钥匙链(安全) |
| 克劳德代码(CLI) | 使用Claude Code | Shell环境变量或配置文件的开发人员 |
| npm包 | Claude Desktop+1密码 | 配置文件或密码管理器 |
| 独立CLI | 无AI的直接终端使用 | 环境变量 |
先决条件(所有方法)
1.获取Canvas API代币
- 登录您的Canvas LMS实例(例如。,
https://yourschool.instructure.com) - 首选 账户 → 设置
- 滚动到 已批准的集成
- 点击 +新访问令牌
- 为其命名(例如“Claude MCP”)并单击 生成令牌
- 立即复制令牌 -你再也看不到了
2.查找画布基础URL
Canvas基本URL是您用于访问Canvas的主要URL:
https://yourschool.instructure.comhttps://canvas.yourdistrict.org
选项1:桌面扩展(推荐)
最简单的开始方式。您的API令牌安全地存储在您的操作系统的 钥匙扣。
安装
- 下载最新
.mcpb文件来自 发布 - 双击安装,或拖动到Claude Desktop
- Claude Desktop将提示您输入Canvas凭据
- 完成!开始谈论你的课程
存储什么
- API代币 → macOS钥匙链/Windows凭据管理器(加密)
- 基本URL → Claude桌面设置
- 学号 → Claude桌面设置(如果使用观察者帐户)
选项2:克劳德代码(CLI)
对于使用 克劳德代码,人工智能驱动 CLI工具。
要求: Node.js 18+
快速设置
1.将环境变量添加到shell配置文件中 (~/.zshrc 或 ~/.bashrc):
export CANVAS_API_TOKEN="your_token_here"
export CANVAS_BASE_URL="https://yourschool.instructure.com"
# Optional for parent/observer accounts:
# export CANVAS_STUDENT_ID="123456"
2.重新加载你的shell:
source ~/.zshrc # or source ~/.bashrc
3.将MCP服务器添加到您的克劳德代码设置中。
编辑 ~/.claude/settings.json (全球)或 .mcp.json (项目层面):
{
"mcpServers": {
"canvas": {
"command": "npx",
"args": ["-y", "@mtgibbs/canvas-lms-mcp"],
"env": {
"CANVAS_API_TOKEN": "${CANVAS_API_TOKEN}",
"CANVAS_BASE_URL": "${CANVAS_BASE_URL}"
}
}
}
}
4.重新启动克劳德代码 -Canvas MCP将可用。
运作原理
npx -y首次运行时自动从npm下载包(否npm install需要)- 这
${VAR}语法从shell环境中提取值 - Claude Code在聊天时可以访问所有Canvas工具
预安装以加快启动速度(可选)
如果您希望全局安装:
npm install -g @mtgibbs/canvas-lms-mcp
然后更新你的配置:
{
"mcpServers": {
"canvas": {
"command": "canvas-lms-mcp",
"args": [],
"env": {
"CANVAS_API_TOKEN": "${CANVAS_API_TOKEN}",
"CANVAS_BASE_URL": "${CANVAS_BASE_URL}"
}
}
}
}
选项3:npm包
对于想要比桌面扩展更灵活的Claude Desktop用户。
要求: Node.js 18+
基本设置
编辑您的Claude Desktop配置文件:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json 窗户:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"canvas": {
"command": "npx",
"args": ["-y", "@mtgibbs/canvas-lms-mcp"],
"env": {
"CANVAS_API_TOKEN": "your_token_here",
"CANVAS_BASE_URL": "https://yourschool.instructure.com"
}
}
}
}
保存后重新启动Claude Desktop。
保护您的API代币
基本设置以纯文本形式存储令牌。以下是更安全的替代方案:
选项A:1Password CLI(建议1Password用户使用)
如果你使用 1密码,您可以在运行时注入机密,这样它们就永远不会 触摸你的配置文件。
1.安装1Password命令行界面: 点击此处下载
2.将您的Canvas凭据存储在1Password中 (注意保管库和项目名称)
3.创建包装脚本 在 ~/.config/canvas-mcp-wrapper.sh:
#!/bin/bash
# Canvas MCP 1Password Wrapper
# Ensure 1Password CLI is authenticated
if ! op account get &>/dev/null 2>&1; then
eval $(op signin)
fi
# Export credentials from 1Password and run the MCP server
export CANVAS_API_TOKEN=$(op read "op://Private/Canvas LMS/token")
export CANVAS_BASE_URL=$(op read "op://Private/Canvas LMS/url")
# Uncomment for observer accounts:
# export CANVAS_STUDENT_ID=$(op read "op://Private/Canvas LMS/student_id")
exec npx -y @mtgibbs/canvas-lms-mcp
4.使其可执行:
chmod +x ~/.config/canvas-mcp-wrapper.sh
5.更新您的Claude桌面配置:
{
"mcpServers": {
"canvas": {
"command": "/Users/YOUR_USERNAME/.config/canvas-mcp-wrapper.sh",
"args": []
}
}
}
现在,您的令牌存在于1Password中,仅在MCP服务器启动时加载。
选项B:限制文件权限
如果必须将令牌存储在配置文件中,请至少限制访问:
# macOS/Linux
chmod 600 ~/Library/Application\ Support/Claude/claude_desktop_config.json
对于家长/观察员账户
如果您是拥有与孩子Canvas帐户链接的观察者帐户的家长,请添加学生 身份证件:
桌面扩展
在设置过程中出现提示时输入学生ID。
npm包
添加 CANVAS_STUDENT_ID 对于您的环境变量:
{
"env": {
"CANVAS_API_TOKEN": "...",
"CANVAS_BASE_URL": "...",
"CANVAS_STUDENT_ID": "123456"
}
}
查找孩子的学生证
- 使用您的观察者帐户登录Canvas
- 当查看学生的信息时,学生ID出现在URL中(例如。,
/users/123456) - 或者询问学校的Canvas管理员
可用工具
连接后,Claude可以访问这些功能:
| 工具 | 说明 |
|---|---|
get_courses |
列出所有当前成绩的课程 |
get_comprehensive_status |
一次通话即可获得完整的学术概述(成绩、缺失、即将到来) |
get_missing_assignments |
Canvas标记为缺失的作业 |
get_unsubmitted_past_due |
逾期工作尚未提交 |
get_recent_grades |
最近评分的作业 |
get_upcoming_assignments |
特定课程的作业即将到期 |
get_due_this_week |
所有课程的所有作业 |
list_assignments |
按状态搜索/筛选分配 |
get_stats |
按课程分列的迟到/缺失统计数据 |
get_todo |
计划项目和待办事项列表 |
分级周期过滤
默认情况下,所有工具都会返回 仅限当前分级期 (例如,第二学期)。这 匹配家长在Canvas门户中看到的内容,并阻止显示以前的旧作业 学期。
受影响的工具:
get_courses-成绩为当前评分期的成绩get_missing_assignments-仅显示当前期间缺失的工作get_unsubmitted_past_due-仅显示当前期间未提交的工作get_comprehensive_status-所有数据已过滤到当前期间
包括所有评分期 (例如,对于全年视图),请使用 all_grading_periods
参数:
"Show me all missing assignments including previous semesters"
→ Claude will call get_missing_assignments with all_grading_periods: true
对于CLI,请使用 --all-grading-periods 标志:
canvas missing --all-grading-periods
canvas unsubmitted --all-grading-periods
独立CLI
此软件包还包括一个独立的命令行工具,用于直接从您的 终端——不需要人工智能。
安装
# Option 1: Install globally
npm install -g @mtgibbs/canvas-lms-mcp
# Option 2: Run directly with npx (slower startup)
npx @mtgibbs/canvas-lms-mcp courses
配置
在shell配置文件中设置环境变量(~/.zshrc 或 ~/.bashrc):
export CANVAS_API_TOKEN="your_token_here"
export CANVAS_BASE_URL="https://yourschool.instructure.com"
export CANVAS_STUDENT_ID="123456" # Optional: for observer accounts
可用命令
# List all courses with grades
canvas courses
canvas courses --format table
# Get comprehensive academic status
canvas status
canvas status --format table
# List missing assignments (current grading period by default)
canvas missing
canvas missing --summary # Counts by course
canvas missing --include-unsubmitted # Include past-due not yet flagged
canvas missing --all-grading-periods # Include previous semesters
# List assignments due soon
canvas due --days 7
canvas due --show-graded # Include already-graded items
# List unsubmitted past-due assignments (current grading period by default)
canvas unsubmitted
canvas unsubmitted --course-id 12345
canvas unsubmitted --all-grading-periods # Include previous semesters
# List assignments with filters
canvas assignments --all-courses --due-this-week
canvas assignments --course-id 12345 --upcoming 7
canvas assignments --course-id 12345 --bucket overdue
# List grades/submissions
canvas grades --all-courses
canvas grades --all-courses --below B
canvas grades --course-id 12345 --days 14
# Show upcoming events
canvas upcoming --days 14
canvas upcoming --type assignment
# Show to-do list
canvas todo --days 7
canvas todo --hide-submitted
# Show late/missing statistics
canvas stats
canvas stats --hide-empty
全局选项
这些选项适用于所有命令:
| 选项 | 描述 |
|---|---|
--format <format> |
输出格式: json (默认)或 table |
--student <id> |
观察员帐户的学生ID(使用 CANVAS_STUDENT_ID 如果省略,则从配置中删除) |
--help |
显示命令的帮助 |
输出格式
- JSON (默认):机器可读,非常适合编写脚本或管道
jq - 表格:人类可读的格式化输出
# JSON output (default)
canvas courses
# Table output
canvas courses --format table
# Pipe JSON to jq for filtering
canvas missing | jq '.[] | select(.points_possible > 50)'
可用提示
提示是预先构建的对话启动器,引导克劳德完成常见的工作流程:
| 提示 | 描述 |
|---|---|
daily-checkin |
每日快速概述成绩、应交项目和关注点 |
week-planning |
计划下周的优先任务 |
course-analysis |
深入了解特定课程的表现 |
grade-recovery |
通过额外学分或重新提交来寻找提高成绩的机会 |
missing-work-audit |
对所有缺失和延迟的工作进行全面审计 |
使用提示
在Claude Desktop中,您可以直接触发提示:
- 点击 提示图标 (📝) 在聊天输入中
- 从列表中选择一个提示
- 填写任何必需的参数(如学生证)
- Claude将使用适当的工具执行工作流程
或者自然地问——克劳德会使用正确的工具:
“你能为我的学生办理每日入住手续吗?”
对话示例
这些示例显示了现实的交互,包括Claude调用哪些工具以及输出到哪些工具 期待。
示例1:每日入住
用户提示:
“给我一个关于我孩子学校情况的最新消息”
工具名称:
get_courses-检索所有当前成绩的课程get_missing_assignments-检查缺失的工作get_due_this_week-查找即将到来的截止日期
克劳德的回答:
以下是您的学生今天的概述:
当前等级:
- AP生物学:92%(A-)
- 英语11:87%(B+)
- 美国历史:78%(C+)
- 代数2:91%(A-)
需要注意:
- 美国历史“第12章阅读测验”-昨天到期,未提交
- AP生物学中的“实验室报告:光合作用”-2天前到期
本周即将到来:
- 论文草稿(英语11)-周四截止
- 单元测试(代数2)-周五截止
我建议优先考虑这两个缺失的作业,尤其是自那以后的历史测验 那个班的成绩最低。
示例2:查找缺失的工作
用户提示:
“所有班级都缺少哪些作业?”
工具名称:
get_missing_assignments-获取画布标记的缺失项目get_unsubmitted_past_due-捕获Canvas可能遗漏的项目
克劳德的回答:
我发现了4个缺失的作业:
作业 课程 截止日期 分数 第12章阅读测验 美国历史 1月18日 20 实验室报告:光合作用 AP生物学 1月16日 50 词汇集8 英语11 15 15 问题集7.3 代数2 1月10日 25日 风险总分: 110分
生物学实验室的报告最有价值——我从这里开始。代数问题集是最古老的,所以 检查是否仍接受迟交的申请。
示例3:规划一周
用户提示:
“接下来7天要交什么?帮我确定优先顺序。”
工具名称:
get_due_this_week-检索未来7天内到期的所有作业get_stats-获取上下文的延迟/缺失统计信息
克劳德的回答:
以下是未来7天的情况:
高优先级(价值50+分):
- 第五单元考试(代数2)-1月24日星期五-100分
- 研究论文草稿(英语11)-1月23日星期四-75分
中等优先级:
- 实验题(AP生物学)-1月22日星期三-30分
- 地图测验(美国历史)-1月21日星期二-25分
较低优先级:
- 讨论帖子(英语11)-1月26日星期日-10分
建议时间表:
- 星期一:开始研究论文大纲
- 星期二:地图测验准备+继续论文
- 周三:生物实验室问题
- 星期四:完成并提交论文
- 星期五:代数备考
注意:美国历史目前有2项作业缺失,因此保持最新状态很重要。
故障排除
“需要CANVAS_API_TOKEN”
您的API令牌传递不正确。仔细检查:
- 令牌位于
env配置的一部分 - 令牌周围没有多余的空格或引号
- 配置文件是有效的JSON
- 如果使用1Password包装器,请手动运行它进行测试:
~/.config/canvas-mcp-wrapper.sh
“CANVAS_BASE_URL是必需的”
确保您的Canvas URL已设置并包含 https://.
服务器未出现在Claude中
- 完全重新启动克劳德桌面
- 检查您的配置文件是否是有效的JSON(使用 JSON验证器)
- 确保已安装Node.js 18+:
node --version
“未经授权”或401错误
- 您的API令牌可能已过期-生成一个新令牌
- 确保令牌具有必要的权限
- 验证基本URL是否正确(没有尾随斜线)
看不到学生数据(家长帐户)
- 验证
CANVAS_STUDENT_ID设置正确 - 确认您的观察员帐户已正确链接到Canvas中的学生
- 尝试不带引号的学生ID(作为数字)
1密码包装器不工作
- 跑
op signin首先手动进行身份验证 - 检查项目路径是否与您的保管库匹配:
op read "op://VaultName/ItemName/field" - 确保包装器脚本可执行:
chmod +x ~/.config/canvas-mcp-wrapper.sh
隐私和安全
数据收集
此MCP服务器收集和处理以下数据 本地在您的计算机上:
| 数据类型 | 来源 | 目的 |
|---|---|---|
| 课程信息 | 画布API | 显示成绩和课程列表 |
| 工作分配数据 | 画布API | 显示截止日期、缺少工作、提交 |
| 学生标识符 | 画布API | 将数据与正确的学生关联 |
| API凭据 | 用户提供 | 使用Canvas进行身份验证 |
数据使用
- 仅限本地处理:所有数据都直接在您机器上的Canvas和Claude之间流动
- 无外部传输:此服务器不向任何第三方服务发送数据
- 无遥测:我们不收集使用统计数据、分析或崩溃报告
- 无数据存储:数据是按需获取的,不会在会话之间持久化
第三方服务
此扩展连接到:
- Canvas LMS (您学校的实例):使用您的API令牌检索学术数据
- 克劳德 (Anthropic):在本地处理您的查询的AI助手
我们不会与任何其他第三方共享您的数据。
数据保留
- 基于会话:数据仅在活动使用期间保存在内存中
- 无缓存:学术数据未缓存或存储在本地
- 凭证:根据您的安装方法存储:
- 桌面扩展:OS钥匙串(macOS钥匙串/Windows凭据管理器)
- npm+1Password:你的1Password保险库
- npm with env-vars:你的配置文件(建议限制文件权限)
您的权利
- 您可以通过删除Canvas API令牌随时撤销访问权限
- 卸载扩展会删除所有本地配置
- 您学校的Canvas实例根据其策略保留自己的数据
安全措施
- 令牌范围:您的API令牌仅访问您可以在Canvas中看到的数据
- 只读操作:此服务器仅读取数据;它不能修改作业或成绩
- 无网络暴露:服务器仅通过本地stdio通信,不通过网络
联系
关于隐私问题或疑虑:
- GitHub问题: github/mtgibbs/canvas-lms-mcp/issues
- 作者: @mtgibbs
支持
需要帮助?以下是如何获得支持:
- 错误报告: 打开一个问题
- 功能请求: 打开一个问题
- 问题: 发起讨论
- 安全问题:请通过以下方式私下报告安全漏洞 GitHub安全公告
响应时间:我们的目标是在几天内对问题作出回应。这是一个社区项目 在业余时间进行维护。
发展
# Clone the repo
git clone https://github.com/mtgibbs/canvas-lms-mcp.git
cd canvas-lms-mcp
# Run MCP server in development (requires Deno)
deno run -A agent.ts
# Run CLI in development
deno task dev courses --format table
# Build npm package
deno task build:npm
# Build Desktop Extension
deno task build:extension
# Type check
deno task check
释放
通过以下方式完全自动化发布 请释放 + npm可信发布 (OIDC)。无需令牌!
它是如何工作的:
Push commits with conventional messages (feat:, fix:, etc.)
↓
Release Please creates/updates a Release PR
↓
Merge the PR when ready
↓
Release Please creates GitHub Release + tag
↓
Publish workflow runs automatically
↓
npm package published + .mcpb attached to release
提交消息格式:
feat: add new tool→ 小版本碰撞(0.1.0→0.2.0)fix: correct API error→ 补丁版本凹凸(0.1.0→0.1.1)feat!: breaking change→ 主版本碰撞(0.1.0→1.0.0)chore: update deps→ 无发布
首次设置:
-
手动发布第一个版本:
deno task build:npm cd npm && npm publish --access public -
在npmjs.com上配置受信任的发布服务器:
- 前往您的包裹→ 设置 → 可信发布者
- 选择 GitHub操作
- 组织/用户:
mtgibbs - 存储库:
canvas-lms-mcp - 工作流文件名:
publish.yml - 点击 设置连接
之后,只需推送提交并合并发布PR——其他一切都是自动的!
许可证
MIT许可证-请参阅 许可证 了解详情。