# io.github.Fireiscoolsolo/canvas-lms-mcp-server (npm · canvas-lms-mcp-remote)

Self-hosted Canvas LMS for every device: 237 student tools over HTTP with OAuth and phone alerts.

- Trust score: 77/100 (medium)
- Change this week: +3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- npm · `canvas-lms-mcp-remote`: 77/100 (this document), [markdown](https://verifymcp.io/servers/fireiscoolsolo-canvas-lms-mcp-server/canvas-lms-mcp-remote.md), [page](https://verifymcp.io/servers/fireiscoolsolo-canvas-lms-mcp-server/canvas-lms-mcp-remote)

## Channel facts

- Registry: `npm`
- Package: `canvas-lms-mcp-remote`
- Version: `1.3.1`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Supply Chain Security**: 98/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - No install/post-install scripts declared.
  - 39 of 106 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 48/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 0 days ago).
  - Publishes a security disclosure policy (SECURITY.md).
- **Schema Quality & AI Usability**: 88/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 24831 tokens (~104/item across 237 items; 237 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 30/100
  - Stability observed for 9 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
  - Structured output schemas are declared (1% of tools); any adoption earns full credit.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - All 10 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
  - An AI judge read all 238 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the io.github.Fireiscoolsolo/canvas-lms-mcp-server server?

io.github.Fireiscoolsolo/canvas-lms-mcp-server runs locally as an npm package, launched with npx -y canvas-lms-mcp-remote --stdio. Ready-made configuration for Claude, Cursor, VS Code, Codex and 3 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add fireiscoolsolo-canvas-lms-mcp-server -- npx -y canvas-lms-mcp-remote --stdio
```

### Cursor

```json
{
  "mcpServers": {
    "fireiscoolsolo-canvas-lms-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "canvas-lms-mcp-remote",
        "--stdio"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "fireiscoolsolo-canvas-lms-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "canvas-lms-mcp-remote",
        "--stdio"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add fireiscoolsolo-canvas-lms-mcp-server -- npx -y canvas-lms-mcp-remote --stdio
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "fireiscoolsolo-canvas-lms-mcp-server": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "canvas-lms-mcp-remote",
        "--stdio"
      ],
      "enabled": true
    }
  }
}
```

### Hermes

```yaml
mcp_servers:
  fireiscoolsolo-canvas-lms-mcp-server:
    command: "npx"
    args: ["-y", "canvas-lms-mcp-remote", "--stdio"]
