canvas-mcp
This server exposes the Canvas LMS REST API as MCP tools, allowing you to interact with your Canvas courses and academic data from any MCP-compatible client (e.g., Claude Code, Claude Desktop).
List Courses (
list_courses): Retrieve enrolled courses, with optional filtering to active-only. Returns course ID, name, course code, and term.List Assignments (
list_assignments): Get assignments for a specific course, including due dates, point values, and submission status. Optionally include submission details.List Modules (
list_modules): View course modules and their items/contents for a given course.List Announcements (
list_announcements): Fetch announcements posted in a specific course.Get Wiki Page (
get_page): Retrieve a course wiki page's content by its URL slug and course ID.Get File Info (
get_file_info): Look up file metadata, including download URL, for a specific course file.Get Grades (
get_grades): Check current grades for a specific course or across all enrollments.Planner Items (
planner_items): Fetch Canvas planner items (assignments, events) for a specified date range.Upcoming Events (
upcoming_events): See upcoming assignments and calendar events across all courses for roughly the next two weeks.Todo List (
todo): View your Canvas TODO list of ungraded or pending assignments.Bulk Dump (
canvas-local-mcp-dump): Perform a bulk download of all accessible course materials and syllabi for offline indexing.
Provides tools for interacting with Canvas LMS via its REST API, including listing courses, assignments, modules, announcements, retrieving page and file information, grades, planner items, upcoming events, and todo items, as well as a bulk file dump capability.
Canvas LMS MCP Server (canvas-mcp)
Ask Claude about your Canvas courses, assignments, deadlines, modules, and grades from one place.
canvas-mcp is a local-first MCP server for Canvas LMS users (students, instructors, and MCP builders). It turns Canvas REST API actions into MCP tools that work from Claude Code, Claude Desktop, and other MCP-compatible clients.
Status: alpha. Single-user, no warranty, API surface may still shift. File issues if it breaks.
Who this is for
Students who want one view across multiple courses
Educators who want faster access to assignments, modules, and announcements
MCP users who want Canvas data in local Claude workflows
Related MCP server: Canvas MCP
What you can ask Claude
“What assignments are due this week across all my active courses?”
“Show upcoming events and planner items for next week.”
“List my current grades by course.”
“Get the modules (with items) for course
12345.”“Show announcements for course
12345.”“Fetch the page
syllabusfrom course12345.”
Quick start
Prerequisite: Python 3.10+.
1) Create a Canvas personal access token
In Canvas: Account → Settings → Approved Integrations → + New Access Token. Copy the token shown (Canvas does not show it again later).
2) Install
From PyPI (recommended):
pip install canvas-local-mcpOr from source:
git clone https://github.com/admin978/canvas-mcp.git && cd canvas-mcp
python3 -m venv .venv && source .venv/bin/activate
pip install -e .3) Configure ~/.canvas.env
curl -fsSL https://raw.githubusercontent.com/admin978/canvas-mcp/main/.canvas.env.example -o ~/.canvas.env
chmod 600 ~/.canvas.env
# edit ~/.canvas.env: set CANVAS_BASE_URL (institution root, no /api/v1)
# and paste the token into CANVAS_TOKENFor token safety guidance (least privilege, file permissions, rotation/revocation, and vulnerability reporting), see SECURITY.md.
4) Register in your MCP client
Claude Code:
claude mcp add canvas-local -- canvas-local-mcpClaude Desktop:
macOS example path:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows example path:
%APPDATA%\Claude\claude_desktop_config.jsonLinux example path:
~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"canvas-local": {
"command": "canvas-local-mcp"
}
}
}Tools exposed
list_courseslist_assignmentslist_moduleslist_announcementsget_pageget_file_infoget_gradesplanner_itemsupcoming_eventstodo
Bulk dump
canvas-local-mcp-dump downloads course files and related content for offline indexing.
canvas-local-mcp-dump # all active courses
canvas-local-mcp-dump 12345 67890 # specific course IDsOutput goes to ./canvas-dump/ by default. Override with CANVAS_DUMP_DIR=/path/to/dir.
Local-first, privacy and token flow
The server runs locally and uses stdio transport with your MCP client.
Configuration is read from
~/.canvas.env(CANVAS_BASE_URL,CANVAS_TOKEN).Requests go from your local server to the official Canvas API endpoints.
No external token broker is used in the request path.
Security guidance and disclosure policy: SECURITY.md.
Demo
No demo GIF is currently committed yet. You can still verify the workflow quickly:
Try these prompts
After registering the MCP server, ask Claude:
“List my active Canvas courses.”
“What assignments are due this week across all my active courses?”
“Show upcoming events and planner items for next week.”
“List my current grades by course.”
Placeholder: add a short terminal/GIF walkthrough here in a future PR.
Development
Requires Python 3.10+.
pip install -e ".[dev]"
ruff check canvas_local_mcp tests # lint
pytest # tests run against a mocked Canvas API — no token neededCI runs lint + tests on Python 3.10–3.13 for every push and pull request.
Publishing a new release
Follow this order to publish a new version (e.g. 0.1.4) consistently across PyPI and the MCP Registry.
1. Bump the version everywhere
Update all three files to the new version string in a single PR:
File | Field |
|
|
|
|
| root |
The CI test test_server_json_version_matches_package and the workflow validation step will fail if any of these three disagree.
2. Merge the PR into main
Wait for all CI checks to pass before merging.
3. Publish canvas-local-mcp to PyPI
The project uses Trusted Publisher (OIDC) for PyPI uploads.
Trigger the PyPI publish workflow (or run python -m build && twine upload dist/* if you have credentials configured) before creating the tag, so the package is available when the MCP Registry fetches it.
4. Create and push the tag vX.Y.Z
git tag v0.1.4
git push origin v0.1.4This triggers the Publish to MCP Registry workflow, which:
Validates that
server.json,pyproject.toml, and the tag all declare the same version.Publishes
server.jsonto the MCP Registry via GitHub OIDC (no secrets needed).
5. Verify
PyPI:
https://pypi.org/project/canvas-local-mcp/MCP Registry:
https://registry.modelcontextprotocol.io/?q=canvas-mcpGitHub Actions:
https://github.com/admin978/canvas-mcp/actions
Important: never reuse or move an existing tag. If you need to re-publish after a mistake, bump to the next patch version (e.g.
0.1.4) and start from step 1.
Contributing, roadmap and support
Pull requests are welcome for bug fixes and Canvas workflow improvements
Roadmap direction currently lives in open issues and upcoming PRs
If this project helps you manage Canvas with Claude, please try the flow above and consider giving it a ⭐ so other students and educators can find it.
License
MIT — see LICENSE.
Built by AGENTE 404 S.L. · admin@agente404.com
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseBqualityAmaintenanceMCP server for Canvas LMS, providing 115+ tools to read courses, assignments, submissions, rubrics, quizzes; grade, comment, manage course content, and handle Canvas admin workflows from any AI agent.Last updated1004734MIT
- Alicense-qualityDmaintenanceA local MCP server for Canvas LMS that enables querying courses, assignments, grades, modules, and more from any MCP-compatible AI client.Last updated23MIT
- Alicense-qualityAmaintenanceMCP server for Canvas LMS enabling parent observers and students to access courses, assignments, grades, and more. Supports multiple authentication methods including token, OAuth, and a convenient fetchproxy fallback.Last updated335MIT
- Flicense-qualityDmaintenanceMCP server for Canvas LMS that exposes courses, assignments, modules, pages, files, grades, and submissions as tools for AI agents.Last updated
Related MCP Connectors
Create, validate, edit, export (markdown/svg/png/mermaid), and search JSON Canvas files.
Read-only MCP server for ClassQuill, a tutoring-business-management platform.
Artifact store for AI agents. Hosted OAuth at mcp.artifacta.io/mcp; local stdio via npm/PyPI.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/admin978/canvas-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server