Canvas MCP Server
# Canvas MCP Server
This repository contains a Message Control Protocol (MCP) server implementation for interacting with the Canvas Learning Management System API. The server is designed to work with Claude Desktop and potentially other MCP clients.
## Overview
The Canvas MCP Server provides a local interface to Canvas LMS API, allowing you to:
- List and manage courses
- Access assignments and submissions
- View announcements
- Retrieve course syllabi and modules
- Manage users and enrollments
- Generate course summaries
## Prerequisites
- Python 3.x
- Virtual environment (venv)
- Canvas API Token
- Canvas API URL (e.g., https://canvas.illinois.edu/api/v1)
## Installation
1. Clone this repository:
```bash
git clone https://github.com/vishalsachdev/canvas-mcp.git
cd canvas-mcp
```
2. Create and activate a virtual environment:
```bash
python -m venv canvas-mcp
source canvas-mcp/bin/activate # On Unix/macOS
```
3. Install dependencies:
```bash
pip install -r requirements.txt
```
## Configuration
### 1. Create Environment File
Create a `.env` file in the root directory with the following variables:
```
CANVAS_API_TOKEN=your_canvas_api_token_here
CANVAS_API_URL=https://canvas.youruniversity.edu/api/v1
```
Replace the values with:
- Your Canvas API Token ([How to get your Canvas API token](https://community.canvaslms.com/t5/Canvas-Basics-Guide/How-do-I-manage-API-access-tokens-in-my-user-account/ta-p/615312))
- Your university's Canvas API URL
### 2. Configure Start Script
The `start_canvas_server.sh` script is already configured to:
- Load environment variables from the `.env` file
- Activate the virtual environment
- Run the cached server implementation
Make the start script executable:
```bash
chmod +x start_canvas_server.sh
```
### 3. Claude Desktop Configuration
1. Install [Claude Desktop](https://claude.ai/download) if you haven't already.
2. Create or edit the Claude Desktop configuration file:
```bash
vim ~/Library/Application\ Support/Claude/claude_desktop_config.json
```
3. Add the Canvas MCP server configuration:
```json
{
"mcpServers": [
{
"name": "canvas-api",
"command": "/Users/YOUR_USERNAME/path/to/canvas-mcp/start_canvas_server.sh"
}
]
}
```
Replace `/Users/YOUR_USERNAME/path/to/canvas-mcp` with the absolute path to where you cloned this repository.
4. Restart Claude Desktop to load the new configuration.
## Available Tools
The server provides the following tools for Canvas LMS interaction:
### Course Management
- `list_courses`: List all courses for the authenticated user
- `get_course_details`: Get detailed information about a specific course
- `summarize_course`: Generate a comprehensive summary of a course
### Assignments
- `list_assignments`: List all assignments for a course
- `get_assignment_details`: Get detailed information about a specific assignment
- `get_assignment_description`: Get the full description of an assignment
### Submissions
- `list_submissions`: List all submissions for a specific assignment
### Users
- `list_users`: List all users enrolled in a course
### Resources
- `list_announcements`: List all announcements for a course
- `get_course_syllabus`: Get the syllabus for a course
- `get_course_modules`: Get all modules for a course
## Usage with Claude Desktop
This MCP server is designed to work seamlessly with Claude Desktop:
1. Claude Desktop will automatically start the server when needed
2. You'll see the Canvas API tools in the Claude Desktop interface (hammer icon 🔨)
3. You can ask Claude to perform Canvas operations like "Show me my courses" or "Get the syllabus for my Biology course"
For manual testing, you can start the server directly:
```bash
./start_canvas_server.sh
```
## Technical Details
### Server Implementation
The server uses:
- `fastmcp`: A Python library for building MCP servers
- `httpx`: For asynchronous HTTP requests to the Canvas API
- Caching mechanisms to improve performance for course lookups
The main implementation file is `canvas_server_cached.py`, which provides:
- Efficient caching of course information
- Pagination handling for Canvas API requests
- Error handling and reporting
- Support for both course IDs and course codes
### Dependencies
The server requires the following Python packages:
- `httpx`: For HTTP requests
- `fastmcp`: For MCP server implementation
- `requests`: For some HTTP operations
- Other standard libraries for encoding and networking
## Troubleshooting
If you encounter issues:
1. **Server Won't Start**
- Check that your `.env` file exists and contains valid credentials
- Verify the virtual environment path in `start_canvas_server.sh`
- Ensure all dependencies are installed
2. **Authentication Errors**
- Verify your Canvas API token is valid and not expired
- Check that you have the necessary permissions in Canvas
3. **Connection Issues**
- Ensure your Canvas API URL is correct
- Check your internet connection
- Verify your institution hasn't restricted API access
4. **Debugging**
- Check the server logs in the Claude Desktop console
- Try running the server manually to see error output
## Security Considerations
- Your Canvas API token grants access to your Canvas account
- Never commit your `.env` file to version control
- Consider using a token with limited permissions if possible
- The server runs locally on your machine and doesn't expose your credentials externally
## 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
## License
This project is available for use under standard open-source terms.
---
Created by [Vishal Sachdev](https://github.com/vishalsachdev)