
Canvas LMS (read-only)
io.github.rbrtlol由 GitHub 帳號 rbrtlol 發布v2.2.1更新於 Nov 12, 2026
Read-only Canvas LMS for students: what changed in your courses, search across slides and PDFs.
概覽
給學生的唯讀 Canvas LMS 助理:查看課程有哪些變動,並搜尋頁面、公告以及連結的 PDF 和投影片內容。
- 可以做什麼
- 追蹤變動與截止日期:某個時間點以來的變更、附繳交狀態的行事曆項目、行事曆事件
- 搜尋課程內容:對頁面、作業、公告、討論、課程大綱及連結文件內文做全文搜尋,並附上頁碼或投影片編號
- 閱讀課程教材:課程、單元、頁面、課程大綱、公告、討論、測驗、作業與評分規準
- 讀取檔案:依頁讀取 PDF、依投影片讀取 PPTX、依章節讀取 DOCX、文字或程式碼檔案,以及 ZIP 清單
- 查看成績與身分:自己的分數、成績與評語,權杖所屬使用者,以及快照健康狀態
- 備用入口:任何唯讀的 Canvas API GET 端點,可關閉
- 適用情境
- 適合想每天取得課程變動摘要、查看哪些作業即將到期且尚未繳交,或直接從講義投影片和 PDF 快速找答案而不必打開 Canvas 的學生。助教和教師也可用於閱讀,包括待批改數量。
- 執行需求
- npm 套件需要本機 Node.js 執行環境(22.13 或更新版本),或使用 Claude Desktop 安裝一鍵擴充功能;HTTP 連接器模式需要以 Docker 或 npx 架設 HTTPS 伺服器。需要 CANVAS_BASE_URL 中的 Canvas 位址與 CANVAS_TOKEN 中的 Canvas 個人存取權杖;HTTP 模式另需 MCP_SECRET。需要能連線到你的 Canvas 執行個體的網路。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 Canvas LMS (read-only),將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
canvas-readonly-mcp
Ask Claude what changed in your courses, and search every lecture slide. A read-only MCP server for Canvas LMS, built as a study assistant rather than a full Canvas API.
- Knows what changed: daily snapshots of your courses, so "what's new since yesterday?" is one call: new announcements, moved deadlines, new grades, edited pages, even which slides in a lecture PDF changed.
- Searches inside your files: full-text search over pages, assignments, announcements and the text of every linked PDF, slide deck and document, with the page or slide number. It finds files linked from pages and modules even when the Files tab is hidden.
- Read-only by design: it only ever sends
GETrequests to Canvas. It can't submit, post, grade or change anything, and it doesn't even mark discussions as read. - Your token stays with you: one-click Claude Desktop extension (token in your system keychain), local stdio, or your own server for claude.ai. Nothing goes through a third party.
Works with any Canvas instance. Made for students; TAs and teachers can use it too (for reading, e.g. "needs grading" counts).
Not affiliated with or endorsed by Instructure. "Canvas" is a trademark of Instructure, Inc.
What you can ask
- "What changed in my courses since yesterday?"
- "What's due in the next two weeks, and what have I not submitted?"
- "Summarize the lab 2 instructions" (the server finds the PDF linked from the course and returns its text)
- "Which slides in lecture 5 changed since last week?"
- "Where did we cover dynamic programming?" (searches pages, announcements and the text of every linked PDF and slide deck)
- "How will lab 3 be graded, and what did I lose points on in lab 2?"
Tools
Quick start
1. Get a Canvas access token
In Canvas: Account → Settings → + New access token. Give it a purpose ("Claude") and preferably an expiry date.
You also need your Canvas address, e.g. https://canvas.yourschool.edu or https://yourschool.instructure.com.
No "New access token" button? Your school may have turned personal tokens off.
Some institutions disable personal access tokens for students, or only allow short-lived ones. This server needs one: it doesn't support Canvas OAuth, because that requires your school's admins to register each app.
- Button missing: ask your school's Canvas or IT support whether personal access tokens can be enabled for you. Mention that it's for a tool that only reads (it never sends anything but
GETrequests). Some schools say yes, many say no. - Token expires quickly: tools start failing with "the Canvas API token is invalid or expired". Create a new token and update it: in Claude Desktop under Settings → Extensions → Canvas LMS (read-only), or
CANVAS_TOKENin your config or.env. - Check your school's rules on connecting course data to AI tools before you start.
2a. Claude Desktop: one-click extension (easiest)
- Download
canvas-readonly-mcp-<version>.mcpbfrom the latest release. - Open it (double-click, or drag it into Claude Desktop → Settings → Extensions) and click Install.
- Enter your Canvas address and access token. The token is stored in your system keychain.
Nothing else to install: Claude Desktop runs the extension with its built-in Node.js.
2b. Local: Claude Code and other stdio clients
Requires Node.js 22.13 or newer.
Claude Code:
Claude Desktop without the extension: add this to claude_desktop_config.json (Settings → Developer → Edit Config):
In stdio mode, snapshots refresh shortly after the client starts the server, and in the background whenever they're older than SNAPSHOT_MAX_AGE_H (default 20h). Data is stored in your user data directory (~/Library/Application Support/canvas-readonly-mcp on macOS, ~/.local/share/canvas-readonly-mcp on Linux, %APPDATA%\canvas-readonly-mcp on Windows).
2c. Server: claude.ai custom connectors (HTTP)
claude.ai connects from the internet, so this needs a server with HTTPS.
Put a reverse proxy with TLS in front of it: deploy/Caddyfile.example (automatic certificates) or deploy/nginx.conf.example. In claude.ai, add a custom connector with the URL
and leave the OAuth fields empty. Clients that support headers can use https://…/mcp with Authorization: Bearer <MCP_SECRET> instead.
Without Docker: npx canvas-readonly-mcp --http --env-file .env.
Configuration
All settings are environment variables (or a file passed with --env-file).
How it works
Finding files. Many Canvas setups hide the files and pages lists from students. The server therefore uses those lists when your role may see them, and otherwise follows links from the front page, modules, syllabus, assignments and announcements. canvas_get_page shows file links inline as (file:<id>). Leftover $CANVAS_OBJECT_REFERENCE$ links from course copies are resolved where possible and otherwise marked as broken.
Reading files. canvas_read_file downloads the file (the token is only sent to Canvas itself, never to the storage host it redirects to) and extracts text in a separate worker thread with memory and time limits. Results are cached by file id and updated_at. Scanned PDFs without a text layer are reported as such (no OCR). Legacy .doc/.ppt aren't supported.
Snapshots and the change log. Once a day (and when stale), the server stores the state of each course on your Canvas dashboard in SQLite (star a course under Courses → All courses to add it, or set SNAPSHOT_COURSES): pages, modules, assignments (with your submission status and grade), announcements and discussions (with a teacher/TA flag), quizzes, calendar events, the syllabus, and file metadata with a per-page content hash for PDFs. Each item is normalized (HTML to text, volatile fields dropped) and hashed. Differences become change events with old → new values, short text diffs, and changed PDF page numbers. The first run is a silent baseline. Announcements with no posted_at (copied from an earlier course round) are flagged "unpublished/old". Items are only marked removed when every source that could link to them was read successfully, so a temporary error never produces false "removed" events.
Roles. Your role in each course comes from your enrollment. As a student, your submissions, grades and missing/late flags are tracked. As a TA or teacher, your own submissions are skipped, only staff discussion topics are tracked, and assignments show how many submissions need grading. Observer accounts work for course content, but the observed student's submissions aren't tracked.
Rate limits. The server watches Canvas's X-Rate-Limit-Remaining, backs off on 403 "Rate Limit Exceeded", 429 and 5xx responses, and limits how many requests run at once.
Security and privacy
- Treat the token like a password: it can read everything you can see in Canvas. The server never sends it anywhere except your Canvas.
- In HTTP mode the connector URL contains the secret: anyone with it can read your Canvas data (read-only). Wrong secrets get a plain 404. Rotate by changing
MCP_SECRET. - Course content (pages, announcements, file text) is written by other people and goes to the model as tool output. See SECURITY.md about prompt injection.
- Data stays on your machine/server: a SQLite database and an extracted-text cache. Delete
DATA_DIR(or the Docker volumes) to remove it. - No telemetry and no hosted service: see PRIVACY.md for what is read, stored and sent where.
Development
The extension manifest is mcpb/manifest.json; its version is taken from package.json when packing. Update its tools list when adding or renaming a tool.
See CONTRIBUTING.md.
License
來源:README.md,提交 5aef78b
工具
0版本歷史
1- v2.2.1最新Nov 12, 2026
評分
已滿足適用檢查項的 50%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分
