Skip to main content
Glama
zwanner

Canvas LMS MCP Server

by zwanner

Canvas LMS MCP Server

Ein Model Context Protocol-Server, der einem MCP-Client (Claude Desktop, Claude Code oder allem anderen, das MCP spricht) schreibgeschützten Zugriff auf dein Canvas LMS-Konto gewährt.

Er beantwortet zwei Fragen:

  • „Was belege ich und wie stehe ich?" – aktive Kurse mit aktuellen Noten.

  • „Was muss ich noch abgeben und wann ist es fällig?" – offene Aufgaben mit Fälligkeitsterminen.

Die Kommunikation nutzt den standardmäßigen stdio-Transport, der Client startet den Server also als Unterprozess. Auf stdout wird außer MCP-Datenverkehr nichts geschrieben.

Voraussetzungen

  • Node.js 18.17 oder neuer (der Server nutzt das eingebaute fetch)

  • Ein persönlicher Canvas-Zugriffstoken

Related MCP server: Canvas MCP Server

Installation

cd canvas-mcp-server
npm install

Konfiguration

Beide Variablen sind erforderlich; der Server beendet sich mit einer klaren Meldung, wenn eine fehlt.

Variable

Beschreibung

Beispiel

CANVAS_API_URL

Die Wurzel deiner Canvas-Instanz. Ein abschließendes / oder /api/v1 ist in Ordnung – es wird normalisiert.

https://asu.instructure.com

CANVAS_ACCESS_TOKEN

Ein persönlicher Canvas-Zugriffstoken.

7~AbCdEf...

Einen Canvas-Zugriffstoken erhalten

  1. Melde dich bei Canvas an.

  2. Gehe zu Konto → Einstellungen.

  3. Klicke unter Zugelassene Integrationen auf + Neuer Zugriffstoken.

  4. Gib einen Zweck und (optional) ein Ablaufdatum an und klicke dann auf Token generieren.

  5. Kopiere den Token sofort – Canvas zeigt ihn nur einmal an.

Der Token trägt deine vollen Canvas-Berechtigungen. Halte ihn aus der Versionsverwaltung heraus und widerrufe ihn auf derselben Einstellungsseite, falls er jemals durchsickert.

Einen Client verbinden

Füge den Server zu deiner MCP-Client-Konfiguration hinzu und verweise dabei auf den absoluten Pfad von src/index.js:

{
  "mcpServers": {
    "canvas": {
      "command": "node",
      "args": ["/absolute/path/to/canvas-mcp-server/src/index.js"],
      "env": {
        "CANVAS_API_URL": "https://asu.instructure.com",
        "CANVAS_ACCESS_TOKEN": "your-token-here"
      }
    }
  }
}
  • Claude Desktopclaude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\).

  • Claude Codeclaude mcp add canvas --env CANVAS_API_URL=... --env CANVAS_ACCESS_TOKEN=... -- node /absoluter/pfad/zu/canvas-mcp-server/src/index.js

Starte den Client nach dem Bearbeiten der Konfiguration neu.

Tools

list_courses_and_grades

Jeder Kurs, in dem du als Student aktiv eingeschrieben bist, mit seiner aktuellen Note.

Parameter

Typ

Standard

Beschreibung

include_all_terms

boolean

false

Auch aktive Einschreibungen aus bereits beendeten Semestern einbeziehen.

Canvas meldet Noten doppelt, wenn deine Einrichtung Notenperioden verwendet: einmal für die laufende Periode und einmal für den gesamten Kurs. Das Feld grades.scope gibt an, welche du gerade betrachtest:

  • current_grading_period – die Punktzahl deckt die laufende Notenperiode ab, und course_total_score / course_total_grade tragen die Gesamtkurszahlen.

  • course_total – die Einrichtung verwendet keine Notenperioden, die Punktzahl ist also die Kursgesamtpunktzahl.

  • unavailable – Canvas hat keine Einschreibung mit Notendaten zurückgegeben.

Innerhalb beider Bereiche ignoriert current_* noch nicht bewertete Arbeit, während final_* unbewertete Arbeit als Null zählt.

{
  "courses": [
    {
      "id": "101",
      "name": "Full Stack Web Development",
      "course_code": "GIT-411",
      "term": "Fall 2026",
      "term_start": "2026-08-20T00:00:00Z",
      "term_end": "2026-12-18T00:00:00Z",
      "enrollment_state": "active",
      "grades": {
        "current_score": 88.0,
        "current_grade": "B+",
        "final_score": 80.5,
        "final_grade": "B-",
        "scope": "current_grading_period",
        "grading_period_title": "Fall Term",
        "course_total_score": 91.4,
        "course_total_grade": "A-"
      },
      "html_url": "https://asu.instructure.com/courses/101"
    }
  ],
  "course_count": 1,
  "retrieved_at": "2026-09-01T12:00:00.000Z"
}

list_upcoming_assignments

Aufgaben in deinen aktiven Kursen, die noch ausstehen, sortiert nach Fälligkeitsdatum, zuerst die frühesten.

Parameter

Typ

Standard

Beschreibung

days_ahead

integer 1–365, oder null

14

Wie weit voraus geschaut werden soll. null entfernt die Obergrenze.

include_overdue

boolean

true

Überfällige, nie abgegebene Arbeit einbeziehen.

include_undated

boolean

false

Ausstehende Arbeit ohne Fälligkeitsdatum einbeziehen.

course_ids

string[]

alle aktiven Kurse

Auf bestimmte Canvas-Kurs-IDs beschränken.

Eine Aufgabe gilt als ausstehend, wenn sie veröffentlicht, bewertbar und nicht eingereicht, bewertet oder entschuldigt ist. Konkret werden diese herausgefiltert:

  • alles mit einem Einreichungszeitstempel

  • Einreichungen im Zustand submitted, pending_review oder graded

  • entschuldigte Aufgaben

  • Aufgaben, die bereits eine Punktzahl oder Note tragen (manuelle oder Papier-Eintragung)

  • not_graded-Aufgaben (Anwesenheitsplatzhalter und Ähnliches)

  • unveröffentlichte Aufgaben

{
  "assignments": [
    {
      "id": "9004",
      "name": "Missed lab writeup",
      "course_id": "101",
      "course_name": "Full Stack Web Development",
      "due_at": "2026-08-28T06:59:00.000Z",
      "days_until_due": -4.2,
      "overdue": true,
      "points_possible": 25,
      "submission_types": ["online_upload"],
      "submission_state": "unsubmitted",
      "missing": true,
      "locked": false,
      "unlock_at": null,
      "lock_at": null,
      "html_url": "https://asu.instructure.com/courses/101/assignments/9004"
    }
  ],
  "assignment_count": 1,
  "courses_checked": 2,
  "window": {
    "from": "2026-09-01T12:00:00.000Z",
    "to": "2026-09-15T12:00:00.000Z",
    "include_overdue": true,
    "include_undated": false
  },
  "errors": [],
  "retrieved_at": "2026-09-01T12:00:00.000Z"
}

Wenn ein Kurs nicht gelesen werden kann – abgeschlossen, eingeschränkt oder anderweitig fehlerhaft – wird er in errors aufgelistet und die übrigen Kurse liefern weiterhin Ergebnisse.

Hinweise zum Verhalten

  • Paginierung. Canvas paginiert jede Sammlung über den Link-Header. Der Client folgt rel="next" bei 100 Datensätzen pro Seite, begrenzt auf 20 Seiten pro Endpunkt, damit eine fehlerhafte Antwort nicht in einer Endlosschleife enden kann.

  • Nebenläufigkeit. Aufgaben werden von höchstens 5 Kursen gleichzeitig abgerufen, um die Canvas-Ratenlimits nicht zu überschreiten.

  • Aktuelles Semester. Standardmäßig werden nur Kurse zurückgegeben, deren Semester nicht beendet ist. Das Standard-Semester von Canvas hat kein Enddatum und ist immer enthalten.

  • Fehler. Canvas-Fehler werden als MCP-Tool-Fehler mit dem Statuscode und der Canvas-eigenen Meldung zurückgegeben, mit einem Hinweis für die häufigen Fälle (401 → falscher Token, 404 → falsche URL).

  • Schreibgeschützt. Beide Tools sind mit readOnlyHint annotiert. Der Server sendet nur GET-Anfragen und ändert niemals deine Canvas-Daten.

Entwicklung

npm test    # 36 tests: API client, grade logic, filtering, and an end-to-end MCP round trip

Die Suite verwendet einen fetch-Ersatz mit aufgezeichneten Canvas-Payloads, sodass kein Netzwerk oder echter Token benötigt wird. Alle Fixture-Daten sind relativ zum Zeitpunkt der Testausführung.

src/
  index.js        MCP server: tool definitions, schemas, stdio wiring
  canvas.js       Canvas REST client: auth, pagination, error mapping
  courses.js      Active-course and grade normalization
  assignments.js  Outstanding-assignment filtering and due-date windows

Lizenz

MIT

Install Server
F
license - not found
A
quality
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

View all MCP Connectors

Latest Blog Posts

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/zwanner/canvas-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server