Canvas
About
Integrates with the Canvas Learning Management System (LMS), supporting FERPA-compliant anonymization and privacy controls.
Details
- Author
- vishalsachdev
- Categories
- Productivity, Other
Jump to
Setup
Install Canvas in your MCP client (Claude Desktop, Cursor, Windsurf, and others).
Repository: https://github.com/vishalsachdev/canvas-mcp
Follow the installation instructions in the repository README, then restart your MCP client.
MCP server for Canvas LMS withup to 101 toolsand8 agent skills. Designed for Claude Desktop, Cursor, Codex, Windsurf, and40+ other agents; setup and capabilities vary by client.
Canvas MCP providesup to 101 toolsfor interacting with Canvas LMS; the default profile registers fewer, and optional feature-gated tools can raise the total to 101. Tools are organized by user type:
Skills:canvas-course-qc(pre-semester audit),canvas-accessibility-auditor(WCAG-oriented review),canvas-course-builder(scaffold courses from specs/templates).
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
Rate limits:~700 requests/10 min. Usemax_concurrent=5for 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 role-specific workflows for students, educators, learning designers, and developers. Built on the Model Context Protocol (MCP), it is designed for MCP-compatible clients; setup and supported capabilities vary by client.
Released:August 2026 |Full Changelog|All Releases
A protocol-correctness release. Every change here is about a client being able to tell what actually happened when it calls a tool.One change is breaking and one alters response shape— read both before upgrading.
- Breaking:send_peer_review_remindersis nowsend_peer_review_inbox_messages(#303). The old name implied it invoked Canvas's native reminder action; it does not, it sends ordinary Canvas Inbox messages, and the name now says so. The tool also resolves the course and requiresmanage_gradesbefore previewing or sending, failing closed when the permission cannot be verified. Thanks@jonespmfor catching the mismatch
- Tool failures now set MCPisError: true(#270). Previously a Canvas error and an empty-but-successful result were indistinguishable to a client: both came back as an ordinary result. Errors keep their existing text or structured payload, they are simply flagged correctly now
- Response-shape change: string-returning tools no longer duplicate their payload(#271). 91 of the registered tools were emitting the same value twice, once as text content and again under an information-freestructuredContent.result. Dictionary-returning tools keep their structured schemas.If a client readsstructuredContent.resultfor a string-returning tool, switch it to the text content
- FastMCP dependency floor raised to 3.4.7(#293), picking up upstream fixes for Azure scope fallback, deterministic transformed-tool schemas, trusted OAuth metadata/JWKS proxies, andprivate_key_jwtaudience validation
v1.10.0— A community bug-fix release driven by live reporter testing — thanks@khagyard,@zqian,@jonespm,@bruchris, and@SHIL0018(our second outside code contribution). Included a breakingsearch_canvas_toolsresponse-shape change.
- 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 topython: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,.mcpbships 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_enrollmentAMBIGUOUS 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@khagyardand@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_typescriptbecame opt-in (#178), ruff gating CI ([@w3lld1, PR #186)
…
Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.




