Skip to main content
Glama

Canvas MCP

Build TypeScript MCP License: MIT

A local MCP (Model Context Protocol) server for Canvas LMS. Query your courses, assignments, grades, modules, and more from any MCP-compatible AI client — Claude Desktop, Cursor, VS Code Copilot, and others.

Your API key stays on your machine. Unlike hosted MCP servers that require you to hand over your Canvas credentials, this server runs locally and communicates directly with your Canvas instance.

Architecture

graph TB
    subgraph "MCP Clients"
        Claude["Claude Desktop"]
        Cursor["Cursor / VS Code"]
        Other["Other MCP Clients"]
    end

    subgraph "Your Machine (Local)"
        Server["Canvas MCP Server<br/>Node.js + TypeScript"]
        ENV["Environment Variables<br/>CANVAS_API_KEY"]
    end

    subgraph "Canvas LMS Tools"
        Courses["list_courses"]
        Assignments["get_assignments<br/>get_upcoming_assignments"]
        Grades["get_grades<br/>get_submission_status"]
        Content["get_modules<br/>get_announcements<br/>get_discussions"]
        Calendar["get_calendar_events<br/>get_todo_items<br/>get_quizzes"]
        Profile["get_user_profile"]
    end

    subgraph "Canvas Instance"
        API["Canvas REST API<br/>HTTPS Only"]
    end

    Claude -->|stdio| Server
    Cursor -->|stdio| Server
    Other -->|stdio| Server

    ENV -.->|read at startup| Server

    Server --> Courses
    Server --> Assignments
    Server --> Grades
    Server --> Content
    Server --> Calendar
    Server --> Profile

    Courses --> API
    Assignments --> API
    Grades --> API
    Content --> API
    Calendar --> API
    Profile --> API

    style Server fill:#4CAF50,stroke:#333,color:#fff
    style ENV fill:#FF9800,stroke:#333,color:#fff
    style API fill:#2196F3,stroke:#333,color:#fff
    style Claude fill:#7C4DFF,stroke:#333,color:#fff
    style Cursor fill:#7C4DFF,stroke:#333,color:#fff
    style Other fill:#7C4DFF,stroke:#333,color:#fff

🔒 Privacy by design — your API key is read from local environment variables and sent only to your Canvas instance over HTTPS. No intermediary servers, no third-party storage.

Features

  • 12 Canvas LMS tools — courses, assignments, grades, modules, quizzes, and more

  • Runs locally — your credentials never leave your machine

  • Zero config hosting — no servers, no Cloudflare, no Docker needed

  • Works with any MCP client — Claude Desktop, Cursor, VS Code Copilot, ChatGPT

  • TypeScript — fully typed with Zod validation

Quick Start

1. Get your Canvas API key

Go to Canvas → Account → Settings → Approved Integrations → New Access Token

📖 Never done this before? Follow the step-by-step guide with screenshots

2. Clone and build

git clone https://github.com/a-ariff/canvas-mcp.git
cd canvas-mcp
npm install
npm run build

3. Add to your MCP client

Edit ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "canvas": {
      "command": "node",
      "args": ["/path/to/canvas-mcp/dist/standalone.js"],
      "env": {
        "CANVAS_API_KEY": "your-canvas-api-token",
        "CANVAS_BASE_URL": "https://your-canvas-instance.edu"
      }
    }
  }
}

Add to your .cursor/mcp.json or VS Code MCP settings:

{
  "mcpServers": {
    "canvas": {
      "command": "node",
      "args": ["/path/to/canvas-mcp/dist/standalone.js"],
      "env": {
        "CANVAS_API_KEY": "your-canvas-api-token",
        "CANVAS_BASE_URL": "https://your-canvas-instance.edu"
      }
    }
  }
}

4. Start chatting

Ask your AI assistant things like:

  • "What courses am I enrolled in?"

  • "What assignments are due this week?"

  • "Show me my grades for Computer Science 101"

  • "Are there any new announcements?"

Tools

Tool

Description

Args

list_courses

Get all active courses

get_assignments

Get assignments for a course

course_id

get_upcoming_assignments

Upcoming assignments across all courses

get_grades

Grades and scores for a course

course_id

get_user_profile

Your Canvas profile info

get_modules

Course modules and structure

course_id

get_announcements

Recent course announcements

course_id

get_discussions

Discussion topics

course_id

get_calendar_events

Upcoming calendar events

get_todo_items

Pending action items

get_quizzes

Course quizzes

course_id

get_submission_status

Assignment submission status

course_id, assignment_id

Environment Variables

Variable

Required

Default

Description

CANVAS_API_KEY

Yes

Your Canvas API access token

CANVAS_BASE_URL

No

https://canvas.instructure.com

Your Canvas instance URL

DEBUG

No

false

Enable debug logging

Security

  • Local execution only — the server runs on your machine via stdio

  • Direct API calls — your Canvas API key is sent only to your Canvas instance, never to any third party

  • No data storage — nothing is cached or persisted between sessions

  • Environment-based config — credentials are read from environment variables, never hardcoded

Development

# install deps
npm install

# build
npm run build

# run locally
CANVAS_API_KEY=your-token CANVAS_BASE_URL=https://your-canvas.edu npm start

# run tests
npm test

# lint
npm run lint

Contributing

Contributions welcome! Please see CONTRIBUTING.md for guidelines.

License

MIT

A
license - permissive license
-
quality - not tested
C
maintenance

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

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/a-ariff/canvas-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server