Canvas MCP
Provides tools to interact with Canvas LMS, including courses, modules, files, pages, assignments, submissions, grades, announcements, upcoming deadlines, and syllabus.
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 MCPshow 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.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Abhinav-ranish/Canvas-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server