io.github.vishalsachdev/canvas-mcp MCP Server
io.github.vishalsachdev/canvas-mcp
AI tools for Canvas LMS: 99 tools for students, educators, and learning designers with FERPA compliance.
What is the io.github.vishalsachdev/canvas-mcp MCP server?
Canvas MCP Server is an MCP server providing 99 tools and 8 agent skills for interacting with Canvas Learning Management System. It supports students tracking assignments and grades, educators managing coursework and grading, and learning designers auditing course structure and accessibility. Works with Claude Desktop, Cursor, Codex, Windsurf, and 40+ other agents.
Canvas MCP bridges AI assistants and Canvas LMS through natural language interactions. Students can track deadlines, grades, and peer reviews; educators can manage assignments, grading, and student communication; learning designers can audit course structure and WCAG accessibility compliance. The server includes 99 tools organized by user type, 8 pre-built agent skills, and optional privacy controls with FERPA-compliant data handling.
How to install io.github.vishalsachdev/canvas-mcp
Copy-paste configuration for popular MCP clients.
Tools & capabilities
Tools this server exposes to the agent.
get_my_upcoming_assignments— Retrieve due dates for assignments in the next N daysget_my_todo_items— Access Canvas TODO listget_my_submission_status— Check submitted vs missing assignmentsget_my_course_grades— View current grades across coursesget_my_peer_reviews_todo— List pending peer review assignmentslist_assignments— Show all assignments in a coursecreate_assignment— Create new assignment with submission settingsupdate_assignment— Modify existing assignment details and due dateslist_submissions— View student submissions for an assignmentbulk_grade_submissions— Grade multiple student submissions at onceget_assignment_analytics— Retrieve performance statistics for assignmentssend_conversation— Message students directlycreate_announcement— Post announcements to coursecreate_module— Create course moduleupdate_module— Update module settings and nameadd_module_item— Add content to course moduledelete_module— Remove a module from coursecreate_page— Create course pageedit_page_content— Update page contentupdate_page_settings— Publish or unpublish course pages
Use cases
- Track upcoming assignments, deadlines, and submission status as a student
- Manage course grading, bulk-grade submissions, and send targeted messages to students as an educator
- Audit course structure and WCAG accessibility compliance before semester starts as a learning designer
- Facilitate peer review workflows with analytics and quality analysis
- Build course structures from templates or existing courses using course scaffolding tools
io.github.vishalsachdev/canvas-mcp MCP server FAQ
Canvas MCP is an MCP server that provides 99 tools for interacting with Canvas LMS. It supports students managing assignments and grades, educators handling grading and communication, and learning designers auditing course structure and accessibility compliance.
Yes, Canvas MCP is open-source under the MIT license and available via PyPI (canvas-mcp) and npm (skills.sh).
Install via skills.sh with `npx skills add vishalsachdev/canvas-mcp` for any agent, or configure manually in Claude Desktop by adding the PyPI package to your MCP settings. Full setup guides are available for students and educators on the project website.
Yes, you must authenticate with your Canvas instance using an API token. The server supports both personal tokens and institutional Entra ID authentication for hosted deployments.
Canvas MCP includes FERPA-compliant data handling, optional anonymization (three-tier levels), audit logging, PII sanitization, and role-based tool filtering to restrict access based on user permissions.
Yes. For simple queries use MCP tools directly. For 10+ items use `bulk_grade_submissions`. For 30+ items or complex logic use `execute_typescript` for 99.7% token savings. Rate limits are ~700 requests per 10 minutes.
README (reference)
Source of truth, from the repository.
Canvas MCP Server
<!--mcp-name: io.github.vishalsachdev/canvas-mcp-->MCP server for Canvas LMS with 99 tools and 8 agent skills. Works with Claude Desktop, Cursor, Codex, Windsurf, and 40+ other agents.
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 99 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?" |
| 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 MCP tools and code API operations | Finding available tools and 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.
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
Rate limits: ~700 requests/10 min. Use max_concurrent=5 for bulk operations.
Full documentation: AGENTS.md | tools/TOOL_MANIFEST.json | 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.10.0
Released: August 2026 | Full Changelog | All Releases
A community bug-fix release driven by live reporter testing — thanks @khagyard, @zqian, @jonespm, @bruchris, and @SHIL0018 (our second outside code contribution). One change is breaking — see below before upgrading.
- Breaking:
search_canvas_toolsresponse shape v2 (#281). The tool now actually searches the ~99 registered MCP tools alongside the TypeScript code-API files (it previously searched only the latter, so "peer review" found nothing despite ~10 peer-review tools existing). Responses carryschema_version: 2with labeledmcp_tools/code_execution_apisections; the old flattoolskey is gone. Full-detail code-API content is now also capped at 2,000 characters (#287) - Students can find their peer reviews (#275):
get_my_peer_reviews_todogained a direct per-assignment lookup and a Planner-feed discovery path — the same data source Canvas's own student UI uses — validated against a real production payload from the reporter create_announcementfails safely on student tokens (#283): Canvas silently downgrades the create to a regular discussion topic; the tool now pre-checks course permissions and refuses before creating anything, auto-deletes the unintended topic if a downgrade still slips through, and steers AI clients away from posting the content via discussion tools as a fallback- Security: stricter URL validation (code-scanning fix), Docker base bumped to
python:3.14-slim, CI actions updated
v1.9.0 — Prompt-injection hardening (#239): Canvas-authored text arrives provenance-fenced as data-not-instructions; multi-recipient sends became two-step preview→confirm (breaking); write tools refuse fence markers; OSSF Scorecard published, CI actions SHA-pinned, .mcpb ships SLSA provenance; npm wizard retired (#249). Eleven adversarial review rounds pre-merge
v1.8.0 — Security-scan remediation: 11 of 12 findings fixed, three breaking (HTTPS-only Canvas URLs, stdio-only file transfer tools, no-overwrite downloads), a measured submissions authorization bypass closed centrally, CSV formula-injection protection, code execution fails closed, dependency floors raised (PR #251, #255)
v1.7.0 — Correctness release from instructor bug reports: writes no longer report success when Canvas quietly did less than asked (#219–#221), Planner-API upcoming assignments (#222), check_enrollment AMBIGUOUS answers (#199), wire-format fixes for pages/inbox (#207, #208), MCP-spec tool annotations (#204), CSV rubric format fix (#190), anonymization consolidated to the client layer (#179). Thanks @khagyard and @zqian
v1.6.0 — Tier 1 student write tools behind an explicit allowlist (#170), get_my_enrollments / get_my_profile (#171), three-tier anonymization (#166, #179), rubric association fixes (#180, #181), execute_typescript became opt-in (#178), ruff gating CI (@w3lld1, PR #186)
v1.5.0 — get_syllabus (#134), create_rubric_from_csv (#119), update_discussion_topic (#154), fastmcp 2.x migration (#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, PR #125), HTTP fails closed without auth gate (PR #123)
v1.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
</details>For Students 👨🎓
Get AI-powered assistance with:
- Tracking upcoming assignments and deadlines
- Monitoring your grades across all courses
- Managing peer review assignments
- Accessing course content and discussions
- Organizing your TODO list
For Educators 👨🏫
Enhance your teaching with:
- Assignment and grading management
- Student analytics and performance tracking
- Discussion and peer review facilitation
- FERPA-compliant student data handling
- Bulk messaging and communication tools
For Learning Designers 🎨
AI-powered course design and quality assurance:
- Course scaffolding — Build entire course structures from specs, templates, or by cloning existing courses
- Quality audits — Pre-semester QC checks for structure, content, publishing, and completeness
- Accessibility compliance — 20-check WCAG scanner (headings, tables, scope, contrast, alt text, links, captions, DesignPLUS migration), prioritized reports, guided remediation, and verification
- Course structure analysis — Full module→items tree in a single call for rapid course review
3 dedicated skills (canvas-course-qc, canvas-accessibility-auditor, canvas-course-builder) plus the get_course_structure tool.
🤖 Agent Skills
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.
Install via skills.sh (Any Agent)
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
Claude Code Slash Commands
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!
🔒 Privacy & Data Protection
For Educators: FERPA Compliance
Complete FERPA compliance through systematic data anonymization when working with student data:
- Source-level data anonymization converts real names to consistent anonymous IDs (Student_xxxxxxxx)
- Automatic email masking and PII filtering from discussion posts and submissions
- Local-only processing with configurable privacy controls (
ENABLE_DATA_ANONYMIZATION=true) - FERPA-compliant analytics: Ask "Which students need support?" without exposing real identities
- De-anonymization mapping tool for faculty to correlate anonymous IDs with real students locally
All student data is anonymized before it reaches AI systems. See Educator Guide for configuration details.
For Students: Your Data Stays Private
- Your data only: Student tools access only your own Canvas data via Canvas API's "self" endpoints
- No shared-server credential storage: Local mode reads your Canvas token from your own
.env. In authenticated institutional HTTP deployments, each request supplies the user's Canvas token and the server does not store it. - No tracking: Your Canvas usage and AI interactions remain private
- No anonymization needed: Since you're only accessing your own data, there are no privacy concerns
Hosted Server (Retired)
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). Running a shared, authenticated instance for your institution? See deploy/azure/ for a production-tested deployment specification (Azure App Service + Entra ID platform auth, per-user Canvas tokens) with sample workflow and config templates.
Prerequisites (Local Installation)
- Python 3.10+ - Required for modern features and type hints
- Canvas API Access - API token and institution URL
- MCP Client - Any MCP-compatible client (Claude Desktop, Cursor, Zed, Windsurf, Continue, etc.)
Supported MCP Clients
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.
Install as a Claude Desktop Extension (easiest)
If you use Claude Desktop, you can install Canvas MCP with one click — no terminal, no config-file editing:
- Download
canvas-mcp.mcpbfrom the latest release. - Double-click the file (or drag it into Claude Desktop → Settings → Extensions).
- When prompted, enter your Canvas API URL — this must include the
/api/v1path (e.g.https://canvas.youruniversity.edu/api/v1) — 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.
Local Installation
1. Install Dependencies
# (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 .
2. Configure Environment
# 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.
3. MCP Client Configuration
Canvas MCP works with any MCP-compatible client. Below are configuration examples for popular clients:
<details open> <summary><strong>Claude Desktop</strong> (Most Popular)</summary>Configuration file location:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
Configuration:
{
"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).
</details> <details> <summary><strong>Cursor</strong></summary>Configuration file location:
- macOS/Linux:
~/.cursor/mcp_config.json - Windows:
%USERPROFILE%\.cursor\mcp_config.json
Configuration:
{
"mcpServers": {
"canvas-api": {
"command": "/absolute/path/to/canvas-mcp/.venv/bin/canvas-mcp-server"
}
}
}
</details>
<details>
<summary><strong>Zed</strong></summary>
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": []
}
}
}
}
</details>
<details>
<summary><strong>Windsurf IDE</strong></summary>
Configuration file location:
- macOS:
~/Library/Application Support/Windsurf/mcp_config.json - Windows:
%APPDATA%\Windsurf\mcp_config.json
Configuration:
{
"mcpServers": {
"canvas-api": {
"command": "/absolute/path/to/canvas-mcp/.venv/bin/canvas-mcp-server"
}
}
}
</details>
<details>
<summary><strong>Continue</strong></summary>
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"
}
}
}
</details>
<details>
<summary><strong>Other MCP Clients</strong></summary>
For other MCP-compatible clients, the general pattern is:
- Locate your client's MCP configuration file
- Add a server entry with:
- Server name:
canvas-api(or any name you prefer) - Command: Full path to
canvas-mcp-serverbinary - Optional args: Additional arguments if needed
- Server name:
Consult your client's MCP documentation for specific configuration format and file locations.
</details>Windows users: Replace forward slashes with backslashes in paths (e.g.,
C:\Users\YourName\canvas-mcp\.venv\Scripts\canvas-mcp-server.exe)
Verification
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
Available Tools
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.
Tool Categories
Student Tools (New!)
- Personal assignment tracking and deadline management
- Grade monitoring across all courses
- TODO list and peer review management
- Submission status tracking
Shared Tools (Both Students & Educators)
- Course Tools - List and manage courses, get detailed information, generate summaries with syllabus content
- Discussion & Announcement Tools - Manage discussions, announcements, and replies
- Page & Content Tools - Access pages, modules, and course content
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 registered MCP tools and code execution API operations with search_canvas_tools; list code execution modules with 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.
Code Execution API
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.
Bulk Grading Example
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!" };
}
});
Security Modes
| 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.
</details>Usage
MCP clients start the server automatically. Just ask naturally:
- "What's due this week?" / "Show my grades" / "What peer reviews do I need?"
- "Who hasn't submitted Assignment 3?" / "Send reminders to missing students"
Quick start guides: Student | Educator | Real-World Workflows | Troubleshooting
Documentation
- Tool Documentation — Complete reference for all 99 tools
- Student Guide — Getting started as a student
- Educator Guide — FERPA compliance and educator workflows
- Bulk Grading Example — Token-efficient batch grading walkthrough
- Development Guide — Architecture and contributing
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. 900+ tests. ruff + black for code quality.
Troubleshooting
If you encounter issues:
- Server Won't Start - Verify your Local Installation setup:
.envfile, virtual environment path, and dependencies - Authentication Errors - Check your Canvas API token validity and permissions
- Connection Issues - Verify Canvas API URL correctness and network access
- Debugging - Check your MCP client's console logs (e.g., Claude Desktop's developer console) or run server manually for error output
Security
Four 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.
Publishing
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.
Contributing
Contributions are welcome! Feel free to:
- Submit issues for bugs or feature requests
- Create pull requests with improvements
- Share your use cases and feedback
Contributors
Thanks to everyone who has contributed to Canvas MCP:
- @DomBarker99 —
read_course_filetool for remote MCP deployments (#90) - @Promithius-DR — Role-based tool filtering and tool annotations (#84)
- @Metzpapa — File download and listing tools (#75)
- @JCSnap — Student tool bug fixes (#72, #73)
License
This project is licensed under the MIT License - see the LICENSE file for details.
Created by Vishal Sachdev
Related MCP servers

Subconscious
Local-first semantic memory for MCP agents. Recall, remember, forget, echo, drift, stats over stdio.

OpenReflex
Optional diagnostics MCP server for OpenReflex's ambient project muscle memory.
DealHub MCP server for admins. Manage versions and users with 7 tools via Claude AI agents.

Visily UI Design
UI design from prompts, screenshots, and URLs for AI coding agents and theme tokens.

io.github.vistoya/market
Search and get fashion products recommendations across multiple e-ecom stores
