Canvas MCP
Provides tools to interact with Canvas LMS, including courses, modules, files, pages, assignments, submissions, grades, announcements, upcoming deadlines, and syllabus.
Click on "Deploy 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 show my upcoming deadlines for this week"
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
MCP server that exposes Canvas LMS as tools — courses, modules, files, pages, assignments, submissions/grades, announcements, upcoming deadlines, and syllabus.
Designed to be consumed by Ada (chat tool loop / edge functions) and any other MCP client (Claude Desktop, Cursor, etc.).
Setup
cd mcps/canvas
npm install
npm run buildCreate .env (or pass through your MCP client config):
CANVAS_BASE_URL=https://canvas.asu.edu/api/v1
CANVAS_TOKEN=your_canvas_personal_access_tokenGenerate the token in Canvas: Account → Settings → New Access Token.
Related MCP server: Canvas LMS MCP Server
Run
Stdio transport (default for MCP clients):
CANVAS_BASE_URL=... CANVAS_TOKEN=... node dist/index.jsTools
Tool | Purpose |
| Active enrollments with term + dates |
| Single course incl. syllabus body |
| Modules with items inlined |
| Items in one module |
| File info + download URL |
| Download file body as UTF-8 text (truncated) |
| Wiki pages |
| Assignments by due date |
| Current student's grades + late/missing |
| Announcements across courses |
| Upcoming events for the user |
| Syllabus HTML |
Claude Desktop config
{
"mcpServers": {
"canvas": {
"command": "node",
"args": ["/absolute/path/to/ada/mcps/canvas/dist/index.js"],
"env": {
"CANVAS_BASE_URL": "https://canvas.asu.edu/api/v1",
"CANVAS_TOKEN": "..."
}
}
}
}Cloudflare Workers (HTTP transport)
src/worker.ts exposes the same toolset over HTTP for hosting on Cloudflare
Workers. Deploy with:
npx wrangler deploySet the secrets once via wrangler secret put:
echo "https://canvas.asu.edu/api/v1" | npx wrangler secret put CANVAS_BASE_URL
echo "your_canvas_token" | npx wrangler secret put CANVAS_TOKENThe Worker accepts JSON-RPC tools/list and tools/call POSTs.
Multi-tenant headers (override env per request — Ada uses these):
Authorization: Bearer <user's canvas PAT>
X-Canvas-Base-Url https://canvas.<institution>.edu/api/v1
X-Ada-Service-Key <ADA_SERVICE_KEY> # required when env.ADA_SERVICE_KEY is setWhen no headers are present, the worker falls back to the CANVAS_BASE_URL /
CANVAS_TOKEN secrets (single-tenant mode). Set ADA_SERVICE_KEY to gate
header-based requests behind a shared secret:
echo "$(openssl rand -hex 32)" | npx wrangler secret put ADA_SERVICE_KEYNotes
Canvas pagination is followed automatically via the
Linkheader up to per-call caps.get_file_textdecodes as UTF-8; binary formats (PDF, DOCX) need upstream extraction.Single-tenant by env var. For multi-user (Ada), spawn one process per user or swap stdio for an HTTP transport that accepts a per-request token.
Available Tools
15 toolsget_assignmentC
Get full details for a single assignment, including HTML description.
Inputs: course_id (required), assignment_id (required).
get_courseB
Get a single course by id, including syllabus body if available.
Inputs: course_id (required).
get_file_metadataC
Get Canvas file metadata (display_name, content-type, size, download URL).
Inputs: file_id (required).
get_file_textA
Download a Canvas file and return up to max_bytes of its body decoded as UTF-8 text. Best for plaintext/markdown/code/HTML; binary formats (PDF, DOCX) return raw bytes — extract text upstream.
Inputs: file_id (required), max_bytes.
get_pageA
Get a wiki page's full body (HTML) by its url slug.
Inputs: course_id (required), page_url (required).
get_syllabusB
Get the syllabus body (HTML) for a course.
Inputs: course_id (required).
list_announcementsC
List announcements across one or more courses.
Inputs: course_ids (required), limit.
list_assignmentsB
List assignments for a course ordered by due date. Returns due_at, points_possible, description, submission types.
Inputs: course_id (required), limit.
list_coursesB
List the authenticated student's courses. Defaults to active enrollments. Returns id, name, course_code, term, and dates.
Inputs: enrollment_state, limit.
list_module_itemsC
List items in a specific module (files, pages, assignments, quizzes, links).
Inputs: course_id (required), module_id (required), limit.
list_modulesB
List modules for a course, with their items inlined. Use to see the structure of a course's content.
Inputs: course_id (required), limit.
list_my_submissionsB
List the current student's submissions for a course, including grade, score, late/missing flags, and the linked assignment. Use to detect grade drops and missing work.
Inputs: course_id (required), limit.
list_pagesC
List wiki pages for a course.
Inputs: course_id (required), limit.
list_upcomingA
List the current user's upcoming events (assignments + calendar items) across all courses. Use for deadline-aware planning.
Inputs: no named parameters.
whoamiA
Return the authenticated Canvas user (id, name, email). Useful for validating a PAT.
Inputs: no named parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 15 tools
Each tool targets a distinct resource (course, assignment, page, file, etc.) or operation (list vs. get), with clear boundaries. No two tools have overlapping purposes.
Most tools follow a consistent verb_noun pattern (get_*, list_*), but 'whoami' breaks the pattern. However, this is a common convention and does not cause confusion.
15 tools is well within the ideal range (3-15). Each tool serves a clear purpose for student interaction with Canvas, neither too many nor too few.
The tool set covers all essential student-facing operations: viewing courses, assignments, submissions, pages, modules, files, announcements, syllabus, and upcoming events. No obvious gaps given the read-only student role.
Maintenance
Related MCP Connectors
Manage your Canvas coursework with quick access to courses, assignments, and grades. Track upcomin…
Create, search, edit, and export designs and assets from Canva.
Read Axis LMS users, courses, learning paths, certifications and reports; manage enrollments.
Read TalentLMS users, courses, groups, branches and progress; create learners and enroll users.
Related MCP Servers
- FlicenseAqualityNot gradedmaintenanceEnables interaction with Canvas LMS courses and assignments directly from your LLM, allowing you to retrieve, search, and summarize course information, check due dates, and access assignment details without leaving your AI assistant.43,290 npm-
- AlicenseAqualityDmaintenanceEnables AI systems to interact with Canvas Learning Management System data, allowing users to access courses, assignments, quizzes, planner items, files, and syllabi through natural language queries.2242 PyPI7MIT
- AlicenseBqualityCmaintenanceEnables AI assistants to manage Canvas LMS courses, announcements, rubrics, assignments, modules, pages, and student data via the Canvas API.6032 npm12MIT
- AlicenseNot gradedqualityDmaintenanceEnables interaction with Canvas courses and assignments through natural language, allowing retrieval, search, and summarization of course and assignment information.3,290 npm11MIT