Skip to main content
Glama
README.md
# Canvas LMS MCP Server (Cloudflare Workers)

Remote MCP server that connects to Canvas LMS and exposes course/assignment/quiz tools over Cloudflare Workers.

## What this server provides

The MCP agent is served at:

- `GET /mcp` (MCP endpoint)

It currently implements these tools:

- `get_active_courses`: Returns active courses filtered to course names containing `SP` or `FL`.
- `get_assignments`: Returns assignments due in the next `n` days (`1-90`, default `7`).
- `get_quizzes`: Returns quizzes due in the next `n` days (`1-90`, default `7`).

## Prerequisites

- Node.js 18+ (or newer)
- npm
- A Cloudflare account
- A Canvas LMS access token and base URL (for example `https://sjsu.instructure.com`)

## Install

```bash
npm install
```

## Configure environment variables

Use local vars for development by creating/updating `.dev.vars`:

```env
CANVAS_BASE_URL=https://your-school.instructure.com
CANVAS_TOKEN=your_canvas_token
```

For deployment, use Wrangler secrets instead of committing credentials:

```bash
wrangler secret put CANVAS_TOKEN
wrangler secret put CANVAS_BASE_URL
```

## Run locally

```bash
npm run dev
```

Default local URL:

- `http://localhost:8787/mcp`

Health check route:

- `http://localhost:8787/`

## Deploy

```bash
npm run deploy
```

After deploy, your MCP endpoint is:

- `https://<your-worker>.<your-subdomain>.workers.dev/mcp`

## Use with an MCP client (example: Claude Desktop via mcp-remote)

Add/update your MCP client config:

```json
{
  "mcpServers": {
    "canvas": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "https://<your-worker>.<your-subdomain>.workers.dev/mcp"
      ]
    }
  }
}
```

For local testing:

```json
{
  "mcpServers": {
    "canvas": {
      "command": "npx",
      "args": ["mcp-remote", "http://localhost:8787/mcp"]
    }
  }
}
```

## Useful scripts

- `npm run dev`: Start local Worker development server.
- `npm run deploy`: Deploy to Cloudflare Workers.
- `npm run type-check`: Run TypeScript type checking.
- `npm run lint:fix`: Auto-fix lint issues via oxlint.
- `npm run format`: Format repo with oxfmt.
- `npm run cf-typegen`: Regenerate Wrangler type bindings.

## Project structure

- `src/index.ts`: MCP server definition and tool implementations.
- `src/lib/helper.ts`: Canvas pagination (`Link` header parsing).
- `public/`: Static assets for Worker static asset binding.
- `wrangler.jsonc`: Cloudflare Worker configuration.