mcpField
C
canvas-lms-mcp-server

canvas-lms-mcp-server

本地服务
github.com/Fireiscoolsolo科研与教育1今天更新

关于 canvas-lms-mcp-server

面向学生的远程 Canvas LMS MCP 服务,可从多设备上的 AI 应用访问课程。它提供 209 项工具,并结合 OAuth 2.1 访问和多电脑故障切换。

主要功能

  1. 01提供 209 项 Canvas 工具
  2. 02成绩分析与学习规划
  3. 03预览后提交作业
  4. 04课程内容与讨论
  5. 05OAuth 2.1 远程访问
  6. 06多电脑故障切换

适用场景

  1. 01查看成绩并计算所需分数
  2. 02查找缺交作业并规划一周
  3. 03确认预览后提交作业

MCP 相关

通过 HTTP 或 stdio 将 Canvas LMS 操作作为 MCP 工具提供。MCP 客户端可通过 ngrok 隧道和 OAuth 2.1 远程连接。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"fireiscoolsolo-canvas-lms": {
"command": "npx",
"args": [
"-y",
"canvas-lms-mcp-remote"
],
"env": {
"CANVAS_API_TOKEN": "<CANVAS_API_TOKEN>",
"CANVAS_BASE_URL": "<CANVAS_BASE_URL>"
}
}
}
}
启动命令npx -y canvas-lms-mcp-remote
需要配置的环境变量
CANVAS_API_TOKEN密钥Canvas personal access token (Account > Settings > Approved Integrations > New Access Token)
CANVAS_BASE_URLYour school's Canvas address, e.g. https://yourschool.instructure.com

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

安装包
npmcanvas-lms-mcp-remote1.1.2

工具

209

收录的工具列表 · 更新于 1 天前

此工具无需参数。

详细介绍

提示

想让它在本地运行,只在你自己的电脑上使用? 前往 💻 本地版 →。它提供相同的 209 个工具,无需 ngrok、无需密码,设置约需 5 分钟。

🌐 Canvas LMS MCP:远程版

在任何设备上通过 AI 助手使用 Canvas:网页、桌面和移动设备均可。始终运行,受密码保护,并可在多台电脑间自动故障转移。

209 个工具 · OAuth 2.1 · ngrok 隧道 · 多电脑故障转移

npm npm downloads npm downloads per month Release downloads Tests Glama score GitHub stars Node.js MCP License: MIT Website PRs welcome

网站 · 快速开始 · 多设备指南 · 配置 · 工具 · 安全性

对话示例:询问期末考试需要考多少分,以及本周有哪些截止事项(示例数据)


🤔 远程版还是本地版?

🌐 远程版(本仓库)💻 本地版
适用范围任何支持远程服务的 MCP 客户端,可在任何设备上使用此电脑上的桌面和命令行 MCP 客户端
运行时间始终在后台运行仅在 AI 应用打开时运行
所需条件Node.js、Canvas 令牌、ngrok 账户和密码Node.js 和 Canvas 令牌
网络暴露公开 HTTPS 地址,受密码保护无
多台电脑✅ 自动故障转移(指南)在每台电脑上单独安装

✨ 亮点

  • 📊 成绩分析:what_if_grade、compute_needed_score、grade_impact_ranking,以及完整的加权明细
  • 📅 规划:get_week_ahead、semester_snapshot、study_priority_ranking,一次调用即可查看所有课程的未完成作业
  • 📝 提交作业:提交文本、URL 和文件,并可先预览而不实际提交
  • 💬 讨论与收件箱:一次请求即可读取完整讨论串,还能给教师发消息
  • 📁 内容:文件、页面、模块、讲座字幕,以及完整的 .imscc 课程导出
  • 🔐 安全的远程访问:通过 ngrok 隧道使用密码保护的 OAuth 2.1
  • 🔁 多计算机故障转移:在两台或更多计算机上运行;如果一台进入休眠,另一台会在大约一分钟内接管

🧭 工作原理

 Your AI app (web / desktop / mobile / CLI)
          │  HTTPS + OAuth
          ▼
   your-domain.ngrok-free.dev ──►  supervisor.js  ──►  index.js (127.0.0.1:3939/mcp)  ──►  Canvas API
                                   (keeps it alive,     (209 tools, OAuth,
                                    failover)            rate-limit aware)

🚀 快速开始

你需要: Node.js 18+、Canvas 账号和免费的 ngrok 账号。

1. 安装

使用 npm(最简单):

npm install -g canvas-lms-mcp-remote
mkdir canvas-mcp
cd canvas-mcp
canvas-lms-mcp-remote init

