Skip to main content
Glama

[!IMPORTANT] Dieses Projekt versucht nicht, die von D2L oder SMU auferlegten Authentifizierungs- und Zugriffsbeschränkungen zu umgehen oder zu unterlaufen. Es nutzt die D2L-API direkt, nachdem eine ordnungsgemäße Authentifizierung über Chrome durchgeführt wurde. Dieses Projekt steht in keiner Verbindung zu SMU oder D2L. Falls es Probleme gibt, kontaktiere mich direkt oder erstelle ein Issue.

SMU eLearn MCP

Ein lokaler, schreibgeschützter Model-Context-Protocol-Server für die D2L-Brightspace-Instanz der SMU. Er stellt Kurse, angeheftete Kurse, wöchentliche Module, Kursdokumente, aktuelle Uploads/Änderungen, Inhaltsuche, Metadaten und Dateidownloads bereit.

Es handelt sich um einen lokalen stdio-Dienst für einen einzelnen Benutzer. Er ist nicht dafür vorgesehen, als Netzwerkserver bereitgestellt oder zwischen Benutzern geteilt zu werden.

Am besten lässt sich dieser MCP über Codex oder Claude nutzen; für diese habe ich ihn als installierbare Plugins im Ordner plugin-package/ verpackt.

Funktionen

MCP-Tool

Zweck

elearn_authenticate

Chrome für SMU-SSO/MFA öffnen, eine Minute warten, automatisch verifizieren und die Sitzung speichern.

elearn_auth_status

Überprüfen, ob die lokal gespeicherte Browsersitzung auf die eLearn-API zugreifen kann.

elearn_list_courses

Zugängliche Kurse mit IDs, Codes, Daten, Rolle und Anheftstatus auflisten/durchsuchen.

elearn_list_pinned_courses

Kurse zurückgeben, deren maßgebliches D2L-PinDate vorhanden ist.

elearn_list_course_weeks

Verschachtelte Week N-Module und deren Dokumentanzahl ermitteln.

elearn_get_week_documents

Alle Dokumente für einen Kurs und eine akademische Woche/ein Modul abrufen.

elearn_get_recent_documents

Dokumente abrufen, die innerhalb einer Kalenderwoche in angehefteten/allen/ausgewählten Kursen hochgeladen oder geändert wurden.

elearn_get_course_documents

Jedes Dokument in einem Kurs rekursiv auflisten.

elearn_search_content

Dokumenttitel und Modulpfade kursübergreifend durchsuchen.

elearn_get_document_metadata

Die Metadaten eines einzelnen D2L-Content-Topics abrufen.

elearn_download_document

Eine Topic-Datei lokal herunterladen, ohne eine vorhandene Datei zu überschreiben.

Die Implementierung verwendet die dokumentierten schreibgeschützten API-Routen von D2L. Sie scrapet die sichtbare Startseite nicht und ändert weder Kurse, Anheftstatus, Abgaben, Noten, Nachrichten noch Inhalte.

Related MCP server: D2L Brightspace MCP Server

Voraussetzungen

  • Node.js 22 oder neuer

  • Google Chrome

  • Ein SMU-Konto mit eLearn-Zugang

Installation und Authentifizierung

cd elearn-mcp
npm ci
npm run auth

npm run auth öffnet ein dediziertes Chrome-Profil. Schließe den normalen SMU-Microsoft-Anmeldevorgang und den MFA-Ablauf ab. Nach einer Minute prüft der Befehl automatisch die eLearn-API; falls die Anmeldung noch nicht abgeschlossen ist, wiederholt er die Prüfung alle 15 Sekunden bis zu fünf Minuten lang. Bei Erfolg speichert er den Playwright-Browsersitzungsstatus, setzt die Berechtigungen der Statusdatei auf Nur-Besitzer (0600) und schließt Chrome. Es ist keine Eingabe im Terminal erforderlich.

Das Profil liegt standardmäßig unter ~/.elearn-mcp/browser-profile, der gespeicherte Status unter ~/.elearn-mcp/storage-state.json. Der Status enthält Sitzungscookies und kann Web-Speicher enthalten, der auf die jeweilige Herkunft (Origin) beschränkt ist. Behandle daher beide Speicherorte als Geheimnisse: Committe sie nicht, synchronisiere sie nicht und teile sie nicht. Der MCP fragt niemals nach deinem Passwort oder deiner MFA-Antwort und speichert beides nicht.

