Canvas LMS MCP服务

一个部署在Cloudflare Workers上的远程MCP服务器,用于连接MCP兼容的AI代理到Canvas LMS账户,提供课程、作业、成绩等管理功能。

  • by nintang
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 nintang/canvas-lms-mcp

使用说明

Canvas LMS MCP服务器

远程MCP(模型上下文协议)服务器 Canvas LMS 部署在Cloudflare Workers上。只需两个字段,即可将任何兼容MCP的AI代理连接到您的Canvas帐户。

设置

1.获取Canvas API代币

转到Canvas实例→ 设置 → 新访问令牌 → 复制令牌(它以数字开头 ~).

2.连接您的MCP客户端

字段 值
服务器URL https://canvas-mcp.workers.dev/mcp
持有者令牌 yourschool:your_canvas_api_token

承载令牌格式为 school:token 哪里:

  • 学校 --您的Canvas子域名(例如。 grambling 从 grambling.instructure.com)
  • 令牌 -您的Canvas API代币

例子:

Server URL:    https://canvas-mcp.workers.dev/mcp
Bearer Token:  grambling:7~aBcDeFg123456...

可用工具

工具 说明
list_courses 列出所有已注册的课程
get_course 获取课程详情,包括教学大纲
list_assignments 列出作业(按过去、即将、逾期等筛选)
get_assignment 获取任务详细信息
submit_assignment 向作业提交文本或URL
get_grades 获取课程成绩
get_submissions 获取您的提交和分数
get_missing_assignments 获取所有课程中缺失/逾期的作业
get_upcoming 获取即将到来的活动和任务
get_todo 获取Canvas待办事项
get_calendar 获取日期范围内的日历事件
list_announcements 列出课程公告
list_discussions 列出讨论主题
get_discussion 与所有回复进行讨论
post_discussion 发布对讨论的回复
get_user 获取您的Canvas个人资料

发展

先决条件

  • Node.js 18+
  • Cloudflare帐户(用于部署)
  • Canvas API令牌(用于测试)

本地设置

git clone https://github.com/your-username/canvas-mcp.git
cd canvas-mcp
npm install

创建一个 .env.test 运行测试的文件:

TEST_SCHOOL=yourschool
TEST_TOKEN=your_canvas_api_token

命令

npm run dev      # Start local dev server
npm test         # Run test suite
npm run deploy   # Deploy to Cloudflare Workers

错误报警

Worker现在公开了一个健康端点 /health 并且当它遇到意外的内部错误时可以发送警报。

部署前设置webhook目标:

npx wrangler secret put ERROR_ALERT_WEBHOOK_URL

推荐目的地:

  • 松弛传入webhook
  • Discord webhook
  • 如果您需要电子邮件通知,可以使用webhook到电子邮件服务

可选运行时变量:

npx wrangler deploy --var ENVIRONMENT:production

健康检查示例:

curl https://canvas-mcp.workers.dev/health

本地测试

# Start the dev server
npm run dev

# Test with curl
curl -X POST http://localhost:8787/mcp \
  -H "Authorization: Bearer yourschool:your_token" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}'

建筑

MCP Client → POST /mcp (Authorization: Bearer school:token)
    ↓
Cloudflare Worker
    1. Parse school + token from bearer header
    2. Create per-request MCP server
    3. Proxy Canvas API calls to school.instructure.com
    ↓
Canvas LMS API (https://school.instructure.com/api/v1/...)
  • 无状态 --没有数据库,没有持久对象,每个请求都携带所有上下文
  • 按请求隔离 --每个请求都会得到一个新的MCP服务器实例
  • 休息时零成本 --Cloudflare Workers仅按请求计费

技术栈

许可证

麻省理工学院