smu-elearn
[!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 |
| Chrome für SMU-SSO/MFA öffnen, eine Minute warten, automatisch verifizieren und die Sitzung speichern. |
| Überprüfen, ob die lokal gespeicherte Browsersitzung auf die eLearn-API zugreifen kann. |
| Zugängliche Kurse mit IDs, Codes, Daten, Rolle und Anheftstatus auflisten/durchsuchen. |
| Kurse zurückgeben, deren maßgebliches D2L- |
| Verschachtelte |
| Alle Dokumente für einen Kurs und eine akademische Woche/ein Modul abrufen. |
| Dokumente abrufen, die innerhalb einer Kalenderwoche in angehefteten/allen/ausgewählten Kursen hochgeladen oder geändert wurden. |
| Jedes Dokument in einem Kurs rekursiv auflisten. |
| Dokumenttitel und Modulpfade kursübergreifend durchsuchen. |
| Die Metadaten eines einzelnen D2L-Content-Topics abrufen. |
| 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 authnpm 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 checkFühre nach der Authentifizierung den vollständigen Live-MCP-Test aus:
npm run test:fullDer 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 startNachdem 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:pluginsnpm 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-elearnFü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 userDer 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 |
|
| Origin der eLearn-Instanz. |
|
| API-Vertrag der D2L Learning Platform. |
|
| API-Vertrag der D2L Learning Environment. |
|
| Organisationseinheitstyp für D2L Course Offering. |
|
| Dediziertes Chrome-Authentifizierungsprofil. |
|
| Nur für den Besitzer zugänglicher Playwright-Sitzungsstatus, der vom MCP verwendet wird. |
|
| Zeit bis zur ersten automatischen Anmeldeprüfung. |
|
| Wiederholungsintervall, solange SSO/MFA noch nicht abgeschlossen ist. |
|
| Maximale Dauer der interaktiven Authentifizierung. |
|
| Standardausgabeverzeichnis für heruntergeladene Dateien. |
|
| Den authentifizierten Chrome-Kontext ohne sichtbares Fenster ausführen. |
Wie Wochen interpretiert werden
elearn_get_week_documentsinterpretiertweekals das akademische Inhaltsmodul des Kurses, z. B. Week 3. Es bezieht rekursiv Dateien in verschachtelten Untermodulen ein.elearn_get_recent_documentsinterpretiert eine Woche als Kalenderdatumsbereich und filtert nach dem D2L-LastModifiedDatedes jeweiligen Topics. Wennsinceunduntilweggelassen 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.
Maintenance
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
- AlicenseNot gradedqualityDmaintenanceEnables Purdue University students to access their Brightspace academic data including courses, assignments, and grades through web scraping with Duo Mobile 2FA authentication. Provides programmatic access to student academic information when official API access is restricted.7Apache 2.0
- AlicenseAqualityDmaintenanceEnables AI assistants to interact with D2L Brightspace LMS, providing access to assignments, grades, course content, calendar events, and announcements through automated SSO authentication.122210MIT
- FlicenseAqualityCmaintenanceEnables read-only querying of Moodle as a student, including courses, assignments, grades, forums, and files, using a personal web services token.11
- FlicenseBqualityCmaintenanceEnables browsing and collecting course materials from Brightspace through Chrome DevTools Protocol, allowing snapshotting, downloading media, and automating page navigation.22
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.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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