Skip to main content
Glama

Canvas MCP Server

License: MIT skills.sh

MCP server for Canvas LMS with up to 99 tools and 8 agent skills. Designed for Claude Desktop, Cursor, Codex, Windsurf, and 40+ other agents; setup and capabilities vary by client.

npx skills add vishalsachdev/canvas-mcp

For AI Agents

Canvas MCP provides up to 99 tools for interacting with Canvas LMS; the default profile registers fewer, and optional feature-gated tools can raise the total to 99. Tools are organized by user type:

Tool

Purpose

Example Prompt

get_my_upcoming_assignments

Due dates for next N days

"What's due this week?"

get_my_todo_items

Canvas TODO list

"Show my TODO list"

get_my_submission_status

Submitted vs missing

"Have I submitted everything?"

get_my_course_grades

Current grades

"What are my grades?"

get_my_peer_reviews_todo

Pending peer reviews

"What peer reviews do I need to do?"

Tool

Purpose

Example Prompt

list_assignments

All assignments in course

"Show assignments in BADM 350"

create_assignment

Create new assignment

"Create an assignment due Jan 26 with online text submission"

update_assignment

Update existing assignment

"Change the due date for Assignment 3 to Feb 15"

list_submissions

Student submissions

"Who submitted Assignment 3?"

bulk_grade_submissions

Grade multiple at once

"Grade these 10 students"

get_assignment_analytics

Performance stats

"Show analytics for Quiz 2"

send_conversation

Message students

"Message students who haven't submitted"

create_announcement

Post announcements

"Announce the exam date change"

Module Management

create_module

Create course module

"Create a module for Week 5"

update_module

Update module settings

"Rename the midterm module"

add_module_item

Add content to module

"Add the syllabus page to Week 1"

delete_module

Remove a module

"Delete the empty test module"

Page & Content

create_page

Create course page

"Create a page for office hours"

edit_page_content

Update page content

"Update the syllabus page"

update_page_settings

Publish/unpublish pages

"Publish all Week 3 pages"

bulk_update_pages

Batch page operations

"Unpublish all draft pages"

File Management

upload_course_file

Upload local file to Canvas

"Upload syllabus.pdf to the course"

Tool

Purpose

list_courses

All enrolled courses

get_course_details

Course info + syllabus

list_pages

Course pages

get_page_content

Read page content

list_modules

List course modules

list_module_items

Items within a module

list_discussion_topics

Discussion forums

list_discussion_entries

Posts in a discussion

post_discussion_entry

Add a discussion post

reply_to_discussion_entry

Reply to a post

Tool

Purpose

Example Prompt

get_course_structure

Full module→items tree as JSON

"Show me the structure of CS 101"

scan_course_content_accessibility

WCAG violation scanner (20 checks: headings, tables, links, contrast, alt text, captions, DesignPLUS)

"Audit accessibility for BADM 350"

fetch_ufixit_report

Institutional accessibility report

"Pull the UFIXIT report for this course"

parse_ufixit_violations

Extract structured violations

"Parse the UFIXIT violations"

format_accessibility_summary

Readable violation report

"Summarize the accessibility issues"

Skills: canvas-course-qc (pre-semester audit), canvas-accessibility-auditor (WCAG-oriented review), canvas-course-builder (scaffold courses from specs/templates).

Tool

Purpose

When to Use

search_canvas_tools

Discover MCP tools and code API operations

Finding available tools and bulk ops

execute_typescript

Run TypeScript locally

30+ items, custom logic, local per-item processing

Decision tree: Simple query → MCP tools. Batch grading (10+) → bulk_grade_submissions. Complex bulk (30+) → execute_typescript.

Quick Reference

Course identifiers: Canvas ID (12345), course code (badm_350_120251_246794), or SIS ID

Cannot do: Create/delete courses, modify course settings, access other users' data

Rate limits: ~700 requests/10 min. Use max_concurrent=5 for bulk operations.

Full documentation: AGENTS.md | tools/TOOL_MANIFEST.json | tools/README.md