Überprüfe die Typsicherheit, die Unit-Tests und den sauberen Produktions-Build:

npm run check

Führe nach der Authentifizierung den vollständigen Live-MCP-Test aus:

npm run test:full

Der vollständige Durchlauf führt Typprüfung und Unit-Tests aus, erstellt den Produktionsserver, verbindet sich über MCP stdio, validiert alle elf Tools anhand von Live-eLearn-Daten, lädt eine echte Datei in ein isoliertes temporäres Verzeichnis des Betriebssystems herunter, verifiziert die Datei und entfernt das temporäre Verzeichnis in einer finally-Bereinigung. Er übermittelt niemals Daten an eLearn und ändert auch keine.

MCP-Client-Konfiguration

Erstelle zuerst das Projekt und konfiguriere dann deinen MCP-Client so, dass er den kompilierten stdio-Server startet:

{
  "mcpServers": {
    "smu-elearn": {
      "command": "node",
      "args": [
        "/absolute/path/to/elearn-mcp/dist/src/server.js"
      ],
      "env": {
        "ELEARN_BASE_URL": "https://elearn.smu.edu.sg",
        "ELEARN_LP_VERSION": "1.49",
        "ELEARN_LE_VERSION": "1.49",
        "ELEARN_COURSE_ORG_UNIT_TYPE_ID": "3"
      }
    }
  }
}

Der genaue Speicherort dieser JSON-Datei hängt vom MCP-Client ab. Starte den Client nach einer Änderung seiner Konfiguration neu.

Produktionslaufzeitumgebung

Der Server wird aus dem gesperrten Abhängigkeitssatz erstellt. Die Tests werden während der Verifizierung einer Typprüfung unterzogen und ausgeführt, sind jedoch von dist/ und dem verteilbaren Paket ausgeschlossen.

Für eine minimale lokale Laufzeitumgebung:

npm ci
npm run check
npm prune --omit=dev
npm start

Nachdem du die Entwicklungsabhängigkeiten entfernt hast, führe npm ci erneut aus, bevor du neu erstellst oder Unit-Tests ausführst. Der enthaltene GitHub-Actions-Workflow führt dieselbe gesperrte Installation und Verifizierung unter Node.js 22 durch. Der authentifizierte Live-Test bleibt außerhalb von CI, da er ein interaktives SMU-Konto und MFA erfordert.

Erstellen der Codex- und Claude-Plugins

Die TypeScript-Dateien unter src/ sind die einzige maßgebliche Quelle für die MCP-Implementierung. Codex und Claude Code verwenden getrennte Plugin-Manifeste und MCP-Startmetadaten, erhalten aber beide dieselbe generierte Laufzeitumgebung:

plugin-package/
├── codex/smu-elearn/
│   ├── .codex-plugin/plugin.json
│   ├── .mcp.json
│   └── mcp/
└── claude/smu-elearn/
    ├── .claude-plugin/plugin.json
    ├── .mcp.json
    └── mcp/

Erstelle mit folgendem Befehl beide neuen, eigenständigen Plugin-Pakete:

npm run build:plugins

npm run build:plugin bleibt ein Alias für denselben Befehl. Der Build kompiliert src/ einmal, leitet die exakten Versionen der Produktionsabhängigkeiten aus der Lockdatei im Stammverzeichnis ab, installiert die Produktionsabhängigkeiten einmal in einem isolierten Staging-Verzeichnis und ersetzt jedes mcp/-Verzeichnis erst, nachdem die vollständige Staging-Kopie verifiziert wurde. Bearbeite keine der generierten Laufzeitumgebungen von Hand.

Für die Entwicklung mit Claude Code: Validiere und lade das Paket direkt:

claude plugin validate ./plugin-package/claude/smu-elearn --strict
claude --plugin-dir ./plugin-package/claude/smu-elearn

Führe in Claude Code /mcp aus, um den gebündelten Server zu prüfen. Für eine dauerhafte lokale Installation erstelle die Pakete und füge anschließend den Marketplace dieses Repositorys hinzu:

claude plugin marketplace add /absolute/path/to/elearn-mcp
claude plugin install smu-elearn@smu-local --scope user

Der Marketplace-Katalog wird unter .claude-plugin/marketplace.json gespeichert. Claude kopiert das vollständige Paket in seinen Plugin-Cache; die generierte mcp/-Laufzeitumgebung muss daher vor der Installation vorhanden sein. Verwende während der Entwicklung --plugin-dir, um den Cache zu umgehen und das Paket direkt an Ort und Stelle zu laden.

Konfiguration

Umgebungsvariable

Standard

Bedeutung

ELEARN_BASE_URL

https://elearn.smu.edu.sg

Origin der eLearn-Instanz.

ELEARN_LP_VERSION

1.49

API-Vertrag der D2L Learning Platform.

ELEARN_LE_VERSION

1.49

API-Vertrag der D2L Learning Environment.

ELEARN_COURSE_ORG_UNIT_TYPE_ID

3

Organisationseinheitstyp für D2L Course Offering.

ELEARN_PROFILE_DIR

~/.elearn-mcp/browser-profile

Dediziertes Chrome-Authentifizierungsprofil.

ELEARN_AUTH_STATE_FILE

~/.elearn-mcp/storage-state.json

Nur für den Besitzer zugänglicher Playwright-Sitzungsstatus, der vom MCP verwendet wird.

ELEARN_AUTH_INITIAL_WAIT_SECONDS

60

Zeit bis zur ersten automatischen Anmeldeprüfung.

ELEARN_AUTH_POLL_INTERVAL_SECONDS

15

Wiederholungsintervall, solange SSO/MFA noch nicht abgeschlossen ist.

ELEARN_AUTH_TIMEOUT_SECONDS

300

Maximale Dauer der interaktiven Authentifizierung.

ELEARN_DOWNLOAD_DIR

./downloads

Standardausgabeverzeichnis für heruntergeladene Dateien.

ELEARN_HEADLESS

true

Den authentifizierten Chrome-Kontext ohne sichtbares Fenster ausführen.

Wie Wochen interpretiert werden

  • elearn_get_week_documents interpretiert week als das akademische Inhaltsmodul des Kurses, z. B. Week 3. Es bezieht rekursiv Dateien in verschachtelten Untermodulen ein.

  • elearn_get_recent_documents interpretiert eine Woche als Kalenderdatumsbereich und filtert nach dem D2L-LastModifiedDate des jeweiligen Topics. Wenn since und until weggelassen werden, verwendet es den aktuellen lokalen Montag bis Sonntag.

Diese Unterscheidung ist beabsichtigt: Eine Datei, die in „Week 3“ abgelegt ist, kann in einer anderen Kalenderwoche hochgeladen worden sein.

Authentifizierungslebenszyklus

Das MCP-Tool elearn_authenticate und der Befehl npm run auth starten das dedizierte Chrome-Profil für benutzergesteuertes SSO und MFA. Sie warten eine Minute vor der ersten automatischen Prüfung, pollen bei Bedarf kurz, verifizieren die D2L-API und schreiben eine Playwright-Statusdatei mit der Berechtigung 0600. Der Server startet einen separaten Headless-Chrome-Kontext mit diesem Status und sendet darüber Same-Origin-API-Anfragen. Das erhält die Kontrolle von SMU und Microsoft über die interaktive Authentifizierung und erlaubt gleichzeitig einen Neustart von MCP-Prozessen. Wenn die institutionelle Sitzung abläuft, rufe elearn_authenticate auf oder führe npm run auth erneut aus.

Siehe SECURITY.md für die Grenzen der lokalen Bereitstellung, Hinweise zum Umgang mit Anmeldedaten und Veröffentlichungsprüfungen.

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

  • Multi-engine scholarly research server for search, traversal, full text, and reading lists.

  • Search, browse, and read your Dropbox files. Find documents by name or content, list folders, and…

  • Federated search of books and papers, BibTeX/RIS citations, open-access retrieval and reading.

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/tancysam/elearn-mcp'

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