Skip to main content
Glama
JaeYu-Dev

Canvas MCP Connector

by JaeYu-Dev
README.md
# 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

B3.4/5.0

Scored across 3 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count4/5

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.

Completeness3/5

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.

Maintenance

ActivitySlowing
ResponsivenessNo issues