···11# Canvas MCP Server
2233-A proper MCP (Model Context Protocol) server that connects Canvas LMS to AI assistants like Claude Desktop.
44-55-## Features
66-77-- **Proper MCP Protocol**: Implements Streamable HTTP transport with JSON-RPC
88-- **Personal Access Token Auth**: Students set up in 2 minutes (no admin access needed)
99-- **Multi-Institution Support**: Works with any Canvas instance
1010-- **Encrypted Storage**: Canvas tokens encrypted at rest with AES-256-GCM
1111-- **Session Persistence**: Sessions survive server restarts (stored in SQLite)
1212-- **Built with Bun**: Fast, modern TypeScript using `@modelcontextprotocol/sdk`
33+This is a stream http transport Canvas LMS mcp server. A nice fancy bit of goblygook that just means its a remote integration you can plug into chatgpt, claude, poke, or anywhere else that supports mcp. If you want to try the hosted version its over at [canvas.dunkirk.sh](https://canvas.dunkirk.sh) or feel free to self host!
134145## Quick Start
156···30213122Visit `http://localhost:3000` to connect your Canvas account.
32233333-## How It Works
3434-3535-1. **Web Interface**: Students enter Canvas domain + Personal Access Token
3636-2. **Verification**: Server validates token by calling Canvas API
3737-3. **Token Storage**: Canvas token encrypted and stored server-side
3838-4. **MCP Token**: User receives an MCP connection token for their AI client
3939-5. **MCP Protocol**: AI client connects to `/mcp` endpoint with Bearer token
4040-6. **Canvas Proxy**: Server proxies tool calls to Canvas using stored token
4141-4224## MCP Tools
43254426- `list_courses`: List Canvas courses with enrollment filtering
···6244}
6345```
64466565-## Architecture
6666-6767-- **MCP Server**: `@modelcontextprotocol/sdk` with Streamable HTTP transport
6868-- **Web Dashboard**: Bun.serve with HTML/CSS/JS (no frameworks)
6969-- **Database**: SQLite with encrypted Canvas tokens and persistent sessions
7070-- **Transport**: JSON-RPC over HTTP POST at `/mcp` endpoint
7171-7247## Security
73487449- Canvas tokens encrypted with AES-256-GCM before storage
7550- MCP tokens hashed with Argon2id (cannot be retrieved after creation)
7676-- Sessions stored in database (survive restarts)
7777-- HTTPS enforced in production
7851- No Canvas tokens exposed to MCP clients
7979-8080-## Deployment
8181-8282-Deployed at: `https://canvas.dunkirk.sh`
83528453The canonical repo is hosted on tangled at [`knot.dunkirk.sh/canvas-mcp`](https://tangled.org/knot.dunkirk.sh/canvas-mcp)
8554