Canvas MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| CANVAS_TOKEN | Yes | Your Canvas API access token. Generate at Canvas → Account → Settings → New Access Token. | |
| CANVAS_BASE_URL | Yes | Your Canvas institution's base URL, e.g., https://your-institution.instructure.com |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_my_coursesA | Get current semester courses (auto-detected as active). Returns: {"courses": [{id, name, code, term}, ...], "count": N} |
| get_todoA | Get Canvas-computed todo items (assignments needing action). Returns: {"items": [{type, assignment_name, course_id, due_at, ...}, ...], "count": N} |
| get_all_upcomingA | Get upcoming assignments across all active courses. Args: days: How many days ahead to look (default 14) Returns: {"assignments": [{id, name, due_at, course_name, ...}, ...], "count": N} |
| get_all_gradesA | Get grades for all active courses. Returns: {"grades": [{course_id, course_name, current_score, current_grade}, ...], "count": N} |
| get_courseB | Get full course details including syllabus. Args: course_id: Canvas course ID Returns: {id, name, code, term, syllabus, description, start_at, end_at, ...} |
| get_assignmentsA | Get all assignments for a course. Args: course_id: Canvas course ID Returns: {"assignments": [{id, name, due_at, points_possible, ...}, ...], "count": N} |
| get_assignmentA | Get a single assignment with full description and attachments. Args: course_id: Canvas course ID assignment_id: Canvas assignment ID Returns: {id, name, description, due_at, points_possible, submission_types, attachments, ...} |
| get_announcementsB | Get announcements for a course (list view). Args: course_id: Canvas course ID Returns: {"announcements": [{id, title, posted_at, author}, ...], "count": N} |
| get_announcementA | Get a single announcement with full body. Args: course_id: Canvas course ID announcement_id: Canvas announcement (discussion topic) ID Returns: {id, title, message, posted_at, author, attachments} |
| get_discussionsC | Get all discussion topics for a course. Args: course_id: Canvas course ID Returns: {"discussions": [{id, title, posted_at, author, ...}, ...], "count": N} |
| get_discussionA | Get a single discussion topic with full message body. Args: course_id: Canvas course ID discussion_id: Canvas discussion topic ID Returns: {id, title, message, posted_at, author, attachments, ...} |
| get_quizzesA | Get all quizzes for a course. Args: course_id: Canvas course ID Returns: {"quizzes": [{id, title, due_at, points_possible, time_limit, ...}, ...], "count": N} |
| get_quizA | Get a single quiz with full details. Args: course_id: Canvas course ID quiz_id: Canvas quiz ID Returns: {id, title, description, due_at, points_possible, time_limit, question_count, ...} |
| get_calendar_eventsC | Get calendar events for a course. Args: course_id: Canvas course ID Returns: {"events": [{id, title, start_at, end_at, description, ...}, ...], "count": N} |
| get_rubricsA | Get all rubrics for a course. Args: course_id: Canvas course ID Returns: {"rubrics": [{id, title, points_possible, ...}, ...], "count": N} |
| get_rubricA | Get a single rubric with full criteria. Args: course_id: Canvas course ID rubric_id: Canvas rubric ID Returns: {id, title, points_possible, criteria: [{description, points, ratings}, ...]} |
| get_filesA | List all files in a course. Args: course_id: Canvas course ID Returns: {"files": [{id, display_name, size, content_type, url}, ...], "count": N} |
| get_fileB | Get file metadata and download URL. Args: file_id: Canvas file ID Returns: {id, display_name, size, content_type, url, created_at, updated_at} |
| get_modulesA | Get module structure for a course. Args: course_id: Canvas course ID Returns: {"modules": [{id, name, position, items_count, state}, ...], "count": N} |
| get_module_itemsB | Get items within a module. Args: course_id: Canvas course ID module_id: Canvas module ID Returns: {"items": [{id, title, type, content_id, html_url, ...}, ...], "count": N} |
| get_pageA | Get a wiki page's content with embedded file links. Args: course_id: Canvas course ID page_url: Page URL slug (e.g., "syllabus" or "week-1-notes") Returns: {title, body, created_at, updated_at} |
| get_submissionB | Get your submission for an assignment, including feedback and comments. Args: course_id: Canvas course ID assignment_id: Canvas assignment ID Returns: {id, score, grade, submitted_at, workflow_state, comments, attachments, ...} |
| get_full_course_contextA | Get EVERYTHING for a course in one call: details, syllabus, assignments, announcements, discussions, modules, files, and grades. Args: course_id: Canvas course ID Returns: {course, assignments, announcements, discussions, modules, files, grades} |
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/cabrt/canvas-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server