canvas-readonly-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| HOST | No | HTTP listen address. The Docker image uses 0.0.0.0. | 127.0.0.1 |
| PORT | No | HTTP listen port. | 8787 |
| DB_PATH | No | Overrides the database path. | |
| DATA_DIR | No | Where the database and cache live. Defaults to the OS user data directory (~/Library/Application Support/canvas-readonly-mcp on macOS, ~/.local/share/canvas-readonly-mcp on Linux, %APPDATA%\canvas-readonly-mcp on Windows). | |
| CACHE_DIR | No | Overrides the cache directory. | |
| DISPLAY_TZ | No | Time zone for displayed times (IANA name, e.g. Europe/Stockholm). Defaults to your Canvas profile's time zone. | |
| MCP_SECRET | No | At least 32 characters; part of the connector URL. Required for --http mode. | |
| MAX_FILE_MB | No | Download size limit in MB. | 50 |
| SNAPSHOT_AT | No | Daily snapshot time in DISPLAY_TZ, or off. | 04:30 |
| CACHE_MAX_MB | No | Extracted-text cache size in MB; least recently used entries are evicted. | 500 |
| CANVAS_TOKEN | Yes | Your Canvas personal access token. | |
| ENABLE_RAW_GET | No | Set false to remove canvas_api_get. | true |
| SNAPSHOT_SCOPE | No | Which courses to snapshot: dashboard = the courses on your Canvas dashboard; active = every active enrollment. Courses whose end date has passed are skipped either way. | dashboard |
| CANVAS_BASE_URL | Yes | Your Canvas address, e.g. https://canvas.yourschool.edu or https://yourschool.instructure.com. | |
| CRAWL_MAX_PAGES | No | Crawl limit per course. | 200 |
| SNAPSHOT_COURSES | No | Only these course ids (overrides SNAPSHOT_SCOPE). id:label:role overrides the label and role. | |
| SNAPSHOT_ENABLED | No | Turn the snapshot/change-log feature off entirely. | true |
| SNAPSHOT_EXCLUDE | No | Course ids to skip. | |
| SNAPSHOT_EXTRACT | No | Which files' text to hash for change detection: linked, all (also files only in the files index), or none. | linked |
| ANNOUNCEMENT_DAYS | No | Announcement crawl limit per course. | 730 |
| EXTRACT_MAX_PAGES | No | Text extraction page limit. | 500 |
| EXTRACT_TIMEOUT_S | No | Text extraction timeout in seconds. | 60 |
| DOWNLOAD_TIMEOUT_S | No | Download timeout in seconds. | 60 |
| SNAPSHOT_MAX_AGE_H | No | Refresh at startup / on demand when older than this. | 20 |
| CANVAS_HOST_ALIASES | No | Other hostnames of the same Canvas, comma-separated (e.g. yourschool.instructure.com when you use a custom domain). Links to them are recognized. | |
| EVENT_RETENTION_DAYS | No | How long change events are kept. | 120 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| canvas_whoamiA | Return the Canvas profile the token belongs to. Use to verify the connection works. |
| canvas_list_coursesA | List your Canvas courses (active by default) with your role in each. Returns course ids needed by other tools. |
| canvas_whats_newA | Recent activity across all active courses (announcements, new/changed assignments, discussions, grades, messages) since a timestamp. Best tool for a daily check. |
| canvas_list_planner_itemsA | Everything with a date in a window across courses: assignments, quizzes, discussions, calendar events, with submission status. Default: today through 14 days ahead. |
| canvas_list_assignmentsC | Assignments in a course with due dates and your submission status. |
| canvas_get_assignmentB | Full details of one assignment, including the description as text. |
| canvas_list_announcementsA | Course announcements, newest first. Defaults to all active courses, last 14 days. |
| canvas_get_syllabusB | Course syllabus / course overview text, if the course uses Canvas's syllabus page. |
| canvas_list_modulesB | Course modules with their items (pages, files, assignments, links) — often the week-by-week structure of a course. |
| canvas_list_pagesB | Wiki pages in a course (title + url slug for canvas_get_page). |
| canvas_get_pageA | Read a course page as text. Use page_url slug from canvas_list_pages/list_modules, or 'front_page'. File links are shown inline as (file:) and listed in file_links — pass the id to canvas_read_file. |
| canvas_list_filesB | Files in a course, newest first. Uses the course files index when your role may see it; otherwise (common for students) falls back to the files linked from pages, modules, assignments and announcements, like canvas_list_linked_files. |
| canvas_list_linked_filesA | Find the course's files (slides, lab instructions, exercise sheets) by scanning the front page, pages reachable from it and from modules, the syllabus, assignment descriptions, announcements and module items. Works for students, unlike canvas_list_files. Returns file_id, display_name, size, linked_from — pass file_id to canvas_read_file. |
| canvas_read_fileA | Download a course file server-side and return its text: PDF (per page), PPTX (per slide, with speaker notes), DOCX (per section), plain text/code, ZIP (listing). Give file_id, or url = any Canvas file link (e.g. https://canvas.school.edu/courses/1/files/2?verifier=…&wrap=1). Long documents: use pages (e.g. "1-5", "3,8-10") — the output says when it was truncated and which range to request next. |
| canvas_list_calendar_eventsB | Canvas calendar events (lectures, seminars, exams if teachers added them) in a date range. |
| canvas_get_gradesB | Your own submissions in a course (as a student) with scores, grades, late/missing flags and teacher comments. |
| canvas_api_getA | Escape hatch: GET any Canvas REST endpoint under /api/v1 (read-only). Example path: /api/v1/courses/123/discussion_topics |
| canvas_changes_sinceA | What changed in your courses since a time, from stored snapshots (taken daily, and refreshed in the background when stale): added/changed/removed pages, assignments (due dates, grades), announcements, discussions, quizzes, events, files (with which PDF pages changed), with old→new field values and short text diffs. Grouped by course, newest first. Times are UTC. Default since: 26 hours ago. The best first call for a daily check. |
| canvas_course_snapshotA | The stored state of a course from the latest snapshot (no Canvas calls), compact. Use kinds (page, module, assignment, announcement, discussion, quiz, event, syllabus, file) to keep it small, e.g. ["assignment"] for all deadlines and grades. |
| canvas_snapshot_statusA | Health of the snapshot job: courses and your role in each, last run per course, duration, item counts, errors (e.g. 403s), next run, DB size. |
| canvas_run_snapshotA | Take a snapshot now (read-only GETs to Canvas) for one or all active courses and return the change events it produced. Waits up to wait_s seconds; if it takes longer it continues in the background — check canvas_snapshot_status / canvas_changes_since later. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 21 tools
Many tools have overlapping purposes: canvas_whats_new and canvas_changes_since both claim to be best for a daily check, canvas_list_files and canvas_list_linked_files both find course files, and snapshot/list tools can return similar course data. Descriptions help clarify some boundaries, but the set still has multiple ambiguous choices for an agent.
All tools consistently use the canvas_ prefix and snake_case, with mostly verb_noun naming such as canvas_list_courses and canvas_get_assignment. There are minor deviations like canvas_whoami, canvas_whats_new, and noun-first names like canvas_course_snapshot, but the overall convention is predictable.
21 tools is on the heavy side for the rubric's preferred range, and some tools are redundant or overlapping (two daily-check tools, two file-listing approaches, snapshot vs live listing tools). The breadth of Canvas features justifies many tools, but the set could be tightened.
The server covers the major read-only Canvas surfaces: courses, assignments, announcements, syllabus, modules, pages, files, calendar events, grades, and change tracking. Some gaps exist for directly listing discussions or quizzes without falling back to canvas_api_get or snapshot tools, but core workflows are largely covered.