mcpField
C
canvas-parent-mcp

canvas-parent-mcp

本地服务
github.com/chrischall科研与教育03 天前更新

关于 canvas-parent-mcp

canvas-parent-mcp 是面向家长观察者和学生、用于访问本人 Canvas LMS 数据的非官方 MCP 服务。其以读取为主的工具涵盖课程、作业、成绩、日程、消息和文件,并支持多种认证方式,包括浏览器会话回退方案。

主要功能

  1. 01读取个人资料和被观察者账户
  2. 02浏览课程、作业和提交记录
  3. 03查看成绩、日历和规划事项
  4. 04读取公告、对话和讨论主题
  5. 05列出课程文件并下载文件
  6. 06支持令牌、OAuth、密码或浏览器会话认证

适用场景

  1. 01检查学生的缺交作业和近期提交
  2. 02查看成绩及即将到来的课程活动
  3. 03阅读课程公告或对话
  4. 04将课程文件下载到本地目录

MCP 相关

通过 MCP 工具提供 Canvas LMS 数据,主要用于读取,也支持下载文件。它使用受支持的认证方式之一连接配置的 Canvas 实例。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"chrischall-canvas-parent": {
"command": "npx",
"args": [
"-y",
"canvas-parent-mcp"
],
"env": {
"CANVAS_BASE_URL": "<CANVAS_BASE_URL>",
"CANVAS_USERNAME": "<CANVAS_USERNAME>",
"CANVAS_PASSWORD": "<CANVAS_PASSWORD>",
"CANVAS_TOKEN": "<CANVAS_TOKEN>",
"CANVAS_CLIENT_ID": "<CANVAS_CLIENT_ID>",
"CANVAS_CLIENT_SECRET": "<CANVAS_CLIENT_SECRET>",
"CANVAS_REFRESH_TOKEN": "<CANVAS_REFRESH_TOKEN>",
"CANVAS_NAME": "<CANVAS_NAME>",
"CANVAS_SESSION_CACHE": "<CANVAS_SESSION_CACHE>",
"CANVAS_SESSION_FILE": "<CANVAS_SESSION_FILE>",
"CANVAS_OUTPUT_DIR": "<CANVAS_OUTPUT_DIR>",
"CANVAS_DISABLE_FETCHPROXY": "<CANVAS_DISABLE_FETCHPROXY>",
"FETCHPROXY_WS_PORT": "<FETCHPROXY_WS_PORT>",
"FETCHPROXY_WS_HOST": "<FETCHPROXY_WS_HOST>",
"FETCHPROXY_IDENTITY_DIR": "<FETCHPROXY_IDENTITY_DIR>"
}
}
}
}
启动命令npx -y canvas-parent-mcp
需要配置的环境变量
CANVAS_BASE_URLCanvas instance base URL, e.g. https://cms.instructure.com
CANVAS_USERNAMECanvas login username/email (recommended) — pair with CANVAS_PASSWORD for auto-login. No SSO/2FA.
CANVAS_PASSWORD密钥Canvas password (recommended) — required iff CANVAS_USERNAME is set
CANVAS_TOKEN密钥Canvas personal access token (advanced) — most schools have disabled token creation
CANVAS_CLIENT_IDCanvas OAuth client ID (advanced — for SSO accounts that can't use username/password)
CANVAS_CLIENT_SECRET密钥Canvas OAuth client secret (advanced)
CANVAS_REFRESH_TOKEN密钥Canvas OAuth refresh token (advanced) — bootstrap via canvas-parent-mcp-qr-login
CANVAS_NAMEFriendly name for the Canvas instance (defaults to the host portion of the base URL)
CANVAS_SESSION_CACHESet to false to disable the on-disk session cache and re-authenticate on every process start. Defaults to enabled.
CANVAS_SESSION_FILEAbsolute path for the session cache file. Defaults to $MCP_DATA_DIR/.canvas-parent-mcp/session.json.
CANVAS_OUTPUT_DIRDirectory canvas_download_file may write into (default ~/Downloads). A relative destinationPath is resolved against it.
CANVAS_DISABLE_FETCHPROXYSet to 1 to turn off the browser (fetchproxy) fallback, so missing credentials are a hard error instead.
FETCHPROXY_WS_PORTLocalhost port of the fetchproxy concentrator the ContextMint Bridge extension connects to (default 37149). Every MCP on one machine shares it, so move it for all of them or not at all.
FETCHPROXY_WS_HOSTBind interface for the fetchproxy concentrator, a literal IP only (default 127.0.0.1). Keep on loopback; it exists for hosted deployments that run each MCP in its own network namespace.
FETCHPROXY_IDENTITY_DIRAbsolute path where the fetchproxy long-term identity keypair is stored (default ~/.fetchproxy/identity/).

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

安装包
npmcanvas-parent-mcp2.1.10

工具

19

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

此工具无需参数。

详细介绍

canvas-parent-mcp

CI npm license

适用于 Canvas LMS(Instructure)的 MCP 服务,专为家长观察者和学生自助访问设计。默认使用 https://cms.instructure.com,但也适用于任何 Canvas 实例。

与姊妹项目 infinitecampus-mcp 的只读家长门户范围一致。用户通过 canvas_* 工具前缀进行交互。

工具

涵盖个人资料、被观察对象、课程、作业、提交、成绩、日历、规划、公告、对话、讨论和文件的 18 个工具。

领域工具
个人资料canvas_get_profile
被观察对象canvas_list_observees
课程canvas_list_courses、canvas_get_course
作业canvas_list_assignments、canvas_list_missing_submissions
提交canvas_get_submission、canvas_list_recent_submissions(默认 14d 时间范围)
成绩canvas_list_enrollments
日历canvas_list_calendar_events、canvas_list_upcoming_events
规划canvas_list_planner_items
公告canvas_list_announcements
对话canvas_list_conversations、canvas_get_conversation
讨论canvas_list_discussion_topics
文件canvas_list_course_files、canvas_download_file

Harness 会将以下工具作为写入/IO 操作进行限制:canvas_download_file。

canvas_download_file 仅会获取你设置的 CANVAS_BASE_URL 主机上的 /files/… URL(https),因此 Canvas 凭据绝不会发送到其他位置;它也只会在下载目录中写入文件:如果设置了 CANVAS_OUTPUT_DIR,则使用该目录,否则使用 ~/Downloads。相对 destinationPath 会以该目录为基准解析。它绝不会通过目标位置的符号链接写入文件,新建文件仅允许所有者访问(0600)。

配置

设置 CANVAS_BASE_URL,并选择四种身份验证模式之一。canvas-parent-mcp 会按优先级顺序尝试:

  1. CANVAS_TOKEN → 个人访问令牌
  2. CANVAS_CLIENT_ID + CANVAS_CLIENT_SECRET + CANVAS_REFRESH_TOKEN → OAuth
  3. CANVAS_USERNAME + CANVAS_PASSWORD → 会话抓取(仅限直接 Canvas 账户)
  4. fetchproxy 回退方案 → 无需环境变量;通过 ContextMint Bridge 浏览器扩展,从已登录的 Canvas 标签页读取 canvas_session + pseudonym_credentials Cookie

如果这些方式都不成功,你会收到一条列出所有备用方案的错误信息。

模式 A — fetchproxy 回退方案(推荐,无需配置)
CANVAS_BASE_URL=https://cms.instructure.com

从其发布页面安装 ContextMint Bridge 浏览器扩展(Chrome:下载 Chrome zip,解压,然后开启开发者模式,在 chrome://extensions 中以未打包扩展的方式加载——目前尚未上架 Chrome Web Store;Safari:目前尚不可用——该扩展将随 ContextMint 应用一起发布,但该应用尚未公开提供下载,因此暂时请使用 Chrome),登录你的 Canvas 实例。MCP 会在首次请求时从浏览器读取你的会话 Cookie,并在 Canvas 返回 401(会话过期)时再次读取。期间,Canvas API 调用会直接从 Node 发出——扩展不在请求的关键路径中,但必须保持可访问状态(浏览器正在运行且已安装扩展),以便 MCP 续期。由于登录由 Canvas 本身处理,因此适用于任何身份验证流程(包括 SSO/SAML/2FA)。

扩展的来源。 ContextMint Bridge 是 fetchproxy 浏览器扩展更名后的版本,由同一位维护者开发——fetchproxy 自己的 README(扩展)中也指向该扩展。其源代码公开发布在 nullnet-app/contextmint-bridge:你可以自行构建(根据其 README 运行 npm run build),或使用旁边发布的 .sha256 文件校验发布 zip:

shasum -a 256 -c contextmint-bridge-chrome-<version>.zip.sha256

有多个学区?声明的域名 instructure.com 会匹配所有 *.instructure.com 主机,因此只需配对扩展一次。MCP 会使用你在 CANVAS_BASE_URL 中设置的学区。

设置 CANVAS_DISABLE_FETCHPROXY=1 可选择不使用 fetchproxy(缺少凭据时会报错并中止——适用于无头 CI)。

模式 B — 用户名/密码(旧版会话抓取)
CANVAS_BASE_URL=https://cms.instructure.com
[email protected]
CANVAS_PASSWORD=your-canvas-password
CANVAS_NAME=cms                # optional, defaults to host portion of base URL

仅适用于 Canvas 直接账号——不支持 SAML/Google/Microsoft SSO 或 2FA。此方式较脆弱(Canvas 登录页每次改版都可能导致失效)。如果你的标签页已经登录,优先使用 fetchproxy。请将 .env 视作密码文件。

高级替代方案
个人访问令牌 — 如果管理员允许,这是最简单的方式
CANVAS_BASE_URL=https://cms.instructure.com
CANVAS_TOKEN=your-personal-access-token

通过 Canvas → Account → Settings → “+ New Access Token” 生成。大多数机构已禁止非管理员使用此功能。

通过移动端 QR code 使用 OAuth — 从移动应用登录流程引导完成
CANVAS_BASE_URL=https://cms.instructure.com
CANVAS_CLIENT_ID=...
CANVAS_CLIENT_SECRET=...
CANVAS_REFRESH_TOKEN=...

如果你的账号使用 SSO,且无法使用 fetchproxy(例如无头服务器),可以复用 Canvas 移动应用的 QR 登录流程来创建 OAuth 凭据——请参阅下文的通过移动端 QR code 引导完成 OAuth 配置。

同时设置多种方式时的优先级: CANVAS_TOKEN > 用户名/密码 > OAuth > fetchproxy。

请参阅 .env.example。

会话缓存

在用户名/密码和 OAuth 模式下,已登录会话会在多次运行之间缓存,因此重启后无需再次登录(也无需再次执行刷新令牌交换)。默认情况下,缓存文件位于 $MCP_DATA_DIR/.canvas-parent-mcp/session.json,也可通过 CANVAS_SESSION_FILE 指定;其中以明文保存有效的 canvas_session + pseudonym_credentials Cookie,或 OAuth 访问令牌。文件创建时仅所有者可访问(0600,所在目录权限为 0700),且只以加盐摘要形式存储凭据绑定信息;你的用户名、密码和刷新令牌绝不会写入该文件。令牌和 fetchproxy 模式不会写入缓存。

以你的身份运行的备份和同步工具仍可复制该文件。在多人共用或有备份的机器上,设置 CANVAS_SESSION_CACHE=false,仅在内存中保留会话(之后每次启动都会重新进行身份验证)。

通过移动端二维码引导完成 OAuth

如果 Canvas 管理员已禁用个人访问令牌的创建(有些机构会限制为“仅限移动应用”),并且你的账户使用 SSO,无法通过用户名/密码进行身份验证,则可以通过官方 Canvas 移动应用使用的相同二维码登录流程获取 OAuth 凭据:

  1. 在 Canvas 网页版中,打开 账户 → 移动登录二维码 — Canvas 会显示一个有效期为 10 分钟的二维码。

  2. 使用任意二维码读取器解码。解码结果是 sso.canvaslms.com 上的一个 URL,格式类似于 https://sso.canvaslms.com/canvas/login?domain=...&code=...。

  3. 运行随附的辅助程序:

    npx canvas-parent-mcp-qr-login "<decoded-qr-url>" >> .env
    

    它会调用 Canvas 的公开 mobile_verify.json 端点获取移动客户端 client_id/client_secret,将二维码中的一次性代码交换为一对访问令牌和刷新令牌,并将 CANVAS_BASE_URL / CANVAS_CLIENT_ID / CANVAS_CLIENT_SECRET / CANVAS_REFRESH_TOKEN 输出到 stdout。刷新令牌属于敏感信息 — 请像对待密码一样保管。

此流程复用了官方 Canvas Student/Parent 应用使用的相同 SSO + OAuth 端点;从 Canvas 的角度来看,生成的会话与移动应用会话无异。仅将其用于你合法拥有控制权的账户。

状态

非官方 — 与 Instructure 无关联。由 AI 维护。

条款确认

使用此 MCP 服务,即表示你确认并同意以下内容:

1. 此服务通过官方 Canvas REST API 访问你自己的 Canvas 账户。 身份验证使用由你所在机构签发的个人访问令牌。此服务不会、也无法访问他人的选课信息、成绩或消息。

2. 除你所在机构自身的可接受使用政策外,你使用此服务还受 Instructure 的 Canvas API 政策约束。 与此处最相关的条款如下:

你不得代表任何第三方使用我们的 API……不得出于竞争目的使用或访问我们的 API……不得干扰我们的 API、系统或其他用户……不得规避任何合同规定的使用限制。

关于速率限制:“限制按用户访问令牌执行……并采用动态限流。” 关于数据:“通过 API 检索的任何用户信息——包括选课信息、成绩和个人资料信息——都应视为私人信息并予以处理。”

每次调用此服务中的工具,即表示你同意这些条款——维护者于 2026-05-23 阅读了这些条款。

3. 仅供个人、观察者/学生/家长使用。 本项目与 Instructure, Inc. 或任何学区均无关联、未获其认可或赞助,也不与其合作。此工具用于已通过身份验证的 Canvas 用户(通常是家长观察者)进行个人自动化操作,以读取自己(或学生)的选课信息、作业、成绩和公告。请勿使用此工具批量提取学区课程内容、转发学生数据,或使用学生记录训练 AI 模型。

4. FERPA 和你所在机构的 AUP 均适用。 学生教育记录受联邦《家庭教育权利和隐私法》(FERPA)保护。即使你的令牌授予你合法访问权限,如何存储、转发或将这些数据输入大模型也受到监管。请将任何输出(成绩、作业、评论、对话)视为学生机密数据。你所在机构的可接受使用政策可能对自动访问另设限制——开始自动化操作前请先确认。

5. 令牌仅供你本人使用。 请勿将 CANVAS_API_TOKEN 提交到 git,不要将其粘贴到共享聊天中;如果令牌曾经泄露,请立即轮换。令牌一旦泄露,便可在你的用户权限范围内完全访问 Canvas。

6. 你须对因使用此服务并关联 Canvas 账户而产生的任何后果承担全部责任——包括速率限制(Canvas 负载较高时,动态限流会在远低于文档所述限制的情况下启动)、令牌撤销、账户警告、机构管理员调查或任何执法措施。如果 Instructure 或你所在机构对你的使用提出异议,请停止使用此服务。

本节是维护者本着诚信对条款所作的概述——不构成法律建议,也不会修改或取代 Instructure 的实际 Canvas API 政策或你所在机构的政策。

评论

支持 Markdown

第一次接触 MCP?

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

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