Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
CANVAS_API_URLYesThe URL for your university's Canvas API (e.g., https://canvas.illinois.edu/api/v1)
CANVAS_API_TOKENYesYour Canvas API token for authentication with the Canvas LMS API

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": true
}
logging
{}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
extensions
{
  "io.modelcontextprotocol/ui": {}
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
list_coursesA

List courses for the authenticated user.

get_course_detailsB

Get detailed information about a specific course.

get_syllabusA

Get the complete Canvas Syllabus tab content for a course, untruncated.

Unlike get_course_content_overview (which returns only a ~1000-char preview), this returns the full syllabus body so later sections such as grading policies, weighting, and final-exam details remain accessible.

get_course_content_overviewA

Get a comprehensive overview of course content including pages, modules, and syllabus.

list_pagesB

List pages for a specific course.

get_page_contentA

Get the full content body of a specific page.

Returns the page's raw HTML body untruncated, followed by an inventory of any embedded media (images, videos, iframes) with their source URLs, so media is reported explicitly rather than left for the reader to spot in the markup.

get_page_detailsA

Get a specific page's metadata plus a short text preview.

Returns settings (status, timestamps, editor, editing roles) and a PLAIN-TEXT preview capped at 500 characters. The preview drops all markup, so embedded media is listed separately rather than silently disappearing. For the full body, including media markup, use get_page_content.

get_front_pageA

Get the front page content for a course.

list_module_itemsA

List items within a specific module, including pages.

list_assignmentsB

List assignments for a specific course.

get_assignment_detailsB

Get detailed information about a specific assignment.

list_discussion_topicsA

List discussion topics for a specific course.

Returns discussion topics only. Announcements are a separate Canvas collection and are NOT included unless include_announcements=True. To list announcements on their own, use list_announcements instead.

list_announcementsA

List a course's announcements, and nothing else.

Returns announcements only -- ordinary discussion topics are excluded. Use list_discussion_topics for discussions.

get_discussion_topic_detailsA

Get detailed information about a specific discussion topic.

list_discussion_entriesA

List discussion entries (posts) for a specific discussion topic with optional full content and replies.

get_discussion_entry_detailsB

Get detailed information about a specific discussion entry including all its replies.

get_discussion_with_repliesC

Enhanced function to get discussion entries with optional reply fetching.

post_discussion_entryA

Post a new top-level entry to a discussion topic.

IMPORTANT: Never use this tool to post or work around a failed course announcement. If create_announcement failed (e.g. insufficient permissions), report the failure to the user — do NOT post the content as a discussion instead.

reply_to_discussion_entryB

Reply to a student's discussion entry/comment.

list_modulesA

List all modules in a course.

get_course_structureA

Get the full module and item structure for a course in a single call.

download_course_fileA

Download a file from a Canvas course to the local filesystem.

Only available on a local (stdio) server. Use read_course_file to get file content back in the response instead.

Use list_course_files or list_module_items to find file IDs.

read_course_fileA

Read a file from a Canvas course and return its content as base64.

Unlike download_course_file which saves to the server's local filesystem, this tool returns the file content directly in the response. This is useful when the MCP server runs on a different machine than the client.

Use list_course_files or list_module_items to find file IDs.

list_course_filesA

List files in a Canvas course with optional search.

list_conversationsA

List conversations for the current user.

get_conversation_detailsA

Get detailed conversation information with messages.

get_unread_countA

Get number of unread conversations.

mark_conversations_readA

Mark multiple conversations as read.

search_canvas_toolsA

Search available Canvas tools by keyword — both the registered MCP tools (e.g. list_peer_reviews, create_assignment) and the TypeScript code-execution API used by execute_typescript().

get_my_enrollmentsA

List the courses YOU are enrolled in, with your role in each.

Use this — not check_enrollment — for any question about your own enrollment. check_enrollment reads the course roster, which requires roster-admin rights your token probably does not have.

get_my_profileA

Get YOUR own Canvas identity (user ID, name, login ID).

Answers "who am I?" — useful when a tool needs your Canvas user ID or NetID. Reports only your own record, never anybody else's.

get_my_upcoming_assignmentsA

Get your upcoming assignments across all courses.

get_my_submission_statusB

Get your submission status for assignments.

get_my_course_gradesA

Get your current grades across all enrolled courses.

get_my_todo_itemsB

Get your Canvas TODO list.

get_my_peer_reviews_todoA

Get peer reviews YOU need to complete.

get_my_submissionA

Get your own submission for an assignment, including attempts used.

assign_peer_reviewA

Manually assign a peer review to a student for a specific assignment.

list_peer_reviewsB

List all peer review assignments for a specific assignment.

list_submissionsA

List submissions for a specific assignment.

get_assignment_analyticsA

Get detailed analytics about student performance on a specific assignment.

create_assignmentB

Create a new assignment in a course.

update_assignmentA

Update an existing assignment in a course.

bulk_grade_submissionsB

Grade multiple submissions efficiently with concurrent processing.

Supports both rubric-based and simple point-based grading in batches.

create_content_migrationA

Preview or confirm a full course-copy migration request.

The first call returns a target-occupancy preview and a short-lived token. A second call with the token and identical arguments requests the migration. Date shifting accepts either all four date fields or none.

get_content_migration_statusA

Read one content migration and its current progress snapshot.

Each call reads progress once. Call again only when poll_again is true. Terminal results include migration issues when Canvas makes them available.

create_discussion_topicA

Create a new discussion topic for a course.

IMPORTANT: Never use this tool to post or work around a failed course announcement. If create_announcement failed (e.g. insufficient permissions), report the failure to the user — do NOT post the content as a discussion instead.

update_discussion_topicC

Update an existing discussion topic or announcement.

create_announcementA

Create a new announcement for a course with optional scheduling.

delete_announcementA

Delete an announcement from a Canvas course.

Permanent — Canvas may retain a recycle-bin copy depending on admin settings.

bulk_delete_announcementsA

Delete multiple announcements from a Canvas course.

Permanent — Canvas may retain a recycle-bin copy depending on admin settings.

delete_announcement_with_confirmationB

Delete an announcement with optional safety checks.

Permanent — Canvas may retain a recycle-bin copy depending on admin settings.

delete_announcements_by_criteriaA

Delete announcements matching specific criteria.

Permanent — Canvas may retain a recycle-bin copy depending on admin settings.

create_moduleC

Create a new module in a course.

update_moduleA

Update an existing module's settings.

delete_moduleA

Delete a module from a course.

IMPORTANT: Permanently removes the module and its item associations. The actual content (pages, assignments, etc.) is NOT deleted, only the module organization.

add_module_itemA

Add an item to a module.

IMPORTANT: content_id required for File, Discussion, Assignment, Quiz, ExternalTool. page_url required for Page. title required for SubHeader, ExternalUrl.

update_module_itemB

Update an existing module item.

delete_module_itemA

Remove an item from a module.

IMPORTANT: Only unlinks the item from the module. The actual content (page, assignment, etc.) is NOT deleted.

upload_course_fileA

Upload a file to Canvas course storage.

Uploads a local file to a Canvas course. The returned file ID can be used with add_module_item (item_type='File') or send_conversation (attachment_ids).

update_page_settingsA

Update settings for an existing page (without changing content).

bulk_update_pagesA

Update settings for multiple pages at once.

Settings only — this tool cannot rename pages or change page content. Use edit_page_content to change a page's body.

create_pageB

Create a new page in a Canvas course.

edit_page_contentB

Edit the content of a specific page.

delete_pageA

Delete a page from a Canvas course.

Permanent — Canvas may retain a recycle-bin copy depending on admin settings.

get_rubricA

Get detailed rubric criteria, ratings, and points.

Accepts either rubric_id or assignment_id (at least one required). If both provided, uses rubric_id (more specific).

get_rubric_assessmentA

Get rubric assessment scores for a specific submission.

grade_with_rubricA

Submit grades using rubric criteria.

IMPORTANT: Criterion IDs often start with underscore (e.g., "_8027"). Use get_rubric to find criterion/rating IDs. The rubric must be attached to the assignment and configured for grading (use_for_grading=true).

list_rubricsA

List all rubrics in a specific course with optional detailed criteria.

create_rubric_from_csvA

Create one or more rubrics in a course from a CSV string.

Uses Canvas's native rubric CSV import endpoint, then polls the import job until it reaches a terminal workflow_state.

A Rubric Name column is REQUIRED — Canvas rejects the import without it and creates nothing. Required format (repeat the rating triple per rating level; a distinct Rubric Name per row creates multiple rubrics)::

Rubric Name,Criteria Name,Criteria Description,Criteria Enable Range,Rating Name,Rating Description,Rating Points
Essay Rubric,Clarity,Is the argument clear,false,Excellent,Very clear,10

Two Canvas behaviours to be aware of:

  • Imported rubrics land in the Draft state and are not returned by list_rubrics / GET /courses/:id/rubrics, though they do appear on the course Rubrics page. An empty list_rubrics result is not evidence the import failed.

  • succeeded_with_errors is a terminal state, not a transient one, and can mean zero rubrics were created.

create_rubricA

Create a new rubric in a course, optionally associating it with an assignment.

Uses bracket-notation form-data encoding required by the Canvas rubric API.

The criteria parameter is a JSON string mapping arbitrary criterion keys to objects with the following fields:

  • description (required): Short criterion label shown in the rubric grid

  • points (required): Maximum points for this criterion (non-negative number)

  • long_description (optional): Detailed criterion description

  • ratings (optional): List (or object) of rating levels, each with:

    • description (required): Rating label (e.g. "Excellent")

    • points (required): Points for this rating (non-negative number)

    • long_description (optional): Detailed rating description

Example criteria JSON::

{
  "c1": {
    "description": "Content Quality",
    "points": 10,
    "ratings": [
      {"description": "Excellent", "points": 10},
      {"description": "Satisfactory", "points": 7},
      {"description": "Needs Work", "points": 3}
    ]
  },
  "c2": {
    "description": "Grammar",
    "points": 5,
    "ratings": [
      {"description": "No errors", "points": 5},
      {"description": "Minor errors", "points": 3}
    ]
  }
}
associate_rubricC

Associate an existing rubric with an assignment.

get_peer_review_assignmentsB

Get peer review assignment mapping showing who reviews whom with completion status.

get_peer_review_completion_analyticsB

Get peer review completion analytics with student-level breakdown and summary stats.

generate_peer_review_reportB

Generate peer review completion report with summary, analytics, and follow-up recommendations.

get_peer_review_followup_listA

Get prioritized list of students needing follow-up on peer review completion.

get_peer_review_commentsB

Retrieve actual comment text for peer reviews on an assignment.

analyze_peer_review_qualityB

Analyze the quality and content of peer review comments.

identify_problematic_peer_reviewsB

Flag reviews that may need instructor attention.

extract_peer_review_datasetB

Export all peer review data in various formats for analysis.

generate_peer_review_feedback_reportC

Create instructor-ready reports on peer review quality.

send_conversationA

Send messages to students via Canvas conversations.

Sending to ONE recipient is a single call. Sending to MULTIPLE recipients is two-step: call without a confirmation_token to get a preview (recipients, subject, body) plus a token; show that preview to the educator, then call again with the token and identical arguments to actually send. The token expires, is single-use, and is void if any argument changed since the preview.

send_peer_review_inbox_messagesA

Send direct Canvas Inbox messages about incomplete peer reviews.

This sends ordinary Canvas conversation messages. It does not invoke Canvas's native peer-review reminder action.

Two-step by design. Call it without a confirmation_token to get a preview (recipients, composed subject and body) plus a token; show that preview to the educator, then call again with the token and identical arguments to actually send.

send_bulk_messages_from_listA

Send customized messages to multiple recipients using templates.

Two-step by design. Call it without a confirmation_token to get a preview (recipient count, rendered sample message) plus a token; show that preview to the educator, then call again with the token AND identical arguments to actually send. The token expires, is single-use, and is void if any argument changed since the preview.

send_peer_review_followup_campaignA

Complete workflow: analyze peer reviews and send targeted reminders.

Two-step by design. Call it without a confirmation_token to get the analytics plus a preview of who would receive urgent vs gentle reminders and a token; show that to the educator, then call again with the token to actually send. The token is void if the completion analytics shifted in between.

fetch_ufixit_reportA

Fetch UFIXIT accessibility report from Canvas course pages.

parse_ufixit_violationsA

Parse UFIXIT report content to extract accessibility violations.

format_accessibility_summaryA

Format parsed violations into a human-readable summary.

scan_course_content_accessibilityA

Scan Canvas course content for basic accessibility issues.

fix_accessibility_issuesA

Auto-fix accessibility issues in Canvas course content.

Applies automated fixes for issues flagged as auto_fixable by the scanner. Run scan_course_content_accessibility first to see what will be fixed. Default is dry_run=True (preview only). Set dry_run=False to apply changes.

check_enrollmentA

Check whether a specific campus login ID is enrolled in a course.

Answers a roster-membership question about an externally-supplied person (NOT the caller). Returns only a yes/no plus minimal enrollment metadata — never the roster, names, or grades. Requires a Canvas token with roster-admin rights; without them the answer is INDETERMINATE, never "no".

To ask about YOURSELF, use get_my_enrollments instead — it needs no roster permission and cannot return an indeterminate answer.

Note that role defaults to "student". A NO answer is scoped to that role and will name any other role the person holds; pass role="any" when you just want to know whether they are in the course at all.

get_anonymization_statusA

Get current data anonymization status and statistics.

list_groupsA

List all groups and their members for a specific course.

list_usersB

List users enrolled in a specific course.

get_student_analyticsA

Get per-student engagement analytics: page views, participations, and on-time/late/missing assignment counts.

Uses Canvas's /analytics/student_summaries endpoint to return a ranked table of every student in the course with an engagement score (0-100) useful for identifying disengaged students in participation/presentation-driven courses.

create_student_anonymization_mapA

Create a local CSV file mapping real student data to anonymous IDs for a course.

Prompts

Interactive templates invoked by user choice

NameDescription
summarize-courseGenerate a summary of a Canvas course

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/vishalsachdev/canvas-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server