Canvas Agent
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| CANVAS_API_URL | Yes | The base URL of your Canvas instance (e.g., https://canvas.instructure.com) | |
| CANVAS_API_TOKEN | Yes | Your Canvas API access token | |
| CANVAS_AGENT_SANDBOX | No | Set to '0' to disable prompt-injection sandbox | 1 |
| CANVAS_AGENT_ANONYMIZE | No | Set to '0' to disable anonymization and name detection | 1 |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| 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:
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
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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