关于 Canvas LMS MCP Server
Canvas LMS MCP Server 将 Canvas LMS 数据接入 AI 客户端,面向学生及其他账户持有者。工具涵盖课程、作业、成绩、讨论、日程、文件等学习信息。
主要功能
- 01浏览课程和模块
- 02查看作业与提交记录
- 03获取成绩和反馈
- 04读取公告与讨论
- 05查看日历和规划事项
- 06访问测验与文件
适用场景
- 01查询即将到期的作业
- 02查看课程成绩和提交反馈
- 03查找多个课程的公告
- 04查看课程讨论和日历活动
MCP 相关
通过 MCP 工具提供 Canvas LMS 数据,包括课程、作业、提交记录、讨论、日历活动和文件。支持 Claude Desktop、Claude Code、Cursor 和 Windsurf 等 MCP 客户端。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Canvas LMS MCP 服务
一个精简的 Canvas LMS MCP(Machine Conversation Protocol)服务,可通过你的 Canvas LMS 实例轻松访问教育数据。此服务为 AI 系统(如 Cursor)与 Canvas Learning Management System 搭建桥梁。
功能
- 课程:列出已选课程,获取课程详情、大纲、模块和模块项目
- 作业:列出并获取作业,可选包含提交状态
- 页面:按 URL 别名获取课程页面
- 提交:列出你自己的提交及其成绩和反馈
- 公告:列出多个课程中的公告
- 讨论:列出主题并查看完整讨论串
- 日历:按日期筛选并列出日历事件
- 规划器:列出规划器项目(作业、公告等)
- 选课记录:获取带成绩的选课记录数据
- 测验:列出并获取测验(仅限经典测验)
- 文件:列出并获取文件
- 导航:获取课程标签页、作业组和收藏课程
安装
通过 Smithery 安装
要通过 Smithery 自动为 Claude Desktop 安装 Canvas LMS 服务:
npx -y @smithery/cli install @ahnopologetic/canvas-lms-mcp --client claude
前置要求
- Python 3.13+
- Canvas LMS API 令牌
uv包管理器(推荐)
安装方式
选项 1:使用 uvx 安装(推荐)
安装并运行 canvas-lms-mcp 最简单的方式是使用 uvx:
uvx canvas-lms-mcp
此命令会在隔离环境中运行服务,而不会永久安装它。
要永久安装此工具:
uv tool install canvas-lms-mcp
选项 2:从源代码安装
-
克隆仓库:
git clone https://github.com/yourusername/canvas-lms-mcp.git cd canvas-lms-mcp -
使用 uv 安装:
# Install uv if you don't have it yet curl -LsSf https://astral.sh/uv/install.sh | sh # Create a virtual environment and install dependencies uv venv uv pip install -e .或者,使用传统方式:
python -m venv .venv source .venv/bin/activate # On Windows: .venv\Scripts\activate pip install -e .
配置
设置以下环境变量:
export CANVAS_API_TOKEN="your_canvas_api_token"
export CANVAS_BASE_URL="https://your-institution.instructure.com" # Default: https://canvas.instructure.com
你可以在 Canvas 账户设置中获取 Canvas API 令牌。
运行服务
使用 uv 启动服务:
uv run src/canvas_lms_mcp/main.py
如果使用 uvx 工具安装:
canvas-lms-mcp
默认情况下,服务运行于 http://localhost:8000。你可以通过 http://localhost:8000/docs 上的 FastMCP 界面与 API 交互。
可用工具
该服务提供 22 个工具,用于与 Canvas LMS 交互:
课程
list_courses
列出用户当前已选的课程。
参数:
page(可选,默认值=1):页码(从 1 开始)items_per_page(可选,默认值=10):每页项目数
get_course
按 ID 获取单个课程。
参数:
course_id(必填):课程 IDinclude(可选):要包含的附加数据列表
get_course_syllabus
以 HTML 格式获取课程大纲正文。
参数:
course_id(必填):课程 ID
get_course_modules
获取课程的模块。
参数:
course_id(必填):课程 IDinclude(可选):要包含的附加数据列表per_page(可选,默认值=100):每页项目数
get_module_items
获取指定模块中的项目。
参数:
course_id(必填):课程 IDmodule_id(必填):模块 ID
作业
list_assignments
列出课程的作业。
参数:
course_id(必填):课程 IDbucket(必填):按 “past”、“overdue”、“undated”、“ungraded”、“unsubmitted”、“upcoming” 或 “future” 筛选order_by(必填):按 “due_at”、“position” 或 “name” 排序include(可选):要包含的附加数据列表(例如,使用["submission"]查看成绩状态)page(可选,默认值=1):页码(从 1 开始)items_per_page(可选,默认值=10):每页项目数
get_assignment
按 ID 获取单个作业。
参数:
course_id(必填):课程 IDassignment_id(必填):作业 ID
list_assignment_groups
列出课程的作业组(显示成绩权重/类别)。
参数:
course_id(必填):课程 ID
页面
get_page
根据 URL 别名获取单个页面。
参数:
course_id(必填):课程 IDpage_slug(必填):页面 URL 别名(例如,“syllabus”“course-handbook”)
提交
list_submissions
列出当前用户在课程中的提交,包括成绩和反馈。
参数:
course_id(必填):课程 IDinclude(可选):要包含的其他数据列表(例如,["assignment", "submission_comments"])page(可选,默认值为 1):页码(从 1 开始)items_per_page(可选,默认值为 10):每页项目数
公告
list_announcements
列出一个或多个课程的公告。
参数:
course_ids(必填):课程 ID 列表page(可选,默认值为 1):页码(从 1 开始)items_per_page(可选,默认值为 10):每页项目数
讨论
list_discussions
列出课程的讨论主题。
参数:
course_id(必填):课程 IDpage(可选,默认值为 1):页码(从 1 开始)items_per_page(可选,默认值为 10):每页项目数
get_discussion_view
获取讨论主题的完整视图,包括所有回复。
参数:
course_id(必填):课程 IDdiscussion_id(必填):讨论主题 ID
日历
list_calendar_events
列出课程的日历活动。
参数:
context_codes(必填):上下文代码列表(例如,["course_123"])start_date(可选):ISO 8601 格式的开始日期end_date(可选):ISO 8601 格式的结束日期page(可选,默认值为 1):页码(从 1 开始)items_per_page(可选,默认值为 10):每页项目数
规划器项目
list_planner_items
列出已认证用户的规划器项目。
参数:
start_date(必填):ISO 8601 格式的开始日期end_date(必填):ISO 8601 格式的结束日期context_codes(可选):上下文代码列表(例如,["course_123"])page(可选,默认值为 1):页码(从 1 开始)items_per_page(可选,默认值为 10):每页项目数
注册
get_enrollments
获取当前用户的注册信息,包括成绩。
测验
list_quizzes
列出课程的测验。注意:仅适用于 Classic Quizzes,不适用于 New Quizzes(quiz_lti)。
参数:
course_id(必填):课程 IDinclude(可选):要包含的其他数据列表page(可选,默认值为 1):页码(从 1 开始)items_per_page(可选,默认值为 10):每页项目数
get_quiz
根据 ID 获取单个测验。
参数:
course_id(必填):课程 IDquiz_id(必填):测验 ID
文件
list_files
列出课程或文件夹中的文件。注意:根据机构权限,学生账户可能会收到 403 错误。
参数:
course_id(可选):课程 IDfolder_id(可选):文件夹 IDinclude(可选):要包含的其他数据列表page(可选,默认值为 1):页码(从 1 开始)items_per_page(可选,默认值为 10):每页项目数
get_file
根据 ID 获取文件。即使 list_files 受到限制,也可通过已知文件 ID 获取文件。
参数:
course_id(必填):课程 IDfile_id(必填):文件 ID
其他
get_tabs
获取课程可用的标签页/导航项。
参数:
course_id(必填):课程 ID
list_favorites
列出当前用户收藏的课程。
集成
此 MCP 服务适用于所有支持 Model Context Protocol 的客户端,包括 Claude Desktop、Claude Code、Cursor、Windsurf 等。
所有客户端的 MCP 配置相同,只有配置文件的位置不同:
{
"mcpServers": {
"canvas": {
"command": "uvx",
"args": ["canvas-lms-mcp"],
"env": {
"CANVAS_API_TOKEN": "your_canvas_api_token",
"CANVAS_BASE_URL": "https://your-institution.instructure.com"
}
}
}
}
将 your_canvas_api_token 替换为你的 Canvas API 令牌(可在 Canvas → Account → Settings → New Access Token 中找到),并将 your-institution.instructure.com 替换为你所在机构的 Canvas URL。
Claude Desktop
将以下内容添加到 Claude Desktop 配置文件中:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
保存后重启 Claude Desktop。
Claude Code
将以下内容添加到项目的 .mcp.json 或全局 ~/.claude/settings.json 中:
{
"mcpServers": {
"canvas": {
"command": "uvx",
"args": ["canvas-lms-mcp"],
"env": {
"CANVAS_API_TOKEN": "your_canvas_api_token",
"CANVAS_BASE_URL": "https://your-institution.instructure.com"
}
}
}
}
Cursor
将以下内容添加到项目目录中的 .cursor/mcp.json。保存后重启 Cursor。
Windsurf
将以下内容添加到 ~/.codeium/windsurf/mcp_config.json。保存后重启 Windsurf。
使用示例
连接后,你可以向 AI 助手询问 Canvas 数据:
- “我下周有哪些作业要到期?”
- “显示我的生物课程教学大纲”
- “今天发布了哪些公告?”
- “到目前为止我的成绩如何?”
- “我明天的日程是什么?”
- “显示我的英语课讨论帖”
开发
有关详细的开发说明,请参阅 DEVELOPMENT.md 文件。
许可证
本项目采用 MIT License 授权,详情请参阅 LICENSE 文件。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。