Canvas MCP

A Model Context Protocol server for your own Canvas LMS account. Add this endpoint to your MCP client, then connect with your Canvas URL and personal access token.

https://canvas.nusmcp.com/mcp

Your Canvas token is stored encrypted and only sent to your Canvas instance. Revoke it in Canvas → Account → Settings → Approved Integrations.

117 tools available13 toolsets64 read tools53 mutation tools

Permissions

Each tool lists all the scopes your connection needs. These are this MCP server’s permissions, not a guarantee of access in Canvas; course and file restrictions still apply.

canvas:read
Read data. Included in every connection.
canvas:write
Make changes. Enable “Make changes on my behalf” when connecting.
canvas:destructive
Delete or remove data. Enable “Allow deletions” and “Make changes”.
canvas:submit
Submit academic work. Enable “Allow submitting” and “Make changes”. Assignment submissions also require explicit confirmation.

Write tools support dry_run, but previews require the same scopes. This public catalogue shows deployment capabilities, not your current connection’s permissions.

Available tools

Generated from the running server’s tool registry and enabled toolsets. New tools appear here when their code is deployed; no separate list to maintain.

Showing 117 of 117 tools

Reset filters

me

8 tools

canvas_me

Return the profile of the Canvas user the connected token belongs to (id, name, email, time zone). Use this first to confirm the connection works and to learn the user's id.

Read
  • canvas:read

canvas_me_todo

List the user's Canvas to-do items: assignments that need submitting (and, for graders, things needing grading). Each item names the course and assignment with its due date.

Read
  • canvas:read

canvas_me_todo_count

Counts of to-do items: assignments needing submission and (for graders) submissions needing grading.

Read
  • canvas:read

canvas_me_upcoming_events

Upcoming assignments and calendar events for the user across all courses (roughly the next week or two), sorted by date. Good for 'what is due soon'.

Read
  • canvas:read

canvas_me_missing_submissions

Assignments that are past due and have not been submitted by the user, across all courses. Optionally include planner overrides and course info.

Read
  • canvas:read

canvas_me_activity_stream

Recent activity for the user: announcements, discussion posts, messages, grade changes, submission comments. Newest first. Use `only_active_courses` to skip concluded courses.

Read
  • canvas:read

canvas_me_activity_stream_summary

Counts of activity stream items by type (Announcement, DiscussionTopic, Message, Submission, …) with unread counts.

Read
  • canvas:read

canvas_me_activity_stream_hide

Hide one item from the user's activity stream (it stays in Canvas, just not in the stream).

Write
  • canvas:read
  • canvas:write

courses

11 tools

canvas_courses_list

List courses the user is enrolled in. Defaults to active enrollments; set enrollment_state to 'completed' for past courses. Add includes such as 'term', 'total_scores' (current grade per course), 'course_progress', or 'teachers'.

Read
  • canvas:read

canvas_courses_get

