quercus-mcp
Provides read-only tools to interact with Canvas LMS (including Quercus) for retrieving courses, assignments, grades, announcements, files, and modules.
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., "@quercus-mcp What's due this week across all my 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.
quercus-mcp
An MCP server that lets Claude read your University of Toronto Quercus courses: assignments, due dates, grades, announcements, files, and modules.
Quercus runs on Canvas LMS, so it also works with any school that uses Canvas.
Ask Claude things like:
"What's due this week across all my courses?"
"Summarize the latest announcements in MAT188."
"What's my current grade in CIV100?"
"Find the lecture slides for week 3 in my calculus course."
How it works
The server runs locally on your computer and talks to the Canvas REST API with a personal access token that you create. Your token stays on your machine. It is only ever sent to your school's Canvas server, never anywhere else.
Every tool is read-only. The server can't submit work, post, or change anything in your account.
Related MCP server: Canvas LMS MCP Server
Setup
Requirements: Node.js 18 or newer, and Claude Code or Claude Desktop.
1. Get a Quercus access token
Sign in to Quercus.
Go to Account → Settings → Approved Integrations.
Click + New Access Token, give it a name like "Claude", and copy the token.
Treat this token like a password. Anyone who has it can read your Quercus account.
2. Install and build
git clone https://github.com/lance-lii/quercus-mcp.git
cd quercus-mcp
npm install
npm run build3. Connect it to Claude
Claude Code:
claude mcp add quercus -s user \
-e QUERCUS_API_TOKEN=<your token> \
-e QUERCUS_BASE_URL=https://q.utoronto.ca/api/v1 \
-- node /absolute/path/to/quercus-mcp/dist/index.jsStart a new Claude Code session afterwards so it picks up the new tools. Check the connection with claude mcp get quercus.
Claude Desktop: add this to your claude_desktop_config.json and restart the app:
{
"mcpServers": {
"quercus": {
"command": "node",
"args": ["/absolute/path/to/quercus-mcp/dist/index.js"],
"env": {
"QUERCUS_API_TOKEN": "<your token>",
"QUERCUS_BASE_URL": "https://q.utoronto.ca/api/v1"
}
}
}
}Using a different Canvas school
Set QUERCUS_BASE_URL to your school's Canvas API, for example https://yourschool.instructure.com/api/v1, and create the token from that school's Canvas settings page.
Tools
Tool | What it does |
| Your active, completed, or all enrolled courses |
| Assignments for a course, optionally filtered (upcoming, overdue, ungraded, and more) |
| Your grade and enrollment info for one course |
| Your grades across all courses |
| Announcements for one or more courses |
| Your Quercus to-do list |
| Upcoming events and due dates |
| Calendar events or assignments in a date range |
| Files in a course |
| Metadata and an authenticated download link for a file |
| A course's modules and their items |
Security notes
Keep your token out of git.
.envis already in.gitignore. Copy.env.exampleto.envif you'd rather keep your token in a file.If a token leaks, delete it under Approved Integrations in Quercus and create a new one.
Check your school's policies on third-party tools before using this.
Development
npm run build # compile TypeScript to dist/
npm start # run the server over stdioSource is in src/: canvas.ts handles the API client and pagination, and index.ts defines the tools.
Disclaimer
This is an independent student project. It isn't affiliated with or endorsed by the University of Toronto or Instructure.
License
MIT © 2026 Lance Li
Available Tools
11 toolsget_course_gradesGet grades for a courseC
Get the current user's grades/enrollment info for a specific course.
Inputs: course_id (required).
get_course_modulesList course modulesC
List the modules (and items) for a Quercus course.
Inputs: course_id (required).
get_file_download_urlGet a file's download URLB
Resolve a Quercus file ID to its metadata and authenticated download URL.
Inputs: file_id (required).
list_all_gradesList grades across all coursesA
List the current user's enrollments and grades across all active courses.
Inputs: no named parameters.
list_announcementsList announcementsC
List announcements for one or more courses (context_codes like 'course_12345').
Inputs: course_ids (required).
list_assignmentsList assignments for a courseC
List assignments for a given Quercus course, optionally filtered by bucket.
Inputs: course_id (required), bucket.
list_calendar_eventsList calendar eventsB
List calendar events/assignments in a date range across given course context codes.
Inputs: end_date (required), course_ids (required), start_date (required), type.
list_coursesList coursesC
List the user's Quercus courses.
Inputs: enrollment_state.
list_filesList course filesC
List files available in a Quercus course.
Inputs: course_id (required).
list_todoList to-do itemsA
List the current user's Quercus to-do items (ungraded submissions, upcoming quizzes, etc.).
Inputs: no named parameters.
list_upcoming_eventsList upcoming eventsB
List the current user's upcoming Quercus events and assignment due dates.
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 11 tools
Most tools target distinct resources (courses, assignments, grades, announcements, files, modules). The only meaningful overlap is between list_upcoming_events and list_calendar_events, both of which return events/assignment due dates, though descriptions clarify one is upcoming and the other is a custom date range.
Every tool uses snake_case with a consistent verb_noun pattern: all are either list_* or get_* prefixed. The convention is applied uniformly across all 11 tools.
11 tools is a well-scoped set for a Quercus integration, covering the main read-only resources without unnecessary bloat. Each tool has a clear purpose.
The surface is entirely read-only (list/get) and lacks any create, update, or delete operations, such as submitting assignments, posting to discussions, or uploading files. While read coverage is solid, these are notable gaps for an LMS agent.
Maintenance
Related MCP Connectors
Connect Claude to your Platform7n workspaces: chat, links, work and decks. One-click OAuth.
Connect Claude to your Platform7n workspaces: chat, links, work and decks. One-click OAuth.
Give Claude only the Google Drive files you choose. Every action logged.
AI-powered corporate learning platform — manage courses, users, and insights via Claude.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceConnects Claude to Canvas LMS, enabling students to query their coursework, assignments, grades, deadlines, announcements, and calendar events through natural conversation instead of navigating the Canvas interface.8-
- AlicenseNot gradedqualityDmaintenanceConnects Claude to Canvas LMS accounts, enabling natural language queries about courses, assignments, grades, and files. Supports content search, file downloads, syllabus retrieval, and bulk course exports via 13 integrated tools.13 npmMIT
- FlicenseNot gradedqualityDmaintenanceConnects Claude AI to your Canvas LMS account, enabling natural language interaction with coursework including assignments, grades, announcements, and calendar.-
- FlicenseNot gradedqualityDmaintenanceConnects Claude to the Canvas LMS REST API, enabling natural language queries about courses, assignments, grades, deadlines, and announcements.1-