Canvas LMS MCP Server

Canvas LMS MCP Server

Connects Claude to Canvas LMS accounts, enabling natural language queries about courses, assignments, grades, and files. Supports content search, file downloads, syllabus retrieval, and bulk course exports via 13 integrated tools.

Category
Visit Server

README

Canvas LMS MCP Server

An MCP (Model Context Protocol) server that connects Claude Code to your Canvas LMS account. Ask Claude about your courses, assignments, grades, and files — no manual downloading needed.

What it does

This server exposes 13 tools that let Claude Code interact with your Canvas account:

Tool Description
list_courses List all your enrolled courses
get_course_modules Get the module structure for a course
get_module_items Get items within a specific module
get_page_content Read a Canvas page as clean text
search_course_content Search across all pages in a course
list_course_files List files in a course or folder
download_file Download a file to your local disk
get_assignments List assignments with due dates and status filters
get_assignment_details Full assignment details with submission status
get_syllabus Get the course syllabus
get_announcements Get recent course announcements
get_grades Get your grades and submission scores
export_course_content Bulk download an entire course as a ZIP

Setup

1. Generate a Canvas Personal Access Token

  1. Log into your Canvas instance (e.g. https://uncch.instructure.com)
  2. Go to Account > Settings
  3. Scroll to Approved Integrations
  4. Click + New Access Token
  5. Give it a name (e.g. "Claude Code MCP") and click Generate Token
  6. Copy the token — it looks like 7006~abc123...

2. Install dependencies

cd /path/to/canvas-mcp
npm install

3. Configure in Claude Code

Add the server to your Claude Code MCP config. For global access (all projects), create or edit ~/.claude/.mcp.json:

{
  "mcpServers": {
    "canvas-lms": {
      "command": "npx",
      "args": ["tsx", "/absolute/path/to/canvas-mcp/src/index.ts"],
      "env": {
        "CANVAS_DOMAIN": "your-school.instructure.com",
        "CANVAS_ACCESS_TOKEN": "7006~your-token-here",
        "CANVAS_DOWNLOAD_DIR": "/absolute/path/to/canvas-mcp/downloads"
      }
    }
  }
}

For project-level access, create .mcp.json in your project root with the same content.

4. Restart Claude Code

Restart Claude Code and run /mcp to verify the server is connected and all 13 tools appear.

Environment Variables

Variable Required Description
CANVAS_DOMAIN Yes Your Canvas instance domain (e.g. uncch.instructure.com)
CANVAS_ACCESS_TOKEN Yes Personal access token from Canvas Settings
CANVAS_DOWNLOAD_DIR No Directory for downloaded files (defaults to ./downloads)

Usage Examples

Once configured, just ask Claude naturally:

  • "List my Canvas courses"
  • "What are my grades in COMP 455?"
  • "Show me the modules for course 104811"
  • "Download the latest homework for my CS class"
  • "What assignments do I have coming up?"
  • "Get the syllabus for STOR 435"
  • "Search my COMP 211 course for 'linked list'"
  • "Export all content from my COMP 301 course"

How it works

The server uses the Canvas LMS REST API with Bearer token authentication. It handles pagination, rate limiting, and converts Canvas HTML content to clean readable text for Claude.

Built with:

  • @modelcontextprotocol/sdk — MCP protocol implementation
  • cheerio — HTML to text conversion
  • adm-zip — ZIP extraction for course exports
  • zod — Input validation

Project Structure

canvas-mcp/
├── src/
│   ├── index.ts              # Entry point, registers tools, stdio transport
│   ├── canvas-client.ts      # Canvas API client (auth, pagination, rate limits)
│   ├── html-to-text.ts       # HTML to clean text conversion
│   └── tools/
│       ├── courses.ts        # list_courses
│       ├── modules.ts        # get_course_modules, get_module_items
│       ├── pages.ts          # get_page_content, search_course_content
│       ├── files.ts          # list_course_files, download_file
│       ├── assignments.ts    # get_assignments, get_assignment_details
│       ├── syllabus.ts       # get_syllabus
│       ├── announcements.ts  # get_announcements
│       ├── grades.ts         # get_grades
│       └── export.ts         # export_course_content
├── package.json
└── tsconfig.json

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured