mcpField
C
Canvas LMS (Local-First)

Canvas LMS (Local-First)

本地服务
github.com/admin978科研与教育414 周前更新

关于 Canvas LMS (Local-First)

Canvas LMS 本地优先 MCP 服务,将课程、作业、截止日期和成绩等 Canvas 数据接入兼容客户端。适用于学生、教师及 MCP 开发者,使用 stdio 连接官方 API,令牌保留在本机。

主要功能

  1. 01查看课程与作业
  2. 02查询模块、公告和页面
  3. 03获取成绩、日程与待办
  4. 04批量下载课程文件
  5. 05本地运行并使用 stdio

适用场景

  1. 01汇总多个课程的本周到期作业
  2. 02查看下周日程和规划事项
  3. 03按课程检查当前成绩
  4. 04下载课程内容供离线索引

MCP 相关

作为 MCP 服务,通过 stdio 向 Claude Code、Claude Desktop 等兼容客户端提供 Canvas 查询工具。它在本机读取配置并直接请求 Canvas 官方 API,不使用外部令牌中介。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"canvas-mcp-admin978": {
"command": "uvx",
"args": [
"canvas-local-mcp"
],
"env": {
"CANVAS_BASE_URL": "<CANVAS_BASE_URL>",
"CANVAS_TOKEN": "<CANVAS_TOKEN>"
}
}
}
}
启动命令uvx canvas-local-mcp
需要配置的环境变量
CANVAS_BASE_URLCanvas institution root URL (no /api/v1 suffix), e.g. https://your-institution.instructure.com
CANVAS_TOKEN密钥Canvas personal access token (Account -> Settings -> Approved Integrations -> New Access Token)

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

安装包
pypicanvas-local-mcp0.1.3

工具

10

收录的工具列表 · 更新于 2 周前

参数类型必填说明
active_onlyboolean否

详细介绍

Canvas LMS MCP 服务(canvas-mcp)

CI PyPI Python License

在一个地方向 Claude 询问 Canvas 课程、作业、截止日期、模块和成绩。

canvas-mcp 是一款面向 Canvas LMS 用户(学生、教师和 MCP 构建者)的本地优先 MCP 服务。它将 Canvas REST API 操作转换为 MCP 工具,可在 Claude Code、Claude Desktop 和其他兼容 MCP 的客户端中使用。

状态: alpha。单用户,不提供担保,API 接口仍可能变动。若遇到问题,请提交 issue。

适用对象

  • 学生:希望在一个视图中查看多门课程
  • 教育工作者:希望更快访问作业、模块和公告
  • MCP 用户:希望在本地 Claude 工作流中使用 Canvas 数据

可以向 Claude 提出的问题

  • “我所有正在进行的课程中,本周有哪些作业到期?”
  • “显示下周的即将到来的事件和计划事项。”
  • “按课程列出我当前的成绩。”
  • “获取课程 12345 的模块(含项目)。”
  • “显示课程 12345 的公告。”
  • “获取课程 12345 中的页面 syllabus。”

快速开始

前提条件:Python 3.10+。

1) 创建 Canvas 个人访问令牌

在 Canvas 中:Account → Settings → Approved Integrations → + New Access Token。 复制显示的令牌(Canvas 之后不会再次显示)。

2) 安装

从 PyPI 安装(推荐):

pip install canvas-local-mcp

或从源代码安装:

git clone https://github.com/admin978/canvas-mcp.git && cd canvas-mcp
python3 -m venv .venv && source .venv/bin/activate
pip install -e .
3) 配置 ~/.canvas.env
curl -fsSL https://raw.githubusercontent.com/admin978/canvas-mcp/main/.canvas.env.example -o ~/.canvas.env
chmod 600 ~/.canvas.env
# edit ~/.canvas.env: set CANVAS_BASE_URL (institution root, no /api/v1)
# and paste the token into CANVAS_TOKEN

有关令牌安全的建议(最小权限、文件权限、轮换/撤销和漏洞报告),请参阅 SECURITY.md。

4) 在 MCP 客户端中注册

Claude Code:

claude mcp add canvas-local -- canvas-local-mcp

