Canvas MCP Server
Summary: canvas-mcp is a read-only MCP server that connects AI assistants to a student's Canvas LMS account via browser SSO sign-in.
Sign in through university SSO + MFA in Chrome (
canvas_login), with silent session refresh; no API token required.Check status — Canvas site, signed-in user and download folder (
canvas_status).List courses with terms, optionally including past courses (
canvas_courses).Browse a course's modules — files, pages, links and assignments with due dates; course can be named loosely by id, code or partial name (
canvas_browse).See upcoming deadlines (assignments, quizzes, discussions) for the next N days with submission status (
canvas_deadlines).Read announcements in one course or across all current courses (
canvas_announcements).Download a single file into the download folder (
canvas_download).Bulk-sync files — all PDFs from every current course in the background, or every file in one course, into
<course code>/<module>/; skips existing files and irrelevant material (canvas_sync,canvas_sync_status).Read-only: cannot submit work or post/change anything on Canvas — it only saves files locally.
Read-only access to a student's Canvas LMS account: lists current courses and their modules (files, pages, links, assignments with due dates), surfaces upcoming deadlines with submission status, reads course announcements, and downloads lecture slides/PDFs into per-course folders, syncing files across all current courses in the background.
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 Server pull every lecture PDF from all my current courses"
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: Canvas LMS for Claude, ChatGPT Codex and Cursor
canvas-mcp is an open-source Model Context Protocol (MCP) server for Canvas LMS (by Instructure). It lets AI assistants (Claude Desktop, Claude Code, ChatGPT Codex, Cursor, VS Code and SlideMate) read a student's Canvas courses, modules, deadlines and announcements. It can also download every course's lecture slides into one folder per course.
Works at any university that uses Canvas. It defaults to the University of Oxford (
canvas.ox.ac.uk), and you setCANVAS_BASE_URLfor anywhere else.No API token needed. You sign in through your university's normal single sign-on (SSO) and MFA in a real browser window. Many universities, Oxford included, don't let students create Canvas access tokens. If yours does,
CANVAS_TOKENworks too.Read-only. It can't submit work, post or change anything on Canvas.
Using Moodle or Blackboard instead? See moodle-mcp (UCL, King's, LSE, Cambridge, Warwick…) and blackboard-mcp (Imperial, Edinburgh, Bristol, Leeds…).
What you can ask
"What's due on Canvas this week, and what haven't I submitted?"
"Any new announcements in my courses?"
"Show me week 3 of PPE101 and download the lecture slides."
"Pull every lecture PDF from all my current courses."
Related MCP server: Canvas LMS MCP Server
Tools
Tool | What it does |
| Opens a browser window for university SSO + MFA and saves the session. It tries a silent refresh first. |
| Which site you're on, who you're signed in as, and where files download to |
| Your current courses, with their term, and whether a full sync pulls each one |
| Change which courses a full sync pulls ( |
| A course's modules: files, pages, links and assignments with due dates |
| Assignments, quizzes and discussions due in the next N days, with submission status |
| Recent announcements in one course, or in all of them |
| Save one file (a |
| With no course: download the PDFs from every current course, in the background. With a course: download all of its files. |
Courses can be named loosely: "PPE101", "philosophy" or the course id all work. A sync files things as
<course code>/<module name>/<file>. It skips past courses and files you already have, and it still finds module
files in courses that hide the Files tab from students.
A full sync also skips what isn't for studying: sites that aren't courses (guidance hubs, study-skills sites,
year-group noticeboards) and, inside courses, posters, handbooks, forms, timetables and modules like "Student
support". Its report lists the sites it skipped; canvas_set_courses brings one back. Words that are also lecture
topics only count in an admin phrase, so "Mathematical induction" stays and "Induction week schedule" goes
(relevance.py).
Install
macOS / Linux, one command
This installs uv, which brings its own Python, so you don't need Xcode or Apple's
Command Line Tools. Then it installs canvas-mcp and opens Chrome so you can sign in once:
curl -LsSf https://astral.sh/uv/install.sh | sh && ~/.local/bin/uv tool install --managed-python https://github.com/Mattlo0546/canvas-mcp/archive/refs/heads/main.zip && CANVAS_BASE_URL=canvas.ox.ac.uk ~/.local/bin/canvas-mcp loginChange canvas.ox.ac.uk to your university's Canvas address. Sign-in uses Google Chrome. Without Chrome, first
run ~/.local/share/uv/tools/canvas-mcp/bin/playwright install chromium. To update later, add --reinstall
after tool install.
Windows
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
uv tool install --managed-python https://github.com/Mattlo0546/canvas-mcp/archive/refs/heads/main.zip
$env:CANVAS_BASE_URL="canvas.ox.ac.uk"; canvas-mcp loginConnect it to your AI app
Set CANVAS_BASE_URL to your university's Canvas address in each config below.
SlideMate
In SlideMate, go to Settings → Your university, then pick your university or Canvas and press Connect. SlideMate installs this server, signs you in and makes the library's Pull button download new slides. Nothing to type.
Claude Code
claude mcp add canvas -e CANVAS_BASE_URL=https://canvas.ox.ac.uk -- ~/.local/bin/canvas-mcp serveClaude Desktop
Settings → Developer → Edit Config (claude_desktop_config.json):
{
"mcpServers": {
"canvas": {
"command": "/Users/YOU/.local/bin/canvas-mcp",
"args": ["serve"],
"env": { "CANVAS_BASE_URL": "https://canvas.ox.ac.uk" }
}
}
}ChatGPT Codex CLI
codex mcp add canvas --env CANVAS_BASE_URL=https://canvas.ox.ac.uk -- ~/.local/bin/canvas-mcp serveCursor (~/.cursor/mcp.json) and VS Code (.vscode/mcp.json, under "servers")
{
"mcpServers": {
"canvas": {
"command": "/Users/YOU/.local/bin/canvas-mcp",
"args": ["serve"],
"env": { "CANVAS_BASE_URL": "https://canvas.ox.ac.uk" }
}
}
}Universities that use Canvas
Any Canvas site works. These addresses were checked to be Canvas instances:
University |
|
University of Oxford |
|
University of Birmingham |
|
University of Liverpool |
|
University of Sussex |
|
Harvard University |
|
Stanford University |
|
MIT |
|
UC Berkeley (bCourses) |
|
UC San Diego |
|
University of Michigan |
|
Columbia University (CourseWorks) |
|
Carnegie Mellon University |
|
National University of Singapore |
|
University of Newcastle, Australia |
|
Your university's Canvas address is the one in your browser's address bar when you open Canvas. Often it's
canvas.<university domain> or <name>.instructure.com.
Command line
canvas-mcp login # sign in (opens Chrome)
canvas-mcp status # who you're signed in as
canvas-mcp courses # your current courses
canvas-mcp deadlines # what's due in the next 14 days
canvas-mcp sync # PDFs from every current course
canvas-mcp sync PPE101 # every file in one courseSettings (all optional)
Environment variables win over ~/.canvas-mcp/config.json.
Variable | Default | Meaning |
|
| Your Canvas site |
| none | A Canvas access token (Account → Settings → New access token), if your university allows them. It replaces the browser sign-in. |
| SlideMate's first slides folder, else | Where downloads go |
|
| Browser for sign-in. |
|
| Where the session and the sign-in browser profile are kept |
How sign-in works
Canvas at most universities sits behind SAML or Shibboleth single sign-on with MFA, so there's no password a script
can post. canvas_login opens your Canvas site in a real Chrome window and you sign in as usual. It waits until the
Canvas REST API (/api/v1/users/self) answers, then saves that site's session cookies, readable only by you. The
API client sends those cookies, exactly as the Canvas website does. The browser profile remembers your SSO
session, so when the Canvas session lapses, the server signs back in headlessly with no clicks, for as long as your
university's SSO allows.
FAQ
Is there a Canvas MCP server that works without an API token? Yes, this one. It signs in through your university's SSO in a browser, so it works where students can't create access tokens.
Does it work with ChatGPT? It works with OpenAI's Codex CLI and with any app that supports local (stdio) MCP servers. The ChatGPT website can only use remote MCP servers.
Can it submit assignments or post on Canvas? No. Every tool is read-only, apart from saving files to your own computer.
Where is my data stored?
Only on your computer. The session is at ~/.canvas-mcp/session.json. Delete that file and
~/.canvas-mcp/browser-profile to sign out. Data goes straight between your computer and your university's Canvas.
Is it allowed? It only reads what you can already see when you're signed in, at about the pace of a person clicking through Canvas. Check your university's IT acceptable-use policy if you're unsure.
Development
uv run --with pytest pytest # offline tests against a fake Canvas: pagination, hidden Files, expiry, stdioRelated
moodle-mcp: MCP server for Moodle
blackboard-mcp: MCP server for Blackboard Learn (Ultra)
classroom-mcp: MCP server for Google Classroom
SlideMate: a free Mac app with an AI tutor that has read your whole lecture deck. It sets all of these up in one click.
MIT licensed. Not affiliated with Instructure or the University of Oxford. Canvas is a trademark of Instructure, Inc.
Available Tools
9 toolscanvas_announcementsA
Announcements posted in the last days days, newest first: in one course (id, code or part of the name), or
in every current course when course is empty.
Inputs: days, course. Returns: result
canvas_browseA
Show a course's modules with their files, pages, links and assignments (with due dates). course can be a
course id, course code, or part of the name. File items include a file_id for canvas_download.
Inputs: course (required).
canvas_coursesA
List the user's Canvas courses (current ones, unless include_past).
Inputs: include_past. Returns: result
canvas_deadlinesA
Assignments, quizzes and discussions due in the next days days (default 14), soonest first, with whether
each has been submitted.
Inputs: days. Returns: result
canvas_downloadA
Download one Canvas file (a file_id from canvas_browse) into // (or subdir).
Inputs: course (required), file_id (required), subdir.
canvas_loginA
Sign in to Canvas. Opens a Chrome window on the user's computer at the university sign-in page; the user completes SSO + MFA there and the session is saved for the other tools. Tries a silent refresh first, so it often finishes without any window.
Inputs: timeout_seconds.
canvas_statusA
Check the Canvas session: which site, signed in as whom, and the download folder.
Inputs: no named parameters.
canvas_syncA
Download course files to /// (SlideMate's library if it's set up, else ~/CanvasFiles).
With a course (id, code or part of the name), downloads every file in it and returns the result. Without one,
downloads the PDFs (lecture slides, handouts, readings) from every current course in the background and returns
{"running": true}; call canvas_sync_status until it reports the result. Files already there are skipped.
Inputs: course, skip_existing.
canvas_sync_statusA
Progress of a sync started by canvas_sync without a course: {"running": true, "progress": …} while it runs, then the result (a summary, files per course and any errors).
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 9 tools
Most tools have clearly distinct purposes (login, status, courses, browse, deadlines, announcements), and the bulk vs. single-file split between canvas_sync and canvas_download is clarified in the descriptions. The main risk is name-level confusion between canvas_status (session info) and canvas_sync_status (background sync progress), which share the word 'status' but differ in scope.
All nine tools use a uniform canvas_ prefix with snake_case and largely verb/noun naming (canvas_login, canvas_courses, canvas_browse, canvas_download, canvas_deadlines). The only compound, canvas_sync_status, still fits the same pattern as the status companion to canvas_sync.
Nine tools is a well-scoped set for a Canvas file/course access server. Each tool earns its place: authentication, session check, course listing, browsing, two download paths, plus deadlines and announcements.
The read/download lifecycle is well covered: auth, session status, courses, module browsing, bulk and single-file downloads, deadlines, and announcements. Gaps exist for grades, assignment submission, and messaging/discussion participation, though these may be outside the server's stated file-fetching focus.
Maintenance
Related MCP Connectors
Manage your Canvas coursework with quick access to courses, assignments, and grades. Track upcomin…
Connect AI assistants to Edusign attendance, courses, learners, documents, and API docs via OAuth.
Web search, data extraction and controlled browser automation for AI assistants via OAuth.
Connects an AI assistant to your Lingard account (lingard.app), an app for learning languages with books, news and flashcards. Create topic word collections and add complete cards: translation, part of speech, pronunciation, synonyms, example sentences with translations, and images. Fill in missing fields on existing cards, rewrite example translations, and pause or resume collections, books and news in your daily study sessions. Every change can be previewed before it is saved, and saved words appear in the Lingard apps on iOS, Android and the web. Requires a Lingard account; sign-in uses OAuth.
Related MCP Servers
- FlicenseBqualityNot gradedmaintenanceProvides read-only access to Canvas LMS for students to retrieve courses, assignments, grades, files, discussions, and planner items. Includes optional NotebookLM integration for uploading course content to AI-powered study notebooks.451,589 npm-
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to access Canvas LMS course content, including assignments, modules, announcements, and files, to help students manage their coursework.14 npmISC
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to automatically pull Canvas LMS course materials into Obsidian, syncing files, assignments, grades, and announcements organized by course and module.-
- FlicenseBqualityBmaintenanceEnables AI assistants to act as teaching assistants for Canvas LMS, allowing them to browse courses, read student submissions (including PDF/DOCX), grade with rubrics, post announcements, manage modules and pages, and more.64-