A solid bridge to Canvas LMS with 88 tools split across student, educator, and learning designer workflows. Students pull assignments and grades, educators manage modules and bulk-grade submissions, and designers run WCAG accessibility audits with 20-check scanners. The standout is execute_typescript for custom bulk operations when built-in tools hit their limits, plus role-based filtering so students don't see educator tools. Works with Claude Desktop and 40+ MCP clients. If you're building Canvas workflows or need programmatic access to courses, modules, pages, and submissions without writing direct API calls, this covers the surface area.
Public tool metadata for what this MCP can expose to an agent.
get_coursesRetrieve all available Canvas courses for the current user. Returns a dictionary mapping course names to their corresponding IDs.Retrieve all available Canvas courses for the current user. Returns a dictionary mapping course names to their corresponding IDs.
No parameter schema in public metadata yet.
get_modulesRetrieve all modules within a specific Canvas course.1 paramsRetrieve all modules within a specific Canvas course.
course_idstringget_module_itemsRetrieve all items within a specific module in a Canvas course.2 paramsRetrieve all items within a specific module in a Canvas course.
course_idstringmodule_idstringget_file_urlGet the direct download URL for a file stored in Canvas.2 paramsGet the direct download URL for a file stored in Canvas.
file_idstringcourse_idstringget_course_assignmentsRetrieve all assignments for a specific Canvas course.2 paramsRetrieve all assignments for a specific Canvas course.
bucketstringcourse_idstringget_assignments_by_course_nameRetrieve all assignments for a Canvas course using its name.2 paramsRetrieve all assignments for a Canvas course using its name.
bucketstringcourse_namestringget_canvas_coursesAlias for get_courses - retrieve all Canvas courses.Alias for get_courses - retrieve all Canvas courses.
No parameter schema in public metadata yet.
get_gradescope_coursesRetrieve all Gradescope courses for the current user.Retrieve all Gradescope courses for the current user.
No parameter schema in public metadata yet.
get_gradescope_course_by_nameFind a Gradescope course by name.1 paramsFind a Gradescope course by name.
course_namestringget_gradescope_assignmentsRetrieve all assignments for a Gradescope course.1 paramsRetrieve all assignments for a Gradescope course.
course_idstringget_gradescope_assignment_by_nameFind a Gradescope assignment by name.2 paramsFind a Gradescope assignment by name.
course_idstringassignment_namestringget_cache_statsGet cache statistics for debugging purposes. Returns hit/miss counts and cache size.Get cache statistics for debugging purposes. Returns hit/miss counts and cache size.
No parameter schema in public metadata yet.
clear_cacheClear all cached data. Use this if you need fresh data from Canvas or Gradescope.Clear all cached data. Use this if you need fresh data from Canvas or Gradescope.
No parameter schema in public metadata yet.
MCP server for Canvas LMS with 90 tools and 8 agent skills. Works with Claude Desktop, Cursor, Codex, Windsurf, and 40+ other agents.
npx skills add vishalsachdev/canvas-mcp
Canvas MCP provides 90 tools for interacting with Canvas LMS. Tools are organized by user type:
| 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?" |
| 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" |
| 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 |
| 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).
| 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.
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 | tools/TOOL_MANIFEST.json | tools/README.md
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.
Released: June 2026 | Full Changelog | All Releases
check_enrollment — data-minimizing "is this NetID enrolled in the course?" check; returns only a yes/no plus minimal metadata, never the roster (teacher-scoped, PR #126).mcpb) — one-click install in Claude Desktop (no terminal, no config-file editing); attached to each GitHub Releasev1.3.0 — create_rubric (PR #100), read_course_file (@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, 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, 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 Update Tool (update_assignment), complete CRUD, 9 tests
v1.0.6 — Module Management (7 tools), Page Settings (2 tools), 235+ tests
v1.0.5 — Claude Code Skills, GitHub Pages site
v1.0.4 — Code Execution API (99.7% token savings), Bulk Operations, MCP 2.14 compliance
Get AI-powered assistance with:
Enhance your teaching with:
AI-powered course design and quality assurance:
3 dedicated skills (canvas-course-qc, canvas-accessibility-auditor, canvas-course-builder) plus the get_course_structure tool.
Pre-built workflow recipes that teach AI agents how to use Canvas MCP tools effectively. Available for 40+ coding agents via skills.sh, or as Claude Code-specific slash commands.
npx skills add vishalsachdev/canvas-mcp
This launches an interactive picker to install skills into your agent of choice (Claude Code, Cursor, Codex, OpenCode, Cline, Zed, and many more).
| Skill | For | What It Does |
|---|---|---|
canvas-week-plan | Students | Weekly planner: due dates, submission status, grades, peer reviews |
canvas-morning-check | Educators | Course health dashboard: submission rates, struggling students, deadlines |
canvas-bulk-grading | Educators | Grading decision tree: single → bulk → code execution with safety checks |
canvas-peer-review-manager | Educators | Full peer review pipeline: analytics, quality analysis, reminders, reports |
canvas-discussion-facilitator | Both | Discussion browsing, participation monitoring, replying, facilitation |
canvas-course-qc | Learning Designers | Pre-semester quality audit: structure, content, publishing, completeness |
canvas-accessibility-auditor | Learning Designers | WCAG scan, prioritized report, guided remediation, verification |
canvas-course-builder | Learning Designers | Scaffold courses from specs, templates, or existing courses |
Install a specific skill:
npx skills add vishalsachdev/canvas-mcp -s canvas-week-plan
If you use Claude Code, the same workflows are also available as slash commands:
You: /canvas-morning-check CS 101
Claude: [Generates comprehensive course status report]
You: /canvas-week-plan
Claude: [Shows prioritized weekly assignment plan]
Claude Code skills are located in .claude/skills/ and can be customized for your workflow.
Want a custom skill? Submit a request describing your repetitive workflow!
Complete FERPA compliance through systematic data anonymization when working with student data:
ENABLE_DATA_ANONYMIZATION=true)All student data is anonymized before it reaches AI systems. See Educator Guide for configuration details.
The public hosted server (mcp.illinihunt.org) has been retired. A public MCP endpoint without an access gate isn't safe to operate — it would expose the built-in code-execution tool — so the supported path is local installation below.
The HTTP/streamable transport itself remains fully supported for self-hosting behind your own authentication (canvas-mcp-server --transport streamable-http). An authenticated institutional deployment is planned (#115).
Works with any MCP-compatible client: Claude Desktop, Cursor, Zed, Windsurf, Continue, Replit, Copilot Studio, and more.
Canvas MCP is compliant with Canvas LMS API 2024-2026 requirements (User-Agent header, per_page pagination). Works with Canvas Cloud and self-hosted instances.
If you use Claude Desktop, you can install Canvas MCP with one click — no terminal, no config-file editing:
canvas-mcp.mcpb from the latest release.https://canvas.youruniversity.edu) and your Canvas API token (Canvas → Account → Settings → New Access Token). The token is stored in your OS keychain.The extension runs the server locally and calls Canvas with your own token — every action runs under your own Canvas role and audit trail. Requires Python 3.10+ (the bundled runtime manages dependencies automatically). For other clients, or to run from source, use the manual setup below.
# (Recommended) Use a dedicated virtualenv so the MCP binary is in a stable location
python3 -m venv .venv
. .venv/bin/activate
# Install the package editable
pip install -e .
# Copy environment template
cp env.template .env
# Edit with your Canvas credentials
# Required: CANVAS_API_TOKEN, CANVAS_API_URL
Get your Canvas API token from: Canvas → Account → Settings → New Access Token
Note for Students: Some educational institutions restrict API token creation for students. If you see an error like "There is a limit to the number of access tokens you can create" or cannot find the token creation option, contact your institution's Canvas administrator or IT support department to request API access or assistance in creating a token.
Canvas MCP works with any MCP-compatible client. Below are configuration examples for popular clients:
Configuration file location:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.jsonConfiguration:
{
"mcpServers": {
"canvas-api": {
"command": "/absolute/path/to/canvas-mcp/.venv/bin/canvas-mcp-server"
}
}
}
Note: Use the absolute path to your virtualenv binary to avoid issues with shell-specific PATH entries (e.g., pyenv shims).
Configuration file location:
~/.cursor/mcp_config.json%USERPROFILE%\.cursor\mcp_config.jsonConfiguration:
{
"mcpServers": {
"canvas-api": {
"command": "/absolute/path/to/canvas-mcp/.venv/bin/canvas-mcp-server"
}
}
}
Configuration: Add to Zed's settings.json (accessible via Settings menu)
{
"context_servers": {
"canvas-api": {
"command": {
"path": "/absolute/path/to/canvas-mcp/.venv/bin/canvas-mcp-server",
"args": []
}
}
}
}
Configuration file location:
~/Library/Application Support/Windsurf/mcp_config.json%APPDATA%\Windsurf\mcp_config.jsonConfiguration:
{
"mcpServers": {
"canvas-api": {
"command": "/absolute/path/to/canvas-mcp/.venv/bin/canvas-mcp-server"
}
}
}
Configuration: Add to Continue's config.json (accessible via Continue settings)
{
"mcpServers": {
"canvas-api": {
"command": "/absolute/path/to/canvas-mcp/.venv/bin/canvas-mcp-server"
}
}
}
For other MCP-compatible clients, the general pattern is:
canvas-api (or any name you prefer)canvas-mcp-server binaryConsult your client's MCP documentation for specific configuration format and file locations.
Windows users: Replace forward slashes with backslashes in paths (e.g.,
C:\Users\YourName\canvas-mcp\.venv\Scripts\canvas-mcp-server.exe)
Test your setup:
# Test Canvas API connection
canvas-mcp-server --test
# View configuration
canvas-mcp-server --config
# Start server (for manual testing)
canvas-mcp-server
The Canvas MCP Server provides a comprehensive set of tools for interacting with the Canvas LMS API. These tools are organized into logical categories for better discoverability and maintainability.
Student Tools (New!)
Shared Tools (Both Students & Educators)
Educator Tools
4. Assignment Tools - Handle assignments, submissions, and peer reviews with analytics
5. Rubric Tools - List rubrics, associate with assignments, and grade submissions (including bulk_grade_submissions for efficient batch grading). Note: Create/update rubrics via Canvas web UI due to API limitations.
6. User & Enrollment Tools - Manage enrollments, users, and groups
7. Analytics Tools - View student analytics, assignment statistics, and progress tracking
8. Messaging Tools - Send messages and announcements to students
Developer Tools
9. Discovery Tools - Search and explore available code execution API operations with search_canvas_tools and list_code_api_modules
10. Code Execution Tools - Execute TypeScript code with execute_typescript for token-efficient bulk operations (99.7% token savings!)
📖 View Full Tool Documentation for detailed information about all available tools.
For bulk operations (30+ items), Canvas MCP supports TypeScript code execution with 99.7% token savings compared to traditional tool calling.
| Approach | Best For | Token Cost |
|---|---|---|
| MCP tools | Simple queries, small datasets | Normal |
bulk_grade_submissions | Batch grading 10-29 items | Low |
execute_typescript | 30+ items, custom logic | 99.7% less |
Use search_canvas_tools to discover available operations, then execute_typescript to run them locally. Code runs in a secure sandbox by default (network blocked, env filtered, resource limits). Works on macOS, Linux, and Windows.
import { bulkGrade } from './canvas/grading/bulkGrade';
await bulkGrade({
courseIdentifier: "60366",
assignmentId: "123",
gradingFunction: (submission) => {
const notebook = submission.attachments?.find(f =>
f.filename.endsWith('.ipynb')
);
if (!notebook) return null;
return { points: 100, comment: "Great work!" };
}
});
| Mode | Config | What It Does |
|---|---|---|
| Local sandbox (default) | None needed | Timeout 120s, memory 512MB, network blocked, env filtered |
| Container sandbox | TS_SANDBOX_MODE=container | Full filesystem isolation via Docker/Podman |
| No sandbox | ENABLE_TS_SANDBOX=false | Full local access (not recommended) |
See Bulk Grading Example for a detailed walkthrough.
MCP clients start the server automatically. Just ask naturally:
Quick start guides: Student | Educator | Real-World Workflows | Troubleshooting
Built on FastMCP with async httpx, pydantic validation, and python-dotenv configuration. Modern src/ layout with pyproject.toml. Full type hints, connection pooling, smart pagination, and rate limiting. 328 tests. ruff + black for code quality.
If you encounter issues:
.env file, virtual environment path, and dependenciesFour layers of runtime security, all enabled by default:
| Layer | Default |
|---|---|
| PII sanitization in logs | LOG_REDACT_PII=true |
| Token validation on startup | Always on |
| Structured audit logging | Opt-in: LOG_ACCESS_EVENTS=true |
| Sandboxed code execution | ENABLE_TS_SANDBOX=true |
FERPA-compliant anonymization for educators: ENABLE_DATA_ANONYMIZATION=true. See Educator Guide for details.
Published to PyPI, MCP Registry, and skills.sh (agent skills). Releases are automated via GitHub Actions — tag a version (git tag vX.Y.Z && git push origin vX.Y.Z) and CI handles the rest.
Contributions are welcome! Feel free to:
Thanks to everyone who has contributed to Canvas MCP:
read_course_file tool for remote MCP deployments (#90)This project is licensed under the MIT License - see the LICENSE file for details.
Created by Vishal Sachdev
miapre/html-to-figma-design-system
ie3jp/illustrator-mcp-server
coding-solo/godot-mcp
ivanmurzak/unity-mcp
yctimlin/mcp_excalidraw
figma/mcp-server-guide