Skip to main content
Glama

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

  1. Sign in to Quercus.

  2. Go to Account → Settings → Approved Integrations.

  3. 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 build

3. 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.js

Start 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

list_courses

Your active, completed, or all enrolled courses

list_assignments

Assignments for a course, optionally filtered (upcoming, overdue, ungraded, and more)

get_course_grades

Your grade and enrollment info for one course

list_all_grades

Your grades across all courses

list_announcements

Announcements for one or more courses

list_todo

Your Quercus to-do list

list_upcoming_events

Upcoming events and due dates

list_calendar_events

Calendar events or assignments in a date range

list_files

Files in a course

get_file_download_url

Metadata and an authenticated download link for a file

get_course_modules

A course's modules and their items

Security notes

  • Keep your token out of git. .env is already in .gitignore. Copy .env.example to .env if 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 stdio

Source 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 tools
get_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

    B3.3/5.0

    Scored across 11 tools

    Disambiguation4/5

    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.

    Naming Consistency5/5

    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.

    Tool Count5/5

    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.

    Completeness3/5

    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

    ActivitySlowing
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers