Canvas MCP Connector
# Canvas MCP Connector
A small, read-only [Model Context Protocol](https://modelcontextprotocol.io/) server for Canvas LMS. It exposes a signed-in user's courses, upcoming work, and course assignments as tools that an MCP client can call directly.
No browser extension, dashboard, or database is required. Credentials stay in the local environment and are never written to disk.
## Tools
| Tool | Purpose |
| --- | --- |
| `canvas_list_courses` | Returns active courses for the current Canvas account. |
| `canvas_get_upcoming` | Returns upcoming events and deadlines. |
| `canvas_list_assignments` | Returns assignments for a course ID. |
## Setup
Create a Canvas access token in your LMS account, then set the following environment variables:
```bash
export CANVAS_BASE_URL="https://canvas.example.edu"
export CANVAS_ACCESS_TOKEN="your_canvas_access_token"
```
Install and run the server:
```bash
python -m pip install -e .
canvas-mcp
```
## MCP client configuration
Use the following command in an MCP-compatible client configuration:
```json
{
"mcpServers": {
"canvas": {
"command": "canvas-mcp",
"env": {
"CANVAS_BASE_URL": "https://canvas.example.edu",
"CANVAS_ACCESS_TOKEN": "your_canvas_access_token"
}
}
}
}
```
The server communicates over standard input/output using JSON-RPC. It only makes `GET` requests to Canvas API endpoints.
## Development
```bash
python -m pip install -e . pytest
python -m pytest -q
```
## Scope
This project is intentionally narrow: it is a local data connector, not a learning-management UI or an automated submission tool. Canvas deployments may expose different API capabilities; verify your institution's policies before use.
## License
[MIT](LICENSE)
TDQS
Scored across 3 tools
Each tool targets a distinct facet: courses, upcoming deadlines, and per-course assignments. canvas_get_upcoming and canvas_list_assignments could both surface due dates, but their global-versus-course-specific scope keeps them distinguishable.
All tools share a canvas_ prefix and use snake_case. The only minor inconsistency is mixing list (canvas_list_courses, canvas_list_assignments) with get (canvas_get_upcoming), but the pattern remains predictable.
Three tools is on the small side, but each tool covers a core read-only Canvas workflow without redundancy. It is slightly thin for a full-fledged connector, but reasonable for a simple course/deadline dashboard.
The set supports listing courses, listing assignments, and viewing upcoming deadlines, which covers a basic student-facing workflow. However, it lacks deeper Canvas operations such as course detail lookups, assignment details, grades, submissions, or any lifecycle actions.