Canvas LMS MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| CANVAS_BASE_URL | Yes | Canvas instance URL (e.g., https://school.instructure.com) | |
| CANVAS_API_TOKEN | Yes | Canvas personal access token | |
| CANVAS_PSEUDONYM_DIR | No | Absolute path that overrides the default pseudonym map directory | |
| CANVAS_ALLOWED_ORIGIN | No | CORS origin for HTTP mode (default: http://localhost:3000) | |
| CANVAS_PSEUDONYM_AUDIT_LOG | No | Path to an append-only file that mirrors resolve_pseudonym audit lines | |
| CANVAS_PSEUDONYMIZE_STUDENTS | No | Set to 'true' to enable FERPA mode student pseudonymization | |
| CANVAS_PSEUDONYMIZE_REVERSE_LOOKUP | No | Set to 'true' (with CANVAS_PSEUDONYMIZE_STUDENTS=true) to register the resolve_pseudonym audit tool |
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
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| health_checkA | Check if the Canvas API is reachable and the token is valid. Returns ok/error status. |
| list_coursesA | List courses for the authenticated user. Use fields="slim" when enumerating courses for selection; switch to "full" once you have identified the target. slim returns id, name, course_code, term name, and workflow_state only. "full" (default) includes all Canvas fields plus |
| get_courseA | Get details for a single course. Defaults to requesting |
| get_syllabusA | Get the syllabus HTML body for a course. |
| create_courseA | Create a new course in a Canvas account. Returns the created course object. |
| update_courseA | Update an existing course. Only provided fields are changed; omitted fields are left as-is. |
| list_assignmentsA | List all assignments in a course. Use fields="slim" when enumerating assignments for selection; switch to "full" once you've identified the target. slim returns id, name, due_at, points_possible, published, and course_id only. "full" (default) includes all Canvas fields plus |
| get_assignmentA | Get details for a single assignment by ID. Use |
| list_assignment_groupsA | List assignment groups (categories like Homework, Exams) in a course. Use |
| create_assignmentC | Create a new assignment in a course. |
| update_assignmentA | Update an existing assignment in a course. |
| delete_assignmentA | Delete an assignment from a course. This action is permanent. |
| list_submissionsA | List all submissions for an assignment. Use |
| get_submissionA | Get a single submission for a specific user on an assignment. Defaults to including submission_comments. Pass |
| grade_submissionA | Post or update a grade for a submission. Requires grading permissions. |
| comment_on_submissionB | Add a text comment to a submission. |
| list_course_submission_filesA | List every file attachment submitted by students across all assignments in a course. Returns a manifest — one entry per file — including the original filename, a file_id for re-fetching via download_file, content type, and size. Useful for bulk-archiving student work before a course expires or a Free-For-Teacher account is concluded. Outputs are bounded by max_files (default 500); when the limit is hit, truncated is true and truncation_note explains how to retrieve the rest. Download URLs are time-limited (typically 1 hour) — use the returned file_id with download_file to get a fresh URL at download time. When CANVAS_PSEUDONYMIZE_STUDENTS is enabled, user_name is a stable per-course pseudonym (e.g. "Student 1"); user_id (the raw numeric Canvas ID) is always returned and works as a stable per-student folder key. |
| list_submissions_awaiting_gradingA | Lists all submissions in a course that still need a human grade, sorted oldest-waiting first. Surfaces two categories:
Returns a triage list grouped by assignment or Classic Quiz, with per-submission details: student identity, workflow state, submitted_at, and whether the submission has pending manual-grading questions. Parameters:
Known limitations:
|
| list_rubricsA | List all rubrics in a course. |
| get_rubricA | Get details for a single rubric by ID, including criteria. |
| get_rubric_assessmentA | Get the rubric assessment for a specific student submission on an assignment. |
| submit_rubric_assessmentA | Submit a rubric assessment with scores and comments for each criterion. |
| create_rubricA | Create a new rubric in a course with criteria and rating levels. Optionally link it to an assignment immediately. |
| list_quizzesA | List all quizzes in a course. |
| get_quizA | Get details for a single quiz by ID. |
| list_quiz_submissionsA | List all submissions for a quiz. |
| list_quiz_questionsA | List all questions in a quiz. |
| get_quiz_submission_answersB | Get a student's answers for a quiz submission. |
| score_quiz_questionA | Score a specific question in a quiz submission. Specify attempt to score a particular attempt (omit for latest). Requires grading permissions. |
| get_quiz_submission_eventsA | Get the event log for a Classic Quiz submission in chronological order. Events include session_started, question_answered, question_flagged, page_blurred, and page_focused. Use this to understand the timeline of a student's attempt. Classic Quizzes only — New Quizzes does not expose event logs via the Canvas REST API. Events are scoped to a single submission; Canvas enforces access permissions (instructors and the submitting student only). Do not use event logs as the sole basis for academic-integrity conclusions; present them with context. |
| create_new_quizA | Create a New Quiz (LTI) in a Canvas course. New Quizzes is the modern quiz engine; for Classic quizzes use create_quiz. |
| update_new_quizB | Update an existing New Quiz (LTI) in a Canvas course. |
| delete_new_quizA | Delete a New Quiz (LTI) from a Canvas course. This action is permanent. Use assignment_id (not quiz_id). |
| list_new_quiz_itemsA | List all items (questions) in a New Quiz (LTI). |
| get_new_quiz_itemA | Get a single item (question) from a New Quiz (LTI) by item ID. |
| create_new_quiz_itemA | Create an item (question) in a New Quiz (LTI). Supports 5 types: choice (MCQ), true-false, essay, matching, numeric. Canvas may rate-limit rapid sequential creates. Call serially (not in parallel). For >50 items, chunk and pause between batches. |
| update_new_quiz_itemA | Update an existing item (question) in a New Quiz (LTI). All fields are optional; supply only what changes. Canvas may rate-limit rapid sequential updates. Call serially (not in parallel). For >50 items, chunk and pause between batches. |
| delete_new_quiz_itemA | Delete an item (question) from a New Quiz (LTI). This action is permanent. |
| get_quiz_question_responsesA | Review every student's answer to one or all questions in a Classic Quiz, pivoted by question instead of by student — for grading essay/short-answer/file-upload questions consistently across a class instead of paging through SpeedGrader one student at a time. Classic Quizzes only (quiz_type: assignment, practice_quiz, graded_survey, survey) — New Quizzes exposes responses through a different API. Omit question_id to get every question; provide it to scope to one. Each question reports needs_manual_grading (true for essay and file-upload questions) and points_possible. Scans one Canvas API call per completed or pending-review submission; a failed per-submission fetch is recorded in submissions_failed rather than aborting the whole call. When CANVAS_PSEUDONYMIZE_STUDENTS is enabled, student names are replaced with stable pseudonyms. |
| list_filesB | List all files in a course. |
| list_foldersA | List all folders in a course. |
| get_fileA | Get metadata for a single file by ID, including download URL. |
| upload_fileA | Upload a file to a course. Content must be base64-encoded. Canvas performs a multi-step upload internally. |
| delete_fileA | Delete a file by ID. This action is permanent. |
| download_fileA | Download the content of a Canvas file by ID. Text files (plain text, HTML, JSON, XML, JavaScript) are returned as readable text. Binary files (images, PDFs, etc.) are returned as base64-encoded data. Files larger than 10 MB are refused. |
| find_duplicate_filesA | Find duplicate files in a course's Files area — copies with the same name and size, typically left behind by repeated course copies. Each duplicate gets flagged separately by accessibility checkers, so this surfaces them for cleanup with the existing delete_file tool. Groups by display name + size (Canvas file listings carry no content hash), so same-name files of different sizes are not considered duplicates. |
| list_gradebook_history_daysA | List the dates in a course gradebook history that contain grading activity, grouped by grader and assignment. |
| get_gradebook_history_dayA | Get the graders and assignment IDs that had gradebook activity on a specific course date. |
| list_gradebook_history_submissionsA | List versioned submission history for one grader and assignment on a specific gradebook history date. |
| get_gradebook_history_feedA | Get the paginated gradebook history feed for a course, optionally filtered by assignment or user and optionally sorted oldest-first. |
| list_studentsA | List all students enrolled in a course. |
| get_userA | Get details for a single user by ID. |
| get_profileA | Get the profile of the currently authenticated user. |
| search_usersA | Search for users in a Canvas account by name, login, or email. Use |
| list_course_usersA | List users in a course with optional Canvas filters. Use |
| list_groupsA | List all groups in a course. |
| list_group_membersA | List all members of a group. |
| list_enrollmentsA | List all enrollments for the authenticated user across courses. Optional filters and includes mirror Canvas |
| list_course_enrollmentsA | List enrollments within a specific course with Canvas filters. Use |
| enroll_userA | Enroll a user in a course with a specified role. |
| remove_enrollmentA | Remove or conclude an enrollment from a course. The 'delete' task is permanent; 'conclude' and 'deactivate' are reversible. |
| list_discussionsA | List all discussion topics in a course. |
| get_discussionA | Get details for a single discussion topic by ID. |
| list_announcementsA | List all announcements in a course. |
| post_discussion_entryA | Post a new entry (reply) to a discussion topic. |
| create_discussionB | Create a new discussion topic in a course. |
| update_discussionC | Update an existing discussion topic. |
| delete_discussionA | Delete a discussion topic from a course. This action is permanent. |
| list_modulesA | List all modules in a course. |
| get_moduleA | Get details for a single module by ID. |
| list_module_itemsB | List all items within a module. |
| get_course_structureA | Return the full module → items tree for a course in a single call, with summary stats. Avoids N+1 round-trips when an agent needs to reason over the whole course shape. |
| view_course_structureA | Interactive tree view of a course's modules and items. Returns the same payload as |
| create_moduleB | Create a new module in a course. |
| update_moduleA | Update an existing module (rename, reposition, publish/unpublish). |
| create_module_itemB | Add an item (Assignment, Page, Quiz, File, Discussion, ExternalUrl, ExternalTool, SubHeader) to a module. |
| list_pagesA | List all wiki pages in a course. |
| get_pageA | Get a single wiki page by its URL slug. |
| create_pageA | Create a new wiki page in a course. |
| update_pageC | Update an existing wiki page. |
| delete_pageA | Delete a wiki page from a course. This action is permanent. |
| list_calendar_eventsA | List calendar events for a course, unbounded by the ~1-week/20-item caps that |
| create_calendar_eventB | Create a new calendar event in Canvas. |
| update_calendar_eventA | Update an existing calendar event. Only provided fields are changed. |
| list_conversationsA | List conversations (inbox messages) for the authenticated user. |
| get_conversationA | Get a single conversation with its full message thread. |
| get_conversation_unread_countA | Get the number of unread conversations for the authenticated user. |
| send_conversationA | Send a new conversation message to one or more recipients. |
| list_peer_reviewsA | List all peer reviews for an assignment in a course. |
| get_submission_peer_reviewsB | List peer reviews assigned to a specific submission. |
| create_peer_reviewA | Assign a user to peer-review a submission. |
| delete_peer_reviewA | Remove a peer review assignment from a submission. This action is permanent. |
| get_accountA | Get details for a Canvas account by ID. |
| list_accountsA | List all accounts accessible to the authenticated user. |
| list_sub_accountsB | List sub-accounts under a given Canvas account. |
| list_account_coursesA | List courses under a given Canvas account. |
| list_account_usersA | List users in a Canvas account. |
| get_account_reportsB | List available report types for a Canvas account. |
| list_account_notificationsA | List active global institution-wide announcements for the current user (maintenance windows, term deadlines, policy notices). |
| view_account_notificationsA | Interactive panel of active institution-wide announcements. Returns the same payload as |
| search_course_contentA | Search for content within a course. Searches pages, assignments, discussions, and announcements by keyword. |
| get_course_analyticsA | Get course-level activity analytics. Returns daily page view and participation counts. |
| get_student_analyticsA | Get per-student activity analytics for a course. Returns page views, participations, and submission timeline for a specific student. |
| get_course_activity_streamA | Get a summary of recent activity in a course. Returns counts of recent events grouped by type (submissions, discussions, announcements, etc.). |
| get_assignment_analyticsA | Get score distribution analytics for assignments in a course. Returns statistical summary (min, max, median, first/third quartile), submission count, and tardiness breakdown (on_time, late, missing) for each assignment. Provide assignment_id to scope to one assignment; omit to return analytics for all assignments in the course. |
| get_root_outcome_groupB | Get the root outcome group for an account or course context. |
| list_outcome_groupsA | List all outcome groups for an account or course context. |
| list_outcome_group_linksA | List all outcome links in an account or course context. |
| get_outcome_groupB | Get details for a specific outcome group in an account or course context. |
| list_outcome_group_outcomesB | List the linked outcomes directly under a specific outcome group. |
| list_outcome_group_subgroupsA | List the immediate child outcome groups under a specific outcome group. |
| get_outcomeA | Get the full details for a specific learning outcome by ID. |
| get_outcome_alignmentsA | Get outcome alignments for a course, optionally filtered to a specific student or assignment. |
| get_outcome_resultsA | Get per-student outcome results for a course, with optional outcome, student, and alignment filters. |
| get_outcome_rollupsA | Get outcome rollups for a course, optionally aggregated or filtered by students, outcomes, and sort options. |
| get_outcome_contributing_scoresA | Get assignment or quiz scores that contributed to a specific outcome for one or more students in a course. |
| get_outcome_mastery_distributionA | Get mastery distribution analytics for outcomes in a course, optionally filtered by students or outcomes. |
| get_my_coursesA | List active courses for the authenticated student. |
| get_my_gradesA | Get grade data for the authenticated student. If course_id is omitted, returns grades across all enrolled courses. |
| get_my_submissionsA | List all submissions for the authenticated student in a course. |
| get_my_upcoming_assignmentsA | List upcoming assignment events for the authenticated student. Canvas caps this endpoint at roughly the next 1 week and at most 20 events server-side — neither limit is adjustable, and results silently stop there even if more assignments fall later. For a longer or specific date range, use |
| get_my_submission_feedbackA | List the authenticated student's own submissions that carry feedback comments from an instructor or a peer reviewer — comments left by the student themselves do not count as feedback and submissions with no non-self comments are omitted. Omit |
| find_student_across_coursesA | Search the caller's teaching courses — active and, by default, concluded (past-term) ones — for a student by name, login, or email, and report every matching course with the student's enrollment state and last activity. Set |
| get_dashboard_cardsA | Get the current user's dashboard course cards with position, color, and image. |
| get_todo_itemsA | Get the current user's to-do items, including upcoming assignments and grading tasks. |
| get_upcoming_eventsA | Get the current user's upcoming calendar events and assignments. Canvas caps this endpoint at roughly the next 1 week and at most 20 events server-side — neither limit is adjustable, and results silently stop there even if more events fall later. For a longer or specific date range, use |
| get_missing_submissionsB | Get assignments with missing submissions for the current user. |
| list_submission_comments_needing_attentionA | List submissions where the most recent comment is from the student and has not been addressed by grading or a reply — i.e. comments the instructor has likely not seen. Returns a triage list, oldest-unaddressed first. Requires instructor/TA permissions in the course. |
| list_students_needing_attentionA | Report students who may need instructor attention based on inactivity, missing or late submissions, and low current score. Each finding lists the exact signals that fired and the thresholds used — this is a factual report, not a prediction. Requires instructor/TA permissions in the course. |
| create_content_exportA | Start a Canvas course content export (Common Cartridge / QTI / zip). Exports are asynchronous — this tool returns immediately with an export ID and initial workflow_state ("created"). Call get_content_export to poll progress and retrieve the time-limited download link when the export finishes. |
| get_content_exportA | Get the status of a content export. When workflow_state is "exported", attachment.url contains a time-limited download link — download it promptly, as the URL expires (re-fetch to get a fresh one). Returns attachment: null while still "created"/"exporting" or on "failed". |
| list_content_exportsA | List all content exports for a course (most recent first). |
| list_content_migrationsA | List all content migrations for a course (most recent first). |
| get_content_migrationA | Get the status of a single content migration. When workflow_state is "running", poll progress_url for live updates. When "completed", the migration is done. |
| list_content_migration_typesA | List available migration types (migrators) for a course. Returns migrator type keys such as course_copy_importer, common_cartridge_importer, zip_file_importer, qti_converter, moodle_converter. |
| get_migration_selective_dataA | Get the selective import tree for a migration — the list of content items available to selectively import. Only meaningful for migrations in the "waiting_for_select" state. |
| get_migration_asset_id_mappingA | Get the old-to-new asset ID mapping for a completed migration. Useful for resolving references to content that existed in the source course. |
| list_migration_issuesA | List issues encountered during a content migration. Each issue has a type (todo, warning, or error) and a description. |
| create_content_migrationA | Start a content migration (course copy, Common Cartridge import, zip import, QTI conversion, or Moodle conversion). Migrations are asynchronous — this tool returns immediately with a migration ID and progress_url. Poll get_content_migration or progress_url to track completion. |
| list_grading_standardsA | List grading standards available in a course or account context. Provide either course_id (to see standards scoped to a course) or account_id (to see account-level standards, requires admin access). Returns an array of grading standard objects, each with an id, title, context, and grading_scheme array of { name, value } entries. |
| create_grading_standardA | Create a new grading standard (letter-to-percentage scheme) in a course or account context. Provide either course_id or account_id (account requires admin). scheme_entries is an array of { name, value } objects where value is the lower-bound percentage as a fraction 0–1 (e.g. { name: "A", value: 0.94 } means A ≥ 94%). Entries will be sorted descending by value before sending to Canvas. Canvas POST body key is grading_scheme_entry (singular); the returned object uses grading_scheme (plural). Returns the created grading standard object including its id — use that id with apply_grading_standard_to_course to activate it on a course. |
| apply_grading_standard_to_courseA | Apply an existing grading standard to a course so the gradebook uses it. Pass the grading_standard_id returned by create_grading_standard or list_grading_standards. Pass null for grading_standard_id to remove the current grading standard from the course. Returns the updated course object. |
| set_student_quiz_accommodationA | Apply extra time and/or extra attempts to a specific student across all Classic Quizzes in a course (or a specified subset). Fans out to the Canvas quiz extensions API for each quiz. New Quizzes (quiz_type quizzes.next) are skipped — use set_student_new_quiz_accommodation instead. Only applies to quizzes that exist at call time; re-run after creating new quizzes. Assignment due-date overrides are not handled here (separate fast-follow feature). Note: for courses with many quizzes this makes one Canvas API call per quiz. Partial failures are tolerated — a failure on one quiz does not abort the rest. Returns the standard fan-out envelope: separated applied[], skipped[] (each with a skip_reason), and failed[] (each with an error) arrays, a not_found list of any requested quiz_ids absent from the course, and a summary of counts. Provide user_id as the real Canvas user ID. If CANVAS_PSEUDONYMIZE_STUDENTS is enabled, call resolve_pseudonym first to obtain the real user_id from a pseudonym. |
| list_student_quiz_accommodationsA | List the current quiz accommodation (extra time and/or extra attempts) for a specific student across all Classic Quizzes in a course. Useful for auditing before or after calling set_student_quiz_accommodation. New Quizzes (quiz_type quizzes.next) are excluded. Reads extra_time / extra_attempts from each quiz's submission records (Canvas exposes no read endpoint for quiz extensions directly) — one Canvas API call per Classic Quiz, so it may be slow for courses with many quizzes. Errors from any quiz's read propagate immediately (no per-quiz error catching). Provide user_id as the real Canvas user ID. If CANVAS_PSEUDONYMIZE_STUDENTS is enabled, call resolve_pseudonym first. |
| set_student_new_quiz_accommodationA | Apply a time and/or attempts accommodation for a student across all New Quizzes in a course (course-level, single Canvas API call when no assignment_ids are given) or for a specified subset of New Quizzes (per-quiz fan-out when assignment_ids are given). New Quizzes use a time_multiplier (ratio, e.g. 1.5 for 1.5× time), not absolute minutes. For Classic Quizzes (quiz_type: assignment / practice_quiz / etc.) use set_student_quiz_accommodation instead. Partial per-quiz failures are tolerated — a failure on one quiz does not abort the rest. In per-quiz mode, fan-out is sequential (one Canvas API call per assignment ID, awaited in series). Canvas errors on the course-level path (no assignment_ids) propagate as a top-level error (no envelope). Returns a uniform envelope: scope ("course" or "per_quiz"), applied[], failed[], and summary. Provide user_id as the real Canvas user ID. If CANVAS_PSEUDONYMIZE_STUDENTS is enabled, call resolve_pseudonym first to obtain the real user_id from a pseudonym. |
| list_student_new_quiz_accommodationsA | Read the current course-level New Quizzes accommodation (time multiplier and/or extra attempts) for a specific student in a course. Useful for auditing before or after calling set_student_new_quiz_accommodation. Returns has_accommodation: false when no accommodation is set (Canvas 404 is treated as "no record", not an error). New Quizzes store a single course-level accommodation record per student; this is not per-quiz. For Classic Quizzes, use list_student_quiz_accommodations instead. Provide user_id as the real Canvas user ID. If CANVAS_PSEUDONYMIZE_STUDENTS is enabled, call resolve_pseudonym first. |
| list_assignment_overridesA | List all due-date / availability overrides for a specific assignment in a course. Returns overrides targeting individual students, sections, or groups. Useful for auditing before creating a new override — Canvas returns a 422 if a student-set override already exists for the same students on the same assignment. |
| create_assignment_overrideA | Create a due-date / availability override for a specific assignment, targeting a set of students, a course section, or a group. Exactly one of student_ids, course_section_id, or group_id must be provided. At least one date field (due_at, unlock_at, lock_at) should be provided; omit a date field to leave the corresponding date unchanged for the override target. Dates must be ISO 8601 strings (e.g. "2026-09-15T23:59:00Z"). Canvas returns a 422 if a student-set override already exists for the same students on this assignment — use list_assignment_overrides to audit first. Provide student_ids as real Canvas user IDs. If CANVAS_PSEUDONYMIZE_STUDENTS is enabled, call resolve_pseudonym first to resolve pseudonyms to real user IDs. |
| set_student_assignment_datesA | Fan a due-date / availability override for a specific student across all (or a filtered subset of) assignments in a course. Creates one student-set override per assignment via the Canvas assignment overrides API. Partial failures are tolerated — a failure on one assignment does not abort the rest. Note: for courses with many assignments this makes one Canvas API call per assignment. V1 is create-only: if an override for this student already exists on an assignment, Canvas returns a 422 and that assignment appears in the failed[] list. Use list_assignment_overrides to audit first. Dates must be ISO 8601 strings. To shift dates by a relative amount, first call list_assignments with include=overrides to retrieve current dates, compute absolute timestamps, then call this tool. Returns the standard fan-out envelope: separated applied[], skipped[] (unused in this create-only version, always empty), and failed[] (each with an error) arrays, a not_found list, and a summary of counts. Any assignment_ids that do not exist in the course are reported in not_found (they are neither applied nor failed). Provide user_id as the real Canvas user ID. If CANVAS_PSEUDONYMIZE_STUDENTS is enabled, call resolve_pseudonym first to obtain the real user_id from a pseudonym. |
| check_course_setupA | Run a factual course-readiness report that surfaces common configuration problems — assignments missing due dates, unpublished items students will not see, gradebook weighting gaps, graded assignments with no points, and published assignments still accepting submissions after their due date. Returns findings grouped by check with a plain-language detail per item. This is a config-health report only; it does not inspect student submissions or performance (see list_students_needing_attention / get_missing_submissions for those). Requires instructor permissions in the course. |
| explain_gradeA | Recomputes and explains the weighted course grade for a student, including assignment-group weights, drop_lowest / drop_highest / never_drop rules, per-group breakdowns (earned points, dropped assignments, weighted contributions), the mapped letter grade (via the course grading standard when present), and a reconciliation check against Canvas's posted current_score / final_score. Use this when you need to verify that Canvas's displayed grade matches the rules, or to explain to a student or instructor how their grade was calculated. Limitations:
|
| explain_grading_policyA | Explains the grading automation rules configured for a Canvas course:
Also returns a plain-language summary paragraph you can share with students or instructors. Note: the late/missing policy section requires instructor or admin permissions. Students receive the group-weighting and grading-scheme sections only, with a caveat noting what is unavailable. Use explain_grade to compute the actual weighted grade for a specific student. |
| project_gradeA | Projects the minimum score needed on remaining assignments to reach a target course grade. Given a target (as a percentage, e.g. 90, or a letter grade, e.g. "A") and the student's current scores, computes the minimum uniform percentage that must be earned on all remaining (not yet graded) assignments for the overall course grade to reach the target. Accounts for assignment-group weights, drop_lowest / drop_highest / never_drop rules, and the course grading scheme (for letter-grade targets and output letter mapping). Returns:
Limitations:
|
| audit_course_linksA | Scan a course's content (pages, assignments, syllabus, announcements, and optionally quizzes) for broken or outdated links and images. Returns structured findings: cross-course references (links that still point at a previous copy of the course — the canonical stale-copy failure after a course import) and empty/malformed URLs. Pass "quizzes" in |
| audit_course_accessibilityA | Scan a course's content (pages, assignments, syllabus, announcements, and optionally quizzes) for structurally-detectable WCAG 2.1 accessibility problems: images missing alt text or with low-quality (filename/generic) alt text, non-descriptive link text ("click here"), adjacent duplicate links, skipped/empty/overlong headings, and tables missing headers, header scope, or captions. Each finding carries a WCAG success criterion and a severity (error = unambiguous failure, advisory = needs human review). Structural checks only — no color-contrast checking (requires rendered theme CSS this tool cannot see) and no list-misuse detection in this version. Pass "quizzes" in |
| list_appointment_groupsA | List appointment groups (Canvas Scheduler sign-up slots). Use scope=reservable to find groups students can reserve, or scope=manageable for groups the current user manages. |
| get_appointment_groupB | Get a single appointment group by ID, including its time slots and participant counts. |
| create_appointment_groupA | Create a new appointment group (sign-up slots) in Canvas Scheduler. Provide at least one context_code (e.g. "course_123") and a title. Add new_appointments as [start_at, end_at] pairs to define time slots. |
| update_appointment_groupA | Update an existing appointment group. Use publish=true to make a draft group visible to participants, or add new time slots via new_appointments. |
| delete_appointment_groupA | Delete an appointment group and cancel any existing reservations. Provide cancel_reason to notify participants. |
| list_appointment_group_usersA | List participants (users) who have reserved a slot in an appointment group. |
| list_appointment_group_groupsA | List student groups that have reserved a slot in an appointment group (when participant_type=Group). |
| next_appointmentA | Get the current user's next upcoming appointment across all (or specified) appointment groups. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| Course Structure | Interactive course structure tree |
| Institution Announcements | Interactive institution announcements panel |
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/bruchris/canvas-lms-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server