1. Conduid
  2. Developer Tools
  3. Canvas LMS
MCP server · Developer Tools

Canvas LMS

Read-only MCP server for Canvas LMS: deadlines, announcements, and grades in Claude. Uses your browser session, so no admin token needed.

Unclaimed MIT last commit 8 months ago devtools
39Low

Scored 15 days ago · breakdown

About Canvas LMS

Canvas LMS is an MCP server published by ahnopologetic in the Developer Tools category: read-only MCP server for Canvas LMS: deadlines, announcements, and grades in Claude. Uses your browser session, so no admin token needed.

The repository has 7 stars and 6 forks, with the last commit 8 months ago. Six months or more without a commit doesn't mean the server is broken, but check the open issues before depending on it in production.

Install

Claude Code
claude mcp add canvas-lms-mcp -- npx -y @mtgibbs/canvas-lms-mcp
npx
npx -y @mtgibbs/canvas-lms-mcp

This server has no ConduID identity, so agent calls to it are not receipted. Pin the version you install and review the source before granting it credentials.

Ask AI

✦

Ask AI about Canvas LMS

Powered by Claude · Grounded in docs

I know everything about Canvas LMS. Ask me about installation, configuration, usage, or troubleshooting.

Security checks

Static checks derived from the repository 8 days ago. Heuristics on the source, not an audit.

  • ✓README presentThe repository ships documentation.
  • ✓License declaredUsable under a stated license.
  • !Tests presentNo tests found. Behaviour changes may go unnoticed between versions.
  • ✓Dependencies pinnedA lockfile pins dependency versions.
  • ✓No dynamic code executionSource scan found no eval, dynamic Function, or shell execution.
  • !Scoped permissionsDoesn't declare a permission scope. Assume it can do anything its process can.

Releases

v0.1.2v0.1.2 · 26 Sep 2025Full Changelog: https://github.com/ahnopologetic/canvas-lms-mcp/compare/v0.1.1...v0.1.2
v0.1.1v0.1.1 · 11 May 2025What's Changed Deployment: Dockerfile and Smithery config by @calclavia in https://github.com/ahnopologetic/canvas-lms-mcp/pull/1 New Contributors @calclavia made their first contribution in…
v0.1.0v0.1.0 · 24 Apr 2025Full Changelog: https://github.com/ahnopologetic/canvas-lms-mcp/commits/v0.1.0

README

Canvas LMS MCP Server

smithery badge A minimal Canvas LMS MCP (Machine Conversation Protocol) server for easy access to education data through your Canvas LMS instance. This server provides a bridge between AI systems (like Cursor) and Canvas Learning Management System.

Features

  • Courses: List enrolled courses, get course details, syllabus, modules, and module items
  • Assignments: List and get assignments with optional submission status
  • Pages: Get course pages by URL slug
  • Submissions: List your own submissions with grades and feedback
  • Announcements: List announcements across multiple courses
  • Discussions: List topics and view full discussion threads
  • Calendar: List calendar events with date filtering
  • Planner: List planner items (assignments, announcements, etc.)
  • Enrollments: Get enrollment data with grades
  • Quizzes: List and get quizzes (classic quizzes only)
  • Files: List and get files
  • Navigation: Get course tabs, assignment groups, and favorite courses

Installation

Installing via Smithery

To install Canvas LMS Server for Claude Desktop automatically via Smithery:

npx -y @smithery/cli install @ahnopologetic/canvas-lms-mcp --client claude

Prerequisites

  • Python 3.13+
  • Canvas LMS API token
  • uv package manager (recommended)

Installation Methods

Option 1: Install with uvx (Recommended)

The easiest way to install and run canvas-lms-mcp is using uvx:

uvx canvas-lms-mcp

This will run the server in an isolated environment without installing it permanently.

To install the tool permanently:

uv tool install canvas-lms-mcp

Option 2: Install from Source

  1. Clone the repository:

    git clone https://github.com/yourusername/canvas-lms-mcp.git
    cd canvas-lms-mcp
    
  2. Install with uv:

    # Install uv if you don't have it yet
    curl -LsSf https://astral.sh/uv/install.sh | sh
    
    # Create a virtual environment and install dependencies
    uv venv
    uv pip install -e .
    

    Alternatively, use traditional methods:

    python -m venv .venv
    source .venv/bin/activate  # On Windows: .venv\Scripts\activate
    pip install -e .
    

Configuration

Set the following environment variables:

export CANVAS_API_TOKEN="your_canvas_api_token"
export CANVAS_BASE_URL="https://your-institution.instructure.com"  # Default: https://canvas.instructure.com

You can get your Canvas API token from your Canvas account settings.

Running the Server

Start the server with uv:

uv run src/canvas_lms_mcp/main.py

If installed with uvx tool:

canvas-lms-mcp

By default, the server runs on http://localhost:8000. You can use the FastMCP interface at http://localhost:8000/docs to interact with the API.

Available Tools

The server provides 22 tools for interacting with Canvas LMS:

Courses

list_courses

List courses that the user is actively enrolled in.

Parameters:

  • page (optional, default=1): Page number (1-indexed)
  • items_per_page (optional, default=10): Number of items per page

get_course

Get a single course by ID.

Parameters:

  • course_id (required): Course ID
  • include (optional): List of additional data to include

get_course_syllabus

Get a course's syllabus body as HTML.

Parameters:

  • course_id (required): Course ID

get_course_modules

Get modules for a course.

Parameters:

  • course_id (required): Course ID
  • include (optional): List of additional data to include
  • per_page (optional, default=100): Number of items per page

get_module_items

Get items for a specific module.

Parameters:

  • course_id (required): Course ID
  • module_id (required): Module ID

Assignments

list_assignments

List assignments for a course.

Parameters:

  • course_id (required): Course ID
  • bucket (required): Filter by "past", "overdue", "undated", "ungraded", "unsubmitted", "upcoming", or "future"
  • order_by (required): Order by "due_at", "position", or "name"
  • include (optional): List of additional data to include (e.g., ["submission"] to see grade status)
  • page (optional, default=1): Page number (1-indexed)
  • items_per_page (optional, default=10): Number of items per page

get_assignment

Get a single assignment by ID.

Parameters:

  • course_id (required): Course ID
  • assignment_id (required): Assignment ID

list_assignment_groups

List assignment groups for a course (shows grade weighting/categories).

Parameters:

  • course_id (required): Course ID

Pages

get_page

Get a single page by its URL slug.

Parameters:

  • course_id (required): Course ID
  • page_slug (required): Page URL slug (e.g., "syllabus", "course-handbook")

Submissions

list_submissions

List the current user's submissions for a course, including grades and feedback.

Parameters:

  • course_id (required): Course ID
  • include (optional): List of additional data (e.g., ["assignment", "submission_comments"])
  • page (optional, default=1): Page number (1-indexed)
  • items_per_page (optional, default=10): Number of items per page

Announcements

list_announcements

List announcements for one or more courses.

Parameters:

  • course_ids (required): List of course IDs
  • page (optional, default=1): Page number (1-indexed)
  • items_per_page (optional, default=10): Number of items per page

Discussions

list_discussions

List discussion topics for a course.

Parameters:

  • course_id (required): Course ID
  • page (optional, default=1): Page number (1-indexed)
  • items_per_page (optional, default=10): Number of items per page

get_discussion_view

Get the full view of a discussion topic including all replies.

Parameters:

  • course_id (required): Course ID
  • discussion_id (required): Discussion topic ID

Calendar

list_calendar_events

List calendar events for courses.

Parameters:

  • context_codes (required): List of context codes (e.g., ["course_123"])
  • start_date (optional): Start date in ISO 8601 format
  • end_date (optional): End date in ISO 8601 format
  • page (optional, default=1): Page number (1-indexed)
  • items_per_page (optional, default=10): Number of items per page

Planner Items

list_planner_items

List planner items for the authenticated user.

Parameters:

  • start_date (required): Start date in ISO 8601 format
  • end_date (required): End date in ISO 8601 format
  • context_codes (optional): List of context codes (e.g., ["course_123"])
  • page (optional, default=1): Page number (1-indexed)
  • items_per_page (optional, default=10): Number of items per page

Enrollments

get_enrollments

Get the current user's enrollments including grades.

Quizzes

list_quizzes

List quizzes for a course. Note: only works with Classic Quizzes, not New Quizzes (quiz_lti).

Parameters:

  • course_id (required): Course ID
  • include (optional): List of additional data to include
  • page (optional, default=1): Page number (1-indexed)
  • items_per_page (optional, default=10): Number of items per page

get_quiz

Get a single quiz by ID.

Parameters:

  • course_id (required): Course ID
  • quiz_id (required): Quiz ID

Files

list_files

List files for a course or folder. Note: may return 403 for student accounts depending on institution permissions.

Parameters:

  • course_id (optional): Course ID
  • folder_id (optional): Folder ID
  • include (optional): List of additional data to include
  • page (optional, default=1): Page number (1-indexed)
  • items_per_page (optional, default=10): Number of items per page

get_file

Get a file by ID. Works with known file IDs even when list_files is restricted.

Parameters:

  • course_id (required): Course ID
  • file_id (required): File ID

Other

get_tabs

Get available tabs/navigation items for a course.

Parameters:

  • course_id (required): Course ID

list_favorites

List the current user's favorite courses.

Integration

This MCP server works with any client that supports the Model Context Protocol, including Claude Desktop, Claude Code, Cursor, Windsurf, and others.

The MCP configuration is the same across all clients — only the config file location differs:

{
    "mcpServers": {
        "canvas": {
            "command": "uvx",
            "args": ["canvas-lms-mcp"],
            "env": {
                "CANVAS_API_TOKEN": "your_canvas_api_token",
                "CANVAS_BASE_URL": "https://your-institution.instructure.com"
            }
        }
    }
}

Replace your_canvas_api_token with your Canvas API token (found in Canvas → Account → Settings → New Access Token) and your-institution.instructure.com with your institution's Canvas URL.

Claude Desktop

Add to your Claude Desktop config file:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Restart Claude Desktop after saving.

Claude Code

Add to your project's .mcp.json or global ~/.claude/settings.json:

{
    "mcpServers": {
        "canvas": {
            "command": "uvx",
            "args": ["canvas-lms-mcp"],
            "env": {
                "CANVAS_API_TOKEN": "your_canvas_api_token",
                "CANVAS_BASE_URL": "https://your-institution.instructure.com"
            }
        }
    }
}

Cursor

Add to .cursor/mcp.json in your project directory. Restart Cursor after saving.

Windsurf

Add to ~/.codeium/windsurf/mcp_config.json. Restart Windsurf after saving.

Usage Examples

Once connected, you can ask your AI assistant about your Canvas data:

  • "What assignments do I have due next week?"
  • "Show me the syllabus for my Biology course"
  • "What announcements were posted today?"
  • "What are my grades so far?"
  • "What's on my schedule for tomorrow?"
  • "Show me the discussion posts for my English class"

Development

For detailed development instructions, please see the DEVELOPMENT.md file.

License

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

README fetched from the repository 8 days ago. The original is authoritative.

Questions

About Canvas LMS

How do I install Canvas LMS?

Run claude mcp add canvas-lms-mcp -- npx -y @mtgibbs/canvas-lms-mcp, then add the server to your MCP client's configuration.

Is Canvas LMS safe to use with an AI agent?

Its trust score is 39 out of 100 (low). It passes 4 of the 6 static security checks run so far; the failures are listed above. It has no ConduID identity yet, so agent calls to it are not receipted.

Is Canvas LMS still maintained?

The last commit was 8 months ago. That's long enough that you should check whether the maintainer is responding to issues before depending on it.