Server data from the Official MCP Registry
TypeScript MCP server for Canvas LMS — 115 read+write tools across 17 domains.
TypeScript MCP server for Canvas LMS — 115 read+write tools across 17 domains.
Valid MCP server (1 strong, 1 medium validity signals). No known CVEs in dependencies. Package registry verified. Imported from the Official MCP Registry.
5 files analyzed · 1 issue found
Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.
Set these up before or after installing:
Environment variable: CANVAS_API_TOKEN
Environment variable: CANVAS_BASE_URL
Add this to your MCP configuration file:
{
"mcpServers": {
"io-github-bruchris-canvas-lms-mcp": {
"env": {
"CANVAS_BASE_URL": "your-canvas-base-url-here",
"CANVAS_API_TOKEN": "your-canvas-api-token-here"
},
"args": [
"-y",
"canvas-lms-mcp"
],
"command": "npx"
}
}
}From the project's GitHub README.
The TypeScript MCP server for Canvas LMS.
MCP server for Canvas LMS. Read courses, assignments, submissions, rubrics, quizzes; grade, comment, manage course content, and handle Canvas admin workflows from any AI agent.
115 tools across Canvas courses, assignments, submissions, gradebook history, rubrics, quizzes, New Quizzes (LTI), files, users, groups, enrollments, discussions, modules, pages, calendar, conversations, peer reviews, accounts, analytics, outcomes, student workflows, dashboard, and health checks. Three deployment modes: stdio, HTTP, and library import.
| canvas-lms-mcp | vishalsachdev/canvas-mcp | DMontgomery40/mcp-canvas-lms | |
|---|---|---|---|
| Language | TypeScript | Python | TypeScript |
| Tools | 115 | 80+ | 54 |
| License | |||
| Last commit |
npx add-mcp canvas-lms-mcp
This auto-detects your installed AI clients (Claude Code, Cursor, VS Code, etc.) and configures them. You will be prompted for your Canvas API token and base URL.
Claude Code
claude mcp add canvas-lms --env CANVAS_API_TOKEN=your-token --env CANVAS_BASE_URL=https://school.instructure.com -- npx -y canvas-lms-mcp
VS Code
code --add-mcp '{"name":"canvas-lms","command":"npx","args":["-y","canvas-lms-mcp"],"env":{"CANVAS_API_TOKEN":"your-token","CANVAS_BASE_URL":"https://school.instructure.com"}}'
Gemini CLI
gemini mcp add canvas-lms npx canvas-lms-mcp
Codex CLI
codex mcp add canvas-lms -- npx canvas-lms-mcp
Add to your claude_desktop_config.json:
{
"mcpServers": {
"canvas-lms": {
"command": "npx",
"args": ["-y", "canvas-lms-mcp"],
"env": {
"CANVAS_API_TOKEN": "your-token-here",
"CANVAS_BASE_URL": "https://your-institution.instructure.com"
}
}
}
}
Add to .cursor/mcp.json in your project:
{
"mcpServers": {
"canvas-lms": {
"command": "npx",
"args": ["-y", "canvas-lms-mcp"],
"env": {
"CANVAS_API_TOKEN": "your-token-here",
"CANVAS_BASE_URL": "https://your-institution.instructure.com"
}
}
}
}
Add to your VS Code settings (settings.json):
{
"mcp.servers": {
"canvas-lms": {
"command": "npx",
"args": ["-y", "canvas-lms-mcp"],
"env": {
"CANVAS_API_TOKEN": "your-token-here",
"CANVAS_BASE_URL": "https://your-institution.instructure.com"
}
}
}
}
Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"canvas-lms": {
"command": "npx",
"args": ["-y", "canvas-lms-mcp"],
"env": {
"CANVAS_API_TOKEN": "your-token-here",
"CANVAS_BASE_URL": "https://your-institution.instructure.com"
}
}
}
}
Run the server in HTTP mode, then point your client at the endpoint:
npx canvas-lms-mcp serve --port 3001 \
--token your-token-here \
--base-url https://your-institution.instructure.com
The MCP endpoint is http://localhost:3001/mcp. Per-request credentials can be passed via X-Canvas-Token and X-Canvas-Base-URL headers.
Install reusable Canvas workflows into Claude Code, Cursor, GitHub Copilot, Cline, and 40+ other AI agents:
npx skills add bruchris/canvas-lms-mcp
| Skill | Description |
|---|---|
canvas-at-risk-students | Surface students with missing assignments or declining grades and send targeted outreach |
canvas-gradebook-audit | Inspect the full grade-change audit trail — who changed what grade, when, and by how much |
canvas-outcome-tracker | Track learning outcome mastery and class-wide proficiency for accreditation and program review |
Skills are markdown workflow files (no extra dependencies). They work with the MCP server you already have installed. See the skills/ directory for the full list.
Once configured, try these prompts with your AI client:
| Category | Tools |
|---|---|
| Health | health_check |
| Courses | list_courses, get_course, get_syllabus, create_course, update_course |
| Assignments | list_assignments, get_assignment, list_assignment_groups, create_assignment, update_assignment, delete_assignment |
| Submissions | list_submissions, get_submission, grade_submission, comment_on_submission |
| Rubrics | list_rubrics, get_rubric, get_rubric_assessment, submit_rubric_assessment |
| Quizzes | list_quizzes, get_quiz, list_quiz_submissions, list_quiz_questions, get_quiz_submission_answers, score_quiz_question |
| New Quizzes (LTI) | create_new_quiz, update_new_quiz, delete_new_quiz, list_new_quiz_items, get_new_quiz_item, create_new_quiz_item, update_new_quiz_item, delete_new_quiz_item |
| Files | list_files, list_folders, get_file, upload_file, delete_file |
| Gradebook History | list_gradebook_history_days, get_gradebook_history_day, list_gradebook_history_submissions, get_gradebook_history_feed |
| Users | list_students, get_user, get_profile, search_users, list_course_users |
| Groups | list_groups, list_group_members |
| Enrollments | list_enrollments, enroll_user, remove_enrollment |
| Discussions | list_discussions, get_discussion, list_announcements, post_discussion_entry, create_discussion, update_discussion, delete_discussion |
| Modules | list_modules, get_module, list_module_items, create_module, update_module, create_module_item |
| Pages | list_pages, get_page, create_page, update_page, delete_page |
| Calendar | list_calendar_events, create_calendar_event, update_calendar_event |
| Conversations | list_conversations, get_conversation, get_conversation_unread_count, send_conversation |
| Peer Reviews | list_peer_reviews, get_submission_peer_reviews, create_peer_review, delete_peer_review |
| Accounts | get_account, list_accounts, list_sub_accounts, list_account_courses, list_account_users, get_account_reports |
| Analytics | search_course_content, get_course_analytics, get_student_analytics, get_course_activity_stream |
| Outcomes | get_root_outcome_group, list_outcome_groups, list_outcome_group_links, get_outcome_group, list_outcome_group_outcomes, list_outcome_group_subgroups, get_outcome, get_outcome_alignments, get_outcome_results, get_outcome_rollups, get_outcome_contributing_scores, get_outcome_mastery_distribution |
| Student | get_my_courses, get_my_grades, get_my_submissions, get_my_upcoming_assignments |
| Dashboard | get_dashboard_cards, get_todo_items, get_upcoming_events, get_missing_submissions |
80 tools are read-only and 35 tools perform Canvas write operations.
All write tools require appropriate Canvas permissions. Canvas enforces its own permission model -- the MCP server does not bypass it.
Canvas applies rate limits per-user. When creating many New Quizzes items (e.g., RAG-generated quizzes), call the tools serially rather than in parallel. For >50 items, chunk and pause between batches. If you hit a rate-limit error, wait a few seconds and retry.
| Resource | URI Template | Type |
|---|---|---|
| Course Syllabus | canvas://course/{courseId}/syllabus | text/html |
| Assignment Description | canvas://course/{courseId}/assignment/{assignmentId}/description | text/html |
For local AI clients like Claude Desktop, Cursor, and VS Code. The server communicates over stdin/stdout.
npx canvas-lms-mcp --token $CANVAS_API_TOKEN --base-url $CANVAS_BASE_URL
For web-based clients or hosted services. Starts an HTTP server with Streamable HTTP transport.
npx canvas-lms-mcp serve \
--token $CANVAS_API_TOKEN \
--base-url $CANVAS_BASE_URL \
--port 3001 \
--allowed-origin https://your-app.example.com
Endpoints:
POST /mcp -- MCP protocol endpointGET /health -- Health check (returns {"status":"ok"})docker compose up -d
Requires CANVAS_API_TOKEN and CANVAS_BASE_URL environment variables. See docker-compose.yml.
services:
canvas-lms-mcp:
build: .
ports:
- "3001:3001"
environment:
- CANVAS_API_TOKEN=${CANVAS_API_TOKEN}
- CANVAS_BASE_URL=${CANVAS_BASE_URL}
Use the server factory directly in your own Node.js application:
import { createCanvasMCPServer } from 'canvas-lms-mcp'
const { server, canvas } = createCanvasMCPServer({
token: userToken,
baseUrl: canvasBaseUrl,
})
Or use the Canvas client standalone (no MCP dependency):
import { CanvasClient } from 'canvas-lms-mcp/canvas'
const canvas = new CanvasClient({
token: userToken,
baseUrl: canvasBaseUrl,
})
const courses = await canvas.courses.list()
| Flag | Env Variable | Default | Description |
|---|---|---|---|
--token | CANVAS_API_TOKEN | (required) | Canvas personal access token |
--base-url | CANVAS_BASE_URL | (required) | Canvas instance URL |
serve | -- | stdio mode | Switch to HTTP mode |
--port | -- | 3001 | HTTP server port |
--allowed-origin | CANVAS_ALLOWED_ORIGIN | http://localhost:3000 | CORS allowed origin |
| Variable | Required | Description |
|---|---|---|
CANVAS_API_TOKEN | Yes | Canvas personal access token |
CANVAS_BASE_URL | Yes | Canvas instance URL (e.g., https://school.instructure.com) |
CANVAS_ALLOWED_ORIGIN | No | CORS origin for HTTP mode (default: http://localhost:3000) |
pnpm install # Install dependencies
pnpm dev # Watch mode build
pnpm build # Production build
pnpm test # Run tests (294 tests)
pnpm lint # ESLint + Prettier check
pnpm lint:fix # Auto-fix lint issues
pnpm typecheck # TypeScript strict type check
The pnpm.overrides.hono entry pins hono to 4.12.14 because
@modelcontextprotocol/sdk@1.29.0 allows vulnerable hono <4.12.14
versions. Remove the override when the MCP SDK publishes a release that
depends on a patched hono range.
src/canvas/ Standalone Canvas REST API client (pure fetch, no MCP dependency)
src/tools/ MCP tool definitions with Zod input schemas
src/resources/ MCP resource templates (syllabus, assignment description)
src/server.ts Factory: createCanvasMCPServer(config)
src/stdio.ts stdio transport entry point
src/http.ts HTTP transport entry point
src/cli.ts CLI argument parser
See CONTRIBUTING.md for the full contribution and validation workflow.
git checkout -b feat/my-feature)feat:, fix:, chore:, test:, docs:)pnpm lint && pnpm typecheck && pnpm test passMIT
Be the first to review this server!
by Modelcontextprotocol · Developer Tools
Read, search, and manipulate Git repositories programmatically
by Modelcontextprotocol · Developer Tools
Web content fetching and conversion for efficient LLM usage
by Toleno · Developer Tools
Toleno Network MCP Server — Manage your Toleno mining account with Claude AI using natural language.