该文件夹就是你的设置文件夹。其中保存了 .env、登录信息和日志,因此后续每个步骤都要在此文件夹中运行。

或者从源代码安装: git clone https://github.com/Fireiscoolsolo/canvas-lms-mcp-server.git,然后在该文件夹中运行 npm install。没有 git?可以改为从最新版本下载 zip 文件。此时,仓库文件夹就是你的设置文件夹。

所有命令
命令功能
canvas-lms-mcp-remote init在当前文件夹中创建 .env 模板
canvas-lms-mcp-remote启动监督程序:服务、ngrok 隧道和故障转移
canvas-lms-mcp-remote serve仅在 127.0.0.1 上启动 HTTP 服务(无隧道)
canvas-lms-mcp-remote --stdio通过 stdin/stdout 提供服务,适用于会检查服务的目录

从源代码安装时,改用 node supervisor.js 和 node index.js。

2. 创建 Canvas 令牌

在 Canvas 中,前往 Account → Settings → Approved Integrations → + New Access Token。Canvas 只会显示一次令牌,请立即复制。

3. 设置 ngrok
winget install --id Ngrok.Ngrok -e
ngrok update                                   # the winget version is often too old (ERR_NGROK_121)
ngrok config add-authtoken <your-ngrok-authtoken>

然后在 ngrok 控制面板中申请免费的静态域名,例如 your-name.ngrok-free.dev。

4. 配置 .env

填写 init 创建的 .env。从源代码安装时,请先将 .env.example 复制为 .env。使用以下命令生成密码和密钥:

node -e "console.log(require('crypto').randomBytes(32).toString('base64url'))"
5. 测试
canvas-lms-mcp-remote

从源代码安装时,改为运行 node supervisor.js。 等待看到 active and serving at https://…,然后按 Ctrl+C。

6. 设置为登录时自动运行(Windows)

在 PowerShell 中,从你的设置文件夹(如果从源代码安装,则为仓库文件夹)运行:

$dir      = (Get-Location).Path
$action   = New-ScheduledTaskAction -Execute "$dir\run-supervisor.cmd" -WorkingDirectory $dir
$trigger  = New-ScheduledTaskTrigger -AtLogOn -User "$env:USERDOMAIN\$env:USERNAME"
$settings = New-ScheduledTaskSettingsSet -RestartCount 999 -RestartInterval (New-TimeSpan -Minutes 1) -ExecutionTimeLimit ([TimeSpan]::Zero) -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -MultipleInstances IgnoreNew
Register-ScheduledTask -TaskName CanvasSupervisor -Action $action -Trigger $trigger -Settings $settings -Force
Start-ScheduledTask -TaskName CanvasSupervisor

通过 npm 安装? 请改用此 $action 行:

$action = New-ScheduledTaskAction -Execute 'cmd.exe' -Argument '/c call "%APPDATA%\npm\canvas-lms-mcp-remote.cmd" >> supervisor.log 2>&1' -WorkingDirectory $dir

run-supervisor.cmd 假设 Node 位于 C:\Program Files\nodejs\node.exe。如果你的 Node 安装在其他位置,请编辑该文件。在 Linux 上,将其作为 systemd 用户服务运行(示例)。在 macOS 上,通过 launchd 或 pm2 运行 node supervisor.js。

7. 在每台设备上连接 AI 应用

在 AI 应用的设置中,添加一个自定义连接器(也称为远程 MCP 服务),URL 为 https://<your-domain>/mcp,然后使用密码登录。会将连接器同步到账号的应用也会在手机和桌面上显示该连接器。命令行和编辑器客户端可以使用相同的 URL,将其添加为 HTTP MCP 服务。

然后向你的助手提问:“运行 test_connection。”

🔁 多台计算机

你可以在两台或更多计算机上运行同一服务,例如台式机和笔记本电脑,这样即使一台计算机关机或进入休眠,服务也能保持在线。一台计算机提供服务;其他计算机则待命,并在需要时自动接管。

**➡️ 请按照多设备设置指南逐步操作。**指南涵盖安全复制设置、共享 ngrok 账号、计划任务、检查运行状态、测试故障转移、更新代码和更换密钥。

⚙️ 配置

所有设置均为 .env 中的环境变量。参见 .env.example。

变量必填默认值描述
CANVAS_API_TOKEN✅—你的 Canvas 个人访问令牌
CANVAS_BASE_URL✅—例如:https://yourschool.instructure.com
CANVAS_MCP_PUBLIC_URL✅—你的 ngrok 静态域名
CANVAS_MCP_PASSWORD✅—OAuth 登录页面的密码
CANVAS_MCP_CLUSTER_SECRET✅—用于保护计算机协调时使用的 /internal/* 端点的密钥
CANVAS_ALLOW_WRITEStruefalse = 只读模式
CANVAS_PROFILEfullcore = 精选工具子集
CANVAS_CACHE_TTL60响应缓存时间,单位为秒
CANVAS_TIMEZONEsystem用于计算截止日期的 IANA 时区
CANVAS_DOWNLOAD_DIR./canvas-downloads下载工具保存文件的位置
CANVAS_MCP_HOST / _PORT127.0.0.1 / 3939绑定地址
CANVAS_MCP_OAUTH_STORE_PATH./oauth-store.json令牌存储路径
CANVAS_MCP_NGROK_PATHwinget pathngrok.exe 的路径
CANVAS_MCP_TRANSPORThttpstdio(或 --stdio 标志)通过 stdin/stdout 而非 HTTP 提供服务。供检查服务的目录使用。日常本地使用请参阅本地版

🧰 工具

分组数量亮点
身份24check_token_expiry、get_rate_limit_status、自定义数据存储
课程16权限、昵称、收藏
作业12list_missing_submissions、get_late_policy
提交16文本、URL 和文件提交,评论,评分标准评估
成绩13what_if_grade、compute_needed_score、grade_impact_ranking
测验12只读:日期、尝试记录、查看记录
讨论17get_full_topic_view、回复、评分
收件箱14消息、find_recipients、对话串
日历11活动、办公时间预约
内容33文件、页面、模块、字幕、.imscc 导出
小组11小组工作区
评分标准11同伴评审
搜索3smart_search,支持关键词回退
规划11get_week_ahead、semester_snapshot、study_priority_ranking
元数据4raw_canvas_request,可用于上方未列出的任何端点

🔐 安全

  • 确认门控: 发送、提交、发布或删除内容的工具会先返回预览,只有在调用时传入 confirm: true 才会执行操作。
  • 提示词注入防护: 他人撰写的文本会用 <<<CANVAS_CONTENT>>> 标记括起,并标注为不可信内容。
  • 不参加测验: 刻意不包含测验作答端点。
  • 仅限回环地址: 服务在 127.0.0.1 上监听。外部访问的唯一途径是隧道。
  • OAuth 2.1: 每个 IP 每 15 分钟最多登录 10 次,访问令牌有效期为 1 小时,刷新令牌每次使用后都会更换。
  • 独立的协调密钥: 计算机协调时使用的端点需要单独的共享密钥,并通过恒定时间比较进行验证。

切勿提交 .env、oauth-store.json 或 supervisor.log。这些文件已列入 .gitignore。参见 SECURITY.md。

🎓 负责任地使用

这是一个用于学习和组织安排的工具。它帮助你查看截止日期、了解成绩并规划一周安排。它绝不会代你参加测验;在你查看预览并确认之前,不会发送或提交任何内容。

  • 遵守学校的学术诚信和可接受使用政策。有些学校会限制使用个人 API 令牌或第三方工具。
  • 想彻底避免意外更改?将 CANVAS_ALLOW_WRITES=false 设为只读模式。

🛠️ 故障排除

症状解决方法
ERR_NGROK_121你的 ngrok 版本太旧。运行 ngrok update
ERR_NGROK_334 … already online另一台电脑或残留的 ngrok.exe 占用了该域名。对于备用电脑来说,这是正常的
ERR_NGROK_3200(端点离线)没有电脑在提供服务。检查 supervisor.log
登录时 ngrok 显示“You are about to visit…”页面免费套餐中这是正常的。点击 Visit Site
startup probe failed检查 CANVAS_BASE_URL 和你的网络连接
Canvas 返回 401你的令牌已过期。创建一个新令牌
没有显示新工具重新连接连接器,或重启你的 AI 应用

多台电脑相关的其他问题,请参阅多设备指南。

彻底重启。 仅运行 Stop-ScheduledTask 可能会留下仍在运行的进程:

Stop-ScheduledTask -TaskName CanvasSupervisor -ErrorAction SilentlyContinue
Get-CimInstance Win32_Process -Filter "Name='node.exe'" | Where-Object { $_.CommandLine -match 'supervisor\.js|index\.js' } | ForEach-Object { Stop-Process -Id $_.ProcessId -Force }
Get-Process ngrok -ErrorAction SilentlyContinue | Stop-Process -Force
Start-ScheduledTask -TaskName CanvasSupervisor

已知限制: 学生令牌无法访问管理端点、成绩册历史记录、课程分析或测验统计信息。smart_search 是 Canvas 的 Beta 功能,通常会返回 404。

📄 许可证

MIT。本项目与 Instructure 无关。

评论

支持 Markdown

第一次接触 MCP?

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

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