Get one course by id with optional includes (syllabus_body returns the syllabus as Markdown, total_scores returns the user's current grade, course_progress returns module completion).

Read
  • canvas:read

canvas_courses_tabs

List the navigation tabs visible to the user in a course (Modules, Assignments, Grades, external tools, …) with their URLs. Useful to discover which features a course actually uses.

Read
  • canvas:read

canvas_courses_progress

Module-requirement completion for the user in a course: requirements completed vs total, next requirement URL, completion date.

Read
  • canvas:read

canvas_courses_favorite_remove

Unstar a course so it no longer shows on the user's dashboard. Reversible by adding it again, but it is a deletion so it is gated as destructive.

Destructive
  • canvas:read
  • canvas:write
  • canvas:destructive

canvas_courses_nicknames_list

Personal nicknames the user has set for courses (shown instead of the official name in their Canvas UI).

Read
  • canvas:read

canvas_courses_nickname_remove

Remove the user's personal nickname for a course, restoring the official name.

Destructive
  • canvas:read
  • canvas:write
  • canvas:destructive

assignments

5 tools

canvas_assignments_list

List course assignments, including the student's effective due dates and submission state. Use bucket='upcoming' or 'overdue'; paginate for all results.

Read
  • canvas:read

canvas_assignments_get

Read an assignment's instructions as Markdown, rubric, accepted submission types, effective due date and your submission.

Read
  • canvas:read

canvas_assignments_overrides_for_me

Get your effective due, unlock and lock dates after Canvas applies individual, group and section overrides. This returns the effective schedule, not other students' override records.

Read
  • canvas:read

submissions

9 tools

canvas_submissions_submit

Submit academic work as text, URL, uploaded file IDs or media. Requires the submit feature, dry-run review and confirmed=true for a real submission. Uploading a file alone does not submit it.

Write
  • canvas:read
  • canvas:write
  • canvas:submit

canvas_submissions_comment_add

Add a text comment to your own submission. Does not change a grade or submit the assignment.

Write
  • canvas:read
  • canvas:write

canvas_submissions_upload_file

Upload up to 5 MiB using Canvas's three-step upload flow. Files with duplicate names are renamed. This uploads bytes only; use submissions_submit with the returned file ID to submit academic work. dry_run previews the initial request and file digest without requesting an upload ticket.

Write
  • canvas:read
  • canvas:write

grades

6 tools

canvas_grades_what_if_list

Read your submissions' saved student_entered_score values (what-if scores), alongside actual scores.

Read
  • canvas:read

canvas_grades_what_if_set

Set a hypothetical score on one of your submissions. This recalculates your what-if grade, not the instructor's grade. Use sparingly.

Write
  • canvas:read
  • canvas:write

modules

10 tools

canvas_modules_list

List modules with your completion state and embedded items. Canvas may omit items in large modules; use items_list then.

Read
  • canvas:read

canvas_modules_get

Read a module, prerequisites and your completion state.

Read
  • canvas:read

pages

6 tools

canvas_pages_create

Create a course page where student page creation is permitted. Canvas enforces course permissions.

Write
  • canvas:read
  • canvas:write

canvas_pages_update

Edit a page's title/body where students may edit it. Requires at least one changed field.

Write
  • canvas:read
  • canvas:write

announcements

3 tools

canvas_announcements_list

Read announcements across selected courses. Supply start_date/end_date to control the date window; Canvas defaults to recent announcements.

Read
  • canvas:read

discussions

15 tools

canvas_discussions_subscribed_list

List subscribed topics from each fetched page. Filtering happens after pagination; an empty page may still have next_page_url.

Read
  • canvas:read

canvas_discussions_get

Read a discussion prompt as Markdown, with posting permissions and unread count.

Read
  • canvas:read

canvas_discussions_view

Read the full discussion thread, participants and unread entry IDs. Canvas may require an initial post before you can read replies.

Read
  • canvas:read

files

12 tools

canvas_files_files_list

List files in your own files area, a course, or one folder. Specify at most one of course_id/folder_id.

Read
  • canvas:read

canvas_files_download_url

Get Canvas's download URL for an accessible file; the server does not download its contents. URLs may expire.

Read
  • canvas:read

canvas_files_file_update

Rename or move a file you own. Duplicate names are renamed, never overwritten.

Write
  • canvas:read
  • canvas:write

canvas_files_file_copy

Copy an accessible file into a writable folder. Duplicate filenames are renamed.

Write
  • canvas:read
  • canvas:write

canvas_files_folder_delete

Delete a folder you own. force=true also deletes its contents.

Destructive
  • canvas:read
  • canvas:write
  • canvas:destructive

canvas_files_upload

Upload up to 5 MiB using Canvas's three-step upload flow. Files with duplicate names are renamed. This uploads bytes only; use submissions_submit with the returned file ID to submit academic work. dry_run previews the initial request and file digest without requesting an upload ticket.

Write
  • canvas:read
  • canvas:write

calendar

10 tools

canvas_calendar_events_list

List calendar events or assignments in a date range. Include course_<id> context_codes for course events; otherwise Canvas defaults to your personal calendar. Maximum 10 contexts.

Read
  • canvas:read

canvas_calendar_reservations_mine

List appointment groups with your reserved_times. Groups without a current reservation are filtered after pagination; follow next_page_url even on an empty page.

Read
  • canvas:read

canvas_calendar_event_create

Create an event on your personal calendar. context_code must be user_<your Canvas user id> from canvas_me.

Write
  • canvas:read
  • canvas:write

canvas_calendar_reserve_slot

Reserve an available appointment slot for yourself. Existing reservations are never automatically cancelled.

Write
  • canvas:read
  • canvas:write

canvas_calendar_reservation_cancel

Cancel your reservation using the child reservation event ID from reserved_times, not the parent appointment slot ID.

Destructive
  • canvas:read
  • canvas:write
  • canvas:destructive

planner

8 tools

canvas_planner_items_list

Find what's due across your courses in a date range, including assignments, quizzes, discussions and personal notes. Use ISO dates in your time zone and paginate.

Read
  • canvas:read

canvas_planner_note_update

Update your planner note. Omitted fields stay unchanged; course_id=null removes its course association.

Write
  • canvas:read
  • canvas:write

canvas_planner_override_set

Set a planner item's completed/dismissed state. Pass its existing override_id to update; otherwise provide plannable_type and plannable_id to create an override.

Write
  • canvas:read
  • canvas:write

conversations

14 tools

canvas_conversations_list

List your Canvas inbox conversations. Filter by unread, starred, archived or sent.

Read
  • canvas:read

canvas_conversations_create

Send a new Canvas inbox message to explicit user IDs. Use find_recipients first and dry_run to review recipients and text.

Write
  • canvas:read
  • canvas:write