Canvas MCP
Provides tools for interacting with Canvas LMS, including courses, assignments, modules, pages, files, grades, submissions, announcements, discussions, groups, calendar events, and TODO items.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Canvas MCPshow my upcoming assignments"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Canvas MCP
MCP (Model Context Protocol) server for Canvas LMS. Exposes Canvas courses, assignments, modules, pages, files, grades, and submissions as tools for AI agents.
Tools
Tool | Description |
| List all active courses |
| Course details, optionally with syllabus |
| Modules with items (pages, files, assignments) |
| All assignments with due dates and points |
| Full assignment with description + rubric |
| Submit a URL to an assignment |
| Submit text to an assignment |
| List course pages |
| Get page content as plain text |
| File metadata and download URL |
| List all files (may 403 on some instances) |
| Course announcements |
| Discussion topics |
| Groups in a course |
| Members of a group |
| Your graded submissions with rubric feedback |
| Your submission for a specific assignment |
| Upcoming calendar events |
| Canvas TODO items |
| Authenticated user profile |
Related MCP server: Canvas MCP
Resources
URI | Description |
| All active courses as JSON |
| Current TODO items as JSON |
Setup
Environment Variables
export CANVAS_API_TOKEN="your-canvas-token"
export CANVAS_BASE_URL="https://your-institution.instructure.com"Generate a token at: <your-canvas-url>/profile/settings → + New Access Token
Install
pip install -e .Run
canvas-mcp # stdio transport (for MCP clients)Add to Hermes config.yaml
mcp_servers:
canvas:
command: canvas-mcp
env:
CANVAS_API_TOKEN: "your-token"
CANVAS_BASE_URL: "https://psu.instructure.com"Add to Claude Desktop
{
"mcpServers": {
"canvas": {
"command": "canvas-mcp",
"env": {
"CANVAS_API_TOKEN": "your-token",
"CANVAS_BASE_URL": "https://psu.instructure.com"
}
}
}
}Design Decisions
No stdout output from tools — tools return structured dicts/lists only, safe for coding agents
HTML is stripped — all Canvas HTML content is converted to readable plain text
Responses are slimmed — only relevant fields returned, no noise
Pagination handled — follows Canvas
Linkheaders automatically (up to 10 pages)Graceful 403 handling —
list_filesreturns an error dict with a hint instead of crashingClient cleanup — every tool call opens and closes its own client connection
Testing
pip install pytest pytest-asyncio
pytest -vTests use a MockTransport that intercepts HTTP at the httpx layer — no real Canvas calls.
Three test files:
test_client.py— Canvas API client unit teststest_server.py— tool functions, HTML stripping, slimming helperstest_integration.py— full pipeline: tool → client → mock HTTP → structured response
License
MIT
This server cannot be installed
Maintenance
Latest Blog Posts
- 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/overtimepog/CanvasMCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server