Skip to main content
Glama

canvas-student-mcp

Der Canvas LMS MCP-Server, der auch funktioniert, wenn Ihre Schule API-Token deaktiviert.

CI License: MIT Node >= 18 TypeScript

Gibt Claude (oder jedem MCP-Client) Live-, schreibgeschützten Zugriff auf Ihr Canvas-Konto: Kurse, Syllabus, Aufgaben mit Abgabestatus, Noten, Ankündigungen, Module, Seiten, Dateien, Diskussionen, Quizze, To-dos und Kalender. Kombinieren Sie es mit einem Notion-Connector und archivieren Sie einen gesamten Kurs mit einem einzigen Prompt.

Warum ein weiterer Canvas MCP?

Es gibt bereits mehrere gute Canvas MCP-Server — vishalsachdev/canvas-mcp, DMontgomery40/mcp-canvas-lms, mtgibbs/canvas-lms-mcp und andere. Alle erfordern ein persönliches API-Token.

Hier ist das Problem: Viele Universitäten deaktivieren die Selbstbedienung-Token-Generierung für Studierende. Öffnen Sie Konto → Einstellungen und es gibt einfach keinen + Neues Zugriffstoken-Button. An diesen Schulen ist jeder token-basierte Server eine Sackgasse.

Dieser Server löst das mit Session-Cookie-Authentifizierung: Melden Sie sich in Ihrem Browser bei Canvas an, kopieren Sie einmal das Session-Cookie, und Sie sind verbunden. Die Canvas-Weboberfläche spricht mit demselben /api/v1 REST API mit diesem Cookie, sodass keine Admin-Richtlinie es blockieren kann, ohne Canvas selbst zu beschädigen.

Was das unter der Haube erfordert (und was die token-basierten Server nicht tun):

  • XSSI-Guard-Entfernung — Cookie-authentifizierte Canvas-Antworten sind mit while(1); vorangestellt, was naive JSON-Parsing zerstört

  • Login-Weiterleitungserkennung — Abgelaufene Sitzungen leiten zur Anmeldeseite weiter, anstatt 401 zurückzugeben; der Server fängt Weiterleitungen und Nicht-JSON-Bodies ab und sagt Ihnen genau, wie Sie aktualisieren sollen, anstatt kryptisch zu scheitern

  • Berechtigte Dateidownloads — Token-Sitzungen erhalten einen verifier=-Parameter, der Datei-URLs selbstauthentifizierend macht; Cookie-Sitzungen nicht, daher müssen Downloads das Session-Cookie mitführen (Canvas antwortet sonst mit 500). Weiterleitungen werden manuell verfolgt, sodass Anmeldeinformationen niemals an ein CDN weitergegeben werden

  • Ablaufbewusste Fehler — Jeder Fehlermodus erklärt die Behebung in der Fehlermeldung selbst

Designprinzipien, die es über die Authentifizierung hinaus unterscheiden:

  • Schreibgeschützt von Grund auf. Jedes Tool ist ein GET. Der Server kann physisch keine Aufgaben einreichen, Diskussionen posten oder irgendetwas ändern – sicher für einen autonomen Agenten.

  • Kontexteffiziente Antworten. Canvas-API-Payloads sind enorm; jedes Tool kürzt auf die Felder, die ein LLM tatsächlich benötigt, konvertiert HTML in sauberen Text (unter Beibehaltung von Link-URLs) und begrenzt die Paginierung mit expliziten Kürzungshinweisen.

  • Klein und überprüfbar. Strenges TypeScript, drei Laufzeitabhängigkeiten (das MCP SDK, zod und unpdf für PDF-Text). Sie können das Ganze lesen, bevor Sie es Ihrem Schulkonto anvertrauen.

Token-Authentifizierung wird weiterhin unterstützt, wenn Ihre Schule es erlaubt – das Cookie ist der Fallback, nicht der einzige Weg.

Related MCP server: canvas-parent-mcp

Werkzeuge (29)

Werkzeug

Beschreibung

canvas_get_profile

Anmeldeinformationen überprüfen / Wer bin ich

canvas_list_courses

Kurse mit aktueller Note (aktiv / abgeschlossen / alle)

canvas_get_course

Kursdetails + vollständiger Syllabus als Text

canvas_list_assignments

Aufgaben nach Fälligkeitsdatum mit Ihrem Abgabestatus; Bucket-Filter (bevorstehend, überfällig, …)

canvas_get_assignment

Vollständige Beschreibung, Bewertungsraster, Ihre Abgabe + Punktzahl

canvas_get_grades

Notenübersicht über alle Kurse oder Aufschlüsselung pro Aufgabe für einen Kurs

canvas_list_announcements

Ankündigungen in aktiven Kursen oder einem Kurs / Datumsbereich

canvas_list_modules

Kursinhaltsgliederung mit Elementen

canvas_list_pages / canvas_get_page

Kurs-Wiki-Seiten, vollständiger Text

canvas_list_files / canvas_get_file_link

Kursdateien + temporäre Download-URLs

canvas_list_discussions / canvas_get_discussion

Diskussionsthemen und vollständige Threads

canvas_list_quizzes

Quizze mit Fälligkeitsdaten, Zeitlimits, Versuche

canvas_list_todo / canvas_list_upcoming

Ihre To-do-Liste und bevorstehende Fristen

canvas_list_calendar_events

Ereignisse oder Aufgabenfristen in einem Datumsbereich

canvas_list_inbox / canvas_get_conversation

Canvas-Posteingang-Threads lesen — ohne sie als gelesen zu markieren

canvas_get_feedback

Bewerterkommentare und Bewertungsraster-Bewertungen zu Ihren Abgaben

canvas_grade_breakdown

Note nach Aufgabengruppe + Was-wäre-wenn-Rechner: "Was brauche ich in der Abschlussprüfung für eine Eins?"

canvas_list_planner

Planer-Feed mit Neuaktivitätsmarkierungen und Abgabestatus

canvas_read_file

Text aus Kursdateien extrahieren — PDF, Word, PowerPoint, Excel, HTML, Klartext

canvas_read_syllabus

Syllabus als Text, egal ob er in Canvas eingegeben oder als angehängte PDF/Word-Datei hochgeladen wurde

canvas_list_groups

Ihre Gruppenmitgliedschaften

canvas_get_module_progress

Modulabschlussstatus und was jedes Element noch erfordert

canvas_list_peer_reviews

Ihnen zugewiesene Peer-Reviews

canvas_export_course

Einmaliger Markdown-Export eines gesamten Kurses — für Notion-Archivierung entwickelt

canvas_auth_status

Verbindung diagnostizieren: welche Anmeldeinformationen, wo gespeichert, noch gültig?

Drei davon sind hervorzuheben.

canvas_read_file verwandelt Kursmaterialien in lesbaren Text, was bewirkt, dass "Quiz mich über die Folien dieser Woche" oder "Was ist die Richtlinie für verspätete Abgaben" tatsächlich funktionieren. PDFs werden durch unpdf verarbeitet; Office-Formate werden im Repository selbst behandelt – .docx, .pptx und .xlsx sind ZIP-Container von XML, sodass ein kleiner ZIP-Reader über Node's integriertes zlib alle drei ohne Abhängigkeit abdeckt. canvas_read_syllabus baut darauf auf: Es erkennt, wenn ein Syllabus nur ein Dateilink ist, und liest stattdessen den Anhang, was der häufige Fall ist (2 der 3 getesteten Kurse). canvas_grade_breakdown implementiert beide Bewertungsmodelle von Canvas (gewichtet nach Gruppe und Gesamtpunktzahl), überprüft seine Arithmetik mit der von Canvas selbst gemeldeten Punktzahl und sagt Ihnen, wann Drop-Regeln oder nicht veröffentlichte Aufgabengruppen eine Prognose unzuverlässig machen – anstatt leise eine selbstbewusste falsche Zahl zurückzugeben. canvas_get_conversation übergibt auto_mark_as_read=false, sodass ein Agent, der Ihren Posteingang liest, Ihre Nachrichten nicht stillschweigend als gelesen markiert; dieses Verhalten wird an einem live ungelesenen Thread überprüft, nicht nur angenommen.

