canvas-api-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| CANVAS_TOKEN | Yes | Your Canvas personal access token | |
| CANVAS_BASE_URL | Yes | The base URL of your Canvas instance, e.g. https://canvas.yourschool.edu | |
| CANVAS_MAX_PAGES | No | Maximum number of pages to fetch when paginating through Canvas API results (default: 10) | 10 |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| course_contentA | Map a course's structure: its modules in order, and the items inside each (files, pages, assignments, quizzes, links). Use this to find what material exists before fetching any of it. |
| list_filesA | List files in a course — lecture slides, notes, readings — with name, type, and size. Pass search to filter by filename. Use read_file to get the text of one. |
| get_pageA | Get the content of a Canvas page in a course, such as a syllabus or a weekly overview. page_url is the page's slug, available from course_content. |
| read_fileA | Download a Canvas file and return its text — lecture slides, notes, readings. Supports PDF, DOCX, PPTX, and plain text. Get file ids from list_files or course_content. Long files are truncated to max_chars. |
| read_discussionA | Read course discussions. With only course_id, lists the discussion topics. With topic_id, returns that topic and all its replies flattened in order, with a depth field showing nesting. |
| post_discussion_replyA | Posts a reply to a course discussion publicly under the user's own name, visible immediately to the whole class and the instructor. It cannot be deleted from here. Show the user the exact text and get their confirmation before calling. |
| search_canvas_apiA | Search all Canvas API endpoints by keyword. Use this to find the right endpoint for anything the curated tools do not cover, then execute it with canvas_request. Returns method, path, summary, and parameter names. |
| canvas_requestA | Executes any Canvas API endpoint directly. Non-GET methods CREATE, MODIFY, or DELETE real data in Canvas immediately and cannot be undone from here. Find endpoints with search_canvas_api first. Set dry_run=true to preview the prepared request without sending it. What this is permitted to do is decided by Canvas based on your account's role. |
| whoamiA | Identify the Canvas account this server is authenticated as, including the user's name and their role in each course (student, ta, teacher). Call this first when you need to know what the user can access. |
| get_calendar_feed_urlA | Fetch the user's private calendar .ics subscription URL — a link they can add to Google/Apple/Outlook calendar to see every Canvas deadline natively. This URL is a bearer credential: whoever holds it can read the user's full calendar with no authentication, and it survives token rotation. Only call this when the user has explicitly asked for their calendar feed / subscription link — do not call it as part of general orientation, and do not repeat the URL back unless asked to. |
| my_coursesA | List the user's Canvas courses with course code, term, and their role in each. Use this to resolve a course name or code to the course_id that other tools require. |
| whats_dueA | List what is due for the user across all courses — assignments, quizzes, and scheduled events — sorted soonest first. This is the primary tool for 'what's due this week', 'what do I have coming up', and deadline planning. |
| my_gradesA | Report the user's current grade and score in each course, or in one course if course_id is given. Use this for 'how am I doing' and standing questions. |
| list_assignmentsA | List a course's assignments with due dates, points, and whether the user has submitted each one. Use bucket to filter to upcoming, overdue, unsubmitted, or past work. |
| get_assignmentA | Get one assignment in full: instructions, due and lock dates, points, accepted submission types, rubric, and the user's current submission state. |
| my_submissionA | Get the user's own submission for an assignment: state, score, grade, lateness, instructor comments, and rubric assessment. |
| course_announcementsA | List recent course announcements across all active courses, or one course if course_id is given. |
| submit_assignmentA | Submits work to Canvas for an assignment. This is recorded against the deadline immediately, is visible to the instructor, and cannot be undone from here. Confirm the assignment and content with the user before calling. Check accepted formats with get_assignment first — submission_type must be one the assignment allows. For online_upload, file_ids must reference files already uploaded to Canvas. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| week_ahead | Plan the coming days of coursework by deadline and urgency. |
| study_pack | Gather and summarise course material on a topic. |
| grade_check | Compute standing in a course and what remains. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| me | The authenticated Canvas user's identity and per-course roles. |
| courses | The user's active Canvas courses with code, term, and role. |
| api_catalog | Every endpoint this Canvas instance exposes, with method, path, summary, and parameter names. Generated from the instance's own API spec. |
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/JohannsenLum/canvas-api-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server