
Canvas Mcp
io.github.admin978Published by GitHub account admin978v0.1.3Updated Oct 25, 2026
Local-first MCP server for Canvas LMS. Stdio transport, no third-party broker.
Overview
A local MCP server that lets an assistant read your Canvas LMS courses, assignments, modules, grades, announcements and planner items.
- What you can do
- List your courses and their assignments, modules and announcements, and read individual course pages and file details from Canvas LMS. Retrieve grades per course and pull planner items, upcoming events and to-do entries across courses. A separate command-line tool bulk-downloads course files and related content into a local folder for offline indexing.
- When to use it
- Useful for students or instructors who want to ask an assistant about deadlines, course content and grades across several Canvas courses without opening Canvas in a browser.
- Requirements
- Runs locally over stdio with Python 3.10+ and the canvas-local-mcp package from PyPI. Needs a Canvas institution root URL in CANVAS_BASE_URL and a Canvas personal access token in CANVAS_TOKEN, normally stored in a local env file. Network access to your institution's Canvas API is required.
Installation
In SourceWeft
- Open Canvas Mcp in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
Canvas LMS MCP Server (canvas-mcp)
[CI] [PyPI] [Python] [License]
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
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):
Or from source:
3) Configure ~/.canvas.env
For token safety guidance (least privilege, file permissions, rotation/revocation, and vulnerability reporting), see SECURITY.md.
4) Register in your MCP client
Claude Code:
Claude Desktop:
- macOS example path:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows example path:
%APPDATA%\Claude\claude_desktop_config.json - Linux example path:
~/.config/Claude/claude_desktop_config.json
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.
Output 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+.
CI 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:
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
This 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-mcp - GitHub 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
- Issues / feature requests
- 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. · [email protected]
Source: README.md at commit cead98e
Tools
0Version history
1- v0.1.3LatestSep 16, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts
