mcpField
C
Canvas API MCP

Canvas API MCP

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

关于 Canvas API MCP

Canvas API MCP 将 AI 客户端连接到个人 Canvas LMS 账户,支持学生处理课程事务。它既提供常用课程工具,也可搜索并调用 Canvas 实例开放的接口。

主要功能

  1. 01查看截止日期与成绩
  2. 02读取课程文件和内容
  3. 03查看并提交作业
  4. 04阅读并回复讨论
  5. 05搜索和调用 Canvas 接口

适用场景

  1. 01查看近期课程任务和截止日期
  2. 02阅读讲义文件与课程大纲
  3. 03查看作业反馈
  4. 04查找较少见的 Canvas API 操作

MCP 相关

MCP 服务将 Canvas LMS 数据与操作封装为工具,并提供提示词和资源。它使用个人访问令牌连接用户自己的账户。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"johannsenlum-canvas-api": {
"command": "uvx",
"args": [
"canvas-api-mcp"
],
"env": {
"CANVAS_BASE_URL": "<CANVAS_BASE_URL>",
"CANVAS_TOKEN": "<CANVAS_TOKEN>",
"CANVAS_MAX_PAGES": "<CANVAS_MAX_PAGES>"
}
}
}
}
启动命令uvx canvas-api-mcp
需要配置的环境变量
CANVAS_BASE_URLBase URL of your Canvas LMS instance, e.g. https://yourschool.instructure.com
CANVAS_TOKEN密钥Canvas API access token (Canvas: Account > Settings > New Access Token)
CANVAS_MAX_PAGESOptional cap on the number of pages fetched per paginated Canvas API call

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

安装包
pypicanvas-api-mcp1.1.0

工具

19

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

参数类型必填说明
course_idinteger是课程 ID,来自 my_courses

详细介绍

canvas-api-mcp

再也不会错过作业截止日期。

问问你的 AI 哪些作业即将截止,它会直接从 Canvas 读取答案:
真实的截止日期、真实的提交状态,无需在不同平台间复制任何内容。

适用于 Canvas LMS 的 MCP 服务。提供 16 个精选工具,满足日常学习需求;此外还有一个网关,可访问 Canvas 实例公开的所有端点。

终端。问题一:‘我这学期选了哪些课?’精选工具 my_courses 立即给出答案(CS3230、CS2040S、MA2001、GEA1000)。问题二:‘我加入了哪些小组?’没有精选工具能处理,因此 search_canvas_api 找到了 1,116 个 Canvas 端点中的 GET /v1/users/self/groups,canvas_request 随后执行了该请求。18 个工具 · 可访问 1,116 个端点 · 149 项测试 · MIT。

📖 文档:mcp.johannsenlum.com/canvas-lms · 安装指南 · 工具参考 · 技能 · 合规说明

PyPI Python 3.11+ License: MIT MCP Registry GitHub stars

供个人使用的软件。 Canvas 的 API 政策要求供多人使用的应用采用 OAuth,而 Canvas OAuth 无法通过本地安装的软件安全实现(不支持 PKCE,且不能将 client_secret 随软件包一起发布)。 请在自己的账户中使用自己的令牌。详见合规说明。

你可以这样提问

实际提示词及回答问题的工具。

你: 这周有哪些作业要交? Claude: (调用 whats_due):你有 3 项作业要交:问题集 4(周四,CS3230)、讨论回复(周五,IS4302)和里程碑 2 报告(周日,EE2211)。

你: 我数据库课程的成绩怎么样?第 6 周的教学大纲有什么内容? Claude: (依次调用 my_grades、get_syllabus,然后调用 course_content 获取第 6 周的模块):你的总成绩为 87%。第 6 周讲解规范化,并安排了一篇阅读材料和一个需在周五提交的实验文件。

你: 总结第 8 讲的 PDF 讲义,并调出我的作文提交内容,让我看看反馈。 Claude: (调用 list_files + read_file 获取 PDF,然后调用 my_submission 获取作文):……

你: 回复“Project teams”讨论,说我下午 3 点之后有空参加小组会议。 Claude: (调用 post_discussion_reply ✏️):已在讨论串中发布。

你: Canvas 是否提供过按题目分类的测验统计?覆盖整个学期的那种。 Claude: (调用 search_canvas_api 查找合适的端点,然后调用 canvas_request 请求该端点):……

最后一个例子正是网关工具的用武之地:只要你的 Canvas 实例上存在某个端点,search_canvas_api 就能找到它,canvas_request 就能调用它,即使只有 16 个工具经过了人工精选。

安装

