MCP server for Canvas LMS with up to 126 tools and 8 agent skills.
$ npx -y skills add vishalsachdev/canvas-mcp --agent claude-code
MCP server for Canvas LMS with up to 126 tools and 8 agent skills. Designed for Claude Desktop, Cursor, Codex, Windsurf, and 40+ other agents; setup and capabilities vary by client.
1. Install the MCP server (everything else, including the skills, needs it running):
canvas-mcp.mcpb from the latest release and double-click it. It prompts for your Canvas URL and token; no terminal needed. Details.pip install into a virtualenv, add your token to .env, and point your client at the canvas-mcp-server binary. Local Installation has the per-client config blocks.2. Verify: canvas-mcp-server --test should report a successful Canvas connection. Then restart your client.
3. Optional: add the workflow skills. These teach your agent the multi-step recipes (weekly plan, morning check, bulk grading, peer review, course QC) on top of the tools:
npx skills add vishalsachdev/canvas-mcp
See Agent Skills for the list. If your agent is Claude Code, the same recipes are also available as slash commands.
Canvas MCP provides up to 126 tools for interacting with Canvas LMS; the default profile registers fewer, and optional feature-gated tools can raise the total to 126. 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?" |
list_my_announcements | Announcements across all active courses | "What did my professors announce this week?" |
get_my_activity_stream | Recent activity grouped by kind | "What's new in Canvas?" |
list_my_groups | Your groups, with course and group IDs | "Which project team am I on in BADM 350?" |
get_group_members | Members of one of your groups (no emails) | "Who is in my project group?" |
list_group_files | Files stored in one of your groups | "What files has my group uploaded?" |
list_quizzes | Classic and New Quizzes in a course, with dates and your submission state (read-only) | "What quizzes do I have in CS 161?" |
get_quiz_details | One quiz's settings plus your attempts used and remaining (read-only) | "How many attempts do I have left on Quiz 3?" |
list_calendar_events | Calendar events and due dates across courses | "What is on my calendar next week?" |
get_calendar_event | One calendar event in full | "Show me the details of that exam event" |
list_planner_notes | Your own planner notes | "What notes are on my planner this week?" |
| 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?" |
get_student_submission | One student’s text and visible comments; requires grading permission and preserves redaction | "Read student 123’s submission for 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-oriented review), 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, local per-item processing |
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. 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 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: October 2026 | Full Changelog | All Releases
A student-tools and correctness release, most of it contributed by @KKazuhaK. Students get read-only tools for their groups, grades, quizzes, calendar and a cross-course "what's new" feed, plus Inbox messaging that is off unless the operator enables it. Instructors get guarded body edits and complete reads.
list_my_groups, get_my_assignment_scores and calculate_grade_scenarios (what-if grades the way Canvas computes them), list_quizzes and get_quiz_details (never start an attempt), list_calendar_events and list_planner_notes, list_my_announcements and get_my_activity_stream. Student writes register only when named in STUDENT_WRITE_TOOLS and remain subject to ALLOWED_WRITE_TOOLS. Messaging (send_message, reply_to_conversation) previews first and reaches at most 5 individual people. Planner-note updates/deletes and personal-calendar deletes also require a preview and confirmation token. create_planner_note, mark_planner_item_complete, and create_personal_calendar_event write immediately on the first valid call; they have no preview step. Completing course content can also change module progression. Get the user's approval before invoking these immediate writes (#465 to #476)edit_page_content, update_assignment, update_discussion_topic and update_syllabus take expect_updated_at or expect_body_sha256, find/replace and require, and report a write as confirmed only when the read-back proves it (#437)group_id and list_group_discussion_topics (#433, thanks @papatistos); anonymous discussions read through GraphQL (#439, thanks @papatistos) and refused for updates (#446)raw_dates (#438)assign_peer_review never posts a placeholder submission and needs a numeric reviewee_id (#436)Also fixed: graded paper and no-submission assignments are no longer reported overdue (#423, thanks @lindsay-cheng). The suite runs on Windows in CI (#456, with UTF-8 groundwork by @bruchris in #445). Patched pyjwt, urllib3 and multidict.
canvas-mcp is a Claude Code plugin with 8 hand-picked skills, indexed on Flowy in the Education category. Install it with the command on its page. It includes canvas-accessibility-auditor, canvas-bulk-grading, canvas-course-builder. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.
Is this plugin yours?
Claim it with GitHubSubmit a pluginPromote it