Siehe ROADMAP.md für das, was als nächstes geplant ist und warum Schreibvorgänge bewusst außerhalb des Rahmens liegen.

Schnellstart

Keine Installation erforderlich — npx holt es bei Bedarf:

npx canvas-student-mcp

Oder aus dem Quellcode:

git clone https://github.com/xmike04/canvas-student-mcp.git
cd canvas-student-mcp
npm install && npm run build

Anmeldeinformationen abrufen

Option A — API-Token (falls Ihre Schule es erlaubt): Canvas → Konto → Einstellungen → Genehmigte Integrationen → + Neues Zugriffstoken.

Option B — Session-Cookie (für eingeschränkte Schulen):

  1. Melden Sie sich in einem beliebigen Browser bei Canvas Ihrer Schule an.

  2. DevTools (Cmd/Ctrl+Shift+I) → Netzwerk-Tab → aktualisieren

  3. Klicken Sie auf eine beliebige Anfrage an Ihre Canvas-Domain → Anfrage-Header → kopieren Sie den vollständigen cookie:-Wert (oder nur das canvas_session=...-Paar — dieses eine Cookie ist ausreichend)

Beide Anmeldeinformationen gewähren Lesezugriff auf Ihr Canvas-Konto. Behandeln Sie es wie ein Passwort.

Anmeldeinformationen speichern (macOS: Schlüsselbund verwenden)

MCP-Client-Konfigurationen sind Klartext-JSON. Auf macOS können Sie die Anmeldeinformationen vollständig daraus heraushalten:

security add-generic-password -s canvas-student-mcp -a cookie -w 'canvas_session=PASTE_VALUE_HERE' -U

Verwenden Sie -a token anstelle von -a cookie für ein API-Token. Der Server überprüft zuerst Umgebungsvariablen, dann den Schlüsselbund, sodass dies optional ist und nichts kaputt geht, wenn Sie es überspringen. CANVAS_NO_KEYCHAIN=1 deaktiviert die Suche.

Bei Claude registrieren

Claude Code — mit den Anmeldeinformationen im Schlüsselbund enthält die Konfiguration überhaupt kein Geheimnis:

claude mcp add canvas --scope user \
  --env CANVAS_BASE_URL=https://yourschool.instructure.com \
  -- npx -y canvas-student-mcp

Anmeldeinformationen inline übergeben anstatt den Schlüsselbund zu verwenden:

claude mcp add canvas --scope user \
  --env 'CANVAS_COOKIE=canvas_session=PASTE_VALUE_HERE' \
  --env CANVAS_BASE_URL=https://yourschool.instructure.com \
  -- npx -y canvas-student-mcp

Claude Desktop (claude_desktop_config.json):

{
  "mcpServers": {
    "canvas": {
      "command": "node",
      "args": ["/absolute/path/to/canvas-student-mcp/dist/index.js"],
      "env": {
        "CANVAS_COOKIE": "canvas_session=PASTE_VALUE_HERE",
        "CANVAS_BASE_URL": "https://yourschool.instructure.com"
      }
    }
  }
}

Verwenden Sie CANVAS_API_TOKEN anstelle von CANVAS_COOKIE für die Token-Authentifizierung (Token gewinnt, wenn beide gesetzt sind). Überprüfen Sie mit: "Überprüfe mein Canvas-Profil."

Wenn das Cookie abläuft (Ihre Browsersitzung endet), teilt Ihnen jedes Tool deutlich mit — kopieren Sie es erneut und aktualisieren Sie die Konfiguration. Wenn "Angemeldet bleiben" aktiviert ist, halten Sitzungen normalerweise Wochen.

Agentenfähigkeiten

Drei gepackte Workflows werden in skills/ ausgeliefert. Kopieren Sie einen davon in ~/.claude/skills/ (oder in das .claude/skills/ Ihres Projekts) und Claude wird sie automatisch verwenden, wenn die Anfrage passt:

Fähigkeit

Beschreibung

canvas-morning-check

Tägliches Briefing: Was fällig ist, neue Ankündigungen, ungelesene Nachrichten, neue Noten

canvas-week-plan

