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
