Canvas LMS MCP服务器

一个连接AI助手(如Claude)到Canvas LMS账户的MCP服务器,通过自然语言查询成绩、作业、未完成工作等信息。

  • by mtgibbs
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 mtgibbs/canvas-lms-mcp

使用说明

Canvas LMS MCP服务器

MCP(模型上下文协议)服务器,将Claude等AI助手连接到Canvas LMS 账户通过自然语言查询成绩、作业、缺失的工作等。

非常适合: 家长监督孩子的学业进步,学生跟踪自己的 工作,或任何想通过人工智能与Canvas数据交互的人。

它能做什么?

问克劳德这样的问题:

  • “本周有什么作业要交?”
  • “显示所有课程中缺失的作业”
  • “我的生物学成绩是多少?”
  • “有什么迟交的作业我应该知道吗?”
  • “未来7天的待办事项清单上有什么?”

安装选项

选择最适合您的方法:

方法 最适合 凭证存储
桌面扩展 轻松一键安装 OS钥匙链(安全)
克劳德代码(CLI) 使用Claude Code Shell环境变量或配置文件的开发人员
npm包 Claude Desktop+1密码 配置文件或密码管理器
独立CLI 无AI的直接终端使用 环境变量

先决条件(所有方法)

1.获取Canvas API代币

  1. 登录您的Canvas LMS实例(例如。, https://yourschool.instructure.com)
  2. 首选 账户 → 设置
  3. 滚动到 已批准的集成
  4. 点击 +新访问令牌
  5. 为其命名(例如“Claude MCP”)并单击 生成令牌
  6. 立即复制令牌 -你再也看不到了

2.查找画布基础URL

Canvas基本URL是您用于访问Canvas的主要URL:

  • https://yourschool.instructure.com
  • https://canvas.yourdistrict.org

选项1:桌面扩展(推荐)

最简单的开始方式。您的API令牌安全地存储在您的操作系统的 钥匙扣。

安装

  1. 下载最新 .mcpb 文件来自 发布
  2. 双击安装,或拖动到Claude Desktop
  3. Claude Desktop将提示您输入Canvas凭据
  4. 完成!开始谈论你的课程

存储什么

  • 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"
  }
}

查找孩子的学生证

  1. 使用您的观察者帐户登录Canvas
  2. 当查看学生的信息时,学生ID出现在URL中(例如。, /users/123456)
  3. 或者询问学校的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中,您可以直接触发提示:

  1. 点击 提示图标 (📝) 在聊天输入中
  2. 从列表中选择一个提示
  3. 填写任何必需的参数(如学生证)
  4. Claude将使用适当的工具执行工作流程

或者自然地问——克劳德会使用正确的工具:

“你能为我的学生办理每日入住手续吗?”


对话示例

这些示例显示了现实的交互,包括Claude调用哪些工具以及输出到哪些工具 期待。

示例1:每日入住

用户提示:

“给我一个关于我孩子学校情况的最新消息”

工具名称:

  1. get_courses -检索所有当前成绩的课程
  2. get_missing_assignments -检查缺失的工作
  3. get_due_this_week -查找即将到来的截止日期

克劳德的回答:

以下是您的学生今天的概述:

当前等级:

  • AP生物学:92%(A-)
  • 英语11:87%(B+)
  • 美国历史:78%(C+)
  • 代数2:91%(A-)

需要注意:

  • 美国历史“第12章阅读测验”-昨天到期,未提交
  • AP生物学中的“实验室报告:光合作用”-2天前到期

本周即将到来:

  • 论文草稿(英语11)-周四截止
  • 单元测试(代数2)-周五截止

我建议优先考虑这两个缺失的作业,尤其是自那以后的历史测验 那个班的成绩最低。


示例2:查找缺失的工作

用户提示:

“所有班级都缺少哪些作业?”

工具名称:

  1. get_missing_assignments -获取画布标记的缺失项目
  2. 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天要交什么?帮我确定优先顺序。”

工具名称:

  1. get_due_this_week -检索未来7天内到期的所有作业
  2. 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通信,不通过网络

联系

关于隐私问题或疑虑:


支持

需要帮助?以下是如何获得支持:

响应时间:我们的目标是在几天内对问题作出回应。这是一个社区项目 在业余时间进行维护。


发展

该项目是用 迪诺 并使用 不要跟踪 用于npm打包。

# 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 → 无发布

首次设置:

  1. 手动发布第一个版本:

    deno task build:npm
    cd npm && npm publish --access public
    
  2. 在npmjs.com上配置受信任的发布服务器:

    • 前往您的包裹→ 设置 → 可信发布者
    • 选择 GitHub操作
    • 组织/用户: mtgibbs
    • 存储库: canvas-lms-mcp
    • 工作流文件名: publish.yml
    • 点击 设置连接

之后,只需推送提交并合并发布PR——其他一切都是自动的!


许可证

MIT许可证-请参阅 许可证 了解详情。


链接