Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
CANVAS_API_URLYesThe base URL of your Canvas instance (e.g., https://canvas.instructure.com)
CANVAS_API_TOKENYesYour Canvas API access token
CANVAS_AGENT_SANDBOXNoSet to '0' to disable prompt-injection sandbox1
CANVAS_AGENT_ANONYMIZENoSet to '0' to disable anonymization and name detection1

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
list_coursesA

List Canvas courses you have access to. Returns course IDs needed by all other tools. Shows active courses by default. Admins can use search_term to search all courses in the account.

list_termsA

List enrollment terms (semesters/quarters) defined in the account. Returns each term's id, name, and start/end dates. Use the returned id as enrollment_term_id in list_term_courses or create_course.

list_assignment_groupsA

List assignment groups (grading categories) in a course with their weights. The returned group IDs are used as assignment_group_id when creating or updating assignments.

list_modulesA

List modules in a course. For module management (create, update, delete, add items), see create_module, update_module, add_module_item, and related tools.

list_grading_periodsA

List the grading periods (e.g. semesters, quarters) defined for a course's term. Returns id, title, start_date, end_date, and is_closed for each period. The returned IDs can be passed as grading_period_id to get_student_enrollments and other grade-related tools to scope grades and submissions to a single period instead of the cumulative lifetime grade. Note: schools that don't use grading periods will get a single default period.

list_assignmentsA

List assignments in a course. This includes regular assignments, graded discussions, and New Quizzes (which are all assignments internally). Returns summary info (id, name, dates, points). Use get_assignment for full details.

get_assignmentA

Get full details of a single assignment, including its description/instructions.

create_assignmentA

Create a new regular assignment in a course. For graded discussions, use create_discussion with points_possible instead. For New Quizzes, use create_new_quiz instead.

update_assignmentA

Update an existing assignment. Only include fields you want to change. Also works for graded discussions and New Quizzes (via their assignment_id). For date-only changes, prefer update_assignment_dates which is more focused.

delete_assignmentA

Permanently delete an assignment. This cannot be undone.

batch_update_assignmentsA

Update fields across multiple assignments at once. Does NOT support date fields — use batch_update_dates for date changes. Applies the same update to each assignment ID provided.

list_discussionsA

List discussion topics in a course. Graded discussions also appear as assignments (with assignment_id in the response). To update dates or points of graded discussions, use update_assignment_dates or update_assignment with the assignment_id.

get_discussionA

Get full details of a discussion topic, including its message/instructions.

create_discussionB

Create a new graded or ungraded discussion topic.

update_discussionA

Update a discussion topic's title, message, or published state. Cannot update dates or points — for those, use update_assignment or update_assignment_dates with the discussion's assignment_id (from list_discussions).

batch_update_discussionsA

Update title/message/published across multiple discussions. Cannot update dates or points — use batch_update_dates with assignment_ids for date changes on graded discussions.

update_assignment_datesA

Update due_at, unlock_at, and/or lock_at for a single assignment. Also works for graded discussions and New Quizzes (which are assignments under the hood). Prefer this over update_assignment when you only need to change dates.

batch_update_datesA

Update dates for multiple assignments at once. Override-aware: if an assignment has section overrides, updates those instead of the (ignored) base date. For assignments with overrides, provide section_dates to set per-section times; if only due_at is given, all overrides get that same time. Provide an array of {assignment_id, due_at, section_dates?, unlock_at, lock_at} objects.

create_assignment_overrideA

Create a new date override for a specific section or set of students on an assignment. Use this to set section-specific due dates (e.g., different block start times for different sections).

list_assignment_overridesA

List all date overrides (section-specific or student-specific) for an assignment. Use this to discover override IDs before updating them.

update_assignment_overrideA

Update dates on a single section/student override. Use list_assignment_overrides first to get the override ID.

get_course_schedule_overviewA

Get a chronological overview of all dated assignments, discussions, and quizzes in a course. Useful for understanding the current schedule before making changes.

list_submissionsB

List all submissions for an assignment (including graded discussions and New Quizzes). Shows student name, score, submission status, and submitted_at timestamp.

download_submissionsA

Download all submitted files for an assignment to a local directory. Creates a folder per student. Returns the path where files were saved.

download_discussion_entriesA

Download all entries/replies for a discussion topic as a JSON file — the actual student posts and replies. Unlike list_submissions (which shows grading metadata for graded discussions), this downloads the discussion content itself.

list_rubricsA

List all rubrics in a course. Returns rubric ID, title, point total, and number of criteria.

get_rubricA

Get full details of a rubric, including all criteria and their rating scales. The returned criterion IDs (e.g. '_7998') are needed by grade_with_rubric. Pass include=['assessments'] to also retrieve every rubric_assessment row (with their IDs) — that's how you find the rubric_association_id and assessment_id needed by update_rubric_assessment / delete_rubric_assessment.

create_rubricA

Create a new rubric in a course. Provide criteria as an array of objects, each with a description and an array of ratings (description + points). Optionally associate with an assignment immediately. Criteria can be linked to learning outcomes via learning_outcome_id (use list_outcomes to find IDs) — when linked, the criterion's mastery feeds into outcome rollups.

update_rubricA

Update an existing rubric's title, criteria, or display settings. Changes apply to all assignments using this rubric. If you change only the title (without passing criteria), existing criteria are preserved automatically.

delete_rubricA

Permanently delete a rubric from a course. This removes it from all associated assignments and cannot be undone.

associate_rubricA

Associate an existing rubric with one or more assignments. This is how you reuse a rubric across multiple assignments. Use list_rubrics to find the rubric_id.

update_rubric_associationA

Update the display/grading settings of an existing rubric–assignment association without re-associating. Use this to toggle 'Remove points from rubric' (hide_points), hide the score total, or change use_for_grading. Find the association_id by calling get_rubric (look at assignment_associations) or by reading the assignment's rubric_settings.

remove_rubric_from_assignmentA

Remove a rubric association from a specific assignment without deleting the rubric itself.

grade_with_rubricA

Grade a student's submission using a rubric. Provide scores for each criterion. For simple score-based grading without a rubric, use grade_submission instead.

get_rubric_assessmentsA

Get all rubric assessments (grades) for an assignment. Shows how each student was scored on each criterion. Note: this returns the per-criterion data but not the assessment row IDs — for those (needed by update_rubric_assessment / delete_rubric_assessment), call get_rubric with include=['assessments'].

copy_rubricA

Duplicate an existing rubric. Copies title, criteria (with ratings, long descriptions, and outcome links), and free_form_criterion_comments. By default copies into the same course; pass target_course_id to copy across courses. Optionally renames and associates with one or more assignments. Display toggles (hide_score_total / hide_points / hide_outcome_results) are inherited from the source's primary association unless overridden. NOTE: outcome-linked criteria require the same outcome to be available in the target course; if it isn't, Canvas may strip the outcome link.

update_rubric_assessmentA

Edit an existing rubric assessment (e.g. correct one student's rubric grade) without re-grading the whole submission. Find rubric_association_id and assessment_id by calling get_rubric with include=['assessments']. For most grading workflows, grade_with_rubric is simpler — use this tool when you specifically need to surgically edit one row.

delete_rubric_assessmentA

Delete a single rubric assessment row, clearing that student's rubric grade for the assignment without removing the rubric or affecting other students. Find rubric_association_id and assessment_id by calling get_rubric with include=['assessments'].

list_new_quizzesA

List all New Quizzes (Quizzes.Next) in a course by filtering assignments. Returns a summary of each. For full details/settings of a single New Quiz, use get_new_quiz. For question management, use list_quiz_items, create_quiz_item, etc.

get_new_quizA

Get full details of a single New Quiz (Quizzes.Next) including settings, time limits, and configuration. The assignment_id is the Canvas assignment ID (found via list_new_quizzes or list_assignments where is_quiz_lti_assignment=true).

create_new_quizA

Create a New Quiz (Quizzes.Next) in a course. Returns the created quiz object including its assignment_id.

update_new_quizA

Update a New Quiz's settings (time limit, shuffle, attempts, etc.). For date changes (due_at, unlock_at, lock_at), use update_assignment_dates with the assignment_id instead — New Quizzes are assignments.

list_quiz_itemsA

List all items (questions) in a New Quiz. This is for New Quizzes only — Classic Quizzes do not have a question API in this server. Returns each item's ID, position, points, question type, and content.

get_quiz_itemA

Get full details of a single quiz item (question), including its interaction_data, scoring_data, and feedback.

create_quiz_itemA

Create a question (item) in a New Quiz. This is the primary tool for adding questions.

INTERACTION TYPES AND THEIR DATA FORMATS:

  1. "choice" (Multiple Choice) - Single correct answer from choices interaction_data: { "choices": [ { "item_body": "Answer A", "position": 1 }, { "item_body": "Answer B", "position": 2 }, { "item_body": "Answer C", "position": 3 } ] } scoring_data: { "value": "" } NOTE: Create with placeholder scoring_data first. The API returns choices with generated IDs. Then use update_quiz_item to set the correct answer ID. Alternatively, scoring_data can reference by position index.

  2. "true-false" (True/False) interaction_data: { "choices": [ { "item_body": "True", "position": 1 }, { "item_body": "False", "position": 2 } ] } scoring_data: { "value": "" } Same approach as "choice" - create first, then update with correct choice ID.

  3. "multi-answer" (Multiple Answer / Select All That Apply) interaction_data: { "choices": [ { "item_body": "Option A", "position": 1 }, { "item_body": "Option B", "position": 2 }, { "item_body": "Option C", "position": 3 } ] } scoring_data: { "value": ["", ""] }

  4. "essay" (Essay / Free Response) interaction_data: {} scoring_data: { "value": "" }

  5. "file-upload" (File Upload) interaction_data: {} scoring_data: { "value": "" }

  6. "matching" (Matching) interaction_data: { "choices": [ { "item_body": "Term 1", "position": 1, "match_id": "m1" }, { "item_body": "Term 2", "position": 2, "match_id": "m2" } ], "matches": [ { "item_body": "Definition 1", "id": "m1", "position": 1 }, { "item_body": "Definition 2", "id": "m2", "position": 2 } ] } scoring_data: { "value": [{ "id": "", "match_id": "m1" }] }

  7. "ordering" (Ordering) interaction_data: { "choices": [ { "item_body": "First item", "position": 1 }, { "item_body": "Second item", "position": 2 } ] } scoring_data: { "value": ["", ""] }

  8. "categorization" (Categorization) interaction_data: { "categories": [ { "item_body": "Category A", "id": "cat1" }, { "item_body": "Category B", "id": "cat2" } ], "choices": [ { "item_body": "Item 1", "position": 1 }, { "item_body": "Item 2", "position": 2 } ] } scoring_data: { "value": [{ "id": "", "category_id": "cat1" }] }

  9. "numeric" (Numeric Answer) interaction_data: {} scoring_data: { "value": "42" } or { "value": { "exact": 42, "margin": 0.1 } }

  10. "fill-blank" (Fill in the Blank) interaction_data: {} scoring_data: { "value": ["acceptable answer 1", "acceptable answer 2"] }

  11. "rich-fill-blank" (Fill in Multiple Blanks) interaction_data: { "blanks": [{ "id": "b1", "item_body": "blank1" }] } scoring_data: { "value": { "b1": ["answer1", "answer2"] } }

  12. "formula" (Formula / Calculated) interaction_data: { "formula": "x + y", "variables": [{ "name": "x", "min": 1, "max": 10 }] } scoring_data: { "value": { "formula": "x + y", "margin": 0.01 } }

  13. "hot-spot" (Hot Spot / Image Click) interaction_data: { "image_url": "...", "regions": [...] } scoring_data: { "value": "" }

TIP: For choice-based questions, it is often easiest to create the item first with an empty or placeholder scoring_data, then GET the item to see the generated choice IDs, and finally UPDATE the item with the correct scoring_data referencing those IDs.

update_quiz_itemA

Update an existing question (item) in a New Quiz. Only include fields you want to change. Commonly used after create_quiz_item to set the correct answer IDs in scoring_data once the choice IDs are known.

delete_quiz_itemA

Delete a question (item) from a New Quiz. This cannot be undone.

set_quiz_accommodationsA

Set testing accommodations (extra time, extra attempts) for specific students on a New Quiz. Use list_students to find student user IDs.

generate_quiz_reportA

Generate a student analysis or item analysis report for a New Quiz. Returns a progress object — poll the returned URL to check when the report file is ready for download.

grade_submissionA

Grade a single student submission with a score and optional comment. For rubric-based grading, use grade_with_rubric instead. Works for regular assignments, graded discussions (use the assignment_id), and New Quizzes (use the assignment_id).

bulk_gradeA

Grade multiple students on one assignment at once. Returns a Progress object — the grading happens asynchronously.

submission_summaryA

Quick overview of submission status for an assignment — counts of graded, ungraded, and not submitted. For individual submission details, use list_submissions instead.

list_missing_submissionsA

List all missing assignments for a specific student. Very useful for parent conferences and progress reports.

list_gradeable_studentsA

List students who can be graded for a specific assignment. Use the returned IDs as student_id in grade_submission or grade_with_rubric.

post_gradesA

Post (make visible) grades for an assignment so students can see them. Optionally post for specific students only.

hide_gradesA

Hide grades from students for an assignment. Optionally hide for specific students only.

list_studentsA

List students enrolled in a course with enrollment-specific data (section, activity, last login). For a simpler user list with any role (teachers, TAs, etc.), use list_users_in_course instead.

list_sectionsA

List sections in a course. Optionally include enrolled students.

get_student_enrollmentsA

Get enrollment details for a specific student in a course, including grades if available. Pass grading_period_id to get the grade for a specific semester/term instead of the cumulative lifetime grade — find the id with list_grading_periods.

list_users_in_courseA

List users in a course by role (teacher, student, ta, observer). Simpler output than list_students — use list_students when you need enrollment details like section, activity time, or state.

get_user_profileA

Get any user's profile information including name, email, and bio. Works for students, teachers, and any Canvas user.

get_course_activityA

Get daily page views and participation analytics for a course. This returns engagement metrics, not assignment data — use list_assignments for assignment info.

get_course_assignment_analyticsA

Get aggregate statistical analytics per assignment: min/max/median scores, submission counts (on_time, late, missing). This returns statistics, not the assignments themselves — use list_assignments for that. NOTE: this endpoint returns LIFETIME data and does NOT support grading_period_id — for semester-scoped data, fall back to fetching submissions directly via list_submissions.

get_student_summariesA

Get per-student engagement analytics for a course: page views, participations, and tardiness breakdown (missing/late/on_time counts). For enrollment/roster data, use list_students instead. NOTE: this endpoint returns LIFETIME data and does NOT support grading_period_id — the tardiness counts include all assignments since the course began, not just the current semester. For per-semester counts, iterate course submissions with a grading_period_id filter.

get_student_activityA

Get hourly page view breakdown for a specific student in a course.

get_student_assignment_dataA

Get per-assignment scores, submission status, and timestamps for a specific student. This is analytics data — for actual submission details, use list_submissions. NOTE: this endpoint returns LIFETIME data and does NOT support grading_period_id — it includes assignments from all grading periods.

list_calendar_eventsA

List calendar events, optionally filtered by course, date range, or type.

create_calendar_eventA

Create a standalone calendar event (e.g. office hours, class sessions, review sessions). These are NOT assignments — to create graded items with due dates, use create_assignment.

update_calendar_eventA

Update an existing calendar event. Only include fields you want to change.

delete_calendar_eventA

Permanently delete a calendar event.

create_moduleA

Create a new module in a course. Use list_modules to see existing modules first.

update_moduleA

Update an existing module. Only include fields you want to change.

delete_moduleA

Permanently delete a module and all items within it. This cannot be undone.

list_module_itemsB

List all items in a module.

add_module_itemA

Add an item to a module. Required fields depend on type: Assignment/Discussion/File need content_id, Page needs page_url, SubHeader/ExternalUrl need title. For New Quizzes, use type='Assignment' with the New Quiz's assignment_id (not type='Quiz'). type='Quiz' is for Classic Quizzes only.

update_module_itemA

Update a module item. Only include fields you want to change.

delete_module_itemA

Remove an item from a module. This only removes the module entry — the underlying assignment/page/file is not deleted.

publish_moduleA

Publish a module (makes it visible to students). Note: this publishes the module container only — individual items retain their own published state.

post_submission_commentA

Add a comment to a student's submission without changing the grade. Useful for leaving feedback during review or asking for revisions. For comments + grade in one call, use grade_submission with the comment field instead.

describe_canvas_mcpsA

Describes the three Canvas-Agent MCPs (core/admin/extras), what tools live in each, and how to mount the other two. Call this when a user asks about Canvas-Agent's capabilities, or when you need a Canvas tool that doesn't appear to be registered — it's likely in admin or extras.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

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/hughsibbele/Canvas-Agent'

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