Liest die tatsächlichen Aufgaben und erstellt einen Tag-für-Tag-Plan für die Woche

canvas-grade-check

Notenstand plus Was-wäre-wenn-Antworten, mit den durchgeführten Einschränkungen

cp -R skills/canvas-morning-check ~/.claude/skills/

Dinge, die Sie nach der Verbindung fragen können

  • "Was ist in den nächsten zwei Wochen in all meinen Kursen fällig?"

  • "Was ist meine aktuelle Note in jedem Kurs und welche Aufgaben fehlen mir?"

  • "Fasse die Ankündigungen dieser Woche aus all meinen Kursen zusammen."

  • "Exportiere meinen BIOL 1710-Kurs und archiviere ihn in meinen Notion-Schulordner." (mit einem Notion-Connector)

  • "Lies die Seite 'Woche 3' in meinem Geschichtskurs und frage mich dazu ab."

Architekturnotizen

  • stdio-Transport, zustandslos — ein Prozess pro Clientsitzung, keine Ports, keine Telemetrie, kein Speicher. Daten fließen Canvas → dieser Prozess → Ihr MCP-Client, nirgendwo anders.

  • Auto-Paginierung folgt Canvas Link: rel="next"-Headern, begrenzt auf 5 Seiten × 100 Elemente mit expliziten Kürzungshinweisen, damit der Agentenkontext begrenzt bleibt.

  • HTML → Text-Konvertierung für Syllabi, Beschreibungen, Ankündigungen und Seiten — strukturelle Tags werden zu Zeilenumbrüchen/Aufzählungspunkten, Links werden zu text (url).

  • Zod-Eingabeschemata für jedes Tool; MCP-Annotationen (readOnlyHint) durchgängig deklariert.

Entwicklung

npm run build   # strict TypeScript compile
npm test        # smoke test: MCP handshake, all 30 tools register, error paths

Der Smoke-Test läuft vollständig offline — CI benötigt kein Canvas-Konto und setzt CANVAS_NO_KEYCHAIN=1, sodass keine echten gespeicherten Anmeldedaten in einen Testlauf gelangen können.

Veröffentlichung

Die Veröffentlichung erfolgt über CI (.github/workflows/release.yml), sodass niemand von einem Laptop aus veröffentlicht:

npm version minor && git push --follow-tags

Das Pushen des Tags löst einen Build, die vollständige Testsuite, eine Prüfung des Paketinhalts und eine Sicherung aus, dass der Tag mit package.json übereinstimmt — dann wird mit Provenienz veröffentlicht, die das veröffentlichte Tarball kryptografisch mit dem Commit und dem Workflow verbindet, der es erstellt hat. Die manuelle Ausführung des Workflows über den Reiter "Actions" führt alles außer der Veröffentlichung als Trockentest durch.

Sicherheitsmodell

  • Schreibgeschützt: Jeder Canvas-Aufruf ist ein GET; kein Tool kann in Canvas schreiben. Selbst das Lesen Ihres Posteingangs hinterlässt Nachrichten ungelesen.

  • Anmeldedaten befinden sich in der Umgebungskonfiguration Ihres MCP-Clients oder im macOS-Schlüsselbund — niemals auf der Festplatte in diesem Repository, niemals woanders als an die Canvas-Domäne Ihrer Schule übertragen. Dateidownloads folgen manuell Umleitungen, sodass Anmeldedaten niemals an ein CDN weitergeleitet werden.

  • Nach Belieben austauschen: Melden Sie sich von Canvas ab (oder widerrufen Sie das Token), und die Anmeldedaten sind überall ungültig.

  • canvas_auth_status zeigt Ihnen, welche Anmeldedaten verwendet werden, wo sie gespeichert sind und ob sie noch funktionieren.

Lizenz

MIT

Install Server
A
license - permissive license
A
quality
B
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

  • Read-only MCP server for ClassQuill, a tutoring-business-management platform.

  • Hosted Amazon Seller and Vendor MCP server for Claude, ChatGPT, Cursor, Codex, Gemini, Copilot.

  • MCP server for Argo RPG Platform — connects AI assistants to campaign data via OAuth2

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/xmike04/canvas-student-mcp'

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