先决条件
  • Python 3.11+

  • Canvas 个人访问令牌。你的机构必须允许学生创建此类令牌:前往 Canvas → Account → Settings → Approved Integrations,查看是否有 “+ New access token” 按钮。附截图的完整操作指南: mcp.johannsenlum.com/canvas-lms/install。

    请注意,令牌会过期。 自 Instructure 于 2025 年 10 月进行安全更新以来,仅持有学生角色的账户必须将有效期设为不超过 120 天,且机构通常会设定更短的上限(NUS 允许 90 天)。请记下过期日期:令牌一旦过期,所有工具会立即返回 401,看起来像是安装出错,而不是凭据过期。

运行服务

canvas-api-mcp 已发布到 PyPI。运行方式如下:

uvx canvas-api-mcp

从源代码安装(贡献者 / 尚未发布的 main)。 这不属于上述常规安装流程,只有在你想使用最新的未发布代码,而不是 PyPI 上已发布的版本时才需要:

uvx --from git+https://github.com/JohannsenLum/canvas-api-mcp canvas-api-mcp

或者从本地克隆运行:

git clone https://github.com/JohannsenLum/canvas-api-mcp
cd canvas-api-mcp
uv sync
快速安装(一键安装)

只有 Cursor、VS Code 和 LM Studio 支持一键深层链接。其他客户端均没有已记录的安装链接格式。这些链接会预填下方的配置,但之后仍需填写 CANVAS_BASE_URL 和 CANVAS_TOKEN。

Add to Cursor Add to VS Code Add to LM Studio

所有客户端(手动配置)

你的令牌保留在自己的设备上,存放于你自己的配置文件中。除直接发送到你的 Canvas 实例外,它绝不会传输到任何地方。

客户端深层链接?
Claude Code否
Claude Desktop否
Cursor是,见上文
VS Code是,见上文
LM Studio是,见上文
Zed否
Windsurf否(Windsurf 仅会解析其自身注册表中的服务)

Claude Code:~/.claude.json
{
  "mcpServers": {
    "canvas": {
      "command": "uvx",
      "args": ["canvas-api-mcp"],
      "env": {
        "CANVAS_BASE_URL": "https://canvas.yourschool.edu",
        "CANVAS_TOKEN": "your-token-here"
      }
    }
  }
}

Claude Desktop:claude_desktop_config.json

macOS:~/Library/Application Support/Claude/claude_desktop_config.json Windows:%APPDATA%\Claude\claude_desktop_config.json

Claude Desktop 没有一键安装方式(它安装的是 .mcpb 捆绑包,而非深层链接)。通过 Settings → Developer → Edit Config 复制并粘贴此 JSON:

{
  "mcpServers": {
    "canvas": {
      "command": "uvx",
      "args": ["canvas-api-mcp"],
      "env": {
        "CANVAS_BASE_URL": "https://canvas.yourschool.edu",
        "CANVAS_TOKEN": "your-token-here"
      }
    }
  }
}

Cursor:~/.cursor/mcp.json

作为上方按钮的备用方案,或者如果你更愿意直接粘贴:

{
  "mcpServers": {
    "canvas": {
      "command": "uvx",
      "args": ["canvas-api-mcp"],
      "env": {
        "CANVAS_BASE_URL": "https://canvas.yourschool.edu",
        "CANVAS_TOKEN": "your-token-here"
      }
    }
  }
}

VS Code:.vscode/mcp.json

作为上方按钮的备用方案,或者如果你更愿意直接粘贴。请注意,VS Code 使用 servers 键,而非 mcpServers:

{
  "servers": {
    "canvas": {
      "type": "stdio",
      "command": "uvx",
      "args": ["canvas-api-mcp"],
      "env": {
        "CANVAS_BASE_URL": "https://canvas.yourschool.edu",
        "CANVAS_TOKEN": "your-token-here"
      }
    }
  }
}

LM Studio:mcp.json(Program → Install → Edit mcp.json)

作为上方按钮的备用方案,或者如果你更愿意直接粘贴:

{
  "mcpServers": {
    "canvas": {
      "command": "uvx",
      "args": ["canvas-api-mcp"],
      "env": {
        "CANVAS_BASE_URL": "https://canvas.yourschool.edu",
        "CANVAS_TOKEN": "your-token-here"
      }
    }
  }
}

Zed:settings.json

Zed 没有深层链接。请在 Zed 设置的 context_servers 下添加以下内容:

{
  "context_servers": {
    "canvas": {
      "source": "custom",
      "command": "uvx",
      "args": ["canvas-api-mcp"],
      "env": {
        "CANVAS_BASE_URL": "https://canvas.yourschool.edu",
        "CANVAS_TOKEN": "your-token-here"
      }
    }
  }
}

