get_my_upcoming_assignmentsLABSCO SUMMARY
The accessibility scanner is the part that pays for the setup.
Twenty WCAG checks across a whole course — headings, tables, link text, contrast, alt text, captions — is work that otherwise does not get done, and it is exactly the kind of pass a model is good at. For educators the day-to-day win is grading and messaging in one place: find who has not submitted, message them, and grade the rest in bulk. Before pointing it at real student data, settle the privacy question deliberately; the anonymization flag exists, it is off by default, and it does not by itself decide what your institution allows.
What it is
An MCP server for the Canvas LMS with three audiences built into it: students checking their own work, educators running a course, and learning designers auditing one. It runs locally and calls Canvas with your own token, so it can do exactly what you can do and no more.
What you get
- For students — get_my_upcoming_assignments, get_my_todo_items, get_my_submission_status, get_my_course_grades and get_my_peer_reviews_todo
- Assignments and grading — list_assignments, create_assignment, update_assignment, list_submissions, bulk_grade_submissions and get_assignment_analytics
- Reaching your students — send_conversation to message them, and create_announcement to post to the course
- Course structure — create_module, update_module, add_module_item, delete_module, and get_course_structure for the whole module-to-item tree as JSON
- Pages and content — create_page, edit_page_content, update_page_settings, bulk_update_pages and upload_course_file
- Reading a course — list_courses, get_course_details, list_pages, get_page_content, list_modules and list_module_items
- Discussions — list_discussion_topics, list_discussion_entries, post_discussion_entry and reply_to_discussion_entry
- Accessibility work — scan_course_content_accessibility runs twenty WCAG checks covering headings, tables, links, contrast, alt text and captions, with fetch_ufixit_report, parse_ufixit_violations and format_accessibility_summary for institutional reports
- search_canvas_tools to find the right tool, and execute_typescript for bulk work that would be slow as thirty separate calls
- Courses can be named by Canvas id, course code or SIS id, so you can say the name you actually know
Requirements
Python 3.11 or later, a Canvas API token in CANVAS_API_TOKEN and your institution's Canvas URL in CANVAS_API_URL. The server runs on your machine and uses your token's Canvas permissions — a student sees a student's Canvas, an instructor sees an instructor's. For educator workflows there is an optional privacy control, ENABLE_DATA_ANONYMIZATION=true, which anonymizes supported identity fields before results reach the AI client; whether that satisfies your institution's obligations depends on your deployment and your AI provider, so check before working with student data. Install as a desktop extension, from PyPI, or from source.
Setup effort
Build from source — get the source, then follow the steps on this page and add the configuration for your client
USE CASES
Working out what is due this week
Check upcoming assignments and your TODO list, and confirm what you have already submitted.
Chasing missing work
See who has not submitted, then message just those students.
Grading a batch at once
Grade the submissions together, then read the analytics to see where the class struggled.
Building out a week of a course
Create the module, add pages and assignments to it, and publish when it is ready.
Auditing a course for accessibility
Run the WCAG scan across the content, then read the violations as a summary you can act on.
Cleaning up a course you inherited
Read the whole module-to-item structure first, then unpublish or update pages in bulk.
50 tools
Listed in project docs. Your client may show a different list.
get_my_todo_itemsget_my_submission_statusget_my_course_gradesget_my_peer_reviews_todolist_assignmentscreate_assignmentupdate_assignmentlist_submissionsbulk_grade_submissionsget_assignment_analyticssend_conversationcreate_announcementcreate_moduleupdate_moduleadd_module_itemdelete_modulecreate_pageedit_page_contentupdate_page_settingsbulk_update_pagesupload_course_filelist_coursesget_course_detailslist_pagesget_page_contentlist_moduleslist_module_itemslist_discussion_topicslist_discussion_entriespost_discussion_entryreply_to_discussion_entryget_course_structurescan_course_content_accessibilityfetch_ufixit_reportparse_ufixit_violationsformat_accessibility_summarysearch_canvas_toolsexecute_typescriptlist_code_api_modulesget_course_content_overviewget_assignment_detailssend_peer_review_inbox_messagesget_student_analyticsget_peer_review_completion_analyticslist_rubricsget_rubriccreate_rubricassociate_rubricgrade_with_rubricBEFORE YOU INSTALL
What to know first
Tools you get
50 tools named in the project's documentation. Up to 101 tools exist; the default profile registers fewer, and role-based filtering, an allowlist for student write tools and opt-in execute_typescript decide the rest. send_peer_review_reminders is now send_peer_review_inbox_messages.
Requires
- Python 3.11+
- CANVAS_API_TOKEN in your environment
INSTALLATION
Connect your client
Get the source, then follow the steps on this page and add the configuration for your client. This one is built from source rather than installed with a single command.
Server setup
git clone https://github.com/vishalsachdev/canvas-mcp
cd canvas-mcp
python3 -m venv .venv
. .venv/bin/activate
pip install -e .
cp env.template .envEdit .env - Required: CANVAS_API_TOKEN, CANVAS_API_URL (token from Canvas -> Account -> Settings -> New Access Token)
Add the mcpServers block to your client config, pointing command at the absolute path of .venv/bin/canvas-mcp-server
Test the Canvas API connection:
canvas-mcp-server --testMCP Clients
Claude Desktop — one-click
Download canvas-mcp.mcpb from the latest release:
https://github.com/vishalsachdev/canvas-mcp/releases/latestDouble-click the file (or drag it into Claude Desktop → Settings → Extensions).
When prompted, enter your Canvas API URL — this must include the /api/v1 path (e.g. <YOUR_UNIVERSITY_URL>/api/v1) — and your Canvas API token (Canvas → Account → Settings → New Access Token). The token is stored in your OS keychain.
Claude Desktop, Cursor, Windsurf, Continue
{
"mcpServers": {
"canvas-api": {
"command": "<YOUR_PATH_TO_CANVAS_MCP>/.venv/bin/canvas-mcp-server"
}
}
}The configuration on this page does not set CANVAS_API_TOKEN. The manual setup reads it from the .env file you create in the steps above; the one-click Claude Desktop extension asks for it when you install it and keeps it in your OS keychain instead.
Zed
{
"context_servers": {
"canvas-api": {
"command": {
"path": "<YOUR_PATH_TO_CANVAS_MCP>/.venv/bin/canvas-mcp-server",
"args": []
}
}
}
}The configuration on this page does not set CANVAS_API_TOKEN. The manual setup reads it from the .env file you create in the steps above; the one-click Claude Desktop extension asks for it when you install it and keeps it in your OS keychain instead.
Any AI agent — skills
npx skills add vishalsachdev/canvas-mcp