Claude Desktop:

  • macOS 示例路径:~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows 示例路径:%APPDATA%\Claude\claude_desktop_config.json
  • Linux 示例路径:~/.config/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "canvas-local": {
      "command": "canvas-local-mcp"
    }
  }
}

提供的工具

  • list_courses
  • list_assignments
  • list_modules
  • list_announcements
  • get_page
  • get_file_info
  • get_grades
  • planner_items
  • upcoming_events
  • todo

批量导出

canvas-local-mcp-dump 可下载课程文件及相关内容,以供离线索引。

canvas-local-mcp-dump              # all active courses
canvas-local-mcp-dump 12345 67890  # specific course IDs

默认将输出保存到 ./canvas-dump/。可通过 CANVAS_DUMP_DIR=/path/to/dir 更改目录。

本地优先、隐私与令牌流转

  • 服务在本地运行,并通过 stdio 传输方式与 MCP 客户端通信。
  • 配置从 ~/.canvas.env 读取(CANVAS_BASE_URL、CANVAS_TOKEN)。
  • 请求从本地服务发送到 Canvas 官方 API 端点。
  • 请求流程中不会使用外部令牌代理。
  • 安全建议和披露政策: SECURITY.md。

演示

目前尚未提交演示 GIF。你仍可快速验证工作流:

试试这些提示词

注册 MCP 服务后,向 Claude 询问:

  • “列出我正在进行的 Canvas 课程。”
  • “我所有正在进行的课程中,本周有哪些作业到期?”
  • “显示下周的即将到来的事件和计划事项。”
  • “按课程列出我当前的成绩。”

占位说明:未来的 PR 中会在此添加简短的终端/GIF 演示。

开发

需要 Python 3.10+。

pip install -e ".[dev]"
ruff check canvas_local_mcp tests   # lint
pytest                              # tests run against a mocked Canvas API — no token needed

每次推送和拉取请求时,CI 都会在 Python 3.10–3.13 上运行 lint 和测试。

发布新版本

请按此顺序发布新版本(例如 0.1.4),以确保 PyPI 和 MCP Registry 上的版本一致。

1. 在所有位置更新版本号

在同一个 PR 中,将以下三个文件的版本号都更新为新版本:

文件字段
pyproject.toml[project].version
canvas_local_mcp/__init__.py__version__
server.json根级 version 和 packages[0].version

如果这三处版本号不一致,CI 测试 test_server_json_version_matches_package 和工作流验证步骤都会失败。

2. 将 PR 合并到 main

合并前,请等待所有 CI 检查通过。

3. 将 canvas-local-mcp 发布到 PyPI

该项目使用 Trusted Publisher (OIDC) 上传到 PyPI。 请在创建标签之前触发 PyPI 发布工作流(或者在已配置凭据的情况下运行 python -m build && twine upload dist/*),这样 MCP Registry 获取软件包时,它就已经可用了。

4. 创建并推送标签 vX.Y.Z
git tag v0.1.4
git push origin v0.1.4

这会触发 Publish to MCP Registry 工作流,该工作流会:

  1. 验证 server.json、pyproject.toml 和标签声明的版本是否一致。
  2. 通过 GitHub OIDC 将 server.json 发布到 MCP Registry(无需密钥)。
5. 验证
  • PyPI:https://pypi.org/project/canvas-local-mcp/
  • MCP Registry:https://registry.modelcontextprotocol.io/?q=canvas-mcp
  • GitHub Actions:https://github.com/admin978/canvas-mcp/actions

重要:绝不要重复使用或移动已有标签。如果出错后需要重新发布, 请将版本号升级到下一个补丁版本(例如 0.1.4),然后从第 1 步重新开始。

贡献、路线图与支持

  • 问题 / 功能请求
  • 欢迎提交修复 Bug 和改进 Canvas 工作流的拉取请求
  • 路线图方向目前记录在未解决的问题和即将提交的 PR 中

如果这个项目能帮助你通过 Claude 管理 Canvas,请尝试上述流程,并考虑点亮一颗 ⭐,让更多学生和教育工作者找到它。

许可证

MIT — 参见 LICENSE。


由 AGENTE 404 S.L. 构建 · [email protected]

评论

支持 Markdown

第一次接触 MCP?

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

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