Provides read-only access to Canvas LMS with 45 tools covering courses, assignments, submissions, modules, files, discussions, announcements, quizzes, rubrics, grades, planner items, groups, bookmarks, inbox messages, and notifications for student workflows.
Enables integration with Google NotebookLM through browser automation, allowing users to authenticate, list notebooks, upload course content as sources, and prepare study materials for AI-powered organization.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Canvas MCP Servershow me my missing assignments"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 build2. Configure Environment
cp .env.example .env
# Edit .env with your Canvas credentialsRequired 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 chromiumThen use notebooklm_auth_setup tool for interactive Google login.
Available Tools (45 total)
Phase 1: Core (5 tools)
Tool | Description |
| List enrolled courses |
| Get course details |
| List assignments (with bucket filtering) |
| Get assignment details |
| Get your submission for an assignment |
Phase 2: Content (16 tools)
Tool | Description |
| List course modules |
| Get module details |
| List items in a module |
| Get module completion progress |
| List files in a folder |
| Get file metadata |
| Search for files |
| List folders |
| Download file content |
| List discussions |
| Get discussion with replies |
| List announcements |
| Get planner items |
| Get todo items |
| Get upcoming events |
| Get missing assignments |
Phase 3: Assessment (8 tools)
Tool | Description |
| List rubrics in a course |
| Get rubric details |
| Get rubric for an assignment |
| List quizzes |
| Get quiz details |
| Get your quiz submission |
| List your groups |
| List group members |
Phase 4: User (11 tools)
Tool | Description |
| List your bookmarks |
| Create a bookmark |
| Delete a bookmark |
| List inbox messages |
| Get conversation details |
| Get unread message count |
| List notifications |
| Comprehensive dashboard view |
| Get your profile |
| Get grades across courses |
| View/clear cache |
Phase 5: NotebookLM (5 tools)
Tool | Description |
| Check Google auth status |
| Interactive Google login |
| List NotebookLM notebooks |
| Upload sources to notebook |
| 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 sessionSession 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.jsonRate 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