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 |
Capabilities
Features and capabilities supported by this server
| 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. |
| 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 |
| 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_assignmentA | Create a new assignment in a course. |
| update_assignmentB | 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_submissionA | Add a text comment to a submission. |
| 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_submissionsB | List all submissions for a quiz. |
| list_quiz_questionsB | List all questions in a quiz. |
| get_quiz_submission_answersA | 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. |
| 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_quizA | 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. |
| 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. |
| 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_membersB | 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_userC | 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_entryB | Post a new entry (reply) to a discussion topic. |
| create_discussionA | Create a new discussion topic in a course. |
| update_discussionB | 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_moduleB | 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. |
| create_moduleB | Create a new module in a course. |
| update_moduleA | Update an existing module (rename, reposition, publish/unpublish). |
| create_module_itemA | 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_pageB | Create a new wiki page in a course. |
| update_pageB | 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. |
| 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_reviewsA | List peer reviews assigned to a specific submission. |
| create_peer_reviewB | 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_usersB | List users in a Canvas account. |
| get_account_reportsA | List available report types for a Canvas account. |
| 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_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_linksB | List all outcome links in an account or course context. |
| get_outcome_groupA | Get details for a specific outcome group in an account or course context. |
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
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