Canvas MCP Server
Provides read-only access to Canvas LMS for students to retrieve courses, assignments, grades, files, discussions, and planner items. Includes optional NotebookLM integration for uploading course content to AI-powered study notebooks.
README
Canvas MCP Server
A Model Context Protocol (MCP) server providing read-only access to Canvas LMS for student workflows, with optional NotebookLM integration for study material organization.
Features
- 45 Tools covering Canvas LMS functionality
- Read-only access - Safe for student use
- Smart caching - Reduces API calls
- Rate limiting - Respects Canvas API limits (~3000 req/hour)
- NotebookLM integration - Upload course content for AI-powered study
Quick Start
1. Install Dependencies
npm install
npm run build
2. Configure Environment
cp .env.example .env
# Edit .env with your Canvas credentials
Required settings:
CANVAS_BASE_URL- Your Canvas instance URLCANVAS_API_TOKEN- Generate at Canvas > Account > Settings > New Access Token
3. Add to Claude Code
Add to your Claude Code MCP configuration (~/.claude/claude_desktop_config.json):
{
"mcpServers": {
"canvas": {
"command": "node",
"args": ["dist/index.js"],
"cwd": "/path/to/canvas-mcp-server",
"env": {
"CANVAS_BASE_URL": "https://your-school.instructure.com",
"CANVAS_API_TOKEN": "your_token_here"
}
}
}
}
4. (Optional) Setup NotebookLM
For NotebookLM integration:
cd src/python-bridge
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
playwright install chromium
Then use notebooklm_auth_setup tool for interactive Google login.
Available Tools (45 total)
Phase 1: Core (5 tools)
| Tool | Description |
|---|---|
canvas_course_list |
List enrolled courses |
canvas_course_get |
Get course details |
canvas_assignment_list |
List assignments (with bucket filtering) |
canvas_assignment_get |
Get assignment details |
canvas_get_my_submission |
Get your submission for an assignment |
Phase 2: Content (16 tools)
| Tool | Description |
|---|---|
canvas_module_list |
List course modules |
canvas_module_get |
Get module details |
canvas_module_items |
List items in a module |
canvas_module_progress |
Get module completion progress |
canvas_file_list |
List files in a folder |
canvas_file_get |
Get file metadata |
canvas_file_search |
Search for files |
canvas_folder_list |
List folders |
canvas_file_download |
Download file content |
canvas_discussion_list |
List discussions |
canvas_discussion_get |
Get discussion with replies |
canvas_announcement_list |
List announcements |
canvas_planner_items |
Get planner items |
canvas_todo_list |
Get todo items |
canvas_upcoming_events |
Get upcoming events |
canvas_missing_submissions |
Get missing assignments |
Phase 3: Assessment (8 tools)
| Tool | Description |
|---|---|
canvas_rubric_list |
List rubrics in a course |
canvas_rubric_get |
Get rubric details |
canvas_rubric_for_assignment |
Get rubric for an assignment |
canvas_quiz_list |
List quizzes |
canvas_quiz_get |
Get quiz details |
canvas_quiz_submission |
Get your quiz submission |
canvas_group_list |
List your groups |
canvas_group_members |
List group members |
Phase 4: User (11 tools)
| Tool | Description |
|---|---|
canvas_bookmark_list |
List your bookmarks |
canvas_bookmark_create |
Create a bookmark |
canvas_bookmark_delete |
Delete a bookmark |
canvas_inbox_list |
List inbox messages |
canvas_inbox_get |
Get conversation details |
canvas_inbox_unread_count |
Get unread message count |
canvas_notification_list |
List notifications |
canvas_dashboard |
Comprehensive dashboard view |
canvas_profile |
Get your profile |
canvas_grades_overview |
Get grades across courses |
canvas_cache_status |
View/clear cache |
Phase 5: NotebookLM (5 tools)
| Tool | Description |
|---|---|
notebooklm_auth_check |
Check Google auth status |
notebooklm_auth_setup |
Interactive Google login |
notebooklm_list_notebooks |
List NotebookLM notebooks |
notebooklm_upload_sources |
Upload sources to notebook |
notebooklm_prepare_content |
Convert/split files for upload |
Authentication
Canvas API (Primary)
- API Token: Required for all API calls
- Generate at: Canvas > Account > Settings > New Access Token
- Provides access to your enrolled courses, assignments, grades, etc.
Cookies (Secondary, Optional)
- Only needed if file downloads return 403 errors
- Export browser cookies using extensions like "Get cookies.txt"
- Set
CANVAS_COOKIES_FILEin your environment
NotebookLM (Interactive)
- Uses Playwright browser automation (no public API exists)
- Run
notebooklm_auth_setuponce to save Google session - Session persists in
src/python-bridge/state.json
Architecture
canvas-mcp-server/
├── src/
│ ├── core/
│ │ ├── auth.ts # Token + cookie authentication
│ │ ├── cache.ts # Memory cache with TTL
│ │ ├── client.ts # Canvas API client
│ │ ├── pagination.ts # Link header parsing
│ │ └── rate-limiter.ts # Token bucket rate limiter
│ ├── tools/
│ │ ├── courses.ts # Course tools
│ │ ├── assignments.ts # Assignment tools
│ │ ├── modules.ts # Module tools
│ │ ├── files.ts # File tools
│ │ ├── discussions.ts # Discussion tools
│ │ ├── planner.ts # Planner tools
│ │ ├── rubrics.ts # Rubric tools
│ │ ├── quizzes.ts # Quiz tools
│ │ ├── groups.ts # Group tools
│ │ ├── bookmarks.ts # Bookmark tools
│ │ ├── communication.ts # Inbox/notification tools
│ │ ├── dashboard.ts # Dashboard tools
│ │ └── notebooklm.ts # NotebookLM tools
│ ├── python-bridge/
│ │ ├── notebooklm_auth.py # Google auth management
│ │ ├── notebooklm_upload.py # Source upload automation
│ │ └── requirements.txt # Python dependencies
│ ├── types/
│ │ └── canvas.ts # TypeScript types
│ ├── server.ts # MCP server
│ └── index.ts # Entry point
├── .env.example # Environment template
├── mcp.json # MCP configuration
└── package.json
Rate Limits
Canvas API allows ~3000 requests per hour. This server implements:
- Token bucket rate limiter (0.8 req/sec default)
- Smart caching (5-30 min TTL per resource type)
- Automatic retry with backoff on 429 responses
License
MIT
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
E2B
Using MCP to run code via e2b.