Canvas MCP for students
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| CANVAS_BASE_URL | Yes | Your school's Canvas base URL, e.g. https://yourschool.instructure.com | |
| CANVAS_API_TOKEN | Yes | Your Canvas access token, created in Canvas under Account > Settings > Approved Integrations > New Access 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
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_my_coursesA | List your active Canvas courses with their Canvas course IDs. Use a course ID or a course name in the other tools. Example: "What are my Canvas courses this term?" |
| get_todoA | Your Canvas to-do list: assignments and discussions Canvas says still need attention, with due dates. Example: "What does Canvas say I still need to do?" |
| get_upcoming_due_datesA | Upcoming assignments and events across every Canvas course, soonest first. Pass days_ahead to look only that many days ahead, for example 3. Leave it out and every upcoming due date Canvas returns is included. Example: "What is due in the next 3 days?" |
| get_quizzesA | Canvas quizzes and exams with when each opens, when it is due and when it closes, the time limit, the attempts you used and your score. Pass course_id as the Canvas course ID or as the course name to check one course, or leave it out for all active courses. Set when to upcoming for quizzes not yet closed, or past for closed ones. Pass limit and page to step through long lists, 20 items by default. Example: "Which Canvas quizzes and exams are coming up and how long do I get?" |
| get_missing_assignmentsA | Past-due Canvas assignments you have not submitted, with the course and the day each was due. Example: "What am I missing in Canvas?" |
| get_assignmentsA | Assignments for one Canvas course. Pass course_id as the Canvas course ID or as the course name, for example "Networking 1", and get due dates, points and submission status: not submitted, submitted, graded, missing or excused. Set bucket to filter, for example overdue. Example: "Which Canvas assignments in Networking 1 are overdue?" |
| get_my_gradesA | Your current grade in each active Canvas course from the Canvas gradebook, with the assignments behind each grade: your score, the points possible and the submission status. Pass course_id as the Canvas course ID or as the course name to limit the grades and the breakdown to one course. Example: "What is my grade in each Canvas course and which assignments make it up?" |
| get_course_contentB | Modules and module items for one Canvas course. Pass course_id as the Canvas course ID or as the course name. Example: "Show me the Week 3 module in my Canvas Networking course." |
| get_course_modulesA | Your progress through the modules of one Canvas course. Each module shows its state (locked, unlocked, started or completed) and each item shows what Canvas requires of you (view it, submit it, contribute or reach a minimum score) and whether you have done it, so you can see what to study next. Pass course_id as the Canvas course ID or as the course name. Set only_open to true to hide completed modules. Example: "Which modules do I still have to finish in my Canvas Networking course?" |
| get_syllabusA | The syllabus text for one Canvas course, with HTML removed. Pass course_id as the Canvas course ID or as the course name. Example: "What does the Canvas syllabus say about grading in Scripting?" |
| get_course_peopleA | The teachers and teaching assistants of one Canvas course, with their role and email address when Canvas shows it. Pass course_id as the Canvas course ID or as the course name. Set role to teacher or ta to show only one kind, or leave it out for both. Canvas hides some email addresses from students, and those people are listed without one. Example: "Who teaches my Canvas Networking course and how do I email them?" |
| get_announcementsA | Recent Canvas announcements, either for the course_ids you pass or for all your active courses. Each course id can be the Canvas course ID or the course name. Pass limit to show fewer or more than 20 announcements, and page to see the next ones. Example: "What did my instructors announce in Canvas lately?" |
| get_whats_newA | One catch up across your Canvas courses: announcements posted in the last few days, assignments graded in that window and discussions that still have unread replies. Pass since_days to change the window, 7 by default, or course_id as the Canvas course ID or as the course name to check one course. Pass limit and page to step through long lists, 20 items per section by default. Example: "What's new in Canvas since last week?" |
| get_inboxA | Your Canvas inbox, newest first, with the subject, who it is with, when the last message came and a short preview. Only unread conversations are shown by default. Set unread_only to false to include read ones too. Pass limit and page to step through long lists, 20 conversations by default. This tool only reads and never marks anything as read. Example: "Did any instructor message me in Canvas?" |
| get_discussionsA | Discussion topics for one Canvas course, with unread counts. Pass course_id as the Canvas course ID or as the course name. Pass limit and page to step through long lists, 20 topics by default. Example: "What discussions are open in my Canvas Networking course?" |
| get_calendar_eventsA | Canvas calendar events and assignment due dates. Pass start_date and end_date as YYYY-MM-DD to limit the range. Pass limit and page to step through long lists, 20 events by default. Example: "What is on my Canvas calendar between 2026-10-01 and 2026-10-31?" |
| get_target_gradeA | Work out what score is needed on the remaining Canvas work in one course to reach a target percent. Pass course_id as the Canvas course ID or as the course name and target_percent as a number from 0 to 100. If Canvas reports a current percent for that course, pass current_percent to use it instead of computing from graded points alone. Example: "What do I need on the rest of my work in Networking 1 to get an 85 percent?" |
| get_assignment_filesA | List the files linked in one Canvas assignment's instructions, such as a handout or a rubric, with the file name, type, size and a link. Pass course_id as the Canvas course ID or as the course name and assignment as the assignment ID or its name. It does not download or open the files. Example: "What files come with the Lab 4 assignment in Networking 1?" |
| get_submission_feedbackA | The instructor's comments on your graded submission for one Canvas assignment, with the score and grade. Pass course_id as the Canvas course ID or as the course name and assignment as the assignment ID or its name. Example: "What did the teacher say about my Lab 4 submission in Networking 1?" |
| get_fileA | Read one file from Canvas by its file ID, such as a file found with get_assignment_files or get_course_content. Plain text, CSV, JSON and HTML files come back as text. PDF, Word, slide deck and image files return the name, type and size with a note, because their text is not extracted. Files over 5 MB are not downloaded. Example: "Open Canvas file 501 and summarize it." |
| export_due_dates_calendarA | Build an iCalendar (.ics) file of Canvas due dates and calendar events that opens in Google Calendar, Apple Calendar and Outlook. Give a folder in path and the file is saved there, or leave path out and the calendar text comes back so you can save it yourself. Each event carries the course name, the points, the submission status and a link back to Canvas, plus a reminder the day before. By default only work you still owe is in the file, set include_submitted to add the work you already handed in. Use days_ahead to change how far ahead to look, 30 days by default, or course_id as the Canvas course ID or as the course name for one course. Example: "Put my Canvas due dates in Google Calendar." |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 21 tools
Several tools overlap in purpose: get_course_content and get_course_modules both return module information, while get_missing_assignments, get_todo, get_upcoming_due_dates, and get_calendar_events all surface outstanding or upcoming work. Descriptions help distinguish them, but an agent could still struggle to pick the right tool for questions like 'what do I need to do next?'
Names are consistently snake_case and almost all follow a get_<resource> pattern. The only real deviation is export_due_dates_calendar, which is appropriate because it performs an export rather than a lookup.
At 21 tools, the set is on the heavy side for a student Canvas server, and the overlapping read views make it feel larger than necessary. The breadth is defensible for a rich domain, but the surface is not tightly scoped.
Read coverage is broad: courses, assignments, grades, modules, quizzes, discussions, inbox, calendar, files, and people are all represented. However, there are no write operations such as submitting assignments, posting discussion replies, sending messages, or marking inbox items read, which is a notable gap for a student-facing Canvas server.