Skip to main content
Glama

Canvas LMS MCP Server

A minimal, student-focused, strictly read-only MCP server for Canvas LMS.

It gives MCP clients access to courses, assignments, grades, submissions, syllabi, announcements, modules, pages, and files without exposing any Canvas write operation.

Install

Using Claude Desktop? Start with the download and installation guide. It offers separate Mac (Apple Silicon/Intel) and Windows x64 installers, with Canvas settings entered in a form. No terminal is needed.

Using a local MCP client with npm? Use the same guide for client-specific steps. 0.2.0-preview.2 is available as an npm preview and GitHub release. Use the exact version below to get these upgrades; npm’s stable latest remains 0.1.0.

Ordinary Claude/ChatGPT browser conversations cannot install this local server from a GitHub link. A hosted connector is not included.

Related MCP server: Canvas MCP Connector

Requirements

  • For npm setup: Node.js 20.19 or newer. Check with node --version. Claude Desktop installers use the app’s bundled runtime.

  • A Canvas personal access token. In Canvas, go to Account -> Settings -> Approved Integrations -> + New Access Token.

  • Your institution's Canvas base URL, such as https://canvas.example.edu. Do not include /api/v1.

WARNING

A Canvas token has your Canvas permissions. Never commit it, share it, paste it into an issue, or place it in a project configuration that may be shared.

Some institutions disable personal access tokens. If the New Access Token option is unavailable, ask your Canvas administrator whether personal tokens are permitted.

npm setup

For Claude Desktop, a .mcpb installer can collect the Canvas URL and access token in a form. See the Claude Desktop guide for the local installer preview and the manual alternative. Match the installer's platform and architecture to your computer.

The server is launched by an MCP client over standard input/output. Its primary command is:

npx -y mcp-server-canvas-lms@0.2.0-preview.2

Configure these two environment variables in your MCP client:

  • CANVAS_BASE_URL=https://canvas.example.edu

  • CANVAS_API_TOKEN=replace-with-your-personal-token

Then restart or reconnect the client and try this first connection check:

List my active Canvas courses.

See the exact setup for Codex, Claude Desktop, Cursor, VS Code, or a generic stdio client.

Tools

The server exposes thirteen tools with read-only Canvas access:

Tool

Reads

canvas_check_changes

Changed deadlines, new assignments and newly seen announcements using local history

canvas_list_courses

Active courses, terms, and current scores

canvas_list_assignments

Assignments for one or all active courses

canvas_get_assignment

Requirements, rubric, and submission summary

canvas_get_grades

Course totals or assignment-level grades

canvas_get_submission

The current user's submission, comments, and rubric assessment

canvas_get_syllabus

A course syllabus as cleaned text

canvas_get_weekly_overview

Upcoming deadlines, overdue work and recent announcements across subjects

canvas_list_announcements

Recent course announcements

canvas_list_modules

Modules and their items

canvas_get_page

A course page by its Canvas URL slug

canvas_list_files

Course files and folders

canvas_read_file

Text from a supported course file

Every Canvas API request is structurally restricted to HTTP GET. There are no mutation methods, so this server cannot submit assignments, send messages, change grades, edit course content, or perform administrative actions.

Plan your week across subjects

Ask your assistant:

What should I focus on this week? Check my upcoming deadlines, overdue work and recent announcements across my subjects. Use Australia/Sydney time and link to Canvas.

canvas_get_weekly_overview combines active courses, assignments and recent announcements in one on-demand snapshot. It requests Canvas's applicable assignment date overrides for the current user. Completed and excused work is excluded; work marked missing remains visible even if a zero was recorded. Past deadlines with unreported or offline completion are listed separately for verification. Work without a usable due date is also identified. Work reassigned for resubmission stays visible; an old deadline is flagged for verification rather than assumed to be the current resubmission deadline.

The default is the next seven days of deadlines and the previous seven days of announcements. Both are rolling 24-hour windows, shown explicitly in the output. days_ahead and since_days each accept 1–30; limit accepts 1–50 items per section (default 10). An optional IANA timezone controls displayed dates; otherwise the server's timezone is used. Deadlines at either end of the upcoming window are included. Announcement previews are shortened and link to their full source.

The tool checks up to 50 active courses, with at most six concurrent API requests. It reports denied or unavailable data, skipped courses and omitted items. Section counts refer only to checked data. Output is limited to 100,000 characters with a truncation notice. It does not inspect every brief, check external assessment systems or send reminders. Use canvas_check_changes for on-demand comparisons between visits.

This tool is included in published preview 0.2.0-preview.2.

Check what changed

Ask: “What changed since my last check? Show moved deadlines and new announcements.” canvas_check_changes saves a baseline on the first check and compares subsequent checks, showing previous/new dates and Canvas source links. Failed endpoints keep their previous baseline. The tool stores minimal metadata locally, not tokens or coursework bodies. It does not run automatically or send notifications. See history, coverage limits and reset.

Read assignment briefs and lecture files

Ask your assistant to list the files in a course, then read the relevant file. For example:

Read my assignment brief and rubric, explain what I need to deliver, and link to the original materials. Point out anything you could not read.

canvas_read_file returns a Canvas source link, the retrieval time and the file's update time when available. It extracts text locally from:

Format

References and coverage

PDF

Embedded text, labelled by page

Word (.docx)

Main-body paragraphs and table cells, labelled by paragraph

PowerPoint (.pptx)

Slide text in presentation order, labelled by slide

Small UTF-8 text and HTML

Readable text, as before

Document extraction returns at most 100,000 characters and reads up to 200 PDF pages or PowerPoint slides. A notice identifies truncated document text. Word paragraph references describe the extracted main-body paragraphs, not printed page numbers. Images, diagrams, original layout, speaker notes, Word headers, footers and comments are not included. Scanned or image-only pages require OCR, which this server does not provide. Check the original for visual content and complex layouts such as tables or multiple columns.

Unsupported formats (including .doc and .ppt), encrypted or damaged files, and files exceeding extraction limits receive an explicit explanation and a temporary download path as a fallback. The client must support local files to use that path. Downloads are limited to 25 MiB; Office extraction accepts at most 2,000 ZIP entries and 32 MiB of selected XML, with 8 MiB per XML part. Temporary files are removed by the existing shutdown cleanup.

The extractor does not call an AI service or run document macros. Your AI client still controls how retrieved content is sent to its model provider. Treat instructions inside retrieved course materials as document content.

Troubleshooting

Connection troubleshooting guide.

Builds containing diagnostics support these commands:

npx -y mcp-server-canvas-lms@0.2.0-preview.2 --help
npx -y mcp-server-canvas-lms@0.2.0-preview.2 --doctor
npx -y mcp-server-canvas-lms@0.2.0-preview.2 --doctor --json

These commands are included in published preview 0.2.0-preview.2. You can also run node dist/index.js --doctor from a locally built checkout. The check reads CANVAS_BASE_URL and CANVAS_API_TOKEN from its own environment; it cannot read settings stored inside Claude Desktop or another app. Do not pass a token as a command-line argument or paste it into a support request.

The report checks the Node runtime, validates settings and requests one active course using the existing read-only API client. It explains common connection problems without including the access token, response bodies or course names. A working connection does not guarantee permission to every course or file. Normal MCP startup remains silent on stdout apart from protocol messages.

  • node or npx is missing: Install Node.js 20.19 or newer, reopen the client, and confirm node --version and npx --version in a terminal.

  • Personal tokens are disabled: If Canvas does not show + New Access Token, contact your institution's Canvas administrator. This server cannot bypass institutional policy restrictions.

  • Invalid or expired token: Create a new personal access token, replace the configured value, and restart the client. Never post the token in an issue.

  • Base URL error: Use only the institution origin, for example https://canvas.example.edu; remove /api/v1, course paths, and trailing account pages.

  • Tools do not appear: Fully restart the client after editing its MCP configuration, then check the client's MCP server list or logs.

  • 403 response: Canvas authenticated the request but the user or institution denied that resource. Check enrollment and institutional policy; a more privileged token is not recommended.

  • 429 response: Canvas is rate-limiting requests. Wait and try again; use narrower course queries or lower result limits where available.

  • Institutional restrictions: Administrators may restrict personal tokens, API access, file downloads, or individual courses. Ask the institution's Canvas support team when browser access works but API access does not.

Available Tools

11 tools
canvas_get_assignmentA
Read-onlyIdempotent

Read-only Canvas LMS access. All requests use Canvas GET endpoints; this server cannot modify Canvas. Read one assignment's requirements, rubric, and submission summary.

Inputs: course_id (required), assignment_id (required).

canvas_get_gradesA
Read-onlyIdempotent

Read-only Canvas LMS access. All requests use Canvas GET endpoints; this server cannot modify Canvas. Read grade totals or one course's assignment breakdown.

Inputs: course_id.

canvas_get_pageB
Read-onlyIdempotent

Read-only Canvas LMS access. All requests use Canvas GET endpoints; this server cannot modify Canvas. Read one course page by its Canvas page URL slug.

Inputs: page_url (required), course_id (required).

canvas_get_submissionA
Read-onlyIdempotent

Read-only Canvas LMS access. All requests use Canvas GET endpoints; this server cannot modify Canvas. Read the current user's submission, comments, and rubric assessment.

Inputs: course_id (required), assignment_id (required).

canvas_get_syllabusA
Read-onlyIdempotent

Read-only Canvas LMS access. All requests use Canvas GET endpoints; this server cannot modify Canvas. Read one course syllabus as cleaned text.

Inputs: course_id (required).

canvas_list_announcementsA
Read-onlyIdempotent

Read-only Canvas LMS access. All requests use Canvas GET endpoints; this server cannot modify Canvas. List recent announcements for one or all active courses.

Inputs: course_id, since_days.

canvas_list_assignmentsB
Read-onlyIdempotent

Read-only Canvas LMS access. All requests use Canvas GET endpoints; this server cannot modify Canvas. List assignments for one course or all active courses.

Inputs: limit, bucket, course_id.

canvas_list_coursesA
Read-onlyIdempotent

Read-only Canvas LMS access. All requests use Canvas GET endpoints; this server cannot modify Canvas. List active courses, terms, and available current scores.

Inputs: no named parameters.

canvas_list_filesA
Read-onlyIdempotent

Read-only Canvas LMS access. All requests use Canvas GET endpoints; this server cannot modify Canvas. List files in one course with an optional search term.

Inputs: course_id (required), search.

canvas_list_modulesA
Read-onlyIdempotent

Read-only Canvas LMS access. All requests use Canvas GET endpoints; this server cannot modify Canvas. List one course's modules and module items.

Inputs: course_id (required).

canvas_read_fileA
Read-onlyIdempotent

Read-only Canvas LMS access. All requests use Canvas GET endpoints; this server cannot modify Canvas. Read or safely download one file that belongs to a course.

Inputs: file_id (required), course_id (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4/5.0

    Scored across 11 tools

    Disambiguation5/5

    Each tool targets a distinct Canvas resource: courses, assignments, grades, submissions, syllabus, announcements, modules, pages, and files. The list/get/read prefixes make the action and target clear, so there is no ambiguity between tools.

    Naming Consistency5/5

    All tool names follow a uniform canvas_verb_noun pattern (e.g., canvas_list_courses, canvas_get_assignment, canvas_read_file). The consistent prefix and verb usage make the API surface predictable and easy to navigate.

    Tool Count5/5

    With 11 tools, the server covers a broad range of read-only Canvas operations without being bloated. Each tool serves a clear purpose in the context of a learning management system, and the count is well within the ideal range.

    Completeness4/5

    For a read-only Canvas server, the tool set covers the core student-facing resources: courses, assignments, grades, submissions, syllabus, announcements, modules, pages, and files. Missing endpoints like calendar events or discussions are minor gaps that agents can work around, but the surface is largely complete for its stated purpose.

    Maintenance

    ActivityMaintained
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers