by ahnopologetic
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.
To install Canvas LMS Server for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install @ahnopologetic/canvas-lms-mcp --client claude
uv
package manager (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
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 .
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.
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.
The server provides the following tools for interacting with Canvas LMS:
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 pageget_course
Get a single course by ID.
Parameters:
course_id
(required): Course IDinclude
(optional): List of additional data to includeget_course_syllabus
Get a course's syllabus.
Parameters:
course_id
(required): Course IDget_course_modules
Get modules for a course.
Parameters:
course_id
(required): Course IDinclude
(optional): List of additional data to includelist_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 pageget_assignment
Get a single assignment by ID.
Parameters:
course_id
(required): Course IDassignment_id
(required): Assignment IDlist_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 pageget_quiz
Get a single quiz by ID.
Parameters:
course_id
(required): Course IDquiz_id
(required): Quiz IDlist_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 pagelist_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 pageCursor is an AI-powered IDE that can interact with the Canvas LMS MCP server to provide education data directly within your development environment.
Install the Cursor IDE from https://cursor.sh/
Create a .cursor/mcp.json
file in your project directory with the following content:
*Configuration content*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:
## Development
For detailed development instructions, please see the [DEVELOPMENT.md](DEVELOPMENT.md) file.
## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
2 contributors