Canvas LMS MCP server — 80+ tools and 5 agent skills for students & educators. Works with Claude, Cursor, Codex, and 40+ agents.
- ✓Open-source license (MIT)
- ✓Actively maintained (<30d)
- ✓Healthy fork ratio
- ✓Clear description
- ✓Mature repo (>1y old)
claude mcp add canvas-mcp -- npx -y skills{
"mcpServers": {
"canvas-mcp": {
"command": "npx",
"args": ["-y", "skills"]
}
}
}MCP Servers overview
<p align="center"> <img src="docs/canvas-mcp-header.png" alt="Canvas MCP — AI tools for Canvas LMS" width="800"> </p> # Canvas MCP Server <!--mcp-name: io.github.vishalsachdev/canvas-mcp--> [](https://opensource.org/licenses/MIT) [](https://skills.sh) MCP server for Canvas LMS with **95 tools** and **8 agent skills**. Works with Claude Desktop, Cursor, Codex, Windsurf, and [40+ other agents](https://skills.sh). ```bash npx skills add vishalsachdev/canvas-mcp ``` ## For AI Agents <!-- INLINE AGENT GUIDE: Intentionally duplicates AGENTS.md content. WHY: Agents often can't fetch raw.githubusercontent.com or GitHub blob pages. MAINTENANCE: When updating tools, also update AGENTS.md (source of truth). See CLAUDE.md "Documentation Maintenance" for full guidelines. --> Canvas MCP provides **95 tools** for interacting with Canvas LMS. Tools are organized by user type: <details> <summary><strong>Student Tools</strong> (click to expand)</summary> | Tool | Purpose | Example Prompt | |------|---------|----------------| | `get_my_upcoming_assignments` | Due dates for next N days | "What's due this week?" | | `get_my_todo_items` | Canvas TODO list | "Show my TODO list" | | `get_my_submission_status` | Submitted vs missing | "Have I submitted everything?" | | `get_my_course_grades` | Current grades | "What are my grades?" | | `get_my_peer_reviews_todo` | Pending peer reviews | "What peer reviews do I need to do?" | </details> <details> <summary><strong>Educator Tools</strong> (click to expand)</summary> | Tool | Purpose | Example Prompt | |------|---------|----------------| | `list_assignments` | All assignments in course | "Show assignments in BADM 350" | | `create_assignment` | Create new assignment | "Create an assignment due Jan 26 with online text submission" | | `update_assignment` | Update existing assignment | "Change the due date for Assignment 3 to Feb 15" | | `list_submissions` | Student submissions | "Who submitted Assignment 3?" | | `bulk_grade_submissions` | Grade multiple at once | "Grade these 10 students" | | `get_assignment_analytics` | Performance stats | "Show analytics for Quiz 2" | | `send_conversation` | Message students | "Message students who haven't submitted" | | `create_announcement` | Post announcements | "Announce the exam date change" | | **Module Management** | | | | `create_module` | Create course module | "Create a module for Week 5" | | `update_module` | Update module settings | "Rename the midterm module" | | `add_module_item` | Add content to module | "Add the syllabus page to Week 1" | | `delete_module` | Remove a module | "Delete the empty test module" | | **Page & Content** | | | | `create_page` | Create course page | "Create a page for office hours" | | `edit_page_content` | Update page content | "Update the syllabus page" | | `update_page_settings` | Publish/unpublish pages | "Publish all Week 3 pages" | | `bulk_update_pages` | Batch page operations | "Unpublish all draft pages" | | **File Management** | | | | `upload_course_file` | Upload local file to Canvas | "Upload syllabus.pdf to the course" | </details> <details> <summary><strong>Shared Tools</strong> (click to expand)</summary> | Tool | Purpose | |------|---------| | `list_courses` | All enrolled courses | | `get_course_details` | Course info + syllabus | | `list_pages` | Course pages | | `get_page_content` | Read page content | | `list_modules` | List course modules | | `list_module_items` | Items within a module | | `list_discussion_topics` | Discussion forums | | `list_discussion_entries` | Posts in a discussion | | `post_discussion_entry` | Add a discussion post | | `reply_to_discussion_entry` | Reply to a post | </details> <details> <summary><strong>Learning Designer Tools</strong> (course design & QC)</summary> | Tool | Purpose | Example Prompt | |------|---------|----------------| | `get_course_structure` | Full module→items tree as JSON | "Show me the structure of CS 101" | | `scan_course_content_accessibility` | WCAG violation scanner (20 checks: headings, tables, links, contrast, alt text, captions, DesignPLUS) | "Audit accessibility for BADM 350" | | `fetch_ufixit_report` | Institutional accessibility report | "Pull the UFIXIT report for this course" | | `parse_ufixit_violations` | Extract structured violations | "Parse the UFIXIT violations" | | `format_accessibility_summary` | Readable violation report | "Summarize the accessibility issues" | **Skills:** `canvas-course-qc` (pre-semester audit), `canvas-accessibility-auditor` (WCAG compliance), `canvas-course-builder` (scaffold courses from specs/templates). </details> <details> <summary><strong>Developer Tools</strong> (for bulk operations)</summary> | Tool | Purpose | When to Use | |------|---------|-------------| | `search_canvas_tools` | Discover code API operations | Finding available bulk ops | | `execute_typescript` | Run TypeScript locally | 30+ items, custom logic, 99.7% token savings | **Decision tree:** Simple query → MCP tools. Batch grading (10+) → `bulk_grade_submissions`. Complex bulk (30+) → `execute_typescript`. </details> ### Quick Reference **Course identifiers:** Canvas ID (`12345`), course code (`badm_350_120251_246794`), or SIS ID **Cannot do:** Create/delete courses, modify course settings, access other users' data, create/update rubrics (use Canvas UI) **Rate limits:** ~700 requests/10 min. Use `max_concurrent=5` for bulk operations. **Full documentation:** [AGENTS.md](AGENTS.md) | [tools/TOOL_MANIFEST.json](tools/TOOL_MANIFEST.json) | [tools/README.md](tools/README.md) ## Overview The Canvas MCP Server bridges the gap between AI assistants and Canvas Learning Management System, providing **both students and educators** with an intelligent interface to their Canvas environment. Built on the Model Context Protocol (MCP), it enables natural language interactions with Canvas data through any MCP-compatible client. ## Latest Release: v1.6.0 **Released:** July 2026 | **[Full Changelog](./CHANGELOG.md)** | **[All Releases](https://github.com/vishalsachdev/canvas-mcp/releases)** > ⚠️ **Behavior change:** `execute_typescript` is now **opt-in**. `EXECUTE_TYPESCRIPT_ENABLED` defaults to `false` — if you use that tool, set it to `true` explicitly ([#178](https://github.com/vishalsachdev/canvas-mcp/issues/178)). - **Tier 1 student write tools** — a student-role caller can act on their own work, off by default behind an explicit `STUDENT_WRITE_TOOLS` allowlist plus an optional per-course syllabus policy that can only narrow it ([#170](https://github.com/vishalsachdev/canvas-mcp/issues/170)) - **`get_my_enrollments`, `get_my_profile`** — "what am I enrolled in, and as what role?" without needing roster permission; `list_courses` and `get_course_details` now surface your own role too ([#171](https://github.com/vishalsachdev/canvas-mcp/issues/171)) - **Privacy** — anonymization reworked into three tiers, closing gaps that left the Canvas Inbox and page authorship unscrubbed, plus a recursive identity scrub as the baseline on every sensitive payload ([#166](https://github.com/vishalsachdev/canvas-mcp/issues/166), [#179](https://github.com/vishalsachdev/canvas-mcp/issues/179)) - **Rubric fixes** — `associate_rubric` never actually attached the rubric (Canvas returned 200 and ignored the request), and created rubrics are now bookmarked so they appear in the Canvas UI. No rubric write reports success without a confirmed association ([#180](https://github.com/vishalsachdev/canvas-mcp/issues/180), [#181](https://github.com/vishalsachdev/canvas-mcp/issues/181)) - **`check_enrollment` returns INDETERMINATE** instead of a confident false "NO" when the token cannot see roster identifiers ([#171](https://github.com/vishalsachdev/canvas-mcp/issues/171)) - **Security** — `fastmcp` 3.x clears PYSEC-2026-2475/2476; the Docker image now ships with anonymization on ([#145](https://github.com/vishalsachdev/canvas-mcp/issues/145), [#178](https://github.com/vishalsachdev/canvas-mcp/issues/178)) - **Ruff now gates CI** — thanks to [@w3lld1](https://github.com/w3lld1) for the first outside contribution to this repo ([#175](https://github.com/vishalsachdev/canvas-mcp/issues/175), PR #186) <details> <summary>Previous releases</summary> **v1.5.0** — `get_syllabus` ([#134](https://github.com/vishalsachdev/canvas-mcp/issues/134)), `create_rubric_from_csv` ([#119](https://github.com/vishalsachdev/canvas-mcp/issues/119)), `update_discussion_topic` ([#154](https://github.com/vishalsachdev/canvas-mcp/issues/154)), fastmcp 2.x migration ([#145](https://github.com/vishalsachdev/canvas-mcp/issues/145)), dependency advisories cleared 33 → 0 with a gating CI scan (PR #156) **v1.4.0** — `check_enrollment` (PR #126), Claude Desktop Extension `.mcpb`, Entra ID authenticated institutional hosting ([#115](https://github.com/vishalsachdev/canvas-mcp/issues/115), PR #125), HTTP fails closed without auth gate (PR #123) **v1.3.0** — `create_rubric` (PR #100), `read_course_file` ([@DomBarker99](https://github.com/DomBarker99), PR #90), event-loop fix for user-scoped tools (PR #99), bulk-delete safety cap (PR #96), dependency pruning (PR #93) **v1.2.0** — Role-Based Tool Filtering ([@Promithius-DR](https://github.com/Promithius-DR), PR #84), Accessibility Remediation (`fix_accessibility_issues`, scanner expanded 4→20 checks), Security Hardening (path traversal/symlink protections), Windows Support for `execute_typescript` (PR #85), CI consolidation (11→8 checks) **v1.1.0** — Hosted Server (`mcp.illinihunt.org`), Learning Designer tools + 3 skills, Agent Skills on skills.sh, File Management ([@Metzpapa](https://github.com/Metzpapa), PR #75), Token Optimization, Generic Distribution **v1.0.8** — Security Hardening (PII sanitization, audit logging, sandbox-by-default), Ruff linting, 235+ tests **v1.0.7** — Assignment
What people ask about canvas-mcp
What is vishalsachdev/canvas-mcp?
+
vishalsachdev/canvas-mcp is mcp servers for the Claude AI ecosystem. Canvas LMS MCP server — 80+ tools and 5 agent skills for students & educators. Works with Claude, Cursor, Codex, and 40+ agents. It has 174 GitHub stars and was last updated today.
How do I install canvas-mcp?
+
You can install canvas-mcp by cloning the repository (https://github.com/vishalsachdev/canvas-mcp) or following the README instructions on GitHub. ClaudeWave also provides quick install blocks on this page.
Is vishalsachdev/canvas-mcp safe to use?
+
Our security agent has analyzed vishalsachdev/canvas-mcp and assigned a Trust Score of 97/100 (tier: Verified). See the full breakdown of passed checks and flags on this page.
Who maintains vishalsachdev/canvas-mcp?
+
vishalsachdev/canvas-mcp is maintained by vishalsachdev. The last recorded GitHub activity is from today, with 14 open issues.
Are there alternatives to canvas-mcp?
+
Yes. On ClaudeWave you can browse similar mcp servers at /categories/mcp, sorted by popularity or recent activity.
Deploy canvas-mcp to your cloud
Ship this repo to production in minutes. Each platform spins up its own environment with editable env vars.
Maintain this repo? Add a badge to your README
Drop the badge into your GitHub README to show it's tracked on ClaudeWave. Each badge links back to this page and reflects the live Trust Score.
[](https://claudewave.com/repo/vishalsachdev-canvas-mcp)<a href="https://claudewave.com/repo/vishalsachdev-canvas-mcp"><img src="https://claudewave.com/api/badge/vishalsachdev-canvas-mcp" alt="Featured on ClaudeWave: vishalsachdev/canvas-mcp" width="320" height="64" /></a>More MCP Servers
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.
User-friendly AI Interface (Supports Ollama, OpenAI API, ...)
An open-source AI agent that brings the power of Gemini directly into your terminal.
The fastest path to AI-powered full stack observability, even for lean teams.
Real-time global intelligence dashboard. AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface
🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!