get_my_courses
My courses
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?"
Takes no parameters.

io.github.AnonymousOnyx22Published by GitHub account AnonymousOnyx22v0.1.10Updated Nov 1, 2026
Canvas LMS MCP server for students. Read only Canvas courses, grades, due dates, plus .ics export.
Read-only Canvas LMS server that lets an assistant pull a student's courses, due dates, grades, modules, announcements and feedback.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Follow the launch instructions in the repository.
Ask your AI what's actually left to do in Canvas.
Canvas LMS MCP is a free, open source MCP server for Claude, ChatGPT, Cursor and other AI apps. It reads your Canvas courses, due dates, grades and announcements, and it is read only in Canvas: it never submits, edits or deletes anything there. The one thing it writes is an .ics calendar file on your own computer, and only when you ask it to.
Install and run it with npx, no install step needed:
It reads two environment variables: CANVAS_BASE_URL, your school's Canvas address, and CANVAS_API_TOKEN, a token you create in Canvas.
Works with any school that uses Canvas. Not affiliated with Instructure. Free forever, no sign up and no subscription. Your login details only ever go to your own school.
claude_desktop_config.json):To check your setup first, run npx canvas-lms-student-mcp doctor with the two environment variables set.
Some schools turn off student access tokens. If you don't see the New Access Token button, your school has disabled it and this server can't connect to your account.
All 16 tools read from Canvas LMS and none of them can submit, edit or delete anything there. Every tool description includes an example prompt your AI can copy, and the Ask like column repeats those prompts here. The last one, export_due_dates_calendar, writes an .ics file to a folder you name.
Where a tool works on one course, you can name the course instead of looking up its number. Give the Canvas course ID or the course name, for example "Networking 1", and the name is matched against the list get_my_courses shows. A name that fits no course says so and points back at get_my_courses.
export_due_dates_calendar turns your Canvas due dates and your Canvas calendar events into an iCalendar file. Name a folder and the file is saved there, for example "Save my Canvas due dates to my Documents folder as an .ics file". Open the file or import it in Google Calendar, Apple Calendar or Outlook.
The file holds the next 30 days and only the work you still owe. Use days_ahead for a longer window, course_id for one course by ID or name, and include_submitted to add the work you already handed in. Each event carries the course name, the points, the submission status, a link back to Canvas and a reminder the day before. Leave the folder out and the calendar text comes back instead, so you can save it under any name you like.
Errors from Canvas and from the connection say what went wrong and what to fix. The most common ones:
Tests run against a fake Canvas server, so they need no account or network. The doctor command, the error messages for a bad token, access denied, a rate limit and a reply that is not Canvas, the .ics calendar export and the lookup of a course by name are part of that suite. A metadata test keeps package.json, server.json, glama.json, llms.txt and the server code on one version number, checks that the tool list in the docs still matches the tools the server registers, counts the read only tools from the code so the number in the docs follows the tools, and checks that the registry entry lists the same environment variables the code reads. Pushing to main and opening a pull request run the same build and test, so the badge at the top of this page shows the current result.
The npm package ships two registry files: server.json for the Model Context Protocol registry and glama.json for the Glama directory. Both carry the name, the description, the version, the license, the keywords, the repository and the homepage, so a listing shows what the server does and where the code lives. The server.json entry also names npx as the runtime and lists the two environment variables a listing site should ask for, with CANVAS_API_TOKEN marked as a secret value. It carries the GitHub repository id as well, and that id stays the same when a repository is renamed.
If your school runs Canvas, use this server. If it runs Brightspace, use brightspace-mcp-server. The two cover the same ground for their own LMS.
Canvas (Instructure) and Brightspace (D2L) are separate products, so a server for one cannot sign in to the other or read its courses. Canvas MCP reads only Canvas, using a token from your own Canvas account. Brightspace MCP (brightspace-d2l-mcp on npm) reads only Brightspace, using your school login. Neither tool moves work or grades between the two, and neither one changes anything in the LMS.
Canvas MCP signs in with an API token you create in Canvas. brightspace-mcp-server signs in with your school login through a one time setup command.
Here is what the 16 tools cover on Canvas, so you can check that your question has a tool before you install it.
All free, open source and read only where they touch your accounts. Browse the full list at brightspacemcp.com/more-mcps.
MIT
Source: README.md at commit da07af4
My courses
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?"
Takes no parameters.
To-do list
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?"
Takes no parameters.
Upcoming due dates
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?"
days_aheadMissing assignments
Past-due Canvas assignments you have not submitted, with the course and the day each was due. Example: "What am I missing in Canvas?"
Takes no parameters.
Course assignments
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?"
bucketcourse_idrequiredMy grades
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?"
course_idCourse content
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."
course_idrequiredSyllabus
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?"
course_idrequiredAnnouncements
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?"
pagelimitcourse_idsWhat's new
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?"
pagelimitcourse_idsince_daysDiscussions
Discussion topics for one Canvas course, with unread counts. Pass course_id as the Canvas course ID or as the course name. Example: "What discussions are open in my Canvas Networking course?"
course_idrequiredCalendar events
Canvas calendar events and assignment due dates. Pass start_date and end_date as YYYY-MM-DD to limit the range. Example: "What is on my Canvas calendar between 2026-10-01 and 2026-10-31?"
end_datestart_dateTarget grade
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?"
course_idrequiredtarget_percentrequiredcurrent_percentAssignment files
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?"
course_idrequiredassignmentrequiredSubmission feedback
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?"
course_idrequiredassignmentrequiredExport due dates calendar
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."
pathfilenamecourse_iddays_aheadinclude_submitted90% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
npx -y canvas-lms-student-mcp{ "mcpServers": { "canvas": { "command": "npx", "args": ["-y", "canvas-lms-student-mcp"], "env": { "CANVAS_BASE_URL": "https://yourschool.instructure.com", "CANVAS_API_TOKEN": "paste-your-token-here" } } }}npm installnpm run buildnpm test