Windsurf:~/.codeium/windsurf/mcp_config.json

Windsurf 没有深层链接。它只会解析其自身注册表中的服务,因此必须通过 Windsurf Settings → MCP Servers → Edit raw config 手动粘贴:

{
  "mcpServers": {
    "canvas": {
      "command": "uvx",
      "args": ["canvas-api-mcp"],
      "env": {
        "CANVAS_BASE_URL": "https://canvas.yourschool.edu",
        "CANVAS_TOKEN": "your-token-here"
      }
    }
  }
}

工具

工具功能
whoami身份信息以及你在每门课程中的角色
get_calendar_feed_url你的私人日历 .ics 链接(仅在你提出请求时提供)
my_courses正在进行的课程及其代码、学期和角色
whats_due所有截止事项,按截止时间从近到远排列
my_grades每门课程的当前成绩
list_assignments某门课程的作业及提交状态
get_assignment一份完整的作业及其评分标准
my_submission你的提交、成绩和反馈
submit_assignment ✏️提交作业
course_announcements最新公告
course_content模块及其内容
list_files某门课程中的文件
read_file从 PDF/DOCX/PPTX/文本文件中提取文本
get_page按 slug 指定的 Canvas wiki 页面
get_syllabus某门课程的教学大纲
read_discussion讨论主题,或某个主题的回复
post_discussion_reply ✏️在讨论中发帖
search_canvas_api按关键字查找任意端点(网关)
canvas_request ✏️执行任意端点(网关)

✏️ 会向 Canvas 写入数据。总共有 3 个写入工具:submit_assignment、 post_discussion_reply,以及在使用非 GET 方法调用时的 canvas_request (通过 canvas_request 发起的 GET 调用是只读的)。

search_canvas_api + canvas_request 可以访问你的实例公开的全部约 1,116 个端点。它们能执行的操作由 Canvas 根据你的令牌权限决定:教师令牌可解锁教育工作者端点,无需更改此服务。

提示词

week_ahead、study_pack、grade_check。

资源

canvas://me、canvas://courses、canvas://api/catalog。

技能

如果你的客户端支持 skills 约定:

npx skills add JohannsenLum/canvas-api-mcp

其他机构

适用于任何 Canvas 实例:设置 CANVAS_BASE_URL。约 1,116 个端点的目录随软件包一同提供,位于 canvas_api_mcp/data/catalog.json。若要与部署中的确切功能集相匹配,请重新生成:

python scripts/build_catalog.py https://canvas.yourschool.edu -o data/catalog.json

合规

  • 学术诚信。 submit_assignment 可以提交任何内容,包括 AI 生成的作品。提交非本人完成的作品违反几乎所有机构的学术诚信规则,Canvas 的 API Policy 也明确禁止违反这些规则的使用。责任由你承担。
  • 速率限制。 客户端会遵守 Canvas 公布的配额进行限流。请勿移除限流:超负荷调用 API 是被禁止的。
  • 课程资料。 read_file 用于获取供你本人学习的资料。请勿重新分发。
  • 你的令牌等同于密码。 它可以读取你的成绩,也可以以你的身份提交作业。请设置有效期。切勿将其提交到代码库。
  • 仅限个人使用。 第一阶段面向使用本人令牌的单个学生。没有专门为教育工作者打造的工具;Canvas 的 OAuth 流程不支持 PKCE,因此这个本地安装的服务无法实现 Canvas API Policy 对更广泛用途所要求的多用户 OAuth。请勿将其重新打包为多租户服务。

开发

uv sync
uv run pytest -v

# Live tests against your real account (read-only)
CANVAS_LIVE_TESTS=1 uv run pytest tests/test_live.py -v

环境变量:CANVAS_BASE_URL、CANVAS_TOKEN,以及可选的 CANVAS_MAX_PAGES(默认值为 10)和 CANVAS_TIMEOUT(秒,默认值为 30)。 请参阅 env.template。

贡献

欢迎提交问题和拉取请求:请参阅 CONTRIBUTING.md,了解设置方法、修改前应了解的架构规则,以及添加新精选工具的标准。

发现安全问题?请勿公开提交问题。 请参阅 SECURITY.md 了解私密报告方式;这在此处尤其重要,因为本项目会处理等同于密码的 Canvas 令牌。

变更记录见 CHANGELOG.md。

许可证

MIT © 2026 Johannsen Lum。

你可以使用、修改、重新分发它,也可以基于它开发商业产品;唯一的条件是保留版权声明和许可证文本。本软件不提供任何形式的担保。

贡献内容也遵循相同的许可证。

评论

支持 Markdown

第一次接触 MCP?

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

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