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
- List planner items (assignments, quizzes, etc.)
- Get and list assignments
- Get and list quizzes
- Get and list courses
- Get course syllabus
- Get course modules
- List files
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 the following 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.
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 include
Assignments
list_assignments
List assignments for a course.
Parameters:
course_id(required): Course IDbucket(required): Filter assignments by ("past", "overdue", "undated", "ungraded", "unsubmitted", "upcoming", "future")order_by(required): Field to order assignments by ("due_at", "position", "name")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
Quizzes
list_quizzes
List quizzes for a course.
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.
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
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
Integration with Cursor
Cursor is an AI-powered IDE that can interact with the Canvas LMS MCP server to provide education data directly within your development environment.
Setting Up Cursor Integration
-
Install the Cursor IDE from https://cursor.sh/
-
Create a
.cursor/mcp.jsonfile in your project directory with the following content:{ "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_tokenwith your actual Canvas API tokenyour-institution.instructure.comwith your Canvas institution URL
-
Restart Cursor for the changes to take effect.
Cursor Time Integration (Optional)
You can also integrate a time server for timezone-related queries by adding a "time" server to your mcp.json:
"time": {
"command": "uvx",
"args": [
"mcp-server-time",
"--local-timezone=America/New_York"
]
}
This allows you to use time-related functions with your Canvas data.
Usage Examples
Once connected, you can ask Cursor AI about your Canvas data:
- "What assignments do I have due next week?"
- "Show me the syllabus for my Biology course"
- "List all my upcoming quizzes"
- "What's on my schedule for tomorrow?"
Example conversation:
YOU: What assignments do I have due soon?
CURSOR: I'll check your upcoming assignments.
Based on your Canvas data, here are your upcoming assignments:
- "Final Project" for CS101 due on December 10, 2023
- "Lab Report #5" for BIOL200 due on December 7, 2023
- "Research Paper" for ENGL301 due on December 15, 2023
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.
Metadata
Release files for iflow-mcp_ahnopologetic_canvas-lms-mcp 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| iflow_mcp_ahnopologetic_canvas_lms_mcp-0.1.2.tar.gz | 49.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| iflow_mcp_ahnopologetic_canvas_lms_mcp-0.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 60.9 kB
Release files / iflow_mcp_ahnopologetic_canvas_lms_mcp-0.1.2.tar.gz
| Download URL | iflow_mcp_ahnopologetic_canvas_lms_mcp-0.1.2.tar.gz |
|---|---|
| Size | 49.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2b99eab620b95569846b6056bfc47be6fd037c0b68edc748d13ab59c80a60c09
|
|
BLAKE2b-256 checksum How to use checksums |
85783c309f753227d6374f30044ebd7ad9e771ec5d80775d97d0e0376e7ae5b6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.27 {"installer":{"name":"uv","version":"0.9.27","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / iflow_mcp_ahnopologetic_canvas_lms_mcp-0.1.2-py3-none-any.whl
| Download URL | iflow_mcp_ahnopologetic_canvas_lms_mcp-0.1.2-py3-none-any.whl |
|---|---|
| Size | 11.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8b0ee564b8f6c329ccacf5b93cb485c98140f7e3ba4f11ba4df80faf77d5986b
|
|
BLAKE2b-256 checksum How to use checksums |
b564230ffd27f0febeb392de9c5c7d44083d13fc45111019ab730e9eb347cfdd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.27 {"installer":{"name":"uv","version":"0.9.27","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|