Canvas LMS MCP服务器
全面的 FastMCP Canvas LMS集成服务器,为AI助手提供从学生角度完全访问Canvas功能的权限。

概述
此MCP(模型上下文协议)服务器使AI助手能够代表学生与Canvas LMS进行交互。它提供了50多种工具,涵盖了Canvas的所有主要功能,包括课程、作业、讨论、测验、成绩、文件等。
特性
课程管理
- list_courses -列出所有已注册的课程
- get_course -获取详细的课程信息
- get_course_教学大纲 -查看课程大纲
作业
- list_任务 -列出课程中的所有作业
- 获取分配 -获取任务详细信息
- 提交任务 -提交作业(文本、URL或文件)
- get_提交 -查看提交状态和成绩
- get_assignment_rubricc -查看评分标准
模块
- list_modules -列出课程模块
- get_module_items -获取模块中的项目
- mark_module_item_done -跟踪模块进度
讨论
- list_讨论 -列出讨论主题
- get_discussion -查看讨论线索
- create_discession_entry -发布和回复讨论
测验
- list_测验 -列出所有测验
- get_quiz -获取测验详细信息
- 开始_暂停_提交 -开始测验尝试
- get_quiz_问题 -查看测验问题
- 回答问题 -提交测验答案
- 完成_提问_提交 -完成测验提交
成绩
- get_course_grades -查看课程成绩
- 用户_分配_有_等级 -查看所有已评分的作业
文件和内容
- list_course_files -浏览课程文件
- 获取文件 -获取文件详细信息并下载URL
- list_course_folders -查看文件夹结构
- 列表_页面 -列出课程页面
- get_page -查看页面内容
日历和任务
- list_calendar_events -查看日历事件
- get_calendar_event -获取活动详细信息
- get_upcoming_分配 -查看即将到期的日期
- get_todo_items -查看待办事项列表
公告
- 列表_公告 -查看课程公告
沟通
- list_conversations -查看消息
- get_对话 -阅读对话详情
- create_conversation -发送消息
个人资料和组
- get_user_profile -查看用户资料
- get_user_enrollments -列出注册信息
- get_user_active_stream -查看最近的活动
- list_user_groups -列出组
- get_group -获取组详细信息
学习成果
- list_course_outcomes -查看课程学习成果
先决条件
- Python 3.13或更高版本
- Canvas LMS帐户
- Canvas API令牌
获取Canvas API代币
- 登录您的Canvas帐户
- 转到帐户→ 设置
- 向下滚动到“已批准的集成”
- 点击“+新访问令牌”
- 输入目的(例如“MCP服务器”)
- 设置到期日期(可选)
- 点击“生成令牌”
- 立即复制令牌(您将不会再看到它!)
本地开发
设置
分叉repo,然后运行:
git clone
cd mcp-canvas
conda create -n mcp-canvas python=3.13
conda activate mcp-canvas
pip install -r requirements.txt配置
设置环境变量:
export CANVAS_API_URL="https://your-institution.instructure.com/api/v1"
export CANVAS_API_TOKEN="your_token_here"或者创建一个 .env 文件(不要提交!):
CANVAS_API_URL=https://your-institution.instructure.com/api/v1
CANVAS_API_TOKEN=your_token_here注: 替换 your-institution.instructure.com 使用您的Canvas实例URL(例如。, canvas.harvard.edu, canvas.stanford.edu,或者只是 canvas.instructure.com 免费帐户)。
测试
python src/server.py
# then in another terminal run:
npx @modelcontextprotocol/inspector打开http://localhost:3000并连接到 http://localhost:8000/mcp 使用“流式HTTP”传输(注意 /mcp!).
示例用法
连接后,您可以测试以下工具:
# List all your courses
list_courses(enrollment_state="active")
# Get assignments for a course
list_assignments(course_id=12345, include="submission")
# View your grades
get_course_grades(course_id=12345)
# Submit an assignment
submit_assignment(
course_id=12345,
assignment_id=67890,
submission_type="online_text_entry",
body="My assignment submission..."
)
# Post to a discussion
create_discussion_entry(
course_id=12345,
topic_id=54321,
message="Great point! I think..."
)部署
选项1:一键部署渲染
单击上面的“部署到渲染”按钮,然后:
- 设置
CANVAS_API_URL环境变量 - 设置
CANVAS_API_TOKEN环境变量 - 点击“应用”
您的服务器将在 https://your-service-name.onrender.com/mcp (注意 /mcp!)
选项2:手动部署以渲染
- 分叉此存储库
- 将您的GitHub帐户连接到Render
- 在Render上创建新的Web服务
- 连接您的分叉存储库
- 添加环境变量:
- CANVAS_API_URL -您的Canvas API URL - CANVAS_API_TOKEN -您的Canvas API代币 - ENVIRONMENT -设置为 production
- 渲染将自动检测
render.yaml配置
选项3:部署到其他平台
服务器可以部署到任何支持Python web应用程序的平台上:
Heroku:
heroku create your-canvas-mcp
heroku config:set CANVAS_API_URL="https://your-canvas-url/api/v1"
heroku config:set CANVAS_API_TOKEN="your_token"
git push heroku main铁路:
- 连接您的GitHub仓库
- 在设置中添加环境变量
- 部署
Fly.io:
fly launch
fly secrets set CANVAS_API_URL="https://your-canvas-url/api/v1"
fly secrets set CANVAS_API_TOKEN="your_token"
fly deploy与AI助手集成
克劳德桌面版
添加到您的Claude Desktop配置文件中:
MacOS: ~/Library/Application Support/Claude/claude_desktop_config.json 窗户: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"canvas": {
"url": "https://your-server.onrender.com/mcp",
"transport": "http"
}
}
}戳
您可以将MCP服务器连接到Poke poke.com/设置/连接.
要显式测试连接,请向Poke询问以下内容: Tell the subagent to use the "canvas" integration's "list_courses" tool.
如果您遇到Poke没有调用正确的MCP的持续问题(例如,在您重命名连接后),请发送 clearhistory 点击可删除所有消息历史记录并重新开始。
其他MCP客户端
此服务器通过HTTP实现了标准的MCP协议,因此它可以与任何兼容MCP的客户端一起工作。配置它:
- 网址:
https://your-server-url/mcp - 传输:HTTP(流式传输)
用例
此MCP服务器使AI助手能够帮助学生:
- 课程管理:查看课程、教学大纲和课程材料
- 作业帮助:检查截止日期,查看要求,提交工作
- 学习计划:跟踪即将到来的作业并制定学习计划
- 讨论参与:阅读并回应课堂讨论
- 成绩跟踪:监控成绩和学业进展
- 测验准备:查看测验细节和时间限制
- 文件访问:查找和访问课程文件和资源
- 沟通:向老师和同学发送信息
- 日历管理:查看和组织学术日历
- 小组工作:访问组信息并协作
API覆盖范围
该服务器从学生的角度实现Canvas LMS REST API,基于 画布API文档。它包括:
- ✅ API课程
- ✅ 分配API
- ✅ 提交API
- ✅ 模块API
- ✅ 讨论主题API
- ✅ API测验
- ✅ 文件API
- ✅ 页面API
- ✅ API公告
- ✅ 日历事件API
- ✅ 用户API
- ✅ 注册API
- ✅ API组
- ✅ 对话API
- ✅ API评价准则
- ✅ 结果API
- ✅ 待办事项API
安全注意事项
- 永远不要提交Canvas API令牌 到版本控制
- 将令牌存储在环境变量中或进行安全的秘密管理
- 使用令牌到期日期来限制风险敞口
- 定期旋转令牌
- 共享部署的服务器URL时要小心
- 考虑为生产使用实施额外的身份验证
- 审查Canvas API费率限制并实施适当的节流
故障排除
“未设置CANVAS_API_TOKEN环境变量”
确保您已设置 CANVAS_API_TOKEN Canvas API令牌的环境变量。
“未经授权”或401错误
- 检查您的API令牌是否有效且尚未过期
- 验证您在Canvas中具有正确的权限
- 确保令牌已在您的环境中正确设置
“未找到”或404错误
- 验证Canvas API URL是否适用于您的机构
- 检查课程ID、作业ID等是否有效
- 确保您已注册您尝试访问的课程
连接错误
- 验证您的Canvas实例URL是否可访问
- 检查网络连接
- 确认API端点路径正确
发展
添加新工具
要添加新的Canvas API端点,请执行以下操作:
@mcp.tool(description="Your tool description here")
async def your_tool_name(param1: type1, param2: type2) -> ReturnType:
"""
Detailed documentation.
Args:
param1: Description of param1
param2: Description of param2
"""
result = await make_canvas_request("GET", "endpoint/path", params={...})
return result测试
使用MCP检查器或直接向正在运行的服务器发出请求来测试单个工具。
贡献
欢迎投稿!拜托:
- 分叉存储库
- 创建要素分支
- 进行更改
- 彻底测试
- 提交拉取请求
资源
- 画布API文档
- 画布API Live -交互式API资源管理器
- FastMCP文档
- 模型上下文协议规范
许可证
MIT许可证-有关详细信息,请参阅许可证文件
支持
对于问题和疑问:
致谢
______________________________________________________________________
注: 这是一个非官方的Canvas集成。它不隶属于股份有限公司Instructionre,Inc.,也不由其背书或支持。
