Canvas MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| CANVAS_BASE_URL | No | Canvas instance URL (defaults to https://fhict.instructure.com) | https://fhict.instructure.com |
| CANVAS_API_TOKEN | Yes | Your Canvas API token |
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
} |
| prompts | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list-coursesA | List all active courses for the authenticated user. Returns course name, ID, course code, and term for each course. |
| post-announcementB | Post an announcement to a specific course |
| list-studentsB | Get a complete list of all students enrolled in a specific course |
| list-assignmentsA | Get a list of all assignments in a course with submission status for students |
| get-assignmentA | Fetch metadata for a single assignment (due date, points, rubric, submission types, etc). |
| create-assignmentB | Create a new assignment in a course. All fields are optional except courseId. |
| update-assignmentB | Update an assignment. All fields are optional except courseId and assignmentId. |
| delete-assignmentA | Delete (archive) an assignment from a course. |
| list-assignment-groupsA | List all assignment groups (buckets) in a course. |
| create-assignment-groupB | Create a new assignment group (bucket) in a course. All fields optional except courseId. |
| bulk-update-assignment-datesA | Bulk update due/unlock/lock dates for assignments in a course. |
| list-modulesA | Return all modules in a course (optionally inline items). |
| list-module-itemsA | Given a module ID, list its items (pages, quizzes, files, etc). |
| toggle-module-publishA | Publish/unpublish a module (toggles the current published state). |
| create-moduleA | Create a new module in a course. |
| update-moduleC | Update an existing module's name, position, prerequisites, sequential progress, or published state. |
| delete-moduleA | Delete a module from a course. This is permanent and removes all module items. |
| get-module-itemA | Get details for a single module item. |
| create-module-itemA | Add a new item to a module. Type must be one of: File, Page, Discussion, Assignment, Quiz, SubHeader, ExternalUrl, ExternalTool. |
| update-module-itemA | Update an existing module item's title, position, indent, external URL, published state, completion requirement, or move it to another module. |
| delete-module-itemA | Remove an item from a module. |
| generate-styleguideA | Generate and save a Canvas styleguide page for a course with design standards, accessibility guidelines, and Canvas-specific formatting best practices. Creates the page at the given URL slug (default: canvas-styleguide). |
| get-styleguideA | Fetch the Canvas styleguide page for a course. Returns the page title, last-updated timestamp, and full HTML body. |
| list-pagesA | List all pages in a course. Returns title, URL slug, page ID, and published status for each page. |
| get-page-contentA | Get the full content of a page by URL slug. Returns title, URL slug, page ID, published status, last-updated timestamp, and HTML body. |
| update-page-contentA | Update or create a page with new content, replacing the entire body. If no body/title/editingRoles is provided, nothing is written and guidance is returned (set showStyleguidePreview to also inline the styleguide). For targeted edits to existing content, use patch-page-content instead. |
| list-page-revisionsA | List all revisions for a page. |
| revert-page-revisionA | Revert a page to a previous revision. |
| patch-page-contentA | Fetch a page's current HTML body and return it alongside edit instructions for the model to apply. Does not write to Canvas — follow up with apply-page-changes to persist the result. Optionally includes the course styleguide for formatting reference. For full replacement, use update-page-content instead. |
| apply-page-changesA | Write revised HTML content to a Canvas page. Accepts the full new body as newContent and saves it. Intended as the second step after patch-page-content. |
| list-sectionsA | List all sections in a course. Returns section name, ID, SIS ID, and optional date ranges. Set includeStudentCount to include enrollment totals per section. |
| list-section-submissionsA | Get all student submissions for a specific assignment filtered by section |
| list-assignment-submissionsB | Fetch every student's submission status & comments for an assignment. |
| grade-submissionC | Write back a score, grade, rubric points, or comment for a student's submission. |
| post-submission-commentA | Attach targeted feedback as a comment on a student's submission. |
| get-submission-documentsA | Retrieve a student's submission with attachment metadata and optional file downloads. Returns submission details, file information, and optionally the actual file content. |
| get-submission-file-infoA | Get detailed information about a specific file attached to a submission, including download URLs and metadata. |
| download-submission-fileA | Download the actual content of a file attached to a submission. Returns file content as base64 for binary files or as text for text files. |
| list-rubricsA | List all rubrics in a course. Returns rubric title, ID, and description for each rubric. |
| get-rubric-statisticsA | Get statistics for rubric assessments on an assignment |
| list-rubric-assessmentsB | List all rubric assessments for an assignment. |
| attach-rubric-to-assignmentB | Attach a rubric to an assignment. |
| list-quizzesB | Get a list of all quizzes in a course |
| get-quizA | Fetch metadata for a single quiz |
| create-quizB | Create a new quiz in a course. |
| update-quizC | Update an existing quiz in a course. |
| delete-quizB | Delete a quiz from a course. |
| list-quiz-questionsA | Get a list of all questions in a quiz |
| get-quiz-questionB | Fetch a single question from a quiz |
| create-quiz-questionA | Create a new question in a quiz. |
| update-quiz-questionC | Update an existing question in a quiz. |
| delete-quiz-questionB | Delete a question from a quiz. |
| list-quiz-question-groupsA | Get a list of all question groups in a quiz |
| get-quiz-question-groupA | Fetch a single question group from a quiz |
| create-quiz-question-groupA | Create a new question group in a quiz. |
| update-quiz-question-groupA | Update an existing question group in a quiz. |
| delete-quiz-question-groupA | Delete a question group from a quiz. |
| list-eportfoliosA | List all ePortfolios belonging to a user. Returns id, name, public flag, workflow state, and timestamps. |
| get-eportfolioA | Get details for a single ePortfolio by ID. |
| get-eportfolio-pagesA | List all pages in an ePortfolio. Returns id, position, name, content, and timestamps for each page. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| analyze-rubric-statistics | Analyze rubric statistics for formative assignments in a course |
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/r-huijts/canvas-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server