Skip to main content
Glama
Canvas LMS MCP – Remote Edition

Canvas LMS MCP – Remote Edition

TIP

Want it to run locally, on just your own computer? Go to the Local Edition → (website). It has the same 237 tools, with no tunnel, no password and a one-command setup.

Canvas LMS MCP: Remote Edition

Use Canvas from your AI assistant on any device: web, desktop and mobile. Always on, password-protected, with automatic failover across several computers.

237 tools · OAuth 2.1 · Status page · Phone alerts · ngrok or Cloudflare tunnel · Multi-computer failover

npm npm downloads npm downloads per month Release downloads Tests Windows app Glama score GitHub stars Node.js MCP License: MIT Website PRs welcome

Website · Quick start · Multi-device guide · Configuration · Tools · Phone alerts · Security · Changelog

TIP

On Windows? Skip the terminal. The free Canvas MCP Installer Assistant sets this up for Claude or the ChatGPT desktop app with pictures and a check after every step, or does every step for you. Download for Windows


Remote or Local?

Remote (this repo)

Local

Works with

Any MCP client that supports remote servers, on any device

Claude Desktop, the ChatGPT desktop app and other MCP clients on this computer

When it runs

Always on, in the background

Only while your AI app is open

You need

Node.js (or Docker), a Canvas token, an ngrok or Cloudflare account and a password

Node.js and a Canvas token

Internet exposure

Public HTTPS address, password-protected

None

Multiple computers

Automatic failover (guide)

Install it separately on each one

Related MCP server: canvas-lms

Highlights

  • Your day and week: daily_briefing, get_week_ahead, semester_snapshot, planner notes, checking items off your To Do list

  • Study plans: study_plan spreads study time before each deadline; schedule_study_plan puts it on your Canvas calendar

  • Grade intelligence: final_grade_scenarios, what_if_grade, grade_impact_ranking, calculate_gpa, full weighted breakdowns

  • Assignments, submissions, discussions and inbox: assignment_brief in one call; submit, post and message after a preview

  • Content: read lecture PDFs, Word docs and slides with read_course_file; downloads come back as links your phone can open

  • Phone alerts: new grades, announcements, work due soon, new assignments, teacher comments, messages and more, by ntfy, Discord, Telegram, Slack, Teams or Pushover, instantly or as a daily digest

  • Status page: see from any browser whether your server is online, who is signed in, and sign apps out

  • Secure remote access: password-gated OAuth 2.1 with lockout, a login history and optional two-factor codes, over an ngrok or Cloudflare tunnel

  • Multi-computer failover: run it on two or more computers, and if one sleeps, another takes over in about a minute

How it works

 Your AI app (web / desktop / mobile / CLI)
          │  HTTPS + OAuth
          ▼
   your-domain.ngrok-free.dev ──►  supervisor.js  ──►  index.js (127.0.0.1:3939/mcp)  ──►  Canvas API
   (or a Cloudflare hostname)      (keeps it alive,     (237 tools, OAuth, status page,
                                    failover)            phone alerts)

Quick start

NOTE

Rather click than type? Download the Canvas MCP Installer Assistant for Windows. It walks you through these steps with pictures and checks each one as you go, for both the Remote and Local editions. See screenshots.

Windows may show "Windows protected your PC" because the app isn't code-signed yet. Click More info, then Run anyway.

You need: Node.js 18+ (22+ to read PDFs), a Canvas account and a free ngrok account (or a Cloudflare account with your own domain). Prefer containers? See Docker.

1. Install

With npm (easiest):

npm install -g canvas-lms-mcp-remote
mkdir canvas-mcp
cd canvas-mcp
canvas-lms-mcp-remote init

That folder is your settings folder. It holds your .env, logins and logs, so run every later step from it.

Or from source: git clone https://github.com/Fireiscoolsolo/canvas-lms-mcp-server.git, then run npm install inside the folder. No git? Download the zip from the latest release instead. The repo folder is then your settings folder.

Command

What it does

canvas-lms-mcp-remote init

Create a .env template in the current folder

canvas-lms-mcp-remote

Start the supervisor: server, tunnel and failover

canvas-lms-mcp-remote serve

Start only the HTTP server on 127.0.0.1 (no tunnel)

canvas-lms-mcp-remote install-service

Start it automatically when you sign in (Windows, Linux or macOS)

canvas-lms-mcp-remote uninstall-service

Stop starting it automatically

canvas-lms-mcp-remote stop / restart

Stop the running supervisor, or stop and start it again

canvas-lms-mcp-remote status

Is it running, which computer is serving, who is signed in

canvas-lms-mcp-remote logs [-f]

Show the end of supervisor.log (-f keeps following it)

canvas-lms-mcp-remote doctor

Check settings, token, tunnel and startup service, and say how to fix problems

canvas-lms-mcp-remote test-alert

Send a test phone alert

canvas-lms-mcp-remote sessions [sign-out <id> | sign-out-all | tidy]

List or sign out connected apps

canvas-lms-mcp-remote rotate-password

Make a new password and sign every app out

canvas-lms-mcp-remote totp-setup / totp-off

Turn two-factor codes on or off

canvas-lms-mcp-remote cluster

List the computers in your group

canvas-lms-mcp-remote takeover

Make this computer the one that serves

canvas-lms-mcp-remote uninstall

Stop it, remove the startup service and say how to remove the package

canvas-lms-mcp-remote --stdio

Serve over stdin/stdout, for directories that inspect servers

From source, use node cli.js <command> instead.

2. Create a Canvas token

In Canvas, go to Account → Settings → Approved Integrations → + New Access Token. Canvas only shows the token once, so copy it right away.

3. Set up a tunnel

ngrok (default). On Windows:

winget install --id Ngrok.Ngrok -e
ngrok update                                   # the winget version is often too old (ERR_NGROK_121)
ngrok config add-authtoken <your-ngrok-authtoken>

On a Mac, with Homebrew:

brew install ngrok
ngrok config add-authtoken <your-ngrok-authtoken>

On Linux, install it from ngrok's download page, then run the same ngrok config add-authtoken line.

The server finds ngrok by itself: the winget install on Windows, and on a Mac or Linux your PATH plus the folders Homebrew, snap and the usual installers use. If yours is somewhere else, put its full path in CANVAS_MCP_NGROK_PATH.

Then claim your free static domain in the ngrok dashboard, e.g. your-name.ngrok-free.dev.

  1. Install cloudflared (downloads; on Windows winget install --id Cloudflare.cloudflared, on a Mac brew install cloudflared). The server finds it the same way as ngrok, or set CANVAS_MCP_CLOUDFLARED_PATH.

  2. In the Cloudflare dashboard, open Zero Trust → Networks → Tunnels, create a tunnel and copy its token.

  3. Add a public hostname to the tunnel, e.g. canvas.yourdomain.com, pointing at http://localhost:3939.

  4. In .env, set CANVAS_MCP_TUNNEL=cloudflared, CANVAS_MCP_CLOUDFLARED_TOKEN=<token> and CANVAS_MCP_PUBLIC_URL=https://canvas.yourdomain.com.

Using your own reverse proxy or Tailscale Funnel instead? Set CANVAS_MCP_TUNNEL=none and point it at port 3939.

4. Configure .env

Fill in the .env that init created. From source, copy .env.example to .env first. Generate the password and secret with:

node -e "console.log(require('crypto').randomBytes(32).toString('base64url'))"

5. Test it

canvas-lms-mcp-remote doctor
canvas-lms-mcp-remote

doctor checks your settings, token and tunnel first. Then wait until you see active and serving at https://…, and press Ctrl+C.

6. Run it automatically when you sign in

canvas-lms-mcp-remote install-service

On Windows this creates the CanvasSupervisor scheduled task, on Linux a systemd user service, and on macOS a launch agent. All of them restart it if it crashes and write supervisor.log in your settings folder, rotating it at 5 MB.

In PowerShell, from your settings folder (the repo folder, if you installed from source):

$dir      = (Get-Location).Path
$action   = New-ScheduledTaskAction -Execute "$dir\run-supervisor.cmd" -WorkingDirectory $dir
$trigger  = New-ScheduledTaskTrigger -AtLogOn -User "$env:USERDOMAIN\$env:USERNAME"
$settings = New-ScheduledTaskSettingsSet -RestartCount 999 -RestartInterval (New-TimeSpan -Minutes 1) -ExecutionTimeLimit ([TimeSpan]::Zero) -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -MultipleInstances IgnoreNew
Register-ScheduledTask -TaskName CanvasSupervisor -Action $action -Trigger $trigger -Settings $settings -Force
Start-ScheduledTask -TaskName CanvasSupervisor

run-supervisor.cmd assumes Node is at C:\Program Files\nodejs\node.exe. If yours is somewhere else, edit that file.

7. Connect your AI app, on every device

In your AI app's settings, add a custom connector (also called a remote MCP server) with the URL https://<your-domain>/mcp, then log in with your password. Apps that sync connectors to your account will show it on your phone and desktop too. Command-line and editor clients can add it as an HTTP MCP server with the same URL.

  1. Open Settings → Plugins, go to the MCPs tab, then click Add → Add MCP server.

  2. Choose Streamable HTTP and fill in the form:

    Field

    Value

    Name

    canvas-remote

    URL

    https://<your-domain>/mcp

    Headers

    ngrok-skip-browser-warning = 1

  3. Click Save, then Authenticate and log in with your password. Start a new chat to use it.

The header skips the page ngrok's free plan shows before your server.

Then ask your assistant: "Run test_connection."

Status page

Open https://<your-domain>/status in any browser and enter your password. It shows whether the server is online and which computer is serving, your Canvas connection and when the token expires, the apps that are signed in (each with a Sign out button), recent sign-ins, the computers in your group, your phone-alert settings and recent problems. Nothing secret is ever shown, and the page locks itself after 12 hours, or when the server restarts. Lock ends that sign-in everywhere. Wrong passwords here count toward the same lockout as the login page, and show up in recent sign-ins.

From a terminal, canvas-lms-mcp-remote status and canvas-lms-mcp-remote sessions show the same things.

Multiple computers

You can run the same server on two or more computers, for example a desktop and a laptop, so it stays online when one is off or asleep. One computer serves; the others wait in standby and take over automatically.

Follow the step-by-step Multi-Device Setup Guide. It covers copying settings safely, the shared tunnel, the startup service, checking it works, testing failover, updating code and changing secrets. canvas-lms-mcp-remote cluster lists the computers, and canvas-lms-mcp-remote takeover moves serving to the computer you're on.

Docker

For a home server or NAS: copy .env.example to .env, fill it in with your own password and cluster secret (the server won't start with the example values), add NGROK_AUTHTOKEN=<your ngrok authtoken>, then:

docker compose up -d

docker-compose.yml runs the server and an ngrok tunnel, keeping your logins in a Docker volume. It also has a commented-out Cloudflare Tunnel service to use instead. One container serves, so there's no failover between computers in this setup; Docker restarts it if it stops.

Configuration

All settings are environment variables in .env. See .env.example.

Variable

Required

Default

Description

CANVAS_API_TOKEN

Yes

—

Your Canvas personal access token

CANVAS_BASE_URL

Yes

—

e.g. https://yourschool.instructure.com

CANVAS_MCP_PUBLIC_URL

Yes

—

Your public address (ngrok static domain or Cloudflare hostname)

CANVAS_MCP_PASSWORD

Yes

—

Password for the login and status pages. Use 12 or more characters

CANVAS_MCP_CLUSTER_SECRET

Yes

—

Secret that protects the /internal/* endpoints the computers use to coordinate. At least 16 random characters

CANVAS_MCP_TOTP_SECRET

—

Turns on two-factor codes; set it up with canvas-lms-mcp-remote totp-setup

CANVAS_MCP_TUNNEL

ngrok

ngrok, cloudflared, or none if you route the address yourself

CANVAS_MCP_CLOUDFLARED_TOKEN

—

Tunnel token from the Cloudflare dashboard

CANVAS_MCP_FAILOVER_SECONDS

50

How long the serving computer can be silent before another takes over

CANVAS_ALLOW_WRITES

true

false (or 0, no, off) = nothing in Canvas can change. A value it can't read stops the server

CANVAS_PROFILE

full

core = curated subset of tools. A value it can't read stops the server

CANVAS_TOOLS / CANVAS_DISABLE_TOOLS

all / —

Only these tool groups or tools, or leave these out

CANVAS_CACHE_TTL

60

Response cache time in seconds

CANVAS_TIMEZONE

system

IANA time zone for dates, digests and quiet hours

CANVAS_DOWNLOAD_DIR

./canvas-downloads

Where download tools save files. They can't save anywhere outside it

CANVAS_IP_FAMILY

both

4 or 6 uses only that kind of address. Worth trying if new connections time out

CANVAS_MCP_HOST / _PORT

127.0.0.1 / 3939

Bind address

CANVAS_MCP_OAUTH_STORE_PATH

./oauth-store.json

Token store

CANVAS_MCP_NGROK_PATH

found by itself

Full path to ngrok, if the server can't find it (it looks in the winget install on Windows, and on PATH and in the Homebrew, snap and usual install folders elsewhere)

CANVAS_MCP_TRUST_PROXY

loopback

Which proxy's visitor address to trust; Docker uses uniquelocal

CANVAS_MCP_TRANSPORT

http

stdio (or the --stdio flag) serves over stdin/stdout instead of HTTP. Used by directories that inspect servers. For everyday local use, see the Local Edition

Phone-alert settings are listed in Phone alerts.

Tools

Group

Count

Highlights

Identity

27

check_token_expiry, notification preferences, custom-data storage

Courses

17

course_contacts (teachers, TAs, office hours), permissions, nicknames

Assignments

13

assignment_brief, list_missing_submissions, get_late_policy

Submissions

17

text, URL, file and annotation submission, comments, rubric assessments

Grades

15

final_grade_scenarios, what_if_grade, compute_needed_score, grade_impact_ranking, calculate_gpa

Quizzes

12

read-only: dates, attempts, reviews

Discussions

21

get_full_topic_view, replies, school-wide announcements, mark announcements read

Inbox

14

messaging, find_recipients, threads

Calendar

11

events, office-hours booking

Content

36

files, pages, modules, captions, ePortfolios, read_course_file for PDF, Word and PowerPoint, course export

Groups

11

group workspaces

Rubrics

11

peer reviews

Search

3

smart_search with keyword fallback

Planner

12

daily_briefing, planner notes, mark_planner_item_done, study_plan, export_deadlines_ics, calendar feed

Planning

13

get_week_ahead, semester_snapshot, study_priority_ranking, semester_wrap_up, export_all_courses

Meta

4

raw_canvas_request for any endpoint not listed above

Prompts and attachments

The server also adds these to your AI app's menus. They don't count as tools.

  • Prompts: Daily briefing, Plan my week, Plan my study blocks, What did I miss?, Start this assignment, Prep me for an exam, How are my grades?, Am I on track to pass?, Catch me up on a course, Draft an email to my professor and Semester wrap-up. Each one tells the assistant which tools to use, and course names autocomplete.

  • Attachments: attach a course syllabus, or an assignment due in the next 14 days, to a chat the same way you'd attach a file.

Apps that support MCP prompts and resources, such as Claude Desktop, show them in the + menu.

Phone alerts

Because the Remote Edition is always on, it can tell you when something happens. On by default once you set a channel:

  • New grades (several at once arrive as one summary)

  • New announcements

  • Work due within 24 hours that you haven't submitted yet

  • A Canvas token that expires within 5 days

Add any of these to CANVAS_ALERTS to turn them on too: assignments (new assignments, quizzes and discussions), comments (a teacher commented on your work), inbox (new messages), grade_drop (a course grade fell below CANVAS_ALERTS_GRADE_BELOW, default 70%) and security (sign-ins and lockouts on your server).

Where they go. Add any of these to .env, then restart the server:

Channel

Settings

ntfy phone app

CANVAS_ALERTS_NTFY_TOPIC: a long, hard-to-guess topic name (it works like a password). CANVAS_ALERTS_NTFY_SERVER for your own server

Discord

CANVAS_ALERTS_DISCORD_WEBHOOK: a webhook from a channel's Settings → Integrations → Webhooks

Telegram

CANVAS_ALERTS_TELEGRAM_TOKEN (from @BotFather) and CANVAS_ALERTS_TELEGRAM_CHAT_ID

Slack

CANVAS_ALERTS_SLACK_WEBHOOK: an incoming webhook URL

Microsoft Teams

CANVAS_ALERTS_TEAMS_WEBHOOK: a Workflows incoming webhook URL

Pushover

CANVAS_ALERTS_PUSHOVER_TOKEN and CANVAS_ALERTS_PUSHOVER_USER

When they come.

Setting

Default

What it does

CANVAS_ALERTS_DIGEST

—

One summary a day at this time, e.g. 07:30: what's due today and tomorrow, new grades, missing work and unread messages

CANVAS_ALERTS_MODE

both with a digest

digest sends only urgent alerts (due soon, token, security) in between digests; instant turns the digest off

CANVAS_ALERTS_QUIET

—

e.g. 22:00-07:00: non-urgent alerts wait until the morning and arrive as one summary

CANVAS_ALERTS_COURSES / _SKIP_COURSES

all

Only (or never) these courses, by ID or part of the name

CANVAS_ALERTS_DUE_HOURS

24

How far ahead "due soon" alerts look

CANVAS_ALERTS_INTERVAL_MINUTES

15

How often to check (at least 5)

Then run canvas-lms-mcp-remote test-alert from your settings folder to check it works.

Only the computer that is serving sends alerts, and it remembers what it already sent in your Canvas account's own storage, so you don't get repeats when another computer takes over. Alert text passes through the service you pick, so keep the topic, channel or chat private.

Security

  • Confirmation gate: tools that send, submit, post, upload or delete return a preview and a one-time token first. The token only works for that exact request, for 5 minutes, and is refused if the assignment or file changed. It can't prove you agreed, so keep your AI app's own "ask before running" setting on for these tools.

  • Prompt-injection fencing: text other people wrote is wrapped in <<<CANVAS_CONTENT>>> markers and labelled as untrusted.

  • Your token only goes to Canvas: every request is checked, so no tool can send it anywhere else.

  • The server's disk: downloads only go in the download folder and never replace a file. Uploads refuse .env files, keys, sign-in files and this server's settings folder.

  • No quiz-taking: quiz attempt endpoints are deliberately not included, and writes to them are refused for every tool, however the address is written.

  • Loopback only: the server listens on 127.0.0.1. The only way in from outside is the tunnel.

  • It won't start open: with a public address it refuses to start without a real password, and it refuses the example values from .env.example.

  • OAuth 2.1: login is limited to 10 attempts per 15 minutes per address, and five wrong passwords lock that address out for 15 minutes. Access tokens last 1 hour, and refresh tokens are replaced every time they're used. An old refresh token used again signs that sign-in out. Tokens meant for another server are refused. The password check takes the same time whatever you type.

  • Look-alike apps are flagged: the login page shows where you go back to after connecting, and warns you when an app calls itself Claude or ChatGPT but would send your sign-in somewhere else.

  • Two-factor codes (optional): canvas-lms-mcp-remote totp-setup adds a code from your authenticator app to the login and status pages. Each code works once.

  • You can see and end sign-ins: the status page lists signed-in apps and recent sign-in attempts. Unused apps are signed out after 90 days, and rotate-password signs everyone out.

  • Separate coordination secret: the endpoints the computers use to coordinate need a separate shared secret, compared in constant time. Too many wrong guesses lock that address out.

  • No secrets in logs: tokens, passwords and webhook keys are removed from every log line. The public /healthz check says nothing about your account.

  • Download links expire: files the server saves are shared through private links that work for one hour.

Never commit .env, oauth-store.json, login-history.json or supervisor.log. They're already listed in .gitignore. See SECURITY.md.

Responsible use

This is a study and organization tool. It helps you see deadlines, understand your grades and plan your week. It never takes quizzes, and nothing is sent or submitted until you've seen a preview and confirmed it.

  • Follow your school's academic integrity and acceptable-use policies. Some schools restrict personal API tokens or third-party tools.

  • Want to be sure nothing in Canvas changes? Set CANVAS_ALLOW_WRITES=false for read-only mode. Downloads still work, into your download folder.

Troubleshooting

Start with canvas-lms-mcp-remote doctor in your settings folder: it checks the settings, token, network, tunnel, server and startup service, and says how to fix what it finds.

Symptom

Fix

ERR_NGROK_121

Your ngrok version is too old. Run ngrok update

ERR_NGROK_334 … already online

Another computer or a leftover ngrok.exe holds the domain. This is normal for a standby computer

ERR_NGROK_3200 (endpoint offline)

No computer is serving. Check canvas-lms-mcp-remote logs

ngrok shows a "You are about to visit…" page at login

This is normal on the free plan. Click Visit Site, or use Cloudflare Tunnel, which has no such page

startup check failed

Check CANVAS_BASE_URL and your internet connection

"Your Canvas token was rejected"

Your token expired. Create a new one and put it in .env

Reading works but uploads or new connections time out

Run doctor on that computer: its Network section times DNS and tests every connection. The server works around a slow DNS lookup by itself, so if a connection still fails, look for a VPN, proxy or firewall

"File not found on the computer running this server"

The server reads files from its own disk, so the path must exist on the computer named in the error, not the one you're chatting from

New tools don't show up

Reconnect the connector or restart your AI app

supervisor.log keeps growing

Run canvas-lms-mcp-remote install-service again to switch to the rotating log

More issues with several computers are covered in the Multi-Device guide.

Restart cleanly with canvas-lms-mcp-remote restart. Running an older version that doesn't know it? In PowerShell:

Stop-ScheduledTask -TaskName CanvasSupervisor -ErrorAction SilentlyContinue
Get-CimInstance Win32_Process -Filter "Name='node.exe'" | Where-Object { $_.CommandLine -match 'supervisor\.js|index\.js' } | ForEach-Object { Stop-Process -Id $_.ProcessId -Force }
Get-Process ngrok -ErrorAction SilentlyContinue | Stop-Process -Force
Start-ScheduledTask -TaskName CanvasSupervisor

Known limits: a student token can't reach admin endpoints, gradebook history, course analytics or quiz statistics. smart_search is a Canvas beta feature and often returns 404. While the server is reached over the tunnel, apps get a preview before actions instead of a pop-up confirmation.

License

MIT. This project isn't affiliated with Instructure.

Available Tools

237 tools
add_favorite_courseAdd Favorite CourseA
Idempotent

Star a course as a favorite so it shows on your Canvas dashboard. Only affects your own view. Reverse with remove_favorite_course.

Inputs: course_id (required).

add_recipientsAdd RecipientsA
Destructive

Add more people to an existing Inbox conversation so they receive its messages. Get user IDs from find_recipients. [NEEDS CONFIRMATION: call it once for a preview and a confirm_token, show the preview to the user, and only if they say yes call it again with the same arguments, confirm=true and that confirm_token. Apps that can ask the user directly show a confirmation instead.]

Inputs: recipients (required), conversation_id (required), confirm, confirm_token.

archive_conversationArchive ConversationA

Archive an Inbox conversation so it leaves your inbox view; it stays under the archived scope. Only affects you.

Inputs: conversation_id (required).

assignment_briefAssignment BriefA
Read-onlyIdempotent

Everything needed to start an assignment, in one call: the instructions as clean text, due and lock dates, how to submit, attempts, the rubric, the late policy, linked files, group and peer-review details, and your current status.

Inputs: course_id (required), assignment_id (required).

batch_update_conversationsBatch Update ConversationsA
Destructive

Apply one action (mark read or unread, star, unstar, archive or delete) to many Inbox conversations at once. Only affects your own inbox. [NEEDS CONFIRMATION: call it once for a preview and a confirm_token, show the preview to the user, and only if they say yes call it again with the same arguments, confirm=true and that confirm_token. Apps that can ask the user directly show a confirmation instead.]

Inputs: event (required), conversation_ids (required), confirm, confirm_token.

calculate_gpaCalculate GpaA
Read-onlyIdempotent

Calculate your GPA on a 4.0 scale from your current Canvas grades, weighted by credit hours. Read-only. Uses the letter grade Canvas shows, or converts the percent (93+ A, 90 A-, 87 B+ and so on). Supports what-if grades and extra points for honors or AP classes. Pass-fail courses are listed as excluded.

Inputs: credits, what_if, extra_points, default_credits, +1 more.

cancel_reservationCancel ReservationA
Destructive

Cancel an appointment slot you booked. The instructor can see the cancellation. Get event_id from list_my_reservations. [NEEDS CONFIRMATION: call it once for a preview and a confirm_token, show the preview to the user, and only if they say yes call it again with the same arguments, confirm=true and that confirm_token. Apps that can ask the user directly show a confirmation instead.]

Inputs: event_id (required), confirm, cancel_reason, confirm_token.

check_token_expiryCheck Token ExpiryA
Read-onlyIdempotent

Check when your Canvas access token expires and warn if it is close. Read-only. Canvas often forces student tokens to expire after 30–120 days without warning, so run this at the start of a term.

Inputs: no named parameters.

compute_needed_scoreCompute Needed ScoreA
Read-onlyIdempotent

Calculate the average you need on remaining ungraded work in a course to reach a target final percentage, accounting for group weights. Pure math with no writes. Use what_if_grade to test one specific score with Canvas itself.

Inputs: course_id (required), target_percent (required).

course_contactsCourse ContactsA
Read-onlyIdempotent

Who to contact in a course and when: the teachers and TAs (with the user IDs send_message needs), office hours found in the syllabus, and office-hour or advising sign-up slots. Read-only.

Inputs: course_id (required).

course_health_checkCourse Health CheckA
Read-onlyIdempotent

Get a full status check for one course: current grade, missing and ungraded work, upcoming deadlines and unread discussions. Read-only. Use semester_snapshot for all courses at once.

Inputs: course_id (required).

create_bookmarkCreate BookmarkA

Save a Canvas bookmark to a course page or any Canvas URL. Only you see it. Returns the new bookmark with its ID. Use list_bookmarks to see existing ones.

Inputs: url (required), name (required), position.

create_content_exportCreate Content ExportA
Destructive

Start a course export as a .imscc Common Cartridge or a zip of files. Canvas packages it in the background; poll get_content_export with the returned ID. export_course_archive does export and download in one step. [NEEDS CONFIRMATION: call it once for a preview and a confirm_token, show the preview to the user, and only if they say yes call it again with the same arguments, confirm=true and that confirm_token. Apps that can ask the user directly show a confirmation instead.]

Inputs: course_id (required), confirm, export_type, confirm_token.

create_folderCreate FolderA

Create a folder in your personal Canvas storage (not in a course). Only you can see it. Returns the new folder with its ID. Upload into it with upload_to_my_files.

Inputs: name (required), parent_folder_id.

create_personal_eventCreate Personal EventA

Create an event on your own Canvas calendar (only you see it). Returns the new event with its ID. Use update_calendar_event to change it later.

Inputs: title (required), start_at (required), end_at, description, +1 more.

create_planner_noteCreate Planner NoteA

Add a to-do note to your Canvas planner, e.g. "Email Prof. Lee about the extension". It shows on your Canvas To Do list and calendar. Only you see it.

Inputs: title (required), todo_date (required), details, course_id.

daily_briefingDaily BriefingA
Read-onlyIdempotent

Today at a glance: today's classes and events, what is due today and tomorrow, missing work, grades posted in the last day, unread announcements and your unread inbox count, in one call.

Inputs: no named parameters. Returns: date, missing, timezone, due_today, +6 more

deadline_conflict_checkDeadline Conflict CheckA
Read-onlyIdempotent

Find days in the next N days where several assignments are due at once, weighted by points, so you can spot pileups early. Read-only.

Inputs: days, min_items.

delete_bookmarkDelete BookmarkA
DestructiveIdempotent

Delete one of your saved Canvas bookmarks. Only affects you. Get bookmark_id from list_bookmarks. [NEEDS CONFIRMATION: call it once for a preview and a confirm_token, show the preview to the user, and only if they say yes call it again with the same arguments, confirm=true and that confirm_token. Apps that can ask the user directly show a confirmation instead.]

Inputs: bookmark_id (required), confirm, confirm_token.

delete_calendar_eventDelete Calendar EventA
DestructiveIdempotent

Delete a calendar event you own, such as a personal event. Cannot be undone. Course events return a permission error. [NEEDS CONFIRMATION: call it once for a preview and a confirm_token, show the preview to the user, and only if they say yes call it again with the same arguments, confirm=true and that confirm_token. Apps that can ask the user directly show a confirmation instead.]

Inputs: event_id (required), confirm, confirm_token.

delete_conversationDelete ConversationA
DestructiveIdempotent

Delete an Inbox conversation from your own inbox. Other participants keep their copy. Cannot be undone. [NEEDS CONFIRMATION: call it once for a preview and a confirm_token, show the preview to the user, and only if they say yes call it again with the same arguments, confirm=true and that confirm_token. Apps that can ask the user directly show a confirmation instead.]

Inputs: conversation_id (required), confirm, confirm_token.

delete_my_entryDelete My EntryA
DestructiveIdempotent

Delete one of your own discussion entries, if the course allows it. Classmates see that an entry was removed. [NEEDS CONFIRMATION: call it once for a preview and a confirm_token, show the preview to the user, and only if they say yes call it again with the same arguments, confirm=true and that confirm_token. Apps that can ask the user directly show a confirmation instead.]

Inputs: entry_id (required), topic_id (required), course_id (required), confirm, +1 more.

delete_my_fileDelete My FileA
DestructiveIdempotent

Delete a file from your personal Canvas storage. Cannot be undone. Get file_id from list_my_files. [NEEDS CONFIRMATION: call it once for a preview and a confirm_token, show the preview to the user, and only if they say yes call it again with the same arguments, confirm=true and that confirm_token. Apps that can ask the user directly show a confirmation instead.]

Inputs: file_id (required), confirm, confirm_token.

delete_planner_noteDelete Planner NoteA
DestructiveIdempotent

Delete one of your Canvas planner notes. This only affects your own notes. [NEEDS CONFIRMATION: call it once for a preview and a confirm_token, show the preview to the user, and only if they say yes call it again with the same arguments, confirm=true and that confirm_token. Apps that can ask the user directly show a confirmation instead.]

Inputs: note_id (required), confirm, confirm_token.

diff_since_last_checkDiff Since Last CheckA
Read-onlyIdempotent

List what changed since a given time, or since the last time you asked: newly posted grades, announcements, discussion replies and inbox messages, from your activity stream. Read-only apart from remembering when you last checked, so "what's new?" works without a date.

Inputs: since.

dismiss_global_announcementDismiss Global AnnouncementA
Idempotent

Close a school-wide announcement so it stops showing on your Canvas dashboard. Only affects you.

Inputs: notification_id (required), account_id.

dismiss_planner_itemDismiss Planner ItemA
Idempotent

Hide an item from your Canvas To Do list and its "new activity" badge, without marking it done. This only changes your own list.

Inputs: plannable_id (required), plannable_type (required).

download_all_course_filesDownload All Course FilesA
Idempotent

Download every file you can access in a course to local disk, up to max_files (default 50). Writes local files only; nothing changes in Canvas. Can take many requests and a lot of disk space; use download_file for one file.

Inputs: course_id (required), dest_dir, max_files, content_types.

download_fileDownload FileA
Idempotent

Download one Canvas file and save it to local disk. Returns the saved path and size. Get file_id from list_course_files or list_my_files.

Inputs: file_id (required), dest_dir.

download_media_captionsDownload Media CaptionsA
Idempotent

Download a lecture's caption track and save it as a text transcript on local disk. Returns the saved path. Get media_id from list_media_objects and track_id from get_media_captions.

Inputs: media_id (required), dest_dir, track_id.

download_submission_attachmentDownload Submission AttachmentA
Idempotent

Download one file attached to your submission and save it to local disk. Returns the saved path. Get the URL from list_submission_attachments.

Inputs: url (required), filename.

edit_my_entryEdit My EntryA
Destructive

Replace the text of one of your own discussion entries, if the course allows editing. The new text is visible to the whole class. [NEEDS CONFIRMATION: call it once for a preview and a confirm_token, show the preview to the user, and only if they say yes call it again with the same arguments, confirm=true and that confirm_token. Apps that can ask the user directly show a confirmation instead.]

Inputs: message (required), entry_id (required), topic_id (required), course_id (required), +2 more.

export_all_coursesExport All CoursesA

Ask Canvas to package every active course (or the ones you pick) as a downloadable .imscc archive, in one step. Nothing in the courses changes. Use before the term ends. [NEEDS CONFIRMATION: call it once for a preview and a confirm_token, show the preview to the user, and only if they say yes call it again with the same arguments, confirm=true and that confirm_token. Apps that can ask the user directly show a confirmation instead.]

Inputs: confirm, course_ids, confirm_token.

export_course_archiveExport Course ArchiveA
Destructive

Export a whole course, wait for Canvas to package it, then download the .imscc archive to local disk. Nothing in the course changes. Can take several minutes; use it before a term ends and access disappears. [NEEDS CONFIRMATION: call it once for a preview and a confirm_token, show the preview to the user, and only if they say yes call it again with the same arguments, confirm=true and that confirm_token. Apps that can ask the user directly show a confirmation instead.]

Inputs: course_id (required), confirm, dest_dir, confirm_token, +1 more.

export_deadlines_icsExport Deadlines IcsA
Idempotent

Save your upcoming Canvas deadlines as an .ics calendar file you can import into Google Calendar, Apple Calendar or Outlook, with a reminder before each one. Nothing changes in Canvas.

Inputs: days, include_events, include_completed, remind_minutes_before.

final_grade_scenariosFinal Grade ScenariosA
Read-onlyIdempotent

What-if planning for a whole course: your projected final grade if you average 100, 90, 80, 70 or 60% on everything not graded yet, and the average you need on the rest for each letter grade. Uses the course's assignment-group weights and its own letter cutoffs when Canvas shares them. Read-only.

Inputs: course_id (required), targets.

find_recipientsFind RecipientsA
Read-onlyIdempotent

Search by name for people you are allowed to message, optionally within one course. Read-only. Returns the user IDs that send_message and add_recipients need.

Inputs: search (required), limit, course_id.

get_activity_streamGet Activity StreamA
Read-onlyIdempotent

Get recent activity across all your courses: new announcements, discussion replies, graded submissions and messages, newest first. Read-only. Titles and messages are fenced as untrusted text. For counts only, use get_activity_stream_summary; for one course, use get_course_activity_stream.

Inputs: page, limit, only_active_courses.

get_activity_stream_summaryGet Activity Stream SummaryA
Read-onlyIdempotent

Get counts of unread activity by type (announcements, discussions, messages, submissions) across your courses. Read-only and very cheap. Call it before get_activity_stream to see whether the full stream is worth pulling.

Inputs: no named parameters.

get_all_gradesGet All GradesA
Read-onlyIdempotent

Get your current and final grades for every active course in one call, including unposted grades where Canvas shows them. Read-only. Use get_course_grade_breakdown to see how one course's grade is calculated.

Inputs: no named parameters. Returns: courses

get_all_unreadGet All UnreadA
Read-onlyIdempotent

Get every unread item in one call: inbox messages, discussion replies, announcements and activity stream items. Read-only; nothing is marked as read.

Inputs: no named parameters.

get_appointment_groupGet Appointment GroupA
Read-onlyIdempotent

Get one appointment group (office hours or advising) with its time slots and remaining capacity. Read-only. Book a slot with reserve_appointment_slot using a slot ID from here.

Inputs: group_id (required).

get_assignmentGet AssignmentA
Read-onlyIdempotent

Get full details for one assignment: instructions, due/lock dates, points, submission types and the rubric. Read-only. Prompt text written by the instructor is fenced as untrusted. Get assignment_id from list_assignments.

Inputs: course_id (required), assignment_id (required).

get_assignment_datesGet Assignment DatesA
Read-onlyIdempotent

List due, lock and unlock dates for every assignment in a course, sorted by due date, in a compact form. Read-only. Use list_assignments when you also need submission status.

Inputs: course_id (required), page, limit.

get_assignment_groupGet Assignment GroupA
Read-onlyIdempotent

Get one assignment group (e.g. "Homework") with its weight, drop rules and assignments. Read-only. Use list_assignment_groups to see all groups and their IDs.

Inputs: group_id (required), course_id (required).

get_calendar_eventGet Calendar EventA
Read-onlyIdempotent

Get one calendar event: title, start and end time, location, description and the course it belongs to. Read-only. Get event_id from list_calendar_events.

Inputs: event_id (required).

get_calendar_feed_urlGet Calendar Feed URLA
Read-onlyIdempotent

Your personal Canvas calendar feed link and how to subscribe to it in Google Calendar, Apple Calendar or Outlook, so Canvas deadlines show up there and stay updated.

Inputs: no named parameters.

get_communication_channelsGet Communication ChannelsA
Read-onlyIdempotent

List the notification channels on your account (email addresses, SMS numbers, push) with their IDs and status. Read-only. Use a channel_id from here with get_notification_preferences.

Inputs: page, limit.

get_content_exportGet Content ExportA
Read-onlyIdempotent

Check a course export's status and get its download URL once Canvas has finished. Read-only. Start an export with create_content_export.

Inputs: course_id (required), export_id (required).

get_conversationGet ConversationA
Read-onlyIdempotent

Get the full message thread for one Inbox conversation, with authors and times. Read-only unless mark_as_read is true. Message bodies are fenced as untrusted.

Inputs: conversation_id (required), mark_as_read.

get_courseGet CourseA
Read-onlyIdempotent

Get full details for one course: name, code, term, start and end dates, syllabus and public description. Read-only. Use list_courses to find course IDs; use get_syllabus for the syllabus as plain text.

Inputs: course_id (required).

get_course_activity_streamGet Course Activity StreamA
Read-onlyIdempotent

Get recent activity in one course: announcements, discussion replies, grade changes and messages. Read-only. Titles and messages are fenced as untrusted. For all courses at once, use get_activity_stream.

Inputs: course_id (required), page, limit.

get_course_grade_breakdownGet Course Grade BreakdownA
Read-onlyIdempotent

Break down your grade in one course: each assignment group's weight, your points earned vs possible, and its weighted contribution to the total. Read-only. Use compute_needed_score to plan toward a target grade.

Inputs: course_id (required).

get_course_paceGet Course PaceA
Read-onlyIdempotent

Get the pacing plan for a self-paced course: suggested days for each module and the resulting dates. Read-only. Returns an error if course pacing is not used.

Inputs: course_id (required).

get_course_permissionsGet Course PermissionsA
Read-onlyIdempotent

Show what your token is allowed to do in a course, such as posting to discussions or sending messages. Read-only. Call it before a write tool to avoid an action failing halfway.

Inputs: course_id (required).

get_course_progressGet Course ProgressA
Read-onlyIdempotent

Get your module completion progress in a course: requirements met, total requirements and next item. Read-only. Returns an error for courses without module completion requirements.

Inputs: course_id (required).

get_course_settingsGet Course SettingsA
Read-onlyIdempotent

Get course-level settings such as whether final grades are hidden, the late policy is shown, or a grading standard is used. Read-only. Some settings may be hidden from students, in which case Canvas returns an error.

Inputs: course_id (required).

get_custom_dataGet Custom DataA
Read-onlyIdempotent

Read key-value data you previously stored on your Canvas account with set_custom_data. Read-only. Returns an error if nothing is stored at that namespace and scope.

Inputs: scope, namespace.

get_dashboard_cardsGet Dashboard CardsA
Read-onlyIdempotent

Get the course cards on your Canvas dashboard, in dashboard order, with names, colors and links. Read-only. Use list_courses for every enrollment, including ones not on the dashboard.

Inputs: no named parameters.

get_eportfolio_pagesGet Eportfolio PagesB
Read-onlyIdempotent

The pages of one of your ePortfolios, with their text. Read-only.

Inputs: eportfolio_id (required), limit.

get_file_metadataGet File MetadataA
Read-onlyIdempotent

Get details for one file: name, size, content type, created and updated dates, and download URL. Read-only. Use download_file to save it locally.

Inputs: file_id (required).

get_file_public_urlGet File Public URLA
Read-onlyIdempotent

Get a temporary public download link for a file that works without logging in. Read-only, but anyone with the link can download the file until it expires.

Inputs: file_id (required).

get_folderGet FolderA
Read-onlyIdempotent

Get one folder's details: full path, parent folder, and how many files and subfolders it holds. Read-only. Get folder_id from list_folders.

Inputs: folder_id (required).

get_folder_treeGet Folder TreeA
Read-onlyIdempotent

Show a course's folders and files as an indented outline. Read-only. A good first look at what material exists; use list_course_files for IDs and details.

Inputs: course_id (required), max_depth.

get_full_topic_viewGet Full Topic ViewA
Read-onlyIdempotent

Get an entire discussion thread, all entries and nested replies, in one request. Read-only. Much lighter on rate limits than paging through list_entries. All participant text is fenced as untrusted.

Inputs: topic_id (required), course_id (required), max_entries.

get_grade_trendGet Grade TrendA
Read-onlyIdempotent

List graded assignments in a course in date order with a running average, so you can see whether your grade is rising or falling. Read-only.

Inputs: course_id (required).

get_grading_standardGet Grading StandardB
Read-onlyIdempotent

Get the letter-grade scale for a course, i.e. the percentage needed for each letter such as A- or B+. Read-only.

Inputs: course_id (required), page, limit.

get_groupGet GroupA
Read-onlyIdempotent

Get one student group: name, description, member count and the course it belongs to. Read-only. Get group_id from list_my_groups.

Inputs: group_id (required).

get_group_activity_streamGet Group Activity StreamA
Read-onlyIdempotent

Get recent activity in a group workspace: new discussion posts, files and announcements, newest first. Read-only. Text written by others is fenced as untrusted.

Inputs: group_id (required), page, limit.

get_late_policyGet Late PolicyA
Read-onlyIdempotent

Get a course's late policy: the percentage deducted per late interval, the lowest score a late penalty can reach, and the grade given for missing work. Read-only. Returns an error if the course has no late policy.

Inputs: course_id (required).

get_media_captionsGet Media CaptionsA
Read-onlyIdempotent

List the caption (subtitle) tracks on a recorded lecture with their languages and IDs. Read-only. Captions are the closest thing to a transcript; save one with download_media_captions.

Inputs: media_id (required).

get_moduleGet ModuleA
Read-onlyIdempotent

Get one module: name, position, unlock date, prerequisites, your completion state and its items. Read-only. Get module_id from list_modules.

Inputs: course_id (required), module_id (required).

get_module_itemGet Module ItemA
Read-onlyIdempotent

Get one item inside a module (assignment, page, file, quiz, link…) with its completion requirement and whether you met it. Read-only. Get item_id from list_module_items.

Inputs: item_id (required), course_id (required), module_id (required).

get_module_item_sequenceGet Module Item SequenceA
Read-onlyIdempotent

Show where a piece of content sits in its module: the previous and next items, so you can work through a module in order. Read-only.

Inputs: asset_id (required), course_id (required), asset_type (required).

get_my_activity_analyticsGet My Activity AnalyticsA
Read-onlyIdempotent

Get your page views and participations in a course, counted per day. Read-only. Returns an error if course analytics are disabled at your school.

Inputs: course_id (required).

get_my_assignment_analyticsGet My Assignment AnalyticsA
Read-onlyIdempotent

Get your score on each assignment next to the class median, min and max, plus whether you submitted on time. Read-only. Returns an error if course analytics are disabled at your school.

Inputs: course_id (required).

get_my_communication_analyticsGet My Communication AnalyticsA
Read-onlyIdempotent

Get daily counts of messages between you and the instructor in a course. Read-only. Returns an error if course analytics are disabled at your school.

Inputs: course_id (required).

get_my_outcome_resultsGet My Outcome ResultsA
Read-onlyIdempotent

Get your mastery scores on each of a course's learning outcomes, from rubric-graded work. Read-only. Use get_outcome_rollup for one rolled-up score per outcome.

Inputs: course_id (required).

get_my_overrideGet My OverrideA
Read-onlyIdempotent

Get the due, lock and unlock dates that actually apply to you for an assignment, after section or individual overrides. Read-only. Use this instead of the default dates when deadlines differ by section.

Inputs: course_id (required), assignment_id (required).

get_my_page_viewsGet My Page ViewsA
Read-onlyIdempotent

List your own Canvas page views (URL, time and course) in a time range. Read-only. Useful for showing you opened material on a given date. How far back history goes depends on your school.

Inputs: page, limit, end_time, start_time.

get_my_profileGet My ProfileA
Read-onlyIdempotent

Get your full Canvas profile: name, bio, avatar, primary email and calendar feed URL. Read-only. For just your ID and name, whoami is cheaper.

Inputs: no named parameters.

get_my_quiz_submissionGet My Quiz SubmissionA
Read-onlyIdempotent

Get your latest submission for a quiz: score, attempt number, state and timing. Read-only. Use list_my_quiz_submissions for every attempt.

Inputs: quiz_id (required), course_id (required).

get_my_rubric_assessmentGet My Rubric AssessmentA
Read-onlyIdempotent

Get how the rubric was applied to your submission: points and comment for each criterion, plus your score. Read-only. Returns no assessment if the instructor did not grade with a rubric. get_rubric_assessment returns the same data plus the compact rubric_assessment form.

Inputs: course_id (required), assignment_id (required).

get_my_settingsGet My SettingsA
Read-onlyIdempotent

Get your account-level Canvas preferences, such as dashboard view, activity stream visibility and comment notification settings. Read-only. For how often you are notified about each event, use get_notification_preferences.

Inputs: no named parameters.

get_my_submissionGet My SubmissionA
Read-onlyIdempotent

Get your submission for one assignment: score, grade, submitted time, lateness and deductions, attachments and instructor comments. Read-only. Use get_submission_history for earlier attempts.

Inputs: course_id (required), assignment_id (required).

get_new_quizGet New QuizA
Read-onlyIdempotent

Get details for one New Quizzes assessment: title, instructions, points and timing. Read-only. Uses the Quiz LTI API, which some schools do not expose to students. For Classic Quizzes use get_quiz.

Inputs: quiz_id (required), course_id (required).

get_new_quiz_itemsGet New Quiz ItemsA
Read-onlyIdempotent

List the questions in a New Quizzes assessment. Read-only. Most schools only allow this for instructors, so students usually get a permission error.

Inputs: quiz_id (required), course_id (required), page, limit.

get_notification_preferencesGet Notification PreferencesA
Read-onlyIdempotent

Get how often Canvas notifies you about each event type (due dates, grades, announcements…) on one channel: immediately, daily, weekly or never. Read-only. Get channel_id from get_communication_channels first.

Inputs: channel_id (required).

get_originality_reportGet Originality ReportA
Read-onlyIdempotent

Get the plagiarism or originality score (e.g. Turnitin) for your submission and its attachments. Read-only. Returns no report if no originality tool is enabled on the assignment.

Inputs: course_id (required), assignment_id (required).

get_outcomeGet OutcomeA
Read-onlyIdempotent

Get one learning outcome with its description and mastery scale. Read-only. Use list_outcomes to find outcome IDs.

Inputs: outcome_id (required).

get_outcome_rollupGet Outcome RollupA
Read-onlyIdempotent

Get one rolled-up mastery score per learning outcome for you in a course. Read-only. Use get_my_outcome_results for the individual results behind each score.

Inputs: course_id (required).

get_page_contentGet Page ContentA
Read-onlyIdempotent

Read a course page as plain text (converted from HTML), with its title and last-updated time. Read-only. The body is fenced as untrusted. Find page slugs with list_pages.

Inputs: page_url (required), course_id (required).

get_page_revisionGet Page RevisionA
Read-onlyIdempotent

Get the content of a course page as it was at one past revision, with the editor and date. Read-only. The body is fenced as untrusted text. Use list_page_revisions to find revision numbers, and get_page_content for the current version. Canvas returns a permission error if page history is hidden from students.

Inputs: page_url (required), course_id (required), revision_id (required).

get_peer_review_assignmentGet Peer Review AssignmentA
Read-onlyIdempotent

Get the peer reviews set up on one assignment: who reviews whom and whether each is complete. Read-only. Use list_my_peer_reviews for just the reviews you still owe.

Inputs: course_id (required), assignment_id (required).

get_quizGet QuizA
Read-onlyIdempotent

Get one Classic Quiz: instructions, time limit, allowed attempts, dates and when results are shown. Read-only. Instructions are fenced as untrusted. This server never takes quizzes.

Inputs: quiz_id (required), course_id (required).

get_quiz_assignment_overridesGet Quiz Assignment OverridesA
Read-onlyIdempotent

Get section- or student-specific due dates for quizzes in a course. Read-only. Use get_my_override for the dates that apply to you on one assignment.

Inputs: course_id (required), quiz_assignment_overrides.

get_quiz_extensionsGet Quiz ExtensionsB
Read-onlyIdempotent

Get extra time or extra attempts granted to you on a quiz (accommodations). Read-only. Returns an empty list if none were granted.

Inputs: quiz_id (required), course_id (required).

get_quiz_ip_filtersGet Quiz IP FiltersB
Read-onlyIdempotent

Get IP address restrictions on a quiz (used for lab-only or proctored exams), so you know where you can take it. Read-only.

Inputs: quiz_id (required), course_id (required).

get_quiz_submission_timeGet Quiz Submission TimeA
Read-onlyIdempotent

Get the time remaining and end time for an in-progress timed quiz attempt. Read-only. Needs the submission ID from get_my_quiz_submission.

Inputs: quiz_id (required), course_id (required), submission_id (required).

get_rate_limit_statusGet Rate Limit StatusA
Read-onlyIdempotent

Report Canvas rate-limit state from the most recent API call: remaining quota, last request cost and requests this session. Read-only and makes no Canvas call itself. Canvas throttles by cumulative request cost, so check this before expensive tools like semester_snapshot.

Inputs: no named parameters.

get_rubricGet RubricA
Read-onlyIdempotent

Get a full rubric: every criterion, rating level and point value. Read-only. Read it before starting work to know how it will be scored; get_rubric_assessment shows how your submission was scored.

Inputs: course_id (required), rubric_id (required).

get_rubric_assessmentGet Rubric AssessmentA
Read-onlyIdempotent

Get the rubric scoring applied to your submission, criterion by criterion, with points and comments. Read-only. Use get_rubric to see the full rubric before you submit.

Inputs: course_id (required), assignment_id (required).

get_score_statisticsGet Score StatisticsA
Read-onlyIdempotent

Get class statistics for an assignment (mean, min, max, quartiles) next to your own score. Read-only. Canvas only shows these once enough students are graded and if the instructor allows it.

Inputs: course_id (required), assignment_id (required).

get_server_configGet Server ConfigA
Read-onlyIdempotent

Show this server's settings (school URL, profile, write mode, cache, time zone, download folder) and whether a token is present, without revealing it. Read-only, makes no Canvas calls and works before a token is set, so use it first to diagnose setup problems.

Inputs: no named parameters.

get_storage_quotaGet Storage QuotaA
Read-onlyIdempotent

Get your personal Canvas storage quota and how much of it is used. Read-only.

Inputs: no named parameters.

get_submission_historyGet Submission HistoryA
Read-onlyIdempotent

Get every past attempt of your submission for one assignment, oldest to newest, with scores and timestamps. Read-only. Use get_my_submission for just the latest attempt.

Inputs: course_id (required), assignment_id (required).

get_submission_summaryGet Submission SummaryA
Read-onlyIdempotent

Get counts of graded, ungraded and not-submitted submissions for an assignment. Read-only. Often instructor-only, so students may get a permission error.

Inputs: course_id (required), assignment_id (required).

get_syllabusGet SyllabusA
Read-onlyIdempotent

Get a course syllabus as plain text, converted from Canvas HTML. Read-only. The text is fenced as untrusted. If the instructor uploaded the syllabus as a file instead, look in list_course_files; syllabus_digest pulls out dates and weights.

Inputs: course_id (required).

get_todo_countGet Todo CountA
Read-onlyIdempotent

Get the number of items on your Canvas to-do list without fetching them. Read-only and cheap. Use list_todo to see the items.

Inputs: no named parameters.

get_tool_launch_urlGet Tool Launch URLA
Read-onlyIdempotent

Get a one-time launch URL for an external (LTI) tool in a course, so you can open it directly in a browser. Read-only. Get tool_id from list_external_tools. The URL expires quickly.

Inputs: course_id (required), url, tool_id.

get_topicGet TopicA
Read-onlyIdempotent

Get one discussion topic: its prompt, author, posting rules and unread count, without the replies. Read-only. The prompt is fenced as untrusted text. Use get_full_topic_view to read the whole thread, or list_topics to find topic IDs.

Inputs: topic_id (required), course_id (required).

get_unposted_gradesGet Unposted GradesA
Read-onlyIdempotent

Get scores your instructor entered but has not released yet, where your enrollment can see them. Read-only. Usually empty for students; use get_all_grades for released grades.

Inputs: page, limit, course_id.

get_unread_conversation_countGet Unread Conversation CountA
Read-onlyIdempotent

Get the number of unread Canvas Inbox conversations. Read-only and very cheap. Use list_conversations with scope unread to see them.

Inputs: no named parameters.

get_unread_discussion_countGet Unread Discussion CountA
Read-onlyIdempotent

Get the unread entry count for each discussion topic in a course. Read-only and cheap. Use get_full_topic_view to read a topic.

Inputs: course_id (required), page, limit.

get_user_in_courseGet User In CourseA
Read-onlyIdempotent

Get one person's profile within a course: name, role, section and avatar. Read-only. Get user_id from list_course_users. Your institution's privacy settings may limit what is returned.

Inputs: course_id (required), user_id.

get_week_aheadGet Week AheadA
Read-onlyIdempotent

Get the coming week in one call: everything due, anything already missing, unread announcements and your unread inbox count. Read-only. Merges the Planner feed, missing submissions, calendar and inbox.

Inputs: days.

get_workload_forecastGet Workload ForecastA
Read-onlyIdempotent

Show points at stake per week for the next few weeks across all active courses, so you can see crunch weeks coming. Read-only. Use get_week_ahead for item-level detail on the next 7 days.

Inputs: weeks.

grade_impact_rankingGrade Impact RankingA
Read-onlyIdempotent

Rank a course's ungraded and upcoming assignments by how much each point moves your final grade. Read-only. Shows where effort pays most; study_priority_ranking does this across all courses with urgency added.

Inputs: course_id (required).

grep_all_coursesGrep All CoursesA
Read-onlyIdempotent

Search every active course by keyword in one call. Read-only but uses many API calls; prefer search_course_content when you know the course.

Inputs: query (required), limit.

join_groupJoin GroupA
Destructive

Join a self-signup student group. Groupmates and instructors see that you joined. [NEEDS CONFIRMATION: call it once for a preview and a confirm_token, show the preview to the user, and only if they say yes call it again with the same arguments, confirm=true and that confirm_token. Apps that can ask the user directly show a confirmation instead.]

Inputs: group_id (required), confirm, confirm_token.

leave_groupLeave GroupA
Destructive

Leave a student group you belong to. You lose access to its workspace. [NEEDS CONFIRMATION: call it once for a preview and a confirm_token, show the preview to the user, and only if they say yes call it again with the same arguments, confirm=true and that confirm_token. Apps that can ask the user directly show a confirmation instead.]

Inputs: group_id (required), confirm, confirm_token.

list_announcementsList AnnouncementsA
Read-onlyIdempotent

List announcements from one or more courses in a date range, newest first, with title, author and body. Read-only. Bodies are fenced as untrusted text. Without dates it covers the last 30 days; without course_ids it covers all active courses.

Inputs: limit, end_date, course_ids, start_date, +1 more.

list_appointment_groupsList Appointment GroupsA
Read-onlyIdempotent

List appointment groups you can sign up for, such as office hours or advising slots, with open time slots. Read-only. Book a slot with reserve_appointment_slot.

Inputs: page, limit, scope, include_past.

list_assignment_groupsList Assignment GroupsA
Read-onlyIdempotent

List a course's assignment groups (e.g. Homework, Exams) with their grade weights and drop rules, optionally with each group's assignments. Read-only. Explains how your final grade is weighted; get_course_grade_breakdown does the math for you.

Inputs: course_id (required), page, limit, include_assignments.

list_assignment_overridesList Assignment OverridesA
Read-onlyIdempotent

List due-date overrides on an assignment: different dates or extensions for sections, groups or individual students. Read-only. Use get_my_override for the dates that apply to you.

Inputs: course_id (required), assignment_id (required), page, limit.

list_assignmentsList AssignmentsA
Read-onlyIdempotent

List assignments in a course with due dates, points and your submission status, optionally filtered by bucket (e.g. upcoming, overdue) or name. Read-only. Use get_assignment for one assignment's full instructions and rubric.

Inputs: course_id (required), page, limit, bucket, +1 more.

list_blackout_datesList Blackout DatesA
Read-onlyIdempotent

List no-work days (blackout dates) in a course used by course pacing. Read-only. Returns an empty list when pacing is not used.

Inputs: course_id (required).

list_bookmarksList BookmarksA
Read-onlyIdempotent

List your saved Canvas bookmarks with their names, URLs and IDs. Read-only. Use the IDs with delete_bookmark.

Inputs: page, limit.

list_calendar_eventsList Calendar EventsA
Read-onlyIdempotent

List calendar events, or assignment due dates with type=assignment, in a date range (default: the next 14 days). Read-only. Filter to specific courses with course_ids.

Inputs: page, type, limit, end_date, +2 more.

list_collaborationsList CollaborationsB
Read-onlyIdempotent

List collaborative documents in a course (Google Docs or Microsoft 365 integrations) with titles and links. Read-only.

Inputs: course_id (required), page, limit.

list_conferencesList ConferencesA
Read-onlyIdempotent

List web conferences in a course (BigBlueButton or similar) with titles, status and join links. Read-only. Returns an empty list if conferences are not enabled.

Inputs: course_id (required), page, limit.

list_content_sharesList Content SharesA
Read-onlyIdempotent

List course content (assignments, pages, quizzes) that other Canvas users shared directly with you, with sender and share date. Read-only. Returns an empty list if nothing was shared.

Inputs: page, limit.

list_conversationsList ConversationsA
Read-onlyIdempotent

List your Canvas Inbox conversations, newest first, with subject, participants, last message preview and unread state. Read-only. Use get_conversation for the full thread.

Inputs: page, limit, scope, filter.

list_course_filesList Course FilesA
Read-onlyIdempotent

List files in a course (slides, readings, handouts) with names, sizes, types and IDs, optionally filtered by name or type. Read-only. Save one with download_file, or all with download_all_course_files.

Inputs: course_id (required), page, limit, search_term, +1 more.

list_course_nicknamesList Course NicknamesA
Read-onlyIdempotent

List the personal nicknames you have given courses. Read-only. Only you see nicknames. Change them with set_course_nickname or remove_course_nickname.

Inputs: page, limit.

list_coursesList CoursesA
Read-onlyIdempotent

List the courses you are enrolled in with IDs, names, codes, term and your current grade. Read-only. Only active courses unless include_concluded is set. Start here to get course_id values for other tools.

Inputs: page, limit, include_grades, include_concluded.

list_course_tabsList Course TabsA
Read-onlyIdempotent

List the navigation tabs visible to you in a course (Home, Assignments, Files, Quizzes…). Read-only. Check this first to see whether a feature such as Files or Pages is enabled before calling its tools.

Inputs: course_id (required).

list_course_usersList Course UsersA
Read-onlyIdempotent

List people in a course with names, roles and user IDs, optionally filtered by role or name. Read-only. Your school's privacy settings often limit or block this for students.

Inputs: course_id (required), page, limit, search_term, +1 more.

list_entriesList EntriesA
Read-onlyIdempotent

List top-level entries in a discussion topic, page by page. Read-only. Entry text is fenced as untrusted. Prefer get_full_topic_view to read a whole thread at once.

Inputs: topic_id (required), course_id (required), page, limit.

list_entry_repliesList Entry RepliesA
Read-onlyIdempotent

List the replies under one discussion entry, oldest first. Read-only. Bodies are fenced as untrusted text. To read a whole thread at once, use get_full_topic_view instead.

Inputs: entry_id (required), topic_id (required), course_id (required), page, +1 more.

list_eportfoliosList EportfoliosA
Read-onlyIdempotent

Your Canvas ePortfolios (showcase sites of your work). Read-only; Canvas does not let other apps add entries, so edit them in Canvas itself.

Inputs: page, limit, include_deleted.

list_external_toolsList External ToolsA
Read-onlyIdempotent

List external (LTI) tools enabled in a course, such as publisher platforms or proctoring apps, with their IDs. Read-only. Open one with get_tool_launch_url.

Inputs: course_id (required), page, limit.

list_favorite_coursesList Favorite CoursesA
Read-onlyIdempotent

List the courses you have starred as favorites; these decide what appears on your dashboard. Read-only. Change them with add_favorite_course and remove_favorite_course.

Inputs: page, limit.

list_foldersList FoldersA
Read-onlyIdempotent

List every folder in a course's Files area with its path, file count and ID. Read-only. Use get_folder_tree for a readable outline of folders and files together.

Inputs: course_id (required), page, limit.

list_global_announcementsList Global AnnouncementsA
Read-onlyIdempotent

School-wide announcements: the banners your school shows everyone on the Canvas dashboard (closures, outages, deadlines). Read-only. Messages are provenance-fenced.

Inputs: no named parameters.

list_grading_periodsList Grading PeriodsA
Read-onlyIdempotent

List a course's grading periods (e.g. quarters) with start, end and close dates. Read-only. Returns an empty list if the course does not use grading periods.

Inputs: course_id (required).

list_group_categoriesList Group CategoriesA
Read-onlyIdempotent

List the group sets in a course (e.g. "Project teams") and whether you can sign up yourself. Read-only. Join an open group with join_group.

Inputs: course_id (required), page, limit.

list_group_discussionsList Group DiscussionsA
Read-onlyIdempotent

List discussion topics inside a group workspace with titles and unread counts. Read-only. Post to one with post_group_discussion.

Inputs: group_id (required), page, limit.

list_group_filesList Group FilesA
Read-onlyIdempotent

List files shared in a group workspace with names, sizes and IDs. Read-only. Save one with download_file.

Inputs: group_id (required), page, limit.

list_group_membersList Group MembersA
Read-onlyIdempotent

List the members of a student group with names and user IDs. Read-only. Get group_id from list_my_groups.

Inputs: group_id (required), page, limit.

list_group_pagesList Group PagesA
Read-onlyIdempotent

List wiki pages in a group workspace with titles and URL slugs. Read-only.

Inputs: group_id (required), page, limit.

list_media_objectsList Media ObjectsA
Read-onlyIdempotent

List recorded lectures and other video or audio in a course with titles and media IDs. Read-only. Get captions with get_media_captions or download_media_captions.

Inputs: course_id (required), page, limit.

list_missing_submissionsList Missing SubmissionsA
Read-onlyIdempotent

List every assignment Canvas has flagged as missing across all your courses, with due date, points and how overdue it is. Read-only. One call instead of looping over courses. list_overdue_assignments checks submission status course by course instead.

Inputs: limit.

list_module_itemsList Module ItemsA
Read-onlyIdempotent

List the items in a module (assignments, pages, files, quizzes, links) with each one's completion requirement and whether you met it. Read-only. Use list_modules to find module IDs.

Inputs: course_id (required), module_id (required), page, limit.

list_modulesList ModulesA
Read-onlyIdempotent

List the modules in a course in order, with your completion state, prerequisites and unlock dates. Read-only. Use list_module_items to see what is inside a module.

Inputs: course_id (required), page, limit.

list_my_enrollmentsList My EnrollmentsA
Read-onlyIdempotent

List your enrollments across all courses, with role (student, observer…), section and current grade summary. Read-only. Use list_courses for course details; use this when you need roles, sections or per-enrollment grades.

Inputs: page, type, limit, state.

list_my_filesList My FilesA
Read-onlyIdempotent

List files in your personal Canvas storage (not course files), with names, sizes and IDs. Read-only. For course files use list_course_files.

Inputs: page, limit, search_term.

list_my_groupsList My GroupsA
Read-onlyIdempotent

List the student groups you belong to across all courses, with group IDs and course. Read-only. Use the IDs with the other group tools.

Inputs: page, limit.

list_my_observeesList My ObserveesA
Read-onlyIdempotent

List the students you are linked to as an observer, for parent or mentor accounts. Read-only. Returns an empty list for regular student accounts.

Inputs: page, limit.

list_my_peer_reviewsList My Peer ReviewsA
Read-onlyIdempotent

List peer reviews assigned to you that you still need to complete, in one course or all active courses. Read-only. Checks both the assignment endpoint and the Planner feed, since either alone can miss items. Submit with submit_peer_review.

Inputs: course_id.

list_my_quiz_submissionsList My Quiz SubmissionsA
Read-onlyIdempotent

List all your attempts on a quiz with the score for each. Read-only. Use get_my_quiz_submission for just the latest.

Inputs: quiz_id (required), course_id (required).

list_my_reservationsList My ReservationsA
Read-onlyIdempotent

List the appointment slots you have booked, from the past week through the next 60 days. Read-only. Cancel one with cancel_reservation.

Inputs: page, limit.

list_my_submissionsList My SubmissionsA
Read-onlyIdempotent

List all of your submissions in a course with scores, grades and status. Read-only. Use get_my_submission for full detail on one.

Inputs: course_id (required), page, limit.

list_new_quizzesList New QuizzesA
Read-onlyIdempotent

List New Quizzes assessments in a course with due dates, points and question counts. Read-only. New Quizzes is a separate service from Classic Quizzes (list_quizzes) and may not be enabled at your school.

Inputs: course_id (required), page, limit.

list_notification_categoriesList Notification CategoriesA
Read-onlyIdempotent

The notification categories on one delivery channel (email, phone) and how often Canvas currently notifies you about each, e.g. due dates, grading, announcements. Use with update_notification_preference.

Inputs: channel_id (required).

list_outcome_groupsList Outcome GroupsA
Read-onlyIdempotent

List how a course's learning outcomes are organized into groups and subgroups. Read-only. Use list_outcomes for the outcomes themselves.

Inputs: course_id (required), page, limit.

list_outcomesList OutcomesA
Read-onlyIdempotent

List the learning outcomes linked to a course with titles, descriptions and mastery points. Read-only. Use get_my_outcome_results for your own mastery.

Inputs: course_id (required), page, limit.

list_overdue_assignmentsList Overdue AssignmentsA
Read-onlyIdempotent

List assignments past their due date that you have not submitted, checking each active course. Read-only. Slower than list_missing_submissions, which relies on Canvas's own missing flag, but catches items without that flag.

Inputs: limit.

list_page_revisionsList Page RevisionsA
Read-onlyIdempotent

List the edit history of one course page: revision numbers, editors and dates. Read-only. Students often cannot see page history, in which case Canvas returns a permission error. Read a revision with get_page_revision.

Inputs: page_url (required), course_id (required), page, limit.

list_pagesList PagesA
Read-onlyIdempotent

List the wiki pages in a course with titles, URL slugs and last-updated dates. Read-only. Read one page with get_page_content using its url slug.

Inputs: course_id (required), page, limit, search_term.

list_planner_itemsList Planner ItemsB
Read-onlyIdempotent

Your Canvas To Do list (the Planner) for a date range, across every course: assignments, quizzes, discussions, pages and your own notes, with plannable IDs for mark_planner_item_done.

Inputs: limit, end_date, course_id, start_date, +1 more.

list_planner_notesList Planner NotesC
Read-onlyIdempotent

Your own Canvas to-do notes (planner notes). Only you see these.

Inputs: page, limit, end_date, course_id, +1 more.

list_quiz_questionsList Quiz QuestionsA
Read-onlyIdempotent

List a quiz's questions so you can review a completed, graded attempt. Read-only and never used to take a quiz. Canvas hides questions unless the instructor allows review, so this often returns a permission error or nothing.

Inputs: quiz_id (required), course_id (required), page, limit, +1 more.

list_quizzesList QuizzesA
Read-onlyIdempotent

List Classic Quizzes in a course with due dates, time limits, allowed attempts and points. Read-only. For New Quizzes, use list_new_quizzes. This server never takes quizzes.

Inputs: course_id (required), page, limit, search_term.

list_rubricsList RubricsA
Read-onlyIdempotent

List the rubrics in a course with titles, point totals and IDs. Read-only. Read one in full with get_rubric.

Inputs: course_id (required), page, limit.

list_sectionsList SectionsA
Read-onlyIdempotent

List the sections in a course (e.g. lecture or lab sections), including the one you are enrolled in. Read-only. Useful for understanding section-specific due-date overrides.

Inputs: course_id (required), page, limit.

list_submission_attachmentsList Submission AttachmentsA
Read-onlyIdempotent

List files attached to your submission for one assignment, with names, sizes and download URLs. Read-only. Pass a URL from here to download_submission_attachment to save a file.

Inputs: course_id (required), assignment_id (required).

list_submission_commentsList Submission CommentsA
Read-onlyIdempotent

List comments on your submission from your instructor and others, with author and time. Read-only. Comment text is fenced as untrusted. Reply with post_submission_comment.

Inputs: course_id (required), assignment_id (required).

list_todoList TodoA
Read-onlyIdempotent

List Canvas's own to-do items for you: assignments waiting for your submission, and items to grade if you are an instructor. Read-only. For a date-bounded view use list_upcoming_assignments; for one course use list_todo_for_course.

Inputs: page, limit.

list_todo_for_courseList Todo For CourseA
Read-onlyIdempotent

List Canvas to-do items for a single course. Read-only. Use list_todo for all courses at once.

Inputs: course_id (required), page, limit.

list_topicsList TopicsA
Read-onlyIdempotent

List discussion topics in a course with unread counts and whether you must post before seeing replies. Read-only. Set only_announcements for announcements; read a thread with get_full_topic_view.

Inputs: course_id (required), page, limit, search_term, +1 more.

list_upcoming_assignmentsList Upcoming AssignmentsA
Read-onlyIdempotent

List assignments and other planner items due in the next N days (default 7) across all active courses, soonest first. Read-only. Uses the same Planner feed as the Canvas dashboard; set include_completed to also show items already done.

Inputs: days, include_completed. Returns: days, items

list_upcoming_eventsList Upcoming EventsA
Read-onlyIdempotent

List your upcoming calendar events and assignment due dates, using Canvas's own default window. Read-only. For a specific date range, use list_calendar_events.

Inputs: no named parameters.

mark_all_announcements_readMark All Announcements ReadA
Idempotent

Mark every unread announcement in the last N days as read, across all your courses or the ones you pick. Clears the unread badges in Canvas.

Inputs: days, course_ids.

mark_all_entries_readMark All Entries ReadA
Idempotent

Mark every entry in a discussion topic as read for you. Only affects your unread counts.

Inputs: topic_id (required), course_id (required).

mark_announcement_readMark Announcement ReadA
Idempotent

Mark one course announcement as read, clearing its unread badge.

Inputs: course_id (required), announcement_id (required).

mark_conversation_readMark Conversation ReadA
Idempotent

Mark one Inbox conversation as read. Only affects you; the sender is not notified. Reverse with mark_conversation_unread.

Inputs: conversation_id (required).

mark_conversation_unreadMark Conversation UnreadA
Idempotent

Mark one Inbox conversation as unread so it shows up again. Only affects you. Reverse with mark_conversation_read.

Inputs: conversation_id (required).

mark_entry_readMark Entry ReadA
Idempotent

Mark one discussion entry as read for you. Only affects your unread counts.

Inputs: entry_id (required), topic_id (required), course_id (required).

mark_module_item_doneMark Module Item DoneA
Idempotent

Mark a module item as done to satisfy a 'mark as done' completion requirement. Shows in your instructor's progress view.

Inputs: item_id (required), course_id (required), module_id (required).

mark_module_item_readMark Module Item ReadA
Idempotent

Mark a module item as viewed to satisfy a 'must view' requirement, without opening it. Shows in your instructor's progress view.

Inputs: item_id (required), course_id (required), module_id (required).

mark_planner_item_doneMark Planner Item DoneA
Idempotent

Check an item off (or back on) your Canvas To Do list. This only changes your own list; it does not submit anything.

Inputs: plannable_id (required), plannable_type (required), done.

mark_submission_readMark Submission ReadA
Idempotent

Mark your submission, including any new grade or comments, as read so the unread badge clears. Only affects you.

Inputs: course_id (required), assignment_id (required).

mark_topic_readMark Topic ReadA
Idempotent

Mark a discussion topic as read for you. Only affects your unread counts. Use mark_all_entries_read to also clear every reply.

Inputs: topic_id (required), course_id (required).

post_entryPost EntryA
Destructive

Post a new top-level entry to a course discussion. Visible to the whole class. Use reply_to_entry to answer someone's entry. [NEEDS CONFIRMATION: call it once for a preview and a confirm_token, show the preview to the user, and only if they say yes call it again with the same arguments, confirm=true and that confirm_token. Apps that can ask the user directly show a confirmation instead.]

Inputs: message (required), topic_id (required), course_id (required), confirm, +1 more.

post_group_discussionPost Group DiscussionA
Destructive

Post to a discussion inside a group workspace. Visible to your groupmates and instructors. [NEEDS CONFIRMATION: call it once for a preview and a confirm_token, show the preview to the user, and only if they say yes call it again with the same arguments, confirm=true and that confirm_token. Apps that can ask the user directly show a confirmation instead.]

Inputs: message (required), group_id (required), topic_id (required), confirm, +1 more.

post_submission_commentPost Submission CommentA
Destructive

Post a comment on your own submission for an assignment, optionally with files attached. Your instructor sees it. To attach a file, upload it first with upload_comment_attachment. [NEEDS CONFIRMATION: call it once for a preview and a confirm_token, show the preview to the user, and only if they say yes call it again with the same arguments, confirm=true and that confirm_token. Apps that can ask the user directly show a confirmation instead.]

Inputs: comment (required), course_id (required), assignment_id (required), confirm, +2 more.

rate_entryRate EntryA
Destructive

Like (rating 1) or remove your like (rating 0) on a discussion entry, where the instructor enabled ratings. Others see the like count. [NEEDS CONFIRMATION: call it once for a preview and a confirm_token, show the preview to the user, and only if they say yes call it again with the same arguments, confirm=true and that confirm_token. Apps that can ask the user directly show a confirmation instead.]

Inputs: rating (required), entry_id (required), topic_id (required), course_id (required), +2 more.

raw_canvas_requestRaw Canvas RequestA
Destructive

Call a Canvas REST API endpoint directly, for anything the other tools don't cover. Requests only go to your Canvas, inside /api/v1. GET is read-only. POST, PUT and DELETE can change data: they are blocked when CANVAS_ALLOW_WRITES=false and need confirmation. Quiz-submission writes and endpoints that hand out sign-ins or tokens are always refused. [NEEDS CONFIRMATION: call it once for a preview and a confirm_token, show the preview to the user, and only if they say yes call it again with the same arguments, confirm=true and that confirm_token. Apps that can ask the user directly show a confirmation instead.]

Inputs: path (required), method (required), body, params, +4 more.

read_course_fileRead Course FileA
Read-onlyIdempotent

Read the text of a Canvas file so you can summarize it, quiz from it or answer questions about it. Read-only. Works with PDF, Word (.docx), PowerPoint (.pptx, including speaker notes), web pages and plain-text files up to 25 MB. Long files come back in parts: call again with next_offset. Scanned PDFs have no text. Get file_id from list_course_files or list_module_items.

Inputs: file_id (required), offset, max_chars.

remove_course_nicknameRemove Course NicknameA
DestructiveIdempotent

Remove your personal nickname for a course so Canvas shows its official name again. Only affects your own view.

Inputs: course_id (required).

remove_favorite_courseRemove Favorite CourseA
DestructiveIdempotent

Unstar a favorite course so it no longer shows on your Canvas dashboard. Only affects your own view; your enrollment is unchanged. Reverse with add_favorite_course.

Inputs: course_id (required).

reply_to_conversationReply To ConversationA
Destructive

Reply within an existing Canvas Inbox conversation. Every participant receives it. Use send_message to start a new thread. [NEEDS CONFIRMATION: call it once for a preview and a confirm_token, show the preview to the user, and only if they say yes call it again with the same arguments, confirm=true and that confirm_token. Apps that can ask the user directly show a confirmation instead.]

Inputs: body (required), conversation_id (required), confirm, confirm_token, +1 more.

reply_to_entryReply To EntryA
Destructive

Reply to one discussion entry. Visible to the whole class. Use post_entry for a new top-level post. [NEEDS CONFIRMATION: call it once for a preview and a confirm_token, show the preview to the user, and only if they say yes call it again with the same arguments, confirm=true and that confirm_token. Apps that can ask the user directly show a confirmation instead.]

Inputs: message (required), entry_id (required), topic_id (required), course_id (required), +2 more.

reserve_appointment_slotReserve Appointment SlotA
Destructive

Book an office hours or advising time slot. The instructor sees the booking. Get slot IDs from get_appointment_group; cancel with cancel_reservation. [NEEDS CONFIRMATION: call it once for a preview and a confirm_token, show the preview to the user, and only if they say yes call it again with the same arguments, confirm=true and that confirm_token. Apps that can ask the user directly show a confirmation instead.]

Inputs: appointment_id (required), confirm, comments, confirm_token.

reset_what_if_gradesReset What If GradesA
Idempotent

Clear every what-if score you entered in a course so Canvas shows your real grades again. Only affects your own view.

Inputs: course_id (required).

schedule_study_planSchedule Study PlanA

Put study blocks (from study_plan) on your personal Canvas calendar, or add them as planner notes. Only you see them. At most 60 blocks per call. [NEEDS CONFIRMATION: call it once for a preview and a confirm_token, show the preview to the user, and only if they say yes call it again with the same arguments, confirm=true and that confirm_token. Apps that can ask the user directly show a confirmation instead.]

Inputs: blocks (required), add_to, confirm, confirm_token.

search_course_contentSearch Course ContentA
Read-onlyIdempotent

Search one course by keyword across pages, assignments, announcements and discussions (titles and bodies). Read-only. Works at every school, unlike smart_search. Use grep_all_courses when you don't know the course.

Inputs: query (required), course_id (required), limit.

search_toolsSearch ToolsA
Read-onlyIdempotent

Search this server's tools by keyword and return matching names with one-line descriptions. Read-only, makes no Canvas calls and works before a token is set. Use it to find the right tool among the 200+ available.

Inputs: group, query.

select_mastery_pathSelect Mastery PathA
Destructive

Choose which branch to follow at a mastery path (conditional release) point in a module. Unlocks that branch's assignments and may not be reversible. [NEEDS CONFIRMATION: call it once for a preview and a confirm_token, show the preview to the user, and only if they say yes call it again with the same arguments, confirm=true and that confirm_token. Apps that can ask the user directly show a confirmation instead.]

Inputs: item_id (required), course_id (required), module_id (required), assignment_set_id (required), +2 more.

semester_snapshotSemester SnapshotA
Read-onlyIdempotent

Get every active course in one call with its grade, missing work, upcoming deadlines and unread counts. Read-only but uses many API calls; best at the start of a session. Use course_health_check for one course.

Inputs: no named parameters.

semester_wrap_upSemester Wrap UpA
Read-onlyIdempotent

End-of-term checklist for every active course: current and final grades, missing work, anything still due before the course ends, and how many days until the course (and your access to its files) may close. Read-only; use export_all_courses to save copies.

Inputs: no named parameters.

send_messageSend MessageA
Destructive

Send a new Canvas Inbox message, e.g. to a professor or classmate. Recipients get it immediately. Get recipient IDs from find_recipients; to answer an existing thread, use reply_to_conversation. [NEEDS CONFIRMATION: call it once for a preview and a confirm_token, show the preview to the user, and only if they say yes call it again with the same arguments, confirm=true and that confirm_token. Apps that can ask the user directly show a confirmation instead.]

Inputs: body (required), subject (required), recipients (required), confirm, +3 more.

set_course_nicknameSet Course NicknameA
Idempotent

Give a course a personal nickname that replaces its name in your own Canvas view. Only you see it; the course is unchanged for everyone else. Undo with remove_course_nickname.

Inputs: nickname (required), course_id (required).

set_custom_dataSet Custom DataA
Idempotent

Store your own key-value data on your Canvas account (a small private per-user store, invisible to others). Overwrites any existing value at the same namespace and scope. Read it back with get_custom_data.

Inputs: data (required), scope, namespace.

star_conversationStar ConversationA
Idempotent

Star an Inbox conversation so it appears under the "starred" scope. Only affects you. Reverse with unstar_conversation.

Inputs: conversation_id (required).

study_planStudy PlanA
Read-onlyIdempotent

Propose study blocks for everything due in the next N days: estimates the hours each item needs, then spreads them over the days before each deadline inside your study hours, around your Canvas calendar. Read-only; use schedule_study_plan to put the blocks on your calendar.

Inputs: days, day_end, course_id, day_start, +3 more.

study_priority_rankingStudy Priority RankingA
Read-onlyIdempotent

Rank everything due soon across all courses by a priority score that combines grade impact, urgency and how weak your standing is in that course. Read-only. The formula is included so you can judge it.

Inputs: days.

submit_annotation_assignmentSubmit Annotation AssignmentA
Destructive

Hand in a student-annotation assignment (where you mark up a document inside Canvas). Do the annotating in Canvas first; this submits what is there. [NEEDS CONFIRMATION: call it once for a preview and a confirm_token, show the preview to the user, and only if they say yes call it again with the same arguments, confirm=true and that confirm_token. Apps that can ask the user directly show a confirmation instead.]

Inputs: course_id (required), assignment_id (required), comment, confirm, +1 more.

submit_assignment_fileSubmit Assignment FileA
Destructive

Upload a local file and submit it to an assignment in one step. Your instructor sees it and it counts as a submission attempt. To upload now and submit later, use upload_submission_file. [NEEDS CONFIRMATION: call it once for a preview and a confirm_token, show the preview to the user, and only if they say yes call it again with the same arguments, confirm=true and that confirm_token. Apps that can ask the user directly show a confirmation instead.]

Inputs: course_id (required), file_path (required), assignment_id (required), comment, +2 more.

submit_assignment_textSubmit Assignment TextA
Destructive

Submit text for an online text-entry assignment, exactly as given; the tool never writes content for you. Your instructor sees it and it counts as a submission attempt. [NEEDS CONFIRMATION: call it once for a preview and a confirm_token, show the preview to the user, and only if they say yes call it again with the same arguments, confirm=true and that confirm_token. Apps that can ask the user directly show a confirmation instead.]

Inputs: body (required), course_id (required), assignment_id (required), comment, +2 more.

submit_assignment_urlSubmit Assignment URLA
Destructive

Submit a website URL for an assignment that accepts URL submissions. Your instructor sees it and it counts as a submission attempt. [NEEDS CONFIRMATION: call it once for a preview and a confirm_token, show the preview to the user, and only if they say yes call it again with the same arguments, confirm=true and that confirm_token. Apps that can ask the user directly show a confirmation instead.]

Inputs: url (required), course_id (required), assignment_id (required), comment, +2 more.

submit_peer_reviewSubmit Peer ReviewA
Destructive

Submit your peer review of a classmate's work: a comment and, optionally, rubric scores. The classmate and instructor can see it. Get student_id from list_my_peer_reviews. [NEEDS CONFIRMATION: call it once for a preview and a confirm_token, show the preview to the user, and only if they say yes call it again with the same arguments, confirm=true and that confirm_token. Apps that can ask the user directly show a confirmation instead.]

Inputs: comment (required), course_id (required), student_id (required), assignment_id (required), +3 more.

subscribe_topicSubscribe TopicA
Idempotent

Subscribe to a discussion topic so you are notified about new replies. Only affects you. Reverse with unsubscribe_topic.

Inputs: topic_id (required), course_id (required).

syllabus_digestSyllabus DigestA
Read-onlyIdempotent

Pull a course syllabus and extract lines that look like dates, grade weights or policies. Read-only. A rough text heuristic; read the full text with get_syllabus.

Inputs: course_id (required).

test_connectionTest ConnectionA
Read-onlyIdempotent

Check the token, school URL and access end to end: identity, courses, planner, inbox and missing submissions, and report any features your school disabled. Read-only. Run this first if anything fails.

Inputs: no named parameters.

unstar_conversationUnstar ConversationA
Idempotent

Remove the star from an Inbox conversation. Only affects you; the conversation itself is unchanged. Reverse with star_conversation.

Inputs: conversation_id (required).

unsubscribe_topicUnsubscribe TopicA
Idempotent

Stop getting notifications for new replies in a discussion topic. Only affects you; the topic and your posts are unchanged. Reverse with subscribe_topic.

Inputs: topic_id (required), course_id (required).

update_calendar_eventUpdate Calendar EventA
DestructiveIdempotent

Change the title, times or description of a calendar event you created. Only events you own can be changed; course events return a permission error. Fields you omit stay the same. [NEEDS CONFIRMATION: call it once for a preview and a confirm_token, show the preview to the user, and only if they say yes call it again with the same arguments, confirm=true and that confirm_token. Apps that can ask the user directly show a confirmation instead.]

Inputs: event_id (required), title, end_at, confirm, +3 more.

update_notification_preferenceUpdate Notification PreferenceA
Idempotent

Change how often Canvas emails or texts you about one kind of event, e.g. "grading" only weekly, or "announcement" immediately. Only affects your own notifications. [NEEDS CONFIRMATION: call it once for a preview and a confirm_token, show the preview to the user, and only if they say yes call it again with the same arguments, confirm=true and that confirm_token. Apps that can ask the user directly show a confirmation instead.]

Inputs: category (required), frequency (required), channel_id (required), confirm, +1 more.

update_planner_noteUpdate Planner NoteA
DestructiveIdempotent

Change one of your Canvas planner notes: its title, details, date or course. [NEEDS CONFIRMATION: call it once for a preview and a confirm_token, show the preview to the user, and only if they say yes call it again with the same arguments, confirm=true and that confirm_token. Apps that can ask the user directly show a confirmation instead.]

Inputs: note_id (required), title, confirm, details, +3 more.

upload_comment_attachmentUpload Comment AttachmentA
Destructive

Upload a local file so it can be attached to a comment on your submission. Returns a file ID; nothing is visible to anyone until you call post_submission_comment with that ID in file_ids. [NEEDS CONFIRMATION: call it once for a preview and a confirm_token, show the preview to the user, and only if they say yes call it again with the same arguments, confirm=true and that confirm_token. Apps that can ask the user directly show a confirmation instead.]

Inputs: course_id (required), file_path (required), assignment_id (required), confirm, +1 more.

upload_submission_fileUpload Submission FileA
Destructive

Upload a local file into an assignment's submission slot without submitting it. Nothing is submitted and your instructor sees nothing yet. Returns a file_id that can be submitted later through raw_canvas_request; submit_assignment_file uploads and submits in one step. [NEEDS CONFIRMATION: call it once for a preview and a confirm_token, show the preview to the user, and only if they say yes call it again with the same arguments, confirm=true and that confirm_token. Apps that can ask the user directly show a confirmation instead.]

Inputs: course_id (required), file_path (required), assignment_id (required), confirm, +1 more.

upload_to_my_filesUpload To My FilesA
Destructive

Upload a local file into your personal Canvas storage. Only you can see it until you share or submit it. Returns the new file's ID. [NEEDS CONFIRMATION: call it once for a preview and a confirm_token, show the preview to the user, and only if they say yes call it again with the same arguments, confirm=true and that confirm_token. Apps that can ask the user directly show a confirmation instead.]

Inputs: file_path (required), confirm, confirm_token, parent_folder_path.

what_if_gradeWhat If GradeA

Enter a hypothetical score on one assignment and get your recalculated course grade, with Canvas applying group weights and drop rules. Writes a what-if score only you can see; it is not a real grade. Undo with reset_what_if_grades. Canvas treats this as expensive; for pure math with no writes, use compute_needed_score.

Inputs: score (required), submission_id (required).

whoamiWho Am IA
Read-onlyIdempotent

Get your Canvas user ID, name and login. Read-only and very cheap. Use it to confirm the token works; use get_my_profile for bio and email, or test_connection for a full diagnostic.

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.4/5.0

    Scored across 237 tools

    Disambiguation3/5

    Individual descriptions are unusually careful and frequently cross-reference siblings ('use X instead of Y'), which rescues a lot of borderline cases. But with 237 tools there are real overlapping clusters: list_todo / list_todo_for_course / get_todo_count / list_planner_items / list_upcoming_assignments / list_missing_submissions / list_overdue_assignments all answer 'what do I owe', and get_rubric_assessment vs get_my_rubric_assessment, list_quizzes vs list_new_quizzes, get_activity_stream vs get_course_activity_stream vs get_activity_stream_summary require reading the fine print to separate. An agent can usually get there, but misselection risk is meaningful.

    Naming Consistency4/5

    The dominant convention is clear snake_case verb_noun (list_courses, get_assignment, submit_assignment_text, mark_topic_read), applied consistently across domains. Deviations are real but a minority: noun-only or phrase names like whoami, course_contacts, assignment_brief, daily_briefing, semester_snapshot, course_health_check, grade_impact_ranking, and smart_search. Readable and mostly predictable, just not uniform.

    Tool Count1/5

    237 tools is far past any reasonable agent-facing surface and well into 'extreme mismatch' territory, especially since much of the bulk is redundant aggregation (daily_briefing, get_week_ahead, course_health_check, semester_snapshot, semester_wrap_up, diff_since_last_check, get_workload_forecast). Canvas is a large domain, but this set carries a lot of near-duplicate convenience wrappers alongside the core CRUD. An agent must spend significant context just discovering which of several equivalent entry points to use.

    Completeness4/5

    For a student-facing Canvas client the lifecycle coverage is excellent: courses, assignments, submissions, quizzes (both engines), discussions, announcements, inbox, calendar, files, modules, pages, outcomes, groups, grades and planner all have read plus the relevant student writes. Gaps are modest and mostly deliberate — no instructor/authoring operations (create assignment, grade, edit pages), no quiz taking (explicitly stated), no ePortfolio editing (a Canvas limitation), and no attachment support on Inbox messages. raw_canvas_request provides an escape hatch, so agents are unlikely to hit a hard dead end.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers