canvas-teacher-mcp
Allows reading and writing Canvas LMS course content: courses, modules, assignments, quizzes, pages, announcements, and submissions, with support for authentication and course setup.
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-teacher-mcpCreate an assignment for next Tuesday in my Economics course."
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-teacher-mcp
An MCP server for Canvas LMS. Ask your assistant to read a course, build an assignment page, set due dates or post an announcement — it calls the Canvas REST API for you.
v0.1.0 — read and write course content. Grading is not in this release.
Install
Nothing to install. Point your MCP client at it and uvx fetches it on first run.
{
"mcpServers": {
"canvas-teacher": {
"command": "uvx",
"args": ["canvas-teacher-mcp"],
"env": { "CANVAS_LMS_ROOT": "/path/to/your/teaching/tree" }
}
}
}Then say "set up Canvas". CANVAS_LMS_ROOT is the one thing you choose — set it in env as
above, or leave it out and answer when setup asks.
Related MCP server: Canvas Agent
Setup — what the setup tool does
It runs in conversation: each call does one step and returns the next question. Nothing is overwritten, so running it again is safe.
Step | What happens |
1 | Root. Reads |
2 | Workflow. Copies the working rules to |
3 | Skills. Copies the page, quiz, announcement and notebook methods to |
4 | Post-gate. Copies |
5 | School. Writes |
6 | Course. Creates |
Steps 2 and 3 land in your tree, not in the package, so your edits survive an upgrade. Add another school or course by asking again — only steps 5 and 6 repeat.
<ROOT>/
├─ .claude/
│ └─ Canvas-Auth/ credentials
│ ├─ <school>.json {base_url, token}
│ └─ storageState/<school>/ cookie schools only
└─ <SCHOOL>/<ORG>/<COURSE>/
└─ .claude/
├─ course-config/<slug>.json the course's coordinates
├─ input/ material you bring in
└─ output/<kind>/ everything the server writesOne school means one school folder. The shape does not change.
Set up a course
Ask the assistant to add a course and give it the Canvas URL. It derives the rest, confirms once, and caches five keys:
{
"canvas_url": "https://school.instructure.com/courses/12345",
"school": "school",
"db_path": "$HOME/.../Sqlite/<COURSE>-<TERM>.db",
"github_org": "MY-ORG",
"drive_folder": "1AbC..."
}Only canvas_url is required. course_id, base_url, domain and the token env var are derived
from it, never stored.
Authenticate
Two ways in, one REST API. The server picks whichever your school has.
Your school | What you provide |
issues API tokens |
|
SSO only, no tokens | a one-time browser login; the session cookie is saved and refreshed automatically |
chmod 600 the credential files, and keep Canvas-Auth/ out of git.
What it does
Read
courses, modules and module items
assignments, quizzes and their questions
pages
submissions, with attachments fetched and read (PDF, images, Office files, Colab notebooks)
students, by Canvas uid
every link and embed in a page, module, assignment or quiz
Write
create and update assignments and pages
add items to a module
set due dates
post an announcement — always previewed first, sent only when you say so
Everything is created unpublished. Publishing stays a manual instructor action.
What it does not do
Post grades. Grading needs safeguards this release does not ship. It is the next milestone.
Delete anything. No endpoint in this server removes a course, an assignment or a submission.
Store your grades. Canvas is the record.
Notes it will save you
The Canvas API returns HTTP 200 for several calls that change nothing. This server sends the forms Canvas actually accepts:
a grade must be form-encoded; as JSON it returns 200 and sets nothing
a quiz-question update needs the FULL payload, or it applies nothing
question_countstays cached until the quiz is touched againseconds_late_overrideis ignored when sent withlate_policy_statussubmission comments render HTML in SpeedGrader, but the API returns them flattened — the API response is not proof of what the student sees
Requirements
Python 3.10+. uvx handles the rest. A cookie school also needs Playwright's Chrome, installed on
first login.
License
MIT.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Alicense-qualityDmaintenanceA local MCP server for Canvas LMS that enables querying courses, assignments, grades, modules, and more from any MCP-compatible AI client.9MIT
- AlicenseAqualityBmaintenanceMCP server that connects AI assistants to Instructure Canvas LMS, enabling teachers and administrators to manage courses, assignments, grades, and more through natural language.80141MIT
- Flicense-qualityDmaintenanceMCP server for Canvas LMS that exposes courses, assignments, modules, pages, files, grades, and submissions as tools for AI agents.
- Alicense-qualityDmaintenanceA teacher-facing MCP server that wraps the Canvas LMS REST API, enabling AI assistants to create and manage course content across multiple Canvas courses.9MIT
Related MCP Connectors
Educational MCP server with 17 math/stats tools, visualizations, and persistent workspace
MCP server for the Inistate platform: module discovery, entry management, and activity submission.
MCP server for generating rough-draft project plans from natural-language prompts.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- 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/Canvas-LMS-MCP/canvas-teacher-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server