Related MCP server: Canvas MCP Server

Overview

The Canvas MCP Server bridges the gap between AI assistants and Canvas Learning Management System, providing role-specific workflows for students, educators, learning designers, and developers. Built on the Model Context Protocol (MCP), it is designed for MCP-compatible clients; setup and supported capabilities vary by client.

Latest Release: v1.10.0

Released: August 2026 | Full Changelog | All Releases

A community bug-fix release driven by live reporter testing — thanks @khagyard, @zqian, @jonespm, @bruchris, and @SHIL0018 (our second outside code contribution). One change is breaking — see below before upgrading.

  • Breaking: search_canvas_tools response shape v2 (#281). The tool now actually searches the ~99 registered MCP tools alongside the TypeScript code-API files (it previously searched only the latter, so "peer review" found nothing despite ~10 peer-review tools existing). Responses carry schema_version: 2 with labeled mcp_tools / code_execution_api sections; the old flat tools key is gone. Full-detail code-API content is now also capped at 2,000 characters (#287)

  • Students can find their peer reviews (#275): get_my_peer_reviews_todo gained a direct per-assignment lookup and a Planner-feed discovery path — the same data source Canvas's own student UI uses — validated against a real production payload from the reporter

  • create_announcement fails safely on student tokens (#283): Canvas silently downgrades the create to a regular discussion topic; the tool now pre-checks course permissions and refuses before creating anything, auto-deletes the unintended topic if a downgrade still slips through, and steers AI clients away from posting the content via discussion tools as a fallback

  • Security: stricter URL validation (code-scanning fix), Docker base bumped to python:3.14-slim, CI actions updated

v1.9.0 — Prompt-injection hardening (#239): Canvas-authored text arrives provenance-fenced as data-not-instructions; multi-recipient sends became two-step preview→confirm (breaking); write tools refuse fence markers; OSSF Scorecard published, CI actions SHA-pinned, .mcpb ships SLSA provenance; npm wizard retired (#249). Eleven adversarial review rounds pre-merge

v1.8.0 — Security-scan remediation: 11 of 12 findings fixed, three breaking (HTTPS-only Canvas URLs, stdio-only file transfer tools, no-overwrite downloads), a measured submissions authorization bypass closed centrally, CSV formula-injection protection, code execution fails closed, dependency floors raised (PR #251, #255)

v1.7.0 — Correctness release from instructor bug reports: writes no longer report success when Canvas quietly did less than asked (#219#221), Planner-API upcoming assignments (#222), check_enrollment AMBIGUOUS answers (#199), wire-format fixes for pages/inbox (#207, #208), MCP-spec tool annotations (#204), CSV rubric format fix (#190), anonymization consolidated to the client layer (#179). Thanks @khagyard and @zqian

v1.6.0 — Tier 1 student write tools behind an explicit allowlist (#170), get_my_enrollments / get_my_profile (#171), three-tier anonymization (#166, #179), rubric association fixes (#180, #181), execute_typescript became opt-in (#178), ruff gating CI (@w3lld1, PR #186)

v1.5.0get_syllabus (#134), create_rubric_from_csv (#119), update_discussion_topic (#154), fastmcp 2.x migration (#145), dependency advisories cleared 33 → 0 with a gating CI scan (PR #156)

v1.4.0check_enrollment (PR #126), Claude Desktop Extension .mcpb, Entra ID authenticated institutional hosting (#115, PR #125), HTTP fails closed without auth gate (PR #123)

v1.3.0create_rubric (PR #100), read_course_file (@DomBarker99, PR #90), event-loop fix for user-scoped tools (PR #99), bulk-delete safety cap (PR #96), dependency pruning (PR #93)

v1.2.0 — Role-Based Tool Filtering (@Promithius-DR, PR #84), Accessibility Remediation (fix_accessibility_issues, scanner expanded 4→20 checks), Security Hardening (path traversal/symlink protections), Windows Support for execute_typescript (PR #85), CI consolidation (11→8 checks)

v1.1.0 — Hosted Server (mcp.illinihunt.org), Learning Designer tools + 3 skills, Agent Skills on skills.sh, File Management (@Metzpapa, PR #75), Token Optimization, Generic Distribution

v1.0.8 — Security Hardening (PII sanitization, audit logging, sandbox-by-default), Ruff linting, 235+ tests

v1.0.7 — Assignment Update Tool (update_assignment), complete CRUD, 9 tests

v1.0.6 — Module Management (7 tools), Page Settings (2 tools), 235+ tests

v1.0.5 — Claude Code Skills, GitHub Pages site

v1.0.4 — Code Execution API for token-efficient bulk operations, MCP 2.14 compliance

For Students 👨‍🎓

Get AI-powered assistance with:

  • Tracking upcoming assignments and deadlines

  • Monitoring your grades across all courses

  • Managing peer review assignments

  • Accessing course content and discussions

  • Organizing your TODO list

→ Get Started as a Student

For Educators 👨‍🏫

Enhance your teaching with:

  • Assignment and grading management

  • Student analytics and performance tracking

  • Discussion and peer review facilitation

  • Privacy controls designed to support FERPA-conscious workflows

  • Bulk messaging and communication tools

→ Get Started as an Educator

For Learning Designers 🎨

AI-powered course design and quality assurance:

  • Course scaffolding — Build entire course structures from specs, templates, or by cloning existing courses

  • Quality audits — Pre-semester QC checks for structure, content, publishing, and completeness

  • Accessibility review — 20-check WCAG-oriented scanner (headings, tables, scope, contrast, alt text, links, captions, DesignPLUS migration), prioritized reports, guided remediation, and verification

  • Course structure analysis — Full module→items tree in a single call for rapid course review

3 dedicated skills (canvas-course-qc, canvas-accessibility-auditor, canvas-course-builder) plus the get_course_structure tool.

🤖 Agent Skills

Pre-built workflow recipes that teach AI agents how to use Canvas MCP tools effectively. Available for 40+ coding agents via skills.sh, or as Claude Code-specific slash commands.

Install via skills.sh (Any Agent)

npx skills add vishalsachdev/canvas-mcp

This launches an interactive picker to install skills into your agent of choice (Claude Code, Cursor, Codex, OpenCode, Cline, Zed, and many more).

Skill

For

What It Does

canvas-week-plan

Students

Weekly planner: due dates, submission status, grades, peer reviews

canvas-morning-check

Educators

Course health dashboard: submission rates, struggling students, deadlines

canvas-bulk-grading

Educators

Grading decision tree: single → bulk → code execution with safety checks

canvas-peer-review-manager

Educators

Full peer review pipeline: analytics, quality analysis, reminders, reports

canvas-discussion-facilitator

Both

Discussion browsing, participation monitoring, replying, facilitation

canvas-course-qc

Learning Designers

Pre-semester quality audit: structure, content, publishing, completeness

canvas-accessibility-auditor

Learning Designers

WCAG scan, prioritized report, guided remediation, verification

canvas-course-builder

Learning Designers

Scaffold courses from specs, templates, or existing courses

Install a specific skill:

npx skills add vishalsachdev/canvas-mcp -s canvas-week-plan

Claude Code Slash Commands

If you use Claude Code, the same workflows are also available as slash commands:

You: /canvas-morning-check CS 101
Claude: [Generates comprehensive course status report]

You: /canvas-week-plan
Claude: [Shows prioritized weekly assignment plan]

Claude Code skills are located in .claude/skills/ and can be customized for your workflow.

Want a custom skill? Submit a request describing your repetitive workflow!

🔒 Privacy & Data Protection

For Educators: FERPA-Conscious Data Handling

Canvas MCP provides optional privacy controls that can support an institution's FERPA obligations. Compliance still depends on your deployment, configuration, institutional policy, and AI provider:

  • Response anonymization converts supported identity fields to consistent anonymous IDs (Student_xxxxxxxx)

  • Email masking and supported PII-pattern filtering in discussion posts and submissions

  • Local server deployment with configurable privacy controls (ENABLE_DATA_ANONYMIZATION=true)

  • Privacy-conscious analytics: Ask "Which students need support?" while reducing the identity data returned to the AI client

  • De-anonymization mapping tool for faculty to correlate anonymous IDs with real students locally

When ENABLE_DATA_ANONYMIZATION=true is enabled, supported identity fields are anonymized before tool results reach the AI client. Review the Educator Guide and your institution's requirements before using student data.

For Students: Data Scope & Privacy

  • Canvas-scoped access: Student-specific tools use Canvas's "self" endpoints; shared course-content tools follow the permissions Canvas grants your account

  • No shared-server credential storage: Local mode reads your Canvas token from your own .env. In authenticated institutional HTTP deployments, each request supplies the user's Canvas token and the server does not store it.

  • No built-in product analytics: Canvas MCP does not add telemetry; Canvas and your AI client still apply their own logging and data policies

  • Optional anonymization: Student tools are scoped to your own Canvas data, but your AI client's privacy policy still applies

Hosted Server (Retired)

The public hosted server (mcp.illinihunt.org) has been retired. A public MCP endpoint without an access gate isn't safe to operate — it would expose the built-in code-execution tool — so the supported path is local installation below.

The HTTP/streamable transport itself remains fully supported for self-hosting behind your own authentication (canvas-mcp-server --transport streamable-http). Running a shared, authenticated instance for your institution? See deploy/azure/ for a production-tested deployment specification (Azure App Service + Entra ID platform auth, per-user Canvas tokens) with sample workflow and config templates.


Prerequisites (Local Installation)

  • Python 3.10+ - Required for modern features and type hints

  • Canvas API Access - API token and institution URL

  • MCP Client - An MCP-compatible client (Claude Desktop, Cursor, Zed, Windsurf, Continue, etc.); setup and capabilities vary by client

Supported MCP Clients

Canvas MCP is designed for MCP-compatible clients, including Claude Desktop, Cursor, Zed, Windsurf, Continue, Replit, and Copilot Studio. Setup details and supported capabilities vary by client.

Canvas MCP uses documented Canvas API patterns such as a User-Agent header and per_page pagination. It is intended for Canvas Cloud and compatible self-hosted instances.

Install as a Claude Desktop Extension (easiest)

If you use Claude Desktop, you can install Canvas MCP with one click — no terminal, no config-file editing:

  1. Download canvas-mcp.mcpb from the latest release.

  2. Double-click the file (or drag it into Claude Desktop → Settings → Extensions).

  3. When prompted, enter your Canvas API URL — this must include the /api/v1 path (e.g. https://canvas.youruniversity.edu/api/v1) — and your Canvas API token (Canvas → Account → Settings → New Access Token). The token is stored in your OS keychain.

The extension runs the server locally and calls Canvas with your own token, so requests use that token's Canvas permissions. Canvas and your AI client may retain their own activity records. Requires Python 3.10+ (the bundled runtime manages dependencies automatically). For other clients, or to run from source, use the manual setup below.

Local Installation

1. Install Dependencies

# (Recommended) Use a dedicated virtualenv so the MCP binary is in a stable location
python3 -m venv .venv
. .venv/bin/activate

# Install the package editable
pip install -e .

2. Configure Environment

# Copy environment template
cp env.template .env

# Edit with your Canvas credentials
# Required: CANVAS_API_TOKEN, CANVAS_API_URL

Get your Canvas API token from: Canvas → Account → Settings → New Access Token

Note for Students: Some educational institutions restrict API token creation for students. If you see an error like "There is a limit to the number of access tokens you can create" or cannot find the token creation option, contact your institution's Canvas administrator or IT support department to request API access or assistance in creating a token.

3. MCP Client Configuration

Canvas MCP is designed for MCP-compatible clients. Below are configuration examples for popular clients; exact setup and capabilities vary by client:

Configuration file location:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Configuration:

{
  "mcpServers": {
    "canvas-api": {
      "command": "/absolute/path/to/canvas-mcp/.venv/bin/canvas-mcp-server"
    }
  }
}

Note: Use the absolute path to your virtualenv binary to avoid issues with shell-specific PATH entries (e.g., pyenv shims).

Configuration file location:

  • macOS/Linux: ~/.cursor/mcp_config.json

  • Windows: %USERPROFILE%\.cursor\mcp_config.json

Configuration:

{
  "mcpServers": {
    "canvas-api": {
      "command": "/absolute/path/to/canvas-mcp/.venv/bin/canvas-mcp-server"
    }
  }
}

Configuration: Add to Zed's settings.json (accessible via Settings menu)

{
  "context_servers": {
    "canvas-api": {
      "command": {
        "path": "/absolute/path/to/canvas-mcp/.venv/bin/canvas-mcp-server",
        "args": []
      }
    }
  }
}

Configuration file location:

  • macOS: ~/Library/Application Support/Windsurf/mcp_config.json

  • Windows: %APPDATA%\Windsurf\mcp_config.json

Configuration:

{
  "mcpServers": {
    "canvas-api": {
      "command": "/absolute/path/to/canvas-mcp/.venv/bin/canvas-mcp-server"
    }
  }
}

Configuration: Add to Continue's config.json (accessible via Continue settings)

{
  "mcpServers": {
    "canvas-api": {
      "command": "/absolute/path/to/canvas-mcp/.venv/bin/canvas-mcp-server"
    }
  }
}

For other MCP-compatible clients, the general pattern is:

  1. Locate your client's MCP configuration file

  2. Add a server entry with:

    • Server name: canvas-api (or any name you prefer)

    • Command: Full path to canvas-mcp-server binary

    • Optional args: Additional arguments if needed

Consult your client's MCP documentation for specific configuration format and file locations.

Windows users: Replace forward slashes with backslashes in paths (e.g., C:\Users\YourName\canvas-mcp\.venv\Scripts\canvas-mcp-server.exe)

Verification

Test your setup:

# Test Canvas API connection
canvas-mcp-server --test

# View configuration
canvas-mcp-server --config

# Start server (for manual testing)
canvas-mcp-server

Available Tools

The Canvas MCP Server provides a set of tools for interacting with the Canvas LMS API. These tools are organized into logical categories for better discoverability and maintainability.

Tool Categories

Student Tools (New!)

  • Personal assignment tracking and deadline management

  • Grade monitoring across all courses

  • TODO list and peer review management

  • Submission status tracking

Shared Tools (Both Students & Educators)

  1. Course Tools - List and manage courses, get detailed information, generate summaries with syllabus content

  2. Discussion & Announcement Tools - Manage discussions, announcements, and replies

  3. Page & Content Tools - Access pages, modules, and course content

Educator Tools 4. Assignment Tools - Handle assignments, submissions, and peer reviews with analytics 5. Rubric Tools - List rubrics, associate with assignments, and grade submissions (including bulk_grade_submissions for efficient batch grading). Note: Create/update rubrics via Canvas web UI due to API limitations. 6. User & Enrollment Tools - Manage enrollments, users, and groups 7. Analytics Tools - View student analytics, assignment statistics, and progress tracking 8. Messaging Tools - Send messages and announcements to students

Developer Tools 9. Discovery Tools - Search registered MCP tools and code execution API operations with search_canvas_tools; list code execution modules with list_code_api_modules 10. Code Execution Tools - Execute TypeScript code with execute_typescript so bulk item processing can stay out of the model's context

📖 View Full Tool Documentation for detailed information about the available tools.

Code Execution API

For bulk operations (30+ items), Canvas MCP supports TypeScript code execution. Process bulk operations locally without loading every item into the model’s context.

Approach

Best For

Context Behavior

MCP tools

Simple queries, small datasets

Returns tool results to the model

bulk_grade_submissions

Batch grading 10-29 items

Handles a defined batch in one tool call

execute_typescript

30+ items, custom logic

Processes items locally and returns selected output

Use search_canvas_tools to discover available operations, then execute_typescript to run them locally. The default sandbox applies time, memory, environment, and best-effort network controls, but it is not a complete security boundary; use stronger external isolation when untrusted code or strict egress control is required (see issue #157). Works on macOS, Linux, and Windows.

Bulk Grading Example

import { bulkGrade } from './canvas/grading/bulkGrade';

await bulkGrade({
  courseIdentifier: "60366",
  assignmentId: "123",
  gradingFunction: (submission) => {
    const notebook = submission.attachments?.find(f =>
      f.filename.endsWith('.ipynb')
    );
    if (!notebook) return null;
    return { points: 100, comment: "Great work!" };
  }
});

Security Modes

Mode

Config

What It Does

Local sandbox (default)

None needed

Timeout 120s, memory 512MB, filtered environment, best-effort network controls

Container sandbox

TS_SANDBOX_MODE=container

Container filesystem isolation via Docker/Podman; egress guarantees depend on deployment configuration

No sandbox

ENABLE_TS_SANDBOX=false

Full local access (not recommended)

See Bulk Grading Example for a detailed walkthrough.

Usage

MCP clients start the server automatically. Just ask naturally:

  • "What's due this week?" / "Show my grades" / "What peer reviews do I need?"

  • "Who hasn't submitted Assignment 3?" / "Send reminders to missing students"

Quick start guides: Student | Educator | Real-World Workflows | Troubleshooting

Documentation

Built on FastMCP with async httpx, pydantic validation, and python-dotenv configuration. Modern src/ layout with pyproject.toml, type hints across core paths, connection pooling, pagination, and rate limiting. An automated test suite and ruff + black support code quality.

Troubleshooting

If you encounter issues:

  1. Server Won't Start - Verify your Local Installation setup: .env file, virtual environment path, and dependencies

  2. Authentication Errors - Check your Canvas API token validity and permissions

  3. Connection Issues - Verify Canvas API URL correctness and network access

  4. Debugging - Check your MCP client's console logs (e.g., Claude Desktop's developer console) or run server manually for error output

Security

Runtime security and privacy controls:

Layer

Default

PII sanitization in logs

LOG_REDACT_PII=true

Token validation on startup

Always on

Structured audit logging

Opt-in: LOG_ACCESS_EVENTS=true

Code execution guardrails

ENABLE_TS_SANDBOX=true (best-effort in local mode)

Optional anonymization for FERPA-conscious educator workflows: ENABLE_DATA_ANONYMIZATION=true. See Educator Guide for scope and configuration details.

Publishing

Published to PyPI, MCP Registry, and skills.sh (agent skills). Releases are automated via GitHub Actions — tag a version (git tag vX.Y.Z && git push origin vX.Y.Z) and CI handles the rest.

Contributing

Contributions are welcome! Feel free to:

  • Submit issues for bugs or feature requests

  • Create pull requests with improvements

  • Share your use cases and feedback

Contributors

Thanks to everyone who has contributed to Canvas MCP:

  • @DomBarker99read_course_file tool for remote MCP deployments (#90)

  • @Promithius-DR — Role-based tool filtering and tool annotations (#84)

  • @Metzpapa — File download and listing tools (#75)

  • @JCSnap — Student tool bug fixes (#72, #73)

License

This project is licensed under the MIT License - see the LICENSE file for details.


Created by Vishal Sachdev

Install Server
A
license - permissive license
B
quality
A
maintenance

Maintenance

Maintainers
21hResponse time
3wRelease cycle
16Releases (12mo)
Commit activity
Issues opened vs closed

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • Hosted Amazon Seller Central and Amazon Ads MCP server for Claude, ChatGPT, Cursor, and agents.

  • Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer

  • Hosted Amazon Seller and Vendor MCP server for Claude, ChatGPT, Cursor, Codex, Gemini, Copilot.

View all MCP Connectors

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

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