| Name | canvas-mcp JSON |
| Version |
1.0.2
JSON |
| download |
| home_page | None |
| Summary | A Model Context Protocol server for Canvas LMS integration |
| upload_time | 2025-10-10 20:54:29 |
| maintainer | None |
| docs_url | None |
| author | None |
| requires_python | >=3.10 |
| license | MIT License
Copyright (c) 2025 Vishal Sachdev
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE. |
| keywords |
api
canvas
claude
education
lms
mcp
|
| VCS |
 |
| bugtrack_url |
|
| requirements |
No requirements were recorded.
|
| Travis-CI |
No Travis.
|
| coveralls test coverage |
No coveralls.
|
# Canvas MCP Server
<!--mcp-name: io.github.vishalsachdev/canvas-mcp-->
[](https://opensource.org/licenses/MIT)
This repository contains a Model Context Protocol (MCP) server implementation for interacting with the Canvas Learning Management System API. The server is designed to work with Claude Desktop and other MCP-compatible clients.
> **Note**: Recently refactored to a modular architecture for better maintainability. The legacy monolithic implementation has been archived.
## Overview
The Canvas MCP Server bridges the gap between Claude Desktop and Canvas Learning Management System, providing **both students and educators** with an intelligent interface to their Canvas environment. Built on the Model Context Protocol (MCP), it enables natural language interactions with Canvas data.
### For Students 👨🎓
Get AI-powered assistance with:
- Tracking upcoming assignments and deadlines
- Monitoring your grades across all courses
- Managing peer review assignments
- Accessing course content and discussions
- Organizing your TODO list
**[→ Get Started as a Student](https://github.com/vishalsachdev/canvas-mcp/blob/main/docs/STUDENT_GUIDE.md)**
### For Educators 👨🏫
Enhance your teaching with:
- Assignment and grading management
- Student analytics and performance tracking
- Discussion and peer review facilitation
- **FERPA-compliant** student data handling
- Bulk messaging and communication tools
**[→ Get Started as an Educator](https://github.com/vishalsachdev/canvas-mcp/blob/main/docs/EDUCATOR_GUIDE.md)**
## 🔒 Privacy & Data Protection
### For Educators: FERPA Compliance
Complete FERPA compliance through systematic data anonymization when working with student data:
- **Source-level data anonymization** converts real names to consistent anonymous IDs (Student_xxxxxxxx)
- **Automatic email masking** and PII filtering from discussion posts and submissions
- **Local-only processing** with configurable privacy controls (`ENABLE_DATA_ANONYMIZATION=true`)
- **FERPA-compliant analytics**: Ask "Which students need support?" without exposing real identities
- **De-anonymization mapping tool** for faculty to correlate anonymous IDs with real students locally
All student data is anonymized **before** it reaches AI systems. See [Educator Guide](https://github.com/vishalsachdev/canvas-mcp/blob/main/docs/EDUCATOR_GUIDE.md) for configuration details.
### For Students: Your Data Stays Private
- **Your data only**: Student tools access only your own Canvas data via Canvas API's "self" endpoints
- **Local processing**: Everything runs on your machine - no data sent to external servers
- **No tracking**: Your Canvas usage and AI interactions remain private
- **No anonymization needed**: Since you're only accessing your own data, there are no privacy concerns
## Prerequisites
- **Python 3.10+** - Required for modern features and type hints
- **Canvas API Access** - API token and institution URL
- **MCP Client** - Claude Desktop (recommended) or other MCP-compatible client
### Supported MCP Clients
Canvas MCP works with any application that supports the Model Context Protocol. Popular options include:
**Recommended:**
- **[Claude Desktop](https://claude.ai/download)** - Official Anthropic desktop app with full MCP support
**AI Coding Assistants:**
- **[Zed](https://zed.dev)** - High-performance code editor with built-in MCP support
- **[Cursor](https://cursor.sh)** - AI-first code editor
- **[Windsurf IDE](https://codeium.com/windsurf)** (by Codeium) - AI-powered development environment
- **[Continue](https://continue.dev)** - Open-source AI code assistant
**Development Platforms:**
- **[Replit](https://replit.com)** - Cloud-based coding platform with MCP integration
- **[Sourcegraph Cody](https://sourcegraph.com/cody)** - AI coding assistant with MCP support
**Enterprise:**
- **[Microsoft Copilot Studio](https://www.microsoft.com/microsoft-copilot/microsoft-copilot-studio)** - MCP support in enterprise environments
See the [official MCP clients list](https://modelcontextprotocol.io/clients) for more options.
> **Note**: While Canvas MCP is designed to work with any MCP client, setup instructions in this guide focus on Claude Desktop. Configuration for other clients may vary.
## Quick Start (Automated Installation)
The fastest way to get started is with our automated installer:
```bash
# Clone the repository
git clone https://github.com/vishalsachdev/canvas-mcp.git
cd canvas-mcp
# Run the automated installer
python scripts/install.py
```
The installer will:
- ✅ Set up Python environment with `uv` package manager
- ✅ Install all dependencies automatically
- ✅ Create environment configuration template
- ✅ Configure Claude Desktop integration
- ✅ Test the installation
## Manual Installation
If you prefer manual setup:
### 1. Install Dependencies
```bash
# Install uv package manager (faster than pip)
pip install uv
# Install the package
uv pip install -e .
```
### 2. Configure Environment
```bash
# Copy environment template
cp env.template .env
# Edit with your Canvas credentials
# Required: CANVAS_API_TOKEN, CANVAS_API_URL
```
Get your Canvas API token from: **Canvas → Account → Settings → New Access Token**
### 3. Claude Desktop Setup
Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:
```json
{
"mcpServers": {
"canvas-api": {
"command": "canvas-mcp-server"
}
}
}
```
## Verification
Test your setup:
```bash
# Test Canvas API connection
canvas-mcp-server --test
# View configuration
canvas-mcp-server --config
# Start server (for manual testing)
canvas-mcp-server
```
## Available Tools
The Canvas MCP Server provides a comprehensive set of tools for interacting with the Canvas LMS API. These tools are organized into logical categories for better discoverability and maintainability.
### Tool Categories
**Student Tools** (New!)
- Personal assignment tracking and deadline management
- Grade monitoring across all courses
- TODO list and peer review management
- Submission status tracking
**Shared Tools** (Both Students & Educators)
1. **Course Tools** - List and manage courses, get detailed information, generate summaries with syllabus content
2. **Discussion & Announcement Tools** - Manage discussions, announcements, and replies
3. **Page & Content Tools** - Access pages, modules, and course content
**Educator Tools**
4. **Assignment Tools** - Handle assignments, submissions, and peer reviews with analytics
5. **Rubric Tools** - Full CRUD operations for rubrics with validation, association management, and grading
6. **User & Enrollment Tools** - Manage enrollments, users, and groups
7. **Analytics Tools** - View student analytics, assignment statistics, and progress tracking
8. **Messaging Tools** - Send messages and announcements to students
📖 [View Full Tool Documentation](tools/README.md) for detailed information about all available tools.
## Usage with MCP Clients
This MCP server works seamlessly with any MCP-compatible client:
1. **Automatic Startup**: MCP clients start the server when needed
2. **Tool Integration**: Canvas tools appear in your AI assistant's interface
3. **Natural Language**: Interact naturally with prompts like:
**Students:**
- *"What assignments do I have due this week?"*
- *"Show me my current grades"*
- *"What peer reviews do I need to complete?"*
- *"Have I submitted everything for BADM 350?"*
**Educators:**
- *"Which students haven't submitted the latest assignment?"*
- *"Create an announcement about tomorrow's exam"*
- *"Show me peer review completion analytics"*
## Project Structure
Modern Python package structure following 2025 best practices:
```
canvas-mcp/
├── pyproject.toml # Modern Python project config
├── env.template # Environment configuration template
├── src/
│ └── canvas_mcp/ # Main package
│ ├── __init__.py # Package initialization
│ ├── server.py # Main server entry point
│ ├── core/ # Core utilities
│ │ ├── config.py # Configuration management
│ │ ├── client.py # HTTP client
│ │ ├── cache.py # Caching system
│ │ └── validation.py # Input validation
│ ├── tools/ # MCP tool implementations
│ │ ├── courses.py # Course management
│ │ ├── assignments.py # Assignment tools
│ │ ├── discussions.py # Discussion tools
│ │ ├── rubrics.py # Rubric tools
│ │ └── other_tools.py # Misc tools
│ └── resources/ # MCP resources
├── scripts/
│ └── install.py # Automated installation
└── docs/ # Documentation
```
## Documentation
- **[Tool Documentation](https://github.com/vishalsachdev/canvas-mcp/blob/main/tools/README.md)** - Complete reference for all available tools
- **[Pages Implementation Guide](https://github.com/vishalsachdev/canvas-mcp/blob/main/docs/PAGES_IMPLEMENTATION.md)** - Comprehensive Pages feature guide
- **[Course Documentation Template](https://github.com/vishalsachdev/canvas-mcp/blob/main/docs/course_documentation_prompt_template.md)** - Hybrid approach for efficient course documentation
- **[Development Guide](https://github.com/vishalsachdev/canvas-mcp/blob/main/docs/CLAUDE.md)** - Architecture details and development reference
## Technical Details
### Modern Architecture (2025)
Built with current Python ecosystem best practices:
- **Package Structure**: Modern `src/` layout with `pyproject.toml`
- **Dependency Management**: Fast `uv` package manager with locked dependencies
- **Configuration**: Environment-based config with validation and templates
- **Entry Points**: Proper CLI commands via `pyproject.toml` scripts
- **Type Safety**: Full type hints and runtime validation
### Core Components
- **FastMCP Framework**: Robust MCP server implementation with tool registration
- **Async Architecture**: `httpx` client with connection pooling and rate limiting
- **Smart Caching**: Intelligent request caching with configurable TTL
- **Configuration System**: Environment-based config with validation and defaults
- **Educational Focus**: Tools designed for real teaching workflows
### Dependencies
Modern Python packages (see `pyproject.toml`):
- **`fastmcp`**: MCP server framework
- **`httpx`**: Async HTTP client
- **`python-dotenv`**: Environment configuration
- **`pydantic`**: Data validation and settings
- **`python-dateutil`**: Date/time handling
### Performance Features
- **Connection Pooling**: Reuse HTTP connections for efficiency
- **Request Caching**: Minimize redundant Canvas API calls
- **Async Operations**: Non-blocking I/O for concurrent requests
- **Smart Pagination**: Automatic handling of Canvas API pagination
- **Rate Limiting**: Respect Canvas API limits with backoff
### Development Tools
- **Automated Setup**: One-command installation script
- **Configuration Testing**: Built-in connection and config testing
- **Type Checking**: `mypy` support for type safety
- **Code Quality**: `ruff` and `black` for formatting and linting
For contributors, see the [Development Guide](https://github.com/vishalsachdev/canvas-mcp/blob/main/docs/CLAUDE.md) for detailed architecture and development reference.
## Troubleshooting
If you encounter issues:
1. **Server Won't Start** - Verify your [Configuration](#configuration) setup: `.env` file, virtual environment path, and dependencies
2. **Authentication Errors** - Check your Canvas API token validity and permissions
3. **Connection Issues** - Verify Canvas API URL correctness and network access
4. **Debugging** - Check Claude Desktop console logs or run server manually for error output
## Security & Privacy Features
### API Security
- Your Canvas API token grants access to your Canvas account
- Never commit your `.env` file to version control
- The server runs locally on your machine - no external data transmission
- Consider using a token with limited permissions if possible
### Privacy Controls (Educators Only)
Educators working with student data can enable FERPA-compliant anonymization:
```bash
# In your .env file
ENABLE_DATA_ANONYMIZATION=true # Anonymizes student names/emails before AI processing
ANONYMIZATION_DEBUG=true # Debug anonymization (optional)
```
Students don't need anonymization since they only access their own data.
For detailed privacy configuration, see:
- **[Educator Guide](https://github.com/vishalsachdev/canvas-mcp/blob/main/docs/EDUCATOR_GUIDE.md)** - FERPA compliance and anonymization
- **[Student Guide](https://github.com/vishalsachdev/canvas-mcp/blob/main/docs/STUDENT_GUIDE.md)** - Privacy information for students
## Publishing to MCP Registry
This server is published to the [Model Context Protocol Registry](https://registry.modelcontextprotocol.io/) for easy installation.
### Automated Publishing (Recommended)
Publishing is automated via GitHub Actions:
1. **Prepare a release**:
```bash
# Update version in pyproject.toml
# Update CHANGELOG if applicable
git commit -am "chore: bump version to X.Y.Z"
git push
```
2. **Create and push a version tag**:
```bash
git tag vX.Y.Z
git push origin vX.Y.Z
```
3. **Automated workflow**:
- Runs tests
- Builds Python package
- Publishes to PyPI
- Publishes to MCP Registry using GitHub OIDC
### Prerequisites for Publishing
- **PyPI Account**: Create account at [pypi.org](https://pypi.org)
- **Trusted Publisher Setup** (recommended, no tokens needed):
1. Visit [PyPI Trusted Publishers](https://pypi.org/manage/account/publishing/)
2. Add a "pending publisher" for your repository:
- **Owner**: `vishalsachdev`
- **Repository**: `canvas-mcp`
- **Workflow**: `publish-mcp.yml`
- **Environment**: (leave blank)
3. This reserves the package name and enables tokenless publishing
**Alternative**: Use API token (legacy method - not recommended):
- Generate token at PyPI → Account Settings → API tokens
- Add as `PYPI_API_TOKEN` secret in repository settings
- Update workflow to use `password: ${{ secrets.PYPI_API_TOKEN }}`
### Manual Publishing (Alternative)
For manual publishing:
```bash
# Install MCP Publisher
curl -fsSL https://modelcontextprotocol.io/install.sh | sh
# Login using GitHub
mcp-publisher login github
# Publish server
mcp-publisher publish
```
### Registry Validation
The `server.json` configuration is automatically validated against the MCP schema during CI/CD. To validate locally:
```bash
# Download schema
curl -s https://registry.modelcontextprotocol.io/v0/server.schema.json -o /tmp/mcp-schema.json
# Validate (requires jsonschema CLI)
pip install jsonschema
jsonschema -i server.json /tmp/mcp-schema.json
```
## 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 licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
---
Created by [Vishal Sachdev](https://github.com/vishalsachdev)
Raw data
{
"_id": null,
"home_page": null,
"name": "canvas-mcp",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": null,
"keywords": "api, canvas, claude, education, lms, mcp",
"author": null,
"author_email": "Vishal Sachdev <vishal@example.com>",
"download_url": "https://files.pythonhosted.org/packages/5a/5f/9eae66f31ebfee96db53d31fe0fa5c214d948a51616ef966653e1ca2d744/canvas_mcp-1.0.2.tar.gz",
"platform": null,
"description": "# Canvas MCP Server\n\n<!--mcp-name: io.github.vishalsachdev/canvas-mcp-->\n\n[](https://opensource.org/licenses/MIT)\n\nThis repository contains a Model Context Protocol (MCP) server implementation for interacting with the Canvas Learning Management System API. The server is designed to work with Claude Desktop and other MCP-compatible clients.\n\n> **Note**: Recently refactored to a modular architecture for better maintainability. The legacy monolithic implementation has been archived.\n\n## Overview\n\nThe Canvas MCP Server bridges the gap between Claude Desktop and Canvas Learning Management System, providing **both students and educators** with an intelligent interface to their Canvas environment. Built on the Model Context Protocol (MCP), it enables natural language interactions with Canvas data.\n\n### For Students \ud83d\udc68\u200d\ud83c\udf93\nGet AI-powered assistance with:\n- Tracking upcoming assignments and deadlines\n- Monitoring your grades across all courses\n- Managing peer review assignments\n- Accessing course content and discussions\n- Organizing your TODO list\n\n**[\u2192 Get Started as a Student](https://github.com/vishalsachdev/canvas-mcp/blob/main/docs/STUDENT_GUIDE.md)**\n\n### For Educators \ud83d\udc68\u200d\ud83c\udfeb\nEnhance your teaching with:\n- Assignment and grading management\n- Student analytics and performance tracking\n- Discussion and peer review facilitation\n- **FERPA-compliant** student data handling\n- Bulk messaging and communication tools\n\n**[\u2192 Get Started as an Educator](https://github.com/vishalsachdev/canvas-mcp/blob/main/docs/EDUCATOR_GUIDE.md)**\n\n## \ud83d\udd12 Privacy & Data Protection\n\n### For Educators: FERPA Compliance\n\nComplete FERPA compliance through systematic data anonymization when working with student data:\n\n- **Source-level data anonymization** converts real names to consistent anonymous IDs (Student_xxxxxxxx)\n- **Automatic email masking** and PII filtering from discussion posts and submissions\n- **Local-only processing** with configurable privacy controls (`ENABLE_DATA_ANONYMIZATION=true`)\n- **FERPA-compliant analytics**: Ask \"Which students need support?\" without exposing real identities\n- **De-anonymization mapping tool** for faculty to correlate anonymous IDs with real students locally\n\nAll student data is anonymized **before** it reaches AI systems. See [Educator Guide](https://github.com/vishalsachdev/canvas-mcp/blob/main/docs/EDUCATOR_GUIDE.md) for configuration details.\n\n### For Students: Your Data Stays Private\n\n- **Your data only**: Student tools access only your own Canvas data via Canvas API's \"self\" endpoints\n- **Local processing**: Everything runs on your machine - no data sent to external servers\n- **No tracking**: Your Canvas usage and AI interactions remain private\n- **No anonymization needed**: Since you're only accessing your own data, there are no privacy concerns\n\n## Prerequisites\n\n- **Python 3.10+** - Required for modern features and type hints\n- **Canvas API Access** - API token and institution URL\n- **MCP Client** - Claude Desktop (recommended) or other MCP-compatible client\n\n### Supported MCP Clients\n\nCanvas MCP works with any application that supports the Model Context Protocol. Popular options include:\n\n**Recommended:**\n- **[Claude Desktop](https://claude.ai/download)** - Official Anthropic desktop app with full MCP support\n\n**AI Coding Assistants:**\n- **[Zed](https://zed.dev)** - High-performance code editor with built-in MCP support\n- **[Cursor](https://cursor.sh)** - AI-first code editor\n- **[Windsurf IDE](https://codeium.com/windsurf)** (by Codeium) - AI-powered development environment\n- **[Continue](https://continue.dev)** - Open-source AI code assistant\n\n**Development Platforms:**\n- **[Replit](https://replit.com)** - Cloud-based coding platform with MCP integration\n- **[Sourcegraph Cody](https://sourcegraph.com/cody)** - AI coding assistant with MCP support\n\n**Enterprise:**\n- **[Microsoft Copilot Studio](https://www.microsoft.com/microsoft-copilot/microsoft-copilot-studio)** - MCP support in enterprise environments\n\nSee the [official MCP clients list](https://modelcontextprotocol.io/clients) for more options.\n\n> **Note**: While Canvas MCP is designed to work with any MCP client, setup instructions in this guide focus on Claude Desktop. Configuration for other clients may vary.\n\n## Quick Start (Automated Installation)\n\nThe fastest way to get started is with our automated installer:\n\n```bash\n# Clone the repository\ngit clone https://github.com/vishalsachdev/canvas-mcp.git\ncd canvas-mcp\n\n# Run the automated installer\npython scripts/install.py\n```\n\nThe installer will:\n- \u2705 Set up Python environment with `uv` package manager\n- \u2705 Install all dependencies automatically \n- \u2705 Create environment configuration template\n- \u2705 Configure Claude Desktop integration\n- \u2705 Test the installation\n\n## Manual Installation\n\nIf you prefer manual setup:\n\n### 1. Install Dependencies\n\n```bash\n# Install uv package manager (faster than pip)\npip install uv\n\n# Install the package\nuv pip install -e .\n```\n\n### 2. Configure Environment\n\n```bash\n# Copy environment template\ncp env.template .env\n\n# Edit with your Canvas credentials\n# Required: CANVAS_API_TOKEN, CANVAS_API_URL\n```\n\nGet your Canvas API token from: **Canvas \u2192 Account \u2192 Settings \u2192 New Access Token**\n\n### 3. Claude Desktop Setup\n\nAdd to `~/Library/Application Support/Claude/claude_desktop_config.json`:\n\n```json\n{\n \"mcpServers\": {\n \"canvas-api\": {\n \"command\": \"canvas-mcp-server\"\n }\n }\n}\n```\n\n## Verification\n\nTest your setup:\n\n```bash\n# Test Canvas API connection\ncanvas-mcp-server --test\n\n# View configuration\ncanvas-mcp-server --config\n\n# Start server (for manual testing)\ncanvas-mcp-server\n```\n\n## Available Tools\n\nThe Canvas MCP Server provides a comprehensive set of tools for interacting with the Canvas LMS API. These tools are organized into logical categories for better discoverability and maintainability.\n\n### Tool Categories\n\n**Student Tools** (New!)\n- Personal assignment tracking and deadline management\n- Grade monitoring across all courses\n- TODO list and peer review management\n- Submission status tracking\n\n**Shared Tools** (Both Students & Educators)\n1. **Course Tools** - List and manage courses, get detailed information, generate summaries with syllabus content\n2. **Discussion & Announcement Tools** - Manage discussions, announcements, and replies\n3. **Page & Content Tools** - Access pages, modules, and course content\n\n**Educator Tools**\n4. **Assignment Tools** - Handle assignments, submissions, and peer reviews with analytics\n5. **Rubric Tools** - Full CRUD operations for rubrics with validation, association management, and grading\n6. **User & Enrollment Tools** - Manage enrollments, users, and groups\n7. **Analytics Tools** - View student analytics, assignment statistics, and progress tracking\n8. **Messaging Tools** - Send messages and announcements to students\n\n\ud83d\udcd6 [View Full Tool Documentation](tools/README.md) for detailed information about all available tools.\n\n## Usage with MCP Clients\n\nThis MCP server works seamlessly with any MCP-compatible client:\n\n1. **Automatic Startup**: MCP clients start the server when needed\n2. **Tool Integration**: Canvas tools appear in your AI assistant's interface\n3. **Natural Language**: Interact naturally with prompts like:\n\n**Students:**\n- *\"What assignments do I have due this week?\"*\n- *\"Show me my current grades\"*\n- *\"What peer reviews do I need to complete?\"*\n- *\"Have I submitted everything for BADM 350?\"*\n\n**Educators:**\n- *\"Which students haven't submitted the latest assignment?\"*\n- *\"Create an announcement about tomorrow's exam\"*\n- *\"Show me peer review completion analytics\"*\n\n## Project Structure\n\nModern Python package structure following 2025 best practices:\n\n```\ncanvas-mcp/\n\u251c\u2500\u2500 pyproject.toml # Modern Python project config\n\u251c\u2500\u2500 env.template # Environment configuration template\n\u251c\u2500\u2500 src/\n\u2502 \u2514\u2500\u2500 canvas_mcp/ # Main package\n\u2502 \u251c\u2500\u2500 __init__.py # Package initialization\n\u2502 \u251c\u2500\u2500 server.py # Main server entry point\n\u2502 \u251c\u2500\u2500 core/ # Core utilities\n\u2502 \u2502 \u251c\u2500\u2500 config.py # Configuration management\n\u2502 \u2502 \u251c\u2500\u2500 client.py # HTTP client\n\u2502 \u2502 \u251c\u2500\u2500 cache.py # Caching system\n\u2502 \u2502 \u2514\u2500\u2500 validation.py # Input validation\n\u2502 \u251c\u2500\u2500 tools/ # MCP tool implementations\n\u2502 \u2502 \u251c\u2500\u2500 courses.py # Course management\n\u2502 \u2502 \u251c\u2500\u2500 assignments.py # Assignment tools\n\u2502 \u2502 \u251c\u2500\u2500 discussions.py # Discussion tools\n\u2502 \u2502 \u251c\u2500\u2500 rubrics.py # Rubric tools\n\u2502 \u2502 \u2514\u2500\u2500 other_tools.py # Misc tools\n\u2502 \u2514\u2500\u2500 resources/ # MCP resources\n\u251c\u2500\u2500 scripts/\n\u2502 \u2514\u2500\u2500 install.py # Automated installation\n\u2514\u2500\u2500 docs/ # Documentation\n```\n\n## Documentation\n\n- **[Tool Documentation](https://github.com/vishalsachdev/canvas-mcp/blob/main/tools/README.md)** - Complete reference for all available tools\n- **[Pages Implementation Guide](https://github.com/vishalsachdev/canvas-mcp/blob/main/docs/PAGES_IMPLEMENTATION.md)** - Comprehensive Pages feature guide\n- **[Course Documentation Template](https://github.com/vishalsachdev/canvas-mcp/blob/main/docs/course_documentation_prompt_template.md)** - Hybrid approach for efficient course documentation\n- **[Development Guide](https://github.com/vishalsachdev/canvas-mcp/blob/main/docs/CLAUDE.md)** - Architecture details and development reference\n## Technical Details\n\n### Modern Architecture (2025)\n\nBuilt with current Python ecosystem best practices:\n\n- **Package Structure**: Modern `src/` layout with `pyproject.toml`\n- **Dependency Management**: Fast `uv` package manager with locked dependencies\n- **Configuration**: Environment-based config with validation and templates\n- **Entry Points**: Proper CLI commands via `pyproject.toml` scripts\n- **Type Safety**: Full type hints and runtime validation\n\n### Core Components\n\n- **FastMCP Framework**: Robust MCP server implementation with tool registration\n- **Async Architecture**: `httpx` client with connection pooling and rate limiting\n- **Smart Caching**: Intelligent request caching with configurable TTL\n- **Configuration System**: Environment-based config with validation and defaults\n- **Educational Focus**: Tools designed for real teaching workflows\n\n### Dependencies\n\nModern Python packages (see `pyproject.toml`):\n- **`fastmcp`**: MCP server framework\n- **`httpx`**: Async HTTP client\n- **`python-dotenv`**: Environment configuration\n- **`pydantic`**: Data validation and settings\n- **`python-dateutil`**: Date/time handling\n\n### Performance Features\n\n- **Connection Pooling**: Reuse HTTP connections for efficiency\n- **Request Caching**: Minimize redundant Canvas API calls\n- **Async Operations**: Non-blocking I/O for concurrent requests\n- **Smart Pagination**: Automatic handling of Canvas API pagination\n- **Rate Limiting**: Respect Canvas API limits with backoff\n\n### Development Tools\n\n- **Automated Setup**: One-command installation script\n- **Configuration Testing**: Built-in connection and config testing\n- **Type Checking**: `mypy` support for type safety\n- **Code Quality**: `ruff` and `black` for formatting and linting\n\nFor contributors, see the [Development Guide](https://github.com/vishalsachdev/canvas-mcp/blob/main/docs/CLAUDE.md) for detailed architecture and development reference.\n\n## Troubleshooting\n\nIf you encounter issues:\n\n1. **Server Won't Start** - Verify your [Configuration](#configuration) setup: `.env` file, virtual environment path, and dependencies\n2. **Authentication Errors** - Check your Canvas API token validity and permissions\n3. **Connection Issues** - Verify Canvas API URL correctness and network access\n4. **Debugging** - Check Claude Desktop console logs or run server manually for error output\n\n## Security & Privacy Features\n\n### API Security\n- Your Canvas API token grants access to your Canvas account\n- Never commit your `.env` file to version control\n- The server runs locally on your machine - no external data transmission\n- Consider using a token with limited permissions if possible\n\n### Privacy Controls (Educators Only)\n\nEducators working with student data can enable FERPA-compliant anonymization:\n\n```bash\n# In your .env file\nENABLE_DATA_ANONYMIZATION=true # Anonymizes student names/emails before AI processing\nANONYMIZATION_DEBUG=true # Debug anonymization (optional)\n```\n\nStudents don't need anonymization since they only access their own data.\n\nFor detailed privacy configuration, see:\n- **[Educator Guide](https://github.com/vishalsachdev/canvas-mcp/blob/main/docs/EDUCATOR_GUIDE.md)** - FERPA compliance and anonymization\n- **[Student Guide](https://github.com/vishalsachdev/canvas-mcp/blob/main/docs/STUDENT_GUIDE.md)** - Privacy information for students\n\n## Publishing to MCP Registry\n\nThis server is published to the [Model Context Protocol Registry](https://registry.modelcontextprotocol.io/) for easy installation.\n\n### Automated Publishing (Recommended)\n\nPublishing is automated via GitHub Actions:\n\n1. **Prepare a release**:\n ```bash\n # Update version in pyproject.toml\n # Update CHANGELOG if applicable\n git commit -am \"chore: bump version to X.Y.Z\"\n git push\n ```\n\n2. **Create and push a version tag**:\n ```bash\n git tag vX.Y.Z\n git push origin vX.Y.Z\n ```\n\n3. **Automated workflow**:\n - Runs tests\n - Builds Python package\n - Publishes to PyPI\n - Publishes to MCP Registry using GitHub OIDC\n\n### Prerequisites for Publishing\n\n- **PyPI Account**: Create account at [pypi.org](https://pypi.org)\n- **Trusted Publisher Setup** (recommended, no tokens needed):\n 1. Visit [PyPI Trusted Publishers](https://pypi.org/manage/account/publishing/)\n 2. Add a \"pending publisher\" for your repository:\n - **Owner**: `vishalsachdev`\n - **Repository**: `canvas-mcp`\n - **Workflow**: `publish-mcp.yml`\n - **Environment**: (leave blank)\n 3. This reserves the package name and enables tokenless publishing\n\n**Alternative**: Use API token (legacy method - not recommended):\n- Generate token at PyPI \u2192 Account Settings \u2192 API tokens\n- Add as `PYPI_API_TOKEN` secret in repository settings\n- Update workflow to use `password: ${{ secrets.PYPI_API_TOKEN }}`\n\n### Manual Publishing (Alternative)\n\nFor manual publishing:\n\n```bash\n# Install MCP Publisher\ncurl -fsSL https://modelcontextprotocol.io/install.sh | sh\n\n# Login using GitHub\nmcp-publisher login github\n\n# Publish server\nmcp-publisher publish\n```\n\n### Registry Validation\n\nThe `server.json` configuration is automatically validated against the MCP schema during CI/CD. To validate locally:\n\n```bash\n# Download schema\ncurl -s https://registry.modelcontextprotocol.io/v0/server.schema.json -o /tmp/mcp-schema.json\n\n# Validate (requires jsonschema CLI)\npip install jsonschema\njsonschema -i server.json /tmp/mcp-schema.json\n```\n\n## Contributing\n\nContributions are welcome! Feel free to:\n- Submit issues for bugs or feature requests\n- Create pull requests with improvements\n- Share your use cases and feedback\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n---\n\nCreated by [Vishal Sachdev](https://github.com/vishalsachdev)\n",
"bugtrack_url": null,
"license": "MIT License\n \n Copyright (c) 2025 Vishal Sachdev\n \n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n \n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n \n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.",
"summary": "A Model Context Protocol server for Canvas LMS integration",
"version": "1.0.2",
"project_urls": {
"Documentation": "https://github.com/vishalsachdev/canvas-mcp/blob/main/README.md",
"Homepage": "https://github.com/vishalsachdev/canvas-mcp",
"Issues": "https://github.com/vishalsachdev/canvas-mcp/issues",
"Repository": "https://github.com/vishalsachdev/canvas-mcp"
},
"split_keywords": [
"api",
" canvas",
" claude",
" education",
" lms",
" mcp"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "7a902d278b9697dbf85bd8cdcac17caf3541a493c9a5c8ca2f21415317dbc0ee",
"md5": "aa7cf888ed7c873007514785b63314f4",
"sha256": "c795b6cf0f39c55fd828f76a0287b1f1fe878c62298e4fe234f014cb0c2e2926"
},
"downloads": -1,
"filename": "canvas_mcp-1.0.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "aa7cf888ed7c873007514785b63314f4",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.10",
"size": 83363,
"upload_time": "2025-10-10T20:54:28",
"upload_time_iso_8601": "2025-10-10T20:54:28.588272Z",
"url": "https://files.pythonhosted.org/packages/7a/90/2d278b9697dbf85bd8cdcac17caf3541a493c9a5c8ca2f21415317dbc0ee/canvas_mcp-1.0.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "5a5f9eae66f31ebfee96db53d31fe0fa5c214d948a51616ef966653e1ca2d744",
"md5": "d2201212ade71e1000d6f304286cbe16",
"sha256": "ac275ef6ee3e3df85145256c5eeb313899dbf309d59b54184e0d612355c266e8"
},
"downloads": -1,
"filename": "canvas_mcp-1.0.2.tar.gz",
"has_sig": false,
"md5_digest": "d2201212ade71e1000d6f304286cbe16",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 93776,
"upload_time": "2025-10-10T20:54:29",
"upload_time_iso_8601": "2025-10-10T20:54:29.934771Z",
"url": "https://files.pythonhosted.org/packages/5a/5f/9eae66f31ebfee96db53d31fe0fa5c214d948a51616ef966653e1ca2d744/canvas_mcp-1.0.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-10-10 20:54:29",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "vishalsachdev",
"github_project": "canvas-mcp",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "canvas-mcp"
}