```

### Netclaw

```json
{
  "McpServers": {
    "fireiscoolsolo-canvas-lms-mcp-server": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "canvas-lms-mcp-remote",
        "--stdio"
      ]
    }
  }
}
```

### Other

```json
{
  "mcpServers": {
    "fireiscoolsolo-canvas-lms-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "canvas-lms-mcp-remote",
        "--stdio"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-05 (score 77, 0)

- [functional] Package version: 1.3.0 → 1.3.1

### 2026-11-04 (score 77, +1)

No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-11-03 (score 76, 0)

- [functional regression] Schema quality: pass → fail
- [functional] First check of Tool coverage: 1
- [functional] Package version: 1.2.3 → 1.3.0

### 2026-11-02 (score 76, +1)

No change was recorded against any check on this day. Stability & Change Management went from 17 to 20. That category is still filling its 30-day observation window: 5 days of observed history at the previous scan, 6 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-11-01 (score 75, +15)

- [security improvement] Malware scan: unverified → pass

### 2026-10-31 (score 60, −14)

- [security regression] Malware scan: pass → unverified
- [functional] Package version: 1.2.2 → 1.2.3

### 2026-10-30 (score 74, 0)

- [functional] Package version: 1.2.0 → 1.2.2

### 2026-10-29 (score 74, +1)

No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

## MCP tools (237)

### `whoami` (~49 tokens)

Who Am I

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.

### `get_my_profile` (~43 tokens)

Get My Profile

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.

### `get_my_settings` (~47 tokens)

Get My Settings

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.

### `check_token_expiry` (~53 tokens)

Check Token Expiry

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.

### `get_rate_limit_status` (~60 tokens)

Get Rate Limit Status

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.

### `list_my_enrollments` (~138 tokens)

List My Enrollments

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.

Input parameters:

- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.
- `state` (array): active, invited, completed, inactive
- `type` (array): Optional enrollment type filter, e.g. "StudentEnrollment".

### `get_activity_stream` (~133 tokens)

Get Activity Stream

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.

Input parameters:

- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `only_active_courses` (boolean): Only include activity from currently active courses. Default true.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.

### `get_activity_stream_summary` (~53 tokens)

Get Activity Stream Summary

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.

### `list_todo` (~111 tokens)

List Todo

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.

Input parameters:

- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.

### `get_todo_count` (~39 tokens)

Get Todo Count

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.

### `list_upcoming_events` (~41 tokens)

List Upcoming Events

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.

### `get_dashboard_cards` (~46 tokens)

Get Dashboard Cards

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.

### `list_favorite_courses` (~93 tokens)

List Favorite Courses

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.

Input parameters:

- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.

### `add_favorite_course` (~63 tokens)

Add Favorite Course

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

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.

### `remove_favorite_course` (~69 tokens)

Remove Favorite Course

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.

### `get_communication_channels` (~96 tokens)

Get Communication Channels

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.

Input parameters:

- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.

### `get_notification_preferences` (~75 tokens)

Get Notification Preferences

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.

Input parameters:

- `channel_id` (string, required): Communication channel ID (numeric string). Get it from get_communication_channels.

### `get_my_page_views` (~135 tokens)

Get My Page Views

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.

Input parameters:

- `end_time` (string): End of the range, ISO 8601. Defaults to now.
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.
- `start_time` (string): ISO 8601

### `list_content_shares` (~98 tokens)

List Content Shares

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.

Input parameters:

- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.

### `get_custom_data` (~82 tokens)

Get Custom Data

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.

Input parameters:

- `namespace` (string): Namespace, default canvas-mcp
- `scope` (string): Optional path inside the namespace, e.g. "settings/theme". Omit to read everything in the namespace.

### `set_custom_data` (~124 tokens)

Set Custom Data

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.

Input parameters:

- `data` (object, required): JSON object to store, e.g. {"theme": "dark"}. Replaces whatever is already stored at this scope.
- `namespace` (string): Namespace that keeps your data apart from other apps. Defaults to "canvas-mcp".
- `scope` (string): Optional path inside the namespace, e.g. "settings/theme".

### `list_bookmarks` (~83 tokens)

List Bookmarks

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

Input parameters:

- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.

### `create_bookmark` (~104 tokens)

Create Bookmark

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.

Input parameters:

- `name` (string, required): Label for the bookmark, e.g. "BIO 101 syllabus".
- `position` (integer): Optional position in the bookmark list (1 = first).
- `url` (string, required): Canvas URL to bookmark, e.g. "/courses/12345/assignments".

### `delete_bookmark` (~49 tokens)

Delete Bookmark

Delete one of your saved Canvas bookmarks. Only affects you. Get bookmark_id from list_bookmarks.

Input parameters:

- `bookmark_id` (string, required): Bookmark ID (numeric string). Get it from list_bookmarks.

### `list_my_observees` (~90 tokens)

List My Observees

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.

Input parameters:

- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.

### `list_notification_categories` (~71 tokens)

List Notification Categories

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.

Input parameters:

- `channel_id` (string, required): Communication channel ID (numeric string). Get it from get_communication_channels.

### `update_notification_preference` (~177 tokens)

Update Notification Preference

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. [IRREVERSIBLE: call without confirm=true first to preview, then re-call with confirm=true. Apps that can ask the user directly will show a confirmation instead.]

Input parameters:

- `category` (string, required): Category name from list_notification_categories, e.g. "due_date", "grading", "announcement", "conversation_message".
- `channel_id` (string, required): Communication channel ID (numeric string). Get it from get_communication_channels.
- `confirm` (boolean): Must be true to actually execute. Omit or set false to get a dry-run preview first.
- `frequency` (string, required): "immediately", "daily", "weekly" or "never".

### `list_courses` (~131 tokens)

List Courses

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.

Input parameters:

- `include_concluded` (boolean): If true, also include courses from finished terms.
- `include_grades` (boolean): Default true
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.

### `get_course` (~79 tokens)

Get Course

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.

### `get_syllabus` (~84 tokens)

Get Syllabus

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.

### `get_course_settings` (~79 tokens)

Get Course Settings

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.

### `list_course_tabs` (~79 tokens)

List Course Tabs

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.

### `get_course_activity_stream` (~126 tokens)

Get Course Activity Stream

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.

### `list_sections` (~119 tokens)

List Sections

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.

### `list_course_users` (~162 tokens)

List Course Users

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `enrollment_type` (array): student, teacher, ta, observer, designer
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.
- `search_term` (string): Optional text filter on names or titles (at least 2 characters, case-insensitive).

### `get_user_in_course` (~86 tokens)

Get User In Course

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `user_id` (string): Defaults to 'self'

### `get_course_permissions` (~72 tokens)

Get Course Permissions

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.

### `list_course_nicknames` (~93 tokens)

List Course Nicknames

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

Input parameters:

- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.

### `set_course_nickname` (~91 tokens)

Set Course Nickname

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `nickname` (string, required): The nickname to show for this course. Only you see it.

### `remove_course_nickname` (~57 tokens)

Remove Course Nickname

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

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.

### `get_course_progress` (~66 tokens)

Get Course Progress

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.

### `list_todo_for_course` (~110 tokens)

List Todo For Course

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

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.

### `list_blackout_dates` (~66 tokens)

List Blackout Dates

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

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.

### `course_contacts` (~76 tokens)

Course Contacts

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.

### `list_assignments` (~191 tokens)

List Assignments

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.

Input parameters:

- `bucket` (string): Optional filter: "past", "overdue", "undated", "ungraded", "unsubmitted", "upcoming" or "future".
- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.
- `search_term` (string): Optional text filter on names or titles (at least 2 characters, case-insensitive).

### `get_assignment` (~105 tokens)

Get Assignment

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.

Input parameters:

- `assignment_id` (string, required): Assignment ID (numeric string). Get it from list_assignments or list_upcoming_assignments.
- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.

### `list_assignment_groups` (~155 tokens)

List Assignment Groups

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `include_assignments` (boolean): If true, include each group's assignments in the result.
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.

### `get_assignment_group` (~91 tokens)

Get Assignment Group

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `group_id` (string, required): Assignment group ID (numeric string). Get it from list_assignment_groups.

### `list_assignment_overrides` (~147 tokens)

List Assignment Overrides

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.

Input parameters:

- `assignment_id` (string, required): Assignment ID (numeric string). Get it from list_assignments or list_upcoming_assignments.
- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.

### `get_my_override` (~100 tokens)

Get My Override

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.

Input parameters:

- `assignment_id` (string, required): Assignment ID (numeric string). Get it from list_assignments or list_upcoming_assignments.
- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.

### `get_assignment_dates` (~123 tokens)

Get Assignment Dates

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.

### `get_score_statistics` (~102 tokens)

Get Score Statistics

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.

Input parameters:

- `assignment_id` (string, required): Assignment ID (numeric string). Get it from list_assignments or list_upcoming_assignments.
- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.

### `get_late_policy` (~81 tokens)

Get Late Policy

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.

### `list_missing_submissions` (~80 tokens)

List Missing Submissions

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.

Input parameters:

- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.

### `list_upcoming_assignments` (~88 tokens)

List Upcoming Assignments

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.

Input parameters:

- `days` (integer): Default 7
- `include_completed` (boolean): If true, also include assignments you have already submitted.

Output parameters:

- `days` (number)
- `items` (array)

### `list_overdue_assignments` (~77 tokens)

List Overdue Assignments

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.

Input parameters:

- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.

### `assignment_brief` (~110 tokens)

Assignment Brief

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.

Input parameters:

- `assignment_id` (string, required): Assignment ID (numeric string). Get it from list_assignments or list_upcoming_assignments.
- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.

### `get_my_submission` (~96 tokens)

Get My Submission

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.

Input parameters:

- `assignment_id` (string, required): Assignment ID (numeric string). Get it from list_assignments or list_upcoming_assignments.
- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.

### `list_my_submissions` (~114 tokens)

List My Submissions

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

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.

### `get_submission_summary` (~92 tokens)

Get Submission Summary

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

Input parameters:

- `assignment_id` (string, required): Assignment ID (numeric string). Get it from list_assignments or list_upcoming_assignments.
- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.

### `get_submission_history` (~94 tokens)

Get Submission History

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.

Input parameters:

- `assignment_id` (string, required): Assignment ID (numeric string). Get it from list_assignments or list_upcoming_assignments.
- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.

### `list_submission_attachments` (~97 tokens)

List Submission Attachments

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.

Input parameters:

- `assignment_id` (string, required): Assignment ID (numeric string). Get it from list_assignments or list_upcoming_assignments.
- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.

### `get_originality_report` (~98 tokens)

Get Originality Report

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.

Input parameters:

- `assignment_id` (string, required): Assignment ID (numeric string). Get it from list_assignments or list_upcoming_assignments.
- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.

### `get_rubric_assessment` (~99 tokens)

Get Rubric Assessment

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.

Input parameters:

- `assignment_id` (string, required): Assignment ID (numeric string). Get it from list_assignments or list_upcoming_assignments.
- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.

### `list_submission_comments` (~94 tokens)

List Submission Comments

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.

Input parameters:

- `assignment_id` (string, required): Assignment ID (numeric string). Get it from list_assignments or list_upcoming_assignments.
- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.

### `mark_submission_read` (~84 tokens)

Mark Submission Read

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

Input parameters:

- `assignment_id` (string, required): Assignment ID (numeric string). Get it from list_assignments or list_upcoming_assignments.
- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.

### `submit_assignment_text` (~179 tokens)

Submit Assignment Text

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. [IRREVERSIBLE: call without confirm=true first to preview, then re-call with confirm=true. Apps that can ask the user directly will show a confirmation instead.]

Input parameters:

- `assignment_id` (string, required): Assignment ID (numeric string). Get it from list_assignments or list_upcoming_assignments.
- `body` (string, required): The submission text (HTML allowed)
- `comment` (string): Optional comment to the instructor
- `confirm` (boolean): Must be true to actually execute. Omit or set false to get a dry-run preview first.
- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.

### `submit_assignment_url` (~176 tokens)

Submit Assignment URL

Submit a website URL for an assignment that accepts URL submissions. Your instructor sees it and it counts as a submission attempt. [IRREVERSIBLE: call without confirm=true first to preview, then re-call with confirm=true. Apps that can ask the user directly will show a confirmation instead.]

Input parameters:

- `assignment_id` (string, required): Assignment ID (numeric string). Get it from list_assignments or list_upcoming_assignments.
- `comment` (string): Comment text, visible to your instructor.
- `confirm` (boolean): Must be true to actually execute. Omit or set false to get a dry-run preview first.
- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `url` (string, required): Full web address to submit, starting with https://.

### `submit_assignment_file` (~187 tokens)

Submit Assignment File

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. [IRREVERSIBLE: call without confirm=true first to preview, then re-call with confirm=true. Apps that can ask the user directly will show a confirmation instead.]

Input parameters:

- `assignment_id` (string, required): Assignment ID (numeric string). Get it from list_assignments or list_upcoming_assignments.
- `comment` (string): Comment text, visible to your instructor.
- `confirm` (boolean): Must be true to actually execute. Omit or set false to get a dry-run preview first.
- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `file_path` (string, required): Absolute path to the local file

### `upload_submission_file` (~137 tokens)

Upload Submission File

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.

Input parameters:

- `assignment_id` (string, required): Assignment ID (numeric string). Get it from list_assignments or list_upcoming_assignments.
- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `file_path` (string, required): Absolute path of the local file to upload, e.g. "C:/Users/me/essay.pdf".

### `post_submission_comment` (~191 tokens)

Post Submission Comment

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. [IRREVERSIBLE: call without confirm=true first to preview, then re-call with confirm=true. Apps that can ask the user directly will show a confirmation instead.]

Input parameters:

- `assignment_id` (string, required): Assignment ID (numeric string). Get it from list_assignments or list_upcoming_assignments.
- `comment` (string, required): Comment text, visible to your instructor.
- `confirm` (boolean): Must be true to actually execute. Omit or set false to get a dry-run preview first.
- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `file_ids` (array): Optional file IDs returned by upload_comment_attachment, to attach to this comment.

### `upload_comment_attachment` (~128 tokens)

Upload Comment Attachment

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.

Input parameters:

- `assignment_id` (string, required): Assignment ID (numeric string). Get it from list_assignments or list_upcoming_assignments.
- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `file_path` (string, required): Absolute path of the local file to upload, e.g. "C:/Users/me/essay.pdf".

### `download_submission_attachment` (~84 tokens)

Download Submission Attachment

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

Input parameters:

- `filename` (string): File name to save as. Defaults to the attachment's own name.
- `url` (string, required): Download URL of the attachment: the attachments[].url field from list_submission_attachments or get_my_submission.

### `submit_annotation_assignment` (~166 tokens)

Submit Annotation Assignment

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. [IRREVERSIBLE: call without confirm=true first to preview, then re-call with confirm=true. Apps that can ask the user directly will show a confirmation instead.]

Input parameters:

- `assignment_id` (string, required): Assignment ID (numeric string). Get it from list_assignments or list_upcoming_assignments.
- `comment` (string): Comment text, visible to your instructor.
- `confirm` (boolean): Must be true to actually execute. Omit or set false to get a dry-run preview first.
- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.

### `get_all_grades` (~52 tokens)

Get All Grades

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.

Output parameters:

- `courses` (array)

### `calculate_gpa` (~272 tokens)

Calculate Gpa

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.

Input parameters:

- `credits` (object): Credit hours per course, keyed by course ID, name or code, e.g. {"Calculus I": 4, "ENG101": 3}. Courses not listed use default_credits.
- `default_credits` (number): Credit hours for courses not in credits. Default 3.
- `extra_points` (object): Extra grade points for weighted GPA, keyed like credits, e.g. {"AP Biology": 1, "Honors English": 0.5}. Leave empty for an unweighted GPA.
- `use_final_score` (boolean): True to use the final score, which counts missing work as zero, instead of the current score. Default false.
- `what_if` (object): Pretend grades, keyed by course ID, name or code. Each value is a letter ("B+") or a percent (88), e.g. {"Chemistry": "A-"}.

### `get_course_grade_breakdown` (~78 tokens)

Get Course Grade Breakdown

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.

### `what_if_grade` (~110 tokens)

What If Grade

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.

Input parameters:

- `score` (number, required): Hypothetical score to test
- `submission_id` (string, required): Submission ID (from get_my_submission or list_my_submissions)

### `reset_what_if_grades` (~62 tokens)

Reset What If Grades

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

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.

### `get_grading_standard` (~114 tokens)

Get Grading Standard

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

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.

### `list_grading_periods` (~73 tokens)

List Grading Periods

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.

### `get_my_assignment_analytics` (~75 tokens)

Get My Assignment Analytics

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.

### `get_my_activity_analytics` (~67 tokens)

Get My Activity Analytics

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.

### `get_my_communication_analytics` (~67 tokens)

Get My Communication Analytics

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.

### `get_unposted_grades` (~122 tokens)

Get Unposted Grades

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.

Input parameters:

- `course_id` (string): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.

### `compute_needed_score` (~97 tokens)

Compute Needed Score

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `target_percent` (number, required): Target final grade percentage, e.g. 90

### `grade_impact_ranking` (~78 tokens)

Grade Impact Ranking

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.

### `get_grade_trend` (~65 tokens)

Get Grade Trend

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.

### `final_grade_scenarios` (~131 tokens)

Final Grade Scenarios

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `targets` (array): Your own target percentages instead of letter grades, e.g. [93, 85].

### `list_quizzes` (~149 tokens)

List Quizzes

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.
- `search_term` (string): Optional text filter on names or titles (at least 2 characters, case-insensitive).

### `get_quiz` (~101 tokens)

Get Quiz

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `quiz_id` (string, required): Quiz ID (numeric string). Get it from list_quizzes, or list_new_quizzes for New Quizzes.

### `get_my_quiz_submission` (~98 tokens)

Get My Quiz Submission

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

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `quiz_id` (string, required): Quiz ID (numeric string). Get it from list_quizzes, or list_new_quizzes for New Quizzes.

### `list_my_quiz_submissions` (~95 tokens)

List My Quiz Submissions

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

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `quiz_id` (string, required): Quiz ID (numeric string). Get it from list_quizzes, or list_new_quizzes for New Quizzes.

### `get_quiz_submission_time` (~117 tokens)

Get Quiz Submission Time

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `quiz_id` (string, required): Quiz ID (numeric string). Get it from list_quizzes, or list_new_quizzes for New Quizzes.
- `submission_id` (string, required): Quiz submission ID (numeric string), from get_my_quiz_submission.

### `list_quiz_questions` (~178 tokens)

List Quiz Questions

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.
- `quiz_id` (string, required): Quiz ID (numeric string). Get it from list_quizzes, or list_new_quizzes for New Quizzes.
- `quiz_submission_id` (string): Quiz submission ID from get_my_quiz_submission.

### `get_quiz_extensions` (~95 tokens)

Get Quiz Extensions

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

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `quiz_id` (string, required): Quiz ID (numeric string). Get it from list_quizzes, or list_new_quizzes for New Quizzes.

### `get_quiz_ip_filters` (~97 tokens)

Get Quiz IP Filters

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

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `quiz_id` (string, required): Quiz ID (numeric string). Get it from list_quizzes, or list_new_quizzes for New Quizzes.

### `get_quiz_assignment_overrides` (~98 tokens)

Get Quiz Assignment Overrides

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `quiz_assignment_overrides` (array): Optional quiz IDs to limit the result to, e.g. ["123", "456"].

### `list_new_quizzes` (~131 tokens)

List New Quizzes

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.

### `get_new_quiz` (~111 tokens)

Get New Quiz

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `quiz_id` (string, required): Quiz ID (numeric string). Get it from list_quizzes, or list_new_quizzes for New Quizzes.

### `get_new_quiz_items` (~146 tokens)

Get New Quiz Items

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

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.
- `quiz_id` (string, required): Quiz ID (numeric string). Get it from list_quizzes, or list_new_quizzes for New Quizzes.

### `list_topics` (~164 tokens)

List Topics

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `only_announcements` (boolean): If true, return announcements instead of discussion topics.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.
- `search_term` (string): Optional text filter on names or titles (at least 2 characters, case-insensitive).

### `get_topic` (~105 tokens)

Get Topic

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `topic_id` (string, required): Discussion topic ID (numeric string). Get it from list_topics.

### `get_full_topic_view` (~110 tokens)

Get Full Topic View

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `max_entries` (integer): Maximum number of discussion entries to include.
- `topic_id` (string, required): Discussion topic ID (numeric string). Get it from list_topics.

### `list_entries` (~141 tokens)

List Entries

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.
- `topic_id` (string, required): Discussion topic ID (numeric string). Get it from list_topics.

### `list_entry_replies` (~168 tokens)

List Entry Replies

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `entry_id` (string, required): Discussion entry ID (numeric string). Get it from get_full_topic_view or list_entries.
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.
- `topic_id` (string, required): Discussion topic ID (numeric string). Get it from list_topics.

### `post_entry` (~155 tokens)

Post Entry

Post a new top-level entry to a course discussion. Visible to the whole class. Use reply_to_entry to answer someone's entry. [IRREVERSIBLE: call without confirm=true first to preview, then re-call with confirm=true. Apps that can ask the user directly will show a confirmation instead.]

Input parameters:

- `confirm` (boolean): Must be true to actually execute. Omit or set false to get a dry-run preview first.
- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `message` (string, required): Message text. Plain text or simple HTML.
- `topic_id` (string, required): Discussion topic ID (numeric string). Get it from list_topics.

### `reply_to_entry` (~177 tokens)

Reply To Entry

Reply to one discussion entry. Visible to the whole class. Use post_entry for a new top-level post. [IRREVERSIBLE: call without confirm=true first to preview, then re-call with confirm=true. Apps that can ask the user directly will show a confirmation instead.]

Input parameters:

- `confirm` (boolean): Must be true to actually execute. Omit or set false to get a dry-run preview first.
- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `entry_id` (string, required): Discussion entry ID (numeric string). Get it from get_full_topic_view or list_entries.
- `message` (string, required): Message text. Plain text or simple HTML.
- `topic_id` (string, required): Discussion topic ID (numeric string). Get it from list_topics.

### `edit_my_entry` (~182 tokens)

Edit My Entry

Replace the text of one of your own discussion entries, if the course allows editing. The new text is visible to the whole class. [IRREVERSIBLE: call without confirm=true first to preview, then re-call with confirm=true. Apps that can ask the user directly will show a confirmation instead.]

Input parameters:

- `confirm` (boolean): Must be true to actually execute. Omit or set false to get a dry-run preview first.
- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `entry_id` (string, required): Discussion entry ID (numeric string). Get it from get_full_topic_view or list_entries.
- `message` (string, required): Message text. Plain text or simple HTML.
- `topic_id` (string, required): Discussion topic ID (numeric string). Get it from list_topics.

### `delete_my_entry` (~163 tokens)

Delete My Entry

Delete one of your own discussion entries, if the course allows it. Classmates see that an entry was removed. [IRREVERSIBLE: call without confirm=true first to preview, then re-call with confirm=true. Apps that can ask the user directly will show a confirmation instead.]

Input parameters:

- `confirm` (boolean): Must be true to actually execute. Omit or set false to get a dry-run preview first.
- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `entry_id` (string, required): Discussion entry ID (numeric string). Get it from get_full_topic_view or list_entries.
- `topic_id` (string, required): Discussion topic ID (numeric string). Get it from list_topics.

### `rate_entry` (~127 tokens)

Rate Entry

Like (rating 1) or remove your like (rating 0) on a discussion entry, where the instructor enabled ratings. Others see the like count.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `entry_id` (string, required): Discussion entry ID (numeric string). Get it from get_full_topic_view or list_entries.
- `rating` (integer, required): 1 to like, 0 to remove
- `topic_id` (string, required): Discussion topic ID (numeric string). Get it from list_topics.

### `mark_topic_read` (~81 tokens)

Mark Topic Read

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

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `topic_id` (string, required): Discussion topic ID (numeric string). Get it from list_topics.

### `mark_all_entries_read` (~74 tokens)

Mark All Entries Read

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

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `topic_id` (string, required): Discussion topic ID (numeric string). Get it from list_topics.

### `mark_entry_read` (~95 tokens)

Mark Entry Read

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

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `entry_id` (string, required): Discussion entry ID (numeric string). Get it from get_full_topic_view or list_entries.
- `topic_id` (string, required): Discussion topic ID (numeric string). Get it from list_topics.

### `subscribe_topic` (~76 tokens)

Subscribe Topic

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

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `topic_id` (string, required): Discussion topic ID (numeric string). Get it from list_topics.

### `unsubscribe_topic` (~82 tokens)

Unsubscribe Topic

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

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `topic_id` (string, required): Discussion topic ID (numeric string). Get it from list_topics.

### `list_announcements` (~185 tokens)

List Announcements

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.

Input parameters:

- `course_ids` (array): Course IDs; omit for all active courses
- `end_date` (string): End of the range, as an ISO 8601 date or date-time, e.g. "2026-11-30".
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `start_date` (string): Start of the range, as an ISO 8601 date or date-time, e.g. "2026-11-01".
- `unread_only` (boolean): If true, only announcements you have not read yet.

### `get_unread_discussion_count` (~116 tokens)

Get Unread Discussion Count

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.

### `list_global_announcements` (~40 tokens)

List Global Announcements

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

### `dismiss_global_announcement` (~62 tokens)

Dismiss Global Announcement

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

Input parameters:

- `account_id` (string): account_id from list_global_announcements. Default "self".
- `notification_id` (string, required): Announcement ID from list_global_announcements.

### `mark_announcement_read` (~62 tokens)

Mark Announcement Read

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

Input parameters:

- `announcement_id` (string, required): Announcement ID from list_announcements.
- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.

### `mark_all_announcements_read` (~72 tokens)

Mark All Announcements Read

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.

Input parameters:

- `course_ids` (array): Course IDs; omit for all active courses.
- `days` (integer): How far back to look. Default 30.

### `list_conversations` (~146 tokens)

List Conversations

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.

Input parameters:

- `filter` (array): Optional filter by course or user, e.g. "course_12345".
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.
- `scope` (string): Which mailbox: "inbox" (default), "unread", "starred", "archived" or "sent".

### `get_conversation` (~73 tokens)

Get Conversation

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.

Input parameters:

- `conversation_id` (string, required): Inbox conversation ID (numeric string). Get it from list_conversations.
- `mark_as_read` (boolean): Default false

### `send_message` (~181 tokens)

Send Message

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. [IRREVERSIBLE: call without confirm=true first to preview, then re-call with confirm=true. Apps that can ask the user directly will show a confirmation instead.]

Input parameters:

- `body` (string, required): Message body text. Plain text or simple HTML.
- `confirm` (boolean): Must be true to actually execute. Omit or set false to get a dry-run preview first.
- `course_id` (string): Course context, recommended
- `recipients` (array, required): Canvas user IDs from find_recipients
- `separate_threads` (boolean): Send individually rather than as a group thread
- `subject` (string, required): Message subject line.

### `reply_to_conversation` (~156 tokens)

Reply To Conversation

Reply within an existing Canvas Inbox conversation. Every participant receives it. Use send_message to start a new thread. [IRREVERSIBLE: call without confirm=true first to preview, then re-call with confirm=true. Apps that can ask the user directly will show a confirmation instead.]

Input parameters:

- `body` (string, required): Message body text. Plain text or simple HTML.
- `confirm` (boolean): Must be true to actually execute. Omit or set false to get a dry-run preview first.
- `conversation_id` (string, required): Inbox conversation ID (numeric string). Get it from list_conversations.
- `included_message_ids` (array): Optional IDs of earlier messages in the thread to quote in this reply, from get_conversation.

### `find_recipients` (~100 tokens)

Find Recipients

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.

Input parameters:

- `course_id` (string): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `search` (string, required): Name fragment

### `add_recipients` (~131 tokens)

Add Recipients

Add more people to an existing Inbox conversation so they receive its messages. Get user IDs from find_recipients. [IRREVERSIBLE: call without confirm=true first to preview, then re-call with confirm=true. Apps that can ask the user directly will show a confirmation instead.]

Input parameters:

- `confirm` (boolean): Must be true to actually execute. Omit or set false to get a dry-run preview first.
- `conversation_id` (string, required): Inbox conversation ID (numeric string). Get it from list_conversations.
- `recipients` (array, required): User IDs to add, from find_recipients.

### `mark_conversation_read` (~56 tokens)

Mark Conversation Read

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

Input parameters:

- `conversation_id` (string, required): Inbox conversation ID (numeric string). Get it from list_conversations.

### `mark_conversation_unread` (~55 tokens)

Mark Conversation Unread

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

Input parameters:

- `conversation_id` (string, required): Inbox conversation ID (numeric string). Get it from list_conversations.

### `star_conversation` (~56 tokens)

Star Conversation

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

Input parameters:

- `conversation_id` (string, required): Inbox conversation ID (numeric string). Get it from list_conversations.

### `unstar_conversation` (~55 tokens)

Unstar Conversation

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

Input parameters:

- `conversation_id` (string, required): Inbox conversation ID (numeric string). Get it from list_conversations.

### `archive_conversation` (~52 tokens)

Archive Conversation

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

Input parameters:

- `conversation_id` (string, required): Inbox conversation ID (numeric string). Get it from list_conversations.

### `delete_conversation` (~109 tokens)

Delete Conversation

Delete an Inbox conversation from your own inbox. Other participants keep their copy. Cannot be undone. [IRREVERSIBLE: call without confirm=true first to preview, then re-call with confirm=true. Apps that can ask the user directly will show a confirmation instead.]

Input parameters:

- `confirm` (boolean): Must be true to actually execute. Omit or set false to get a dry-run preview first.
- `conversation_id` (string, required): Inbox conversation ID (numeric string). Get it from list_conversations.

### `get_unread_conversation_count` (~38 tokens)

Get Unread Conversation Count

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

### `batch_update_conversations` (~145 tokens)

Batch Update Conversations

Apply one action (mark read or unread, star, unstar, archive or delete) to many Inbox conversations at once. Only affects your own inbox. [IRREVERSIBLE: call without confirm=true first to preview, then re-call with confirm=true. Apps that can ask the user directly will show a confirmation instead.]

Input parameters:

- `confirm` (boolean): Must be true to actually execute. Omit or set false to get a dry-run preview first.
- `conversation_ids` (array, required): Inbox conversation IDs (numeric strings) from list_conversations.
- `event` (string, required): Action to apply to every listed conversation. "destroy" deletes them from your inbox for good.

### `list_calendar_events` (~188 tokens)

List Calendar Events

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.

Input parameters:

- `course_ids` (array): Course IDs (numeric strings) to include. Get them from list_courses.
- `end_date` (string): End of the range, as an ISO 8601 date or date-time, e.g. "2026-11-30".
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.
- `start_date` (string): YYYY-MM-DD
- `type` (string): "event" (default) for calendar events, or "assignment" for assignment due dates.

### `get_calendar_event` (~69 tokens)

Get Calendar Event

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.

Input parameters:

- `event_id` (string, required): Calendar event ID (numeric string). Get it from list_calendar_events or list_my_reservations.

### `create_personal_event` (~138 tokens)

Create Personal Event

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.

Input parameters:

- `description` (string): Optional description text.
- `end_at` (string): End time, ISO 8601, e.g. "2026-11-05T15:00:00-05:00".
- `location_name` (string): Optional location name, e.g. "Library room 2".
- `start_at` (string, required): ISO 8601
- `title` (string, required): Event title, e.g. "Study for BIO midterm".

### `update_calendar_event` (~171 tokens)

Update Calendar Event

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.

Input parameters:

- `description` (string): Optional description text.
- `end_at` (string): End time, ISO 8601, e.g. "2026-11-05T15:00:00-05:00".
- `event_id` (string, required): Calendar event ID (numeric string). Get it from list_calendar_events or list_my_reservations.
- `start_at` (string): Start time, ISO 8601, e.g. "2026-11-05T14:00:00-05:00".
- `title` (string): New title. Omit to keep the current one.

### `delete_calendar_event` (~120 tokens)

Delete Calendar Event

Delete a calendar event you own, such as a personal event. Cannot be undone. Course events return a permission error. [IRREVERSIBLE: call without confirm=true first to preview, then re-call with confirm=true. Apps that can ask the user directly will show a confirmation instead.]

Input parameters:

- `confirm` (boolean): Must be true to actually execute. Omit or set false to get a dry-run preview first.
- `event_id` (string, required): Calendar event ID (numeric string). Get it from list_calendar_events or list_my_reservations.

### `list_appointment_groups` (~139 tokens)

List Appointment Groups

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.

Input parameters:

- `include_past` (boolean): If true, also include appointment groups whose slots are in the past.
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.
- `scope` (string): "reservable" (default: groups you can still book) or "manageable".

### `get_appointment_group` (~68 tokens)

Get Appointment Group

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.

Input parameters:

- `group_id` (string, required): Appointment group ID (numeric string). Get it from list_appointment_groups.

### `reserve_appointment_slot` (~137 tokens)

Reserve Appointment Slot

Book an office hours or advising time slot. The instructor sees the booking. Get slot IDs from get_appointment_group; cancel with cancel_reservation. [IRREVERSIBLE: call without confirm=true first to preview, then re-call with confirm=true. Apps that can ask the user directly will show a confirmation instead.]

Input parameters:

- `appointment_id` (string, required): Time slot ID from get_appointment_group
- `comments` (string): Optional note for the instructor, e.g. what you want to discuss.
- `confirm` (boolean): Must be true to actually execute. Omit or set false to get a dry-run preview first.

### `cancel_reservation` (~134 tokens)

Cancel Reservation

Cancel an appointment slot you booked. The instructor can see the cancellation. Get event_id from list_my_reservations. [IRREVERSIBLE: call without confirm=true first to preview, then re-call with confirm=true. Apps that can ask the user directly will show a confirmation instead.]

Input parameters:

- `cancel_reason` (string): Optional reason shown to the instructor.
- `confirm` (boolean): Must be true to actually execute. Omit or set false to get a dry-run preview first.
- `event_id` (string, required): Calendar event ID (numeric string). Get it from list_calendar_events or list_my_reservations.

### `list_my_reservations` (~90 tokens)

List My Reservations

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

Input parameters:

- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.

### `get_course_pace` (~69 tokens)

Get Course Pace

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.

### `list_course_files` (~169 tokens)

List Course Files

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.

Input parameters:

- `content_types` (array): e.g. application/pdf
- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.
- `search_term` (string): Optional text filter on names or titles (at least 2 characters, case-insensitive).

### `list_folders` (~120 tokens)

List Folders

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.

### `get_folder` (~61 tokens)

Get Folder

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.

Input parameters:

- `folder_id` (string, required): Folder ID (numeric string). Get it from list_folders.

### `get_folder_tree` (~84 tokens)

Get Folder Tree

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `max_depth` (integer): How many folder levels deep to go.

### `get_file_metadata` (~70 tokens)

Get File Metadata

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.

Input parameters:

- `file_id` (string, required): File ID (numeric string). Get it from list_course_files, list_my_files or list_group_files.

### `get_file_public_url` (~69 tokens)

Get File Public URL

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.

Input parameters:

- `file_id` (string, required): File ID (numeric string). Get it from list_course_files, list_my_files or list_group_files.

### `download_file` (~92 tokens)

Download File

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.

Input parameters:

- `dest_dir` (string): Local folder to save into. Defaults to the server's download folder (CANVAS_DOWNLOAD_DIR).
- `file_id` (string, required): File ID (numeric string). Get it from list_course_files, list_my_files or list_group_files.

### `read_course_file` (~183 tokens)

Read Course File

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.

Input parameters:

- `file_id` (string, required): File ID (numeric string). Get it from list_course_files, list_my_files or list_group_files.
- `max_chars` (integer): Most characters to return in one call. Default 30000, maximum 100000.
- `offset` (integer): Character to start from, for reading the next part of a long file. Use next_offset from the previous call. Default 0.

### `list_my_files` (~114 tokens)

List My Files

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

Input parameters:

- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.
- `search_term` (string): Optional text filter on names or titles (at least 2 characters, case-insensitive).

### `upload_to_my_files` (~96 tokens)

Upload To My Files

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.

Input parameters:

- `file_path` (string, required): Absolute path of the local file to upload, e.g. "C:/Users/me/essay.pdf".
- `parent_folder_path` (string): Folder path inside your storage, e.g. "notes/spring". Omit for the top level.

### `get_storage_quota` (~27 tokens)

Get Storage Quota

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

### `delete_my_file` (~118 tokens)

Delete My File

Delete a file from your personal Canvas storage. Cannot be undone. Get file_id from list_my_files. [IRREVERSIBLE: call without confirm=true first to preview, then re-call with confirm=true. Apps that can ask the user directly will show a confirmation instead.]

Input parameters:

- `confirm` (boolean): Must be true to actually execute. Omit or set false to get a dry-run preview first.
- `file_id` (string, required): File ID (numeric string). Get it from list_course_files, list_my_files or list_group_files.

### `create_folder` (~96 tokens)

Create Folder

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.

Input parameters:

- `name` (string, required): Folder name, e.g. "Spring notes".
- `parent_folder_id` (string): ID of the folder to create this one inside, from list_my_files or an earlier create_folder. Omit for the top level.

### `list_pages` (~143 tokens)

List Pages

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.
- `search_term` (string): Optional text filter on names or titles (at least 2 characters, case-insensitive).

### `get_page_content` (~89 tokens)

Get Page Content

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `page_url` (string, required): Page url slug or page_id

### `list_page_revisions` (~167 tokens)

List Page Revisions

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.
- `page_url` (string, required): The page's URL slug, e.g. "week-1-overview" (the last part of the page address). Get it from list_pages.

### `get_page_revision` (~157 tokens)

Get Page Revision

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `page_url` (string, required): The page's URL slug, e.g. "week-1-overview" (the last part of the page address). Get it from list_pages.
- `revision_id` (string, required): Revision number of the page, from list_page_revisions.

### `list_modules` (~118 tokens)

List Modules

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.

### `get_module` (~83 tokens)

Get Module

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

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `module_id` (string, required): Module ID (numeric string). Get it from list_modules.

### `list_module_items` (~144 tokens)

List Module Items

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `module_id` (string, required): Module ID (numeric string). Get it from list_modules.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.

### `get_module_item` (~113 tokens)

Get Module Item

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `item_id` (string, required): Module item ID (numeric string). Get it from list_module_items.
- `module_id` (string, required): Module ID (numeric string). Get it from list_modules.

### `mark_module_item_done` (~101 tokens)

Mark Module Item Done

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

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `item_id` (string, required): Module item ID (numeric string). Get it from list_module_items.
- `module_id` (string, required): Module ID (numeric string). Get it from list_modules.

### `mark_module_item_read` (~103 tokens)

Mark Module Item Read

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

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `item_id` (string, required): Module item ID (numeric string). Get it from list_module_items.
- `module_id` (string, required): Module ID (numeric string). Get it from list_modules.

### `select_mastery_path` (~188 tokens)

Select Mastery Path

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. [IRREVERSIBLE: call without confirm=true first to preview, then re-call with confirm=true. Apps that can ask the user directly will show a confirmation instead.]

Input parameters:

- `assignment_set_id` (string, required): ID of the mastery path option to choose, from get_module_item.
- `confirm` (boolean): Must be true to actually execute. Omit or set false to get a dry-run preview first.
- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `item_id` (string, required): Module item ID (numeric string). Get it from list_module_items.
- `module_id` (string, required): Module ID (numeric string). Get it from list_modules.

### `get_module_item_sequence` (~123 tokens)

Get Module Item Sequence

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.

Input parameters:

- `asset_id` (string, required): ID of that content (numeric string). For a Page, use its URL slug.
- `asset_type` (string, required): Kind of content asset_id refers to. Use "ModuleItem" when asset_id is a module item ID from list_module_items.
- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.

### `list_media_objects` (~120 tokens)

List Media Objects

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.

### `get_media_captions` (~64 tokens)

Get Media Captions

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.

Input parameters:

- `media_id` (string, required): media_id from list_media_objects

### `download_media_captions` (~117 tokens)

Download Media Captions

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.

Input parameters:

- `dest_dir` (string): Local folder to save into. Defaults to the server's download folder (CANVAS_DOWNLOAD_DIR).
- `media_id` (string, required): Media object ID, e.g. "m-abc123". Get it from list_media_objects.
- `track_id` (string): Defaults to the first English track

### `create_content_export` (~106 tokens)

Create Content Export

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `export_type` (string): "common_cartridge" (default, .imscc) or "zip" (files only).

### `get_content_export` (~78 tokens)

Get Content Export

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

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `export_id` (string, required): Content export ID returned by create_content_export.

### `list_external_tools` (~122 tokens)

List External Tools

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.

### `get_tool_launch_url` (~122 tokens)

Get Tool Launch URL

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `tool_id` (string): External tool ID (numeric string). Get it from list_external_tools.
- `url` (string): Optional launch URL of a specific tool resource, if the tool needs one.

### `list_conferences` (~119 tokens)

List Conferences

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.

### `list_collaborations` (~109 tokens)

List Collaborations

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

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.

### `list_eportfolios` (~109 tokens)

List Eportfolios

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

Input parameters:

- `include_deleted` (boolean): If true, also list deleted ePortfolios.
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.

### `get_eportfolio_pages` (~66 tokens)

Get Eportfolio Pages

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

Input parameters:

- `eportfolio_id` (string, required): ePortfolio ID from list_eportfolios.
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.

### `list_my_groups` (~88 tokens)

List My Groups

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.

Input parameters:

- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.

### `get_group` (~58 tokens)

Get Group

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

Input parameters:

- `group_id` (string, required): Student group ID (numeric string). Get it from list_my_groups.

### `list_group_members` (~104 tokens)

List Group Members

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

Input parameters:

- `group_id` (string, required): Student group ID (numeric string). Get it from list_my_groups.
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.

### `list_group_discussions` (~106 tokens)

List Group Discussions

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

Input parameters:

- `group_id` (string, required): Student group ID (numeric string). Get it from list_my_groups.
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.

### `list_group_files` (~103 tokens)

List Group Files

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

Input parameters:

- `group_id` (string, required): Student group ID (numeric string). Get it from list_my_groups.
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.

### `list_group_pages` (~97 tokens)

List Group Pages

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

Input parameters:

- `group_id` (string, required): Student group ID (numeric string). Get it from list_my_groups.
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.

### `post_group_discussion` (~143 tokens)

Post Group Discussion

Post to a discussion inside a group workspace. Visible to your groupmates and instructors. [IRREVERSIBLE: call without confirm=true first to preview, then re-call with confirm=true. Apps that can ask the user directly will show a confirmation instead.]

Input parameters:

- `confirm` (boolean): Must be true to actually execute. Omit or set false to get a dry-run preview first.
- `group_id` (string, required): Student group ID (numeric string). Get it from list_my_groups.
- `message` (string, required): Message text. Plain text or simple HTML.
- `topic_id` (string, required): Discussion topic ID (numeric string). Get it from list_topics.

### `list_group_categories` (~119 tokens)

List Group Categories

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.

### `join_group` (~103 tokens)

Join Group

Join a self-signup student group. Groupmates and instructors see that you joined. [IRREVERSIBLE: call without confirm=true first to preview, then re-call with confirm=true. Apps that can ask the user directly will show a confirmation instead.]

Input parameters:

- `confirm` (boolean): Must be true to actually execute. Omit or set false to get a dry-run preview first.
- `group_id` (string, required): ID of the open group to join (numeric string).

### `leave_group` (~104 tokens)

Leave Group

Leave a student group you belong to. You lose access to its workspace. [IRREVERSIBLE: call without confirm=true first to preview, then re-call with confirm=true. Apps that can ask the user directly will show a confirmation instead.]

Input parameters:

- `confirm` (boolean): Must be true to actually execute. Omit or set false to get a dry-run preview first.
- `group_id` (string, required): Student group ID (numeric string). Get it from list_my_groups.

### `get_group_activity_stream` (~113 tokens)

Get Group Activity Stream

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.

Input parameters:

- `group_id` (string, required): Student group ID (numeric string). Get it from list_my_groups.
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.

### `list_rubrics` (~114 tokens)

List Rubrics

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

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.

### `get_rubric` (~104 tokens)

Get Rubric

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `rubric_id` (string, required): Rubric ID (numeric string). Get it from list_rubrics or get_assignment.

### `get_my_rubric_assessment` (~120 tokens)

Get My Rubric Assessment

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.

Input parameters:

- `assignment_id` (string, required): Assignment ID (numeric string). Get it from list_assignments or list_upcoming_assignments.
- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.

### `list_my_peer_reviews` (~72 tokens)

List My Peer Reviews

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.

Input parameters:

- `course_id` (string): Omit to check all active courses

### `get_peer_review_assignment` (~97 tokens)

Get Peer Review Assignment

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.

Input parameters:

- `assignment_id` (string, required): Assignment ID (numeric string). Get it from list_assignments or list_upcoming_assignments.
- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.

### `submit_peer_review` (~241 tokens)

Submit Peer Review

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. [IRREVERSIBLE: call without confirm=true first to preview, then re-call with confirm=true. Apps that can ask the user directly will show a confirmation instead.]

Input parameters:

- `assignment_id` (string, required): Assignment ID (numeric string). Get it from list_assignments or list_upcoming_assignments.
- `comment` (string, required): Your review comment. The classmate and your instructor can see it.
- `confirm` (boolean): Must be true to actually execute. Omit or set false to get a dry-run preview first.
- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `rubric_assessment` (object): Optional rubric scores keyed by criterion ID, e.g. {"_1234": {"points": 4, "comments": "Clear thesis"}}. Get criterion IDs from get_rubric.
- `student_id` (string, required): The student whose work you are reviewing

### `list_outcomes` (~115 tokens)

List Outcomes

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.

### `get_outcome` (~53 tokens)

Get Outcome

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

Input parameters:

- `outcome_id` (string, required): Learning outcome ID (numeric string). Get it from list_outcomes.

### `list_outcome_groups` (~113 tokens)

List Outcome Groups

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

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.

### `get_my_outcome_results` (~73 tokens)

Get My Outcome Results

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.

### `get_outcome_rollup` (~69 tokens)

Get Outcome Rollup

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.

### `smart_search` (~110 tokens)

Smart Search

Search a course by meaning using Canvas's AI search. Read-only. It is a beta Canvas feature that often returns 404; when it does, this tool falls back to a keyword scan. search_course_content is the reliable keyword option.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `filter` (array): Optional content types to search. Omit to search all four.
- `query` (string, required): Search text.

### `search_course_content` (~107 tokens)

Search Course Content

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `query` (string, required): Search text.

### `grep_all_courses` (~68 tokens)

Grep All Courses

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.

Input parameters:

- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `query` (string, required): Search text.

### `list_planner_items` (~154 tokens)

List Planner Items

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.

Input parameters:

- `course_id` (string): Only this course (numeric ID from list_courses).
- `end_date` (string): End of the range, YYYY-MM-DD. Default 14 days from now.
- `incomplete_only` (boolean): If true, leave out items you have already submitted or marked done.
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `start_date` (string): Start of the range, YYYY-MM-DD. Default today.

### `list_planner_notes` (~127 tokens)

List Planner Notes

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

Input parameters:

- `course_id` (string): Only notes linked to this course.
- `end_date` (string): Only notes on or before this date, YYYY-MM-DD.
- `limit` (integer): Maximum number of items to return (one page of results). Smaller is faster.
- `page` (integer): Which page of results to show, starting at 1. Use it when a result says there are more.
- `start_date` (string): Only notes on or after this date, YYYY-MM-DD.

### `create_planner_note` (~143 tokens)

Create Planner Note

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.

Input parameters:

- `course_id` (string): Optional course to file it under (numeric ID from list_courses).
- `details` (string): Optional longer notes.
- `title` (string, required): What to do, e.g. "Start the lab report".
- `todo_date` (string, required): When, as an ISO 8601 date or date-time, e.g. "2026-11-07" or "2026-11-07T18:00:00".

### `update_planner_note` (~104 tokens)

Update Planner Note

Change one of your Canvas planner notes: its title, details, date or course.

Input parameters:

- `course_id` (string): Course to file it under.
- `details` (string): New details.
- `note_id` (string, required): Planner note ID, from list_planner_notes or list_planner_items (plannable_id of a planner_note).
- `title` (string): New title.
- `todo_date` (string): New date, ISO 8601.

### `delete_planner_note` (~42 tokens)

Delete Planner Note

Delete one of your Canvas planner notes. This only affects your own notes.

Input parameters:

- `note_id` (string, required): Planner note ID, from list_planner_notes.

### `mark_planner_item_done` (~126 tokens)

Mark Planner Item Done

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

Input parameters:

- `done` (boolean): true (default) to mark it done, false to mark it not done again.
- `plannable_id` (string, required): The item's plannable_id from list_planner_items.
- `plannable_type` (string, required): The item type, from list_planner_items: assignment, quiz, discussion_topic, wiki_page, planner_note, calendar_event, announcement, assessment_request or sub_assignment.

### `dismiss_planner_item` (~103 tokens)

Dismiss Planner Item

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

Input parameters:

- `plannable_id` (string, required): The item's plannable_id from list_planner_items.
- `plannable_type` (string, required): The item type, from list_planner_items: assignment, quiz, discussion_topic, wiki_page, planner_note, calendar_event, announcement, assessment_request or sub_assignment.

### `get_calendar_feed_url` (~41 tokens)

Get Calendar Feed URL

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.

### `export_deadlines_ics` (~134 tokens)

Export Deadlines Ics

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.

Input parameters:

- `days` (integer): How many days ahead to include. Default 60.
- `include_completed` (boolean): If true, also include work you have already submitted.
- `include_events` (boolean): If true, also include calendar events such as class meetings, not just deadlines.
- `remind_minutes_before` (integer): Reminder this many minutes before each deadline. Default 1440 (one day). 0 for no reminder.

### `daily_briefing` (~49 tokens)

Daily Briefing

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.

Output parameters:

- `date` (string)
- `due_today` (array)
- `due_tomorrow` (array)
- `events_today` (array)
- `missing` (array)
- `missing_count` (number)
- `new_grades` (array)
- `timezone` (string)
- `unread_announcements` (array)
- `unread_inbox` (number|null)

### `study_plan` (~204 tokens)

Study Plan

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.

Input parameters:

- `block_minutes` (integer): Length of each study block in minutes. Default 60.
- `course_id` (string): Only plan for this course.
- `day_end` (string): Latest study time each day, 24-hour "HH:MM". Default "21:00".
- `day_start` (string): Earliest study time each day, 24-hour "HH:MM". Default "16:00".
- `days` (integer): How many days ahead to plan. Default 14.
- `max_hours_per_day` (number): Most study hours per day. Default 3.
- `skip_weekends` (boolean): If true, plan nothing on Saturdays and Sundays.

### `schedule_study_plan` (~148 tokens)

Schedule Study Plan

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. [IRREVERSIBLE: call without confirm=true first to preview, then re-call with confirm=true. Apps that can ask the user directly will show a confirmation instead.]

Input parameters:

- `add_to` (string): "calendar" (default) for timed calendar events, or "planner" for to-do notes.
- `blocks` (array, required): The blocks to add, usually copied from study_plan.
- `confirm` (boolean): Must be true to actually execute. Omit or set false to get a dry-run preview first.

### `get_week_ahead` (~59 tokens)

Get Week Ahead

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.

Input parameters:

- `days` (integer): Default 7

### `get_workload_forecast` (~64 tokens)

Get Workload Forecast

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.

Input parameters:

- `weeks` (integer): Default 6

### `get_all_unread` (~39 tokens)

Get All Unread

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

### `course_health_check` (~71 tokens)

Course Health Check

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.

### `semester_snapshot` (~52 tokens)

Semester Snapshot

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.

### `diff_since_last_check` (~114 tokens)

Diff Since Last Check

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.

Input parameters:

- `since` (string): ISO 8601 timestamp, e.g. 2026-09-01T00:00:00Z. Omit to use the last time this was checked (or 3 days ago the first time).

### `syllabus_digest` (~68 tokens)

Syllabus Digest

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.

### `deadline_conflict_check` (~61 tokens)

Deadline Conflict Check

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.

Input parameters:

- `days` (integer): Default 30
- `min_items` (integer): Default 2

### `study_priority_ranking` (~60 tokens)

Study Priority Ranking

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.

Input parameters:

- `days` (integer): Default 14

### `download_all_course_files` (~149 tokens)

Download All Course Files

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.

Input parameters:

- `content_types` (array): Optional MIME types to include, e.g. ["application/pdf"]. Omit for every file.
- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `dest_dir` (string): Local folder to save into. Defaults to the server's download folder (CANVAS_DOWNLOAD_DIR).
- `max_files` (integer): Default 50

### `export_course_archive` (~116 tokens)

Export Course Archive

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.

Input parameters:

- `course_id` (string, required): Canvas course ID, a numeric string such as "12345". Get it from list_courses.
- `dest_dir` (string): Local folder to save into. Defaults to the server's download folder (CANVAS_DOWNLOAD_DIR).
- `timeout_seconds` (integer): Default 300

### `semester_wrap_up` (~63 tokens)

Semester Wrap Up

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.

### `export_all_courses` (~123 tokens)

Export All Courses

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. [IRREVERSIBLE: call without confirm=true first to preview, then re-call with confirm=true. Apps that can ask the user directly will show a confirmation instead.]

Input parameters:

- `confirm` (boolean): Must be true to actually execute. Omit or set false to get a dry-run preview first.
- `course_ids` (array): Course IDs; omit for all active courses.

### `raw_canvas_request` (~170 tokens)

Raw Canvas Request

Call any Canvas REST API endpoint directly, for anything the other tools don't cover. GET is read-only. POST, PUT and DELETE can change data: they are blocked when CANVAS_ALLOW_WRITES=false, need confirm=true, and quiz-submission writes are always refused.

Input parameters:

- `body` (object): JSON body for POST/PUT
- `confirm` (boolean): Required for POST/PUT/DELETE
- `max_items` (integer): With paginate=true, stop after this many items. Default 200.
- `method` (string, required): HTTP method
- `paginate` (boolean): Follow Link headers and collect all pages (GET only)
- `params` (object): Query parameters
- `path` (string, required): API path after /api/v1, e.g. '/users/self/enrollments'

### `search_tools` (~123 tokens)

Search Tools

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.

Input parameters:

- `group` (string): Optional group: identity, courses, assignments, submissions, grades, quizzes, discussions, inbox, calendar, content, groups, rubrics, search, planner, planning or meta.
- `query` (string): Keyword to look for in tool names and descriptions, e.g. "grade". Omit to list everything.

### `test_connection` (~49 tokens)

Test Connection

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.

### `get_server_config` (~66 tokens)

Get Server Config

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.

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/fireiscoolsolo-canvas-lms-mcp-server/canvas-lms-mcp-remote#diagnostics

## Score history

- 2026-11-05: 77
- 2026-11-04: 77
- 2026-11-03: 76
- 2026-11-02: 76
- 2026-11-01: 75
- 2026-10-31: 60
- 2026-10-30: 74
- 2026-10-29: 74
- 2026-10-28: 73
- 2026-10-27: 57

## Common questions

### What is the io.github.Fireiscoolsolo/canvas-lms-mcp-server server?

io.github.Fireiscoolsolo/canvas-lms-mcp-server is listed in the public MCP registry as io.github.Fireiscoolsolo/canvas-lms-mcp-server. Self-hosted Canvas LMS for every device: 237 student tools over HTTP with OAuth and phone alerts. This page covers its npm package (canvas-lms-mcp-remote).

### Is the io.github.Fireiscoolsolo/canvas-lms-mcp-server server safe to use?

io.github.Fireiscoolsolo/canvas-lms-mcp-server scores 77 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the io.github.Fireiscoolsolo/canvas-lms-mcp-server server expose?

io.github.Fireiscoolsolo/canvas-lms-mcp-server exposes 237 tools: whoami, get_my_profile, get_my_settings, check_token_expiry, get_rate_limit_status, and 232 more. Their descriptions and schemas cost roughly 24,732 tokens of context every time the server is loaded.

### Is the io.github.Fireiscoolsolo/canvas-lms-mcp-server server still maintained?

io.github.Fireiscoolsolo/canvas-lms-mcp-server is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the io.github.Fireiscoolsolo/canvas-lms-mcp-server server under?

io.github.Fireiscoolsolo/canvas-lms-mcp-server declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

### What did VerifyMCP test on the io.github.Fireiscoolsolo/canvas-lms-mcp-server server?

VerifyMCP ran 16 checks on io.github.Fireiscoolsolo/canvas-lms-mcp-server, covering Malware scan, Known CVEs, Install scripts, Dependency health and 12 more. Endpoint Security and Transport & Reachability do not apply to an npm package, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.

## Links

- npm package: https://www.npmjs.com/package/canvas-lms-mcp-remote
- Socket report: https://socket.dev/npm/package/canvas-lms-mcp-remote
- Repository: https://github.com/Fireiscoolsolo/canvas-lms-mcp-server
- Website: https://fireiscoolsolo.github.io/canvas-lms-mcp-server/
- Changelog RSS feed: https://verifymcp.io/servers/fireiscoolsolo-canvas-lms-mcp-server/canvas-lms-mcp-remote.xml
- Changelog JSON feed: https://verifymcp.io/servers/fireiscoolsolo-canvas-lms-mcp-server/canvas-lms-mcp-remote/changelog.json
- Trust report (JSON): https://verifymcp.io/servers/fireiscoolsolo-canvas-lms-mcp-server/canvas-lms-mcp-remote.json
- HTML version of this page: https://verifymcp.io/servers/fireiscoolsolo-canvas-lms-mcp-server/canvas-lms-mcp-remote
