Canvas LMS
MCP server for easy access to education data through your Canvas LMS instance.
Canvas LMS MCP Server
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
uvpackage 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
-
Clone the repository:
git clone https://github.com/yourusername/canvas-lms-mcp.git cd canvas-lms-mcp -
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 IDinclude(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 IDinclude(optional): List of additional data to includeper_page(optional, default=100): Number of items per page
get_module_items
Get items for a specific module.
Parameters:
course_id(required): Course IDmodule_id(required): Module ID
Assignments
list_assignments
List assignments for a course.
Parameters:
course_id(required): Course IDbucket(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 IDassignment_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 IDpage_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 IDinclude(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 IDspage(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 IDpage(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 IDdiscussion_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 formatend_date(optional): End date in ISO 8601 formatpage(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 formatend_date(required): End date in ISO 8601 formatcontext_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 IDinclude(optional): List of additional data to includepage(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 IDquiz_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 IDfolder_id(optional): Folder IDinclude(optional): List of additional data to includepage(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 IDfile_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.
Related Servers
MCP Sound Tool
A sound tool for MCP-compatible IDEs like Cursor. Plays sounds for events like completion, error, and notification.
HackMD
A Model Context Protocol server for integrating HackMD's note-taking platform with AI assistants.
Todoist
An unofficial server for managing Todoist tasks, allowing agents to create, list, and complete them.
YNAB
Access and manage your YNAB (You Need A Budget) data through MCP-enabled clients.
wlater-McpServer
Unofficial Google Keep MCP server - (Personal Accounts) AI powered access
MCP Video Converter Server
Convert video files between various formats using FFmpeg. Requires FFmpeg to be installed on the system.
Gezhe PPT
Generates PowerPoint presentations (PPTs) based on specified topics using the Gezhe API.
VAP media MCP
: MCP server for AI media generation (imagesflux, videosveo3.1, music suno v5, with deterministic cost control using reserve-burn-refund billing
Zotero MCP
Connect your Zotero research library with AI assistants. Supports local/web API access, PDF annotation extraction, and advanced search.
Rememberizer
Interact with Rememberizer's document and knowledge management API to search, retrieve, and manage documents.