Jaipuria Moodle Reports MCP
Jaipuria Moodle Reports MCP
Ein fakultätsorientierter, schreibgeschützter Model Context Protocol (MCP)-Server, der die Jaipuria-student-report-system-Daten in natürlicher Sprache abfragbar macht. Verbinden Sie ihn mit einem beliebigen MCP-Host (einem Dashboard, Claude.ai, ChatGPT, Claude CLI) und fragen Sie nach Studentennoten, Anwesenheit, Fächern, Kohortenanalysen, Längsschnitt-Trends, gefährdeten Studenten und Berichtsgenauigkeit – für jeden erfassten Studenten, begrenzt auf die Campus des Aufrufers.
Live: https://moodle-mcp-f6do.onrender.com/mcp · Health: /health · Tools: 27
Repo: github.com/mansigambhir-1313/Moodle-MCP · Owner: Jaipuria AI Labs
Überblick
Die Pipeline in moodle-agent erfasst Moodle-Daten, berechnet Analysen und generiert validierte Studentenberichte in ein Supabase-Projekt. Dieser MCP ist die Leseseite dieses Projekts für Fakultät und Studienprogrammbüro: Er stellt die Rohdaten und die Ausgaben der Pipeline als ~27 strukturierte, automatisch genehmigbare Tools bereit, die ein Host-LLM weiterleitet.
Es ist datenorientiert – die primäre Oberfläche ist das rohe Notenbuch und die Anwesenheit (abfragbar für jeden Studenten, ob Bericht oder nicht); die generierten Berichte und ihre Genauigkeitswerte aus zwei Schemata sind eine sekundäre Ebene. Es ist dauerhaft schreibgeschützt: Kein Tool schreibt, erfasst oder sendet E-Mails.
Design-Abstammung: Die Muster des Rehearsal MCP (begrenzte Caches, Routing-Vertrag-Docstrings, Antwortbudgets, Geheimnis-Entfernung, elegante Degradierung), angepasst von dessen pro-Studenten-RLS-Modell auf ein rollenbasiertes, campusbezogenes Fakultätsmodell.
Wo es passt
Upstream: Das gemeinsame Supabase-Projekt
student-report-system(Tabellenstudents,courses,enrolments,marks,attendance_sessions,student_reports,report_accuracy), geschrieben vonmoodle-agent.Downstream: Jeder MCP-Host – ein Fakultäts-Dashboard, Claude.ai / ChatGPT-Konnektoren, Claude CLI.
Related MCP server: VortexIQ MCP Connector
Was es exklusiv macht
Längsschnitt, nicht nur Momentaufnahme – ein Lauf enthält jedes Trimester (T1–T6). Tools wie
student_trajectoryunddeclining_studentserkennen einen Studenten, der Semester für Semester abrutscht, was eine punktuelle Abfrage nie zeigt.Einzelansichten –
student_360undcohort_pulsegeben einen ganzen Studenten / eine ganze Kohorte in einem Aufruf zurück, bereit für eine Dashboard-Schublade oder einen Startbildschirm.Genauigkeit als erstklassige Daten – jeder generierte Bericht trägt einen Validierungswert aus zwei Schemata (Treue-Panel + Zwei-Runden-LLM-Judge). Fragen Sie „welche Berichte sind markiert und warum?"
Lehr- und Curriculumsignale –
section_compare(A-vs-B-Fairness),assessment_breakdown(Quiz vs. Aufgabe vs. Projekt),subject_difficulty(Curriculums-Druckpunkte).
Tools (27)
Jedes Tool ist nur SELECT, auf den Campus des Aufrufers beschränkt, begrenzt und trägt eine Routing-Docstring mit WAS / WANN VERWENDEN / NICHT VERWENDEN / GIBT ZURÜCK.
Studenten – Rohdaten (primär)
Tool | Was es zurückgibt |
| Liste für einen Campus/Batch (± Sektion), jeder erfasste Student |
| Vollständiger Datensatz eines Studenten – Noten pro Fachkomponente + Anwesenheit |
| Flache, komponentenbezogene Notenbuchzeilen für einen Studenten |
| Anwesenheit pro Fach (anwesend / Sitzungen / %) für einen Studenten |
Fächer – Rohdaten (primär)
Tool | Was es zurückgibt |
| Fächer/Kurse für einen Bereich, mit Trimester, Sektionen, Einschreibung |
| Kohortennoten eines Fachs, Bestehensquote, Anwesenheit, Mittelwerte pro Komponente |
| Sektion-vs-Sektion-Mittelwerte + Streuung (Lehr-/Bewertungssignal) |
| Kohortenleistung nach Bewertungsart (Quiz/Aufgabe/Projekt…) |
| Fächer nach Schwierigkeit sortiert (Bestehensquote + Nullen) |
Einblicke – Längsschnitt & Einzelansichten (Hero)
Tool | Was es zurückgibt |
| Noten-/Anwesenheitstrend eines Studenten über Trimester + Label |
| Ein-Aufruf-Studentenansicht: Perzentil-Rang, Trend, Risikofahnen, Genauigkeit |
| Ein-Aufruf-Kohorten-KPIs: Noten, Anwesenheit, Bestehensquote, gefährdet, Verteilung |
| Automatische Interventionsliste – Gründe + vorgeschlagene Aktion, sortiert |
| Kohortenweite größte Notenabfälle von Semester zu Semester (Frühwarnung) |
Analytik & gefährdete Studenten (primär)
Tool | Was es zurückgibt |
| Kohortennoten-Momentaufnahme – Mittelwert, Bestehensquote, Verteilung, Nullen |
| Kohortenanwesenheit – Mittelwert, Anzahl unter 75% / 65% |
| Höchste Gesamtnoten in einem Bereich |
| Campus-vs-Campus-Mittelwerte für einen Batch |
| Zusammengesetztes Risiko-Ranking (Nullen + Anwesenheit + nicht bestandene Noten) |
| Studenten unter einer Anwesenheitsschwelle |
| Studenten mit einer erfassten Null (am dringendsten) |
Berichte & Genauigkeit (sekundär)
Tool | Was es zurückgibt |
| Genauigkeitswert eines Berichts aus zwei Schemata + Interpretation |
| Kohortengenauigkeit – mittlerer %, verifiziert / Drift / markiert |
| Die Warteschlange für menschliche Überprüfung (validierungsmarkierte Berichte) |
| Der generierte narrative Bericht für einen Studenten |
| Bereit / angehalten / fehlgeschlagen-Zählungen für einen Bereich |
| Der Prinzipal des Aufrufers und erlaubte Campus |
Siehe docs/INNOVATION_ROADMAP.md für Phase-3-Ideen
(attendance_eligibility, attendance_marks_link, anomalies, roster_health).
Schnellstart
Host verbinden (bereitgestellter Server)
claude mcp add moodle --transport http https://moodle-mcp-f6do.onrender.com/mcp \
--header "Authorization: Bearer <your MCP_TOKENS value>"Dann fragen Sie in natürlicher Sprache:
„Kohorten-Puls für Jaipur 2024-26" · „wer fällt ab" · „erstellen Sie meine Watchlist" · „zeigen Sie JJ24PG001s vollständigen Datensatz" · „schwierigste Fächer" · „vergleichen Sie Sektionen von Wealth Management"
Lokal ausführen
cd moodle-mcp
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env # fill in the vars below
uvicorn server:app --port 8899
curl localhost:8899/health # {"status":"ok",...}Smoke-Test (echter MCP-Handshake + Live-Abfragen)
MCP_URL="http://localhost:8899/mcp" MCP_TOKEN="<a token>" python test_client.pyKonfiguration
config.py (pydantic-settings, liest .env + Umgebungsvariablen). validate_config() ist ein Fail-Closed-Boot-Check für die Supabase-Variablen.
Variable | Beschreibung | Woher bekommen |
| Berichtsprojekt-URL ( | Supabase → Einstellungen → API |
| Lese-Service-Schlüssel (nur serverseitig, niemals offengelegt) | Supabase → Einstellungen → API · auch in |
| JSON-Zuordnung von Fakultäts-Tokens → | Sie generieren es |
| Einzelner All-Campus-Notfall-Token (Alternative zu | Sie generieren es |
| Basis für Berichtslinks (Standard | — |
| Öffentliche URL dieses Dienstes (optional) | Render-Dashboard |
Die gesamte Protokollierung erfolgt auf stderr; Protokollzeilen enthalten niemals Token-Inhalte oder personenbezogene Daten.
Zugriffsmodell (rollenbasiert, campusbezogen)
Im Gegensatz zum Studenten-MCP (pro-Benutzer-RLS) dient dies Fakultätsmitgliedern, die institutionelle Daten für ihre Campus sehen. Ein Bearer-Token ordnet einem Prinzipal eine erlaubte Campus-Menge zu; jedes Tool überschneidet den angeforderten Campus mit dieser Menge. Ein Campus außerhalb der Gewährung gibt {"found": false} zurück – keine Datenleckage.
Generieren Sie einen Token-Block pro Campus:
python3 -c "import secrets; print('mcp_'+secrets.token_urlsafe(24))" # one per faculty// MCP_TOKENS (single-line JSON in the env var)
{
"mcp_...indore": {"name": "Indore TNP", "campuses": ["indore"]},
"mcp_...office": {"name": "Programme Office", "campuses": null} // null = all campuses
}Der Supabase-Service-Rollen-Schlüssel bleibt serverseitig und wird niemals an den Host weitergegeben. Es gibt keinen Schreibpfad im Code.
Architektur
MCP host (dashboard / Claude / ChatGPT)
│ MCP over HTTP + Bearer <faculty token>
▼
server.py (FastMCP /mcp, /health)
get_authenticated_service() → verify token → MoodleService(allowed_campuses)
│
tools/* (6 modules, 27 tools) — each: Params model + _impl(svc,…) + register()
│ every query .in_("campus", allowed) ; strip_secrets ; response budgets
▼
Supabase (read service role) — students · courses · enrolments · marks ·
attendance_sessions · student_reports · report_accuracyVollständiges Design: docs/ARCHITECTURE.md.
Schlüsseldateien
Pfad | Zweck |
| FastMCP-App, |
| Einstellungen + |
| Schreibgeschützter |
| Gemeinsame Helfer: |
| Primäre Datentools |
| Kohorten-Rollups |
| Sekundäre Berichtsebene |
| TTL-Cache, Budgets/Begrenzung, Tool-Hinweise |
| End-to-End-MCP-Client-Smoke-Test |
Caches (OOM-sicher – nur begrenzter TTLCache)
_run_cache (letzter endgültiger Lauf pro Bereich), _rollup_cache / _marks_cache (Kohorten-Rohdaten-Rollups). Kohorten-Tools paginieren über PostgRESTs 1000-Zeilen-Grenze und cachen das Ergebnis für 5 Minuten.
Bereitstellung
Render (
render.yaml-Blueprint oder Docker): Python 3.12 / Docker,uvicorn server:app, Health-Check/health. Setzen SieSUPABASE_URL,SUPABASE_SERVICE_ROLE_KEY,MCP_TOKENSim Dashboard.Docker:
docker build -t moodle-mcp . && docker run -p 8000:8000 --env-file .env moodle-mcpDie aktuelle Produktion läuft auf der Free-Instanz (fährt nach ~15 Minuten Leerlauf herunter → ~50s Kaltstart). Upgrade auf Starter für Dauerbetrieb.
Umgebung | URL | Hinweise |
Produktion |
| Free-Instanz, |
Lokal |
|
|
Vollständige Test-/Bereitstellungsschritte: DEPLOY.md.
Runbooks
Zugriffstokens rotieren – MCP_TOKENS neu generieren (gleicher Generator), die Render-Umgebungsvariable aktualisieren; der Dienst startet neu und alte Tokens funktionieren nicht mehr. Stellen Sie die neuen Tokens erneut an die Fakultät aus.
Fakultät pro Campus hinzufügen — einen Eintrag "mcp_...": {"name": "...", "campuses": ["<campus>"]} zu MCP_TOKENS hinzufügen, neu bereitstellen und ihnen ihr Token aushändigen.
Neues Tool hinzufügen — docs/ARCHITECTURE.md §11 folgen: ein Params-Modell + _impl(svc,…) + register() hinzufügen, jede Abfrage auf Campus-Bereich beschränken, strip_secrets, den Routing-Docstring schreiben, in server.py registrieren. Die Rohdaten-Helfer in tools/common.py wiederverwenden.
Kaltstart / erste Anfrage langsam — Free-Instanz ist aus dem Leerlauf aufgewacht (~50s). Wärme sie mit curl <url>/health, oder aktualisiere die Instanz.
Deployment verifizieren — curl <url>/health, dann MCP_URL="<url>/mcp" MCP_TOKEN="<token>" python test_client.py.
Sicherheitsinvarianten
Nur-Lese-Zugriff für immer · jede Abfrage auf Campus-Bereich beschränken · einheitliche {"found": false} Fehlschläge (kein Existenz-Orakel) · Geheimnis-Entfernung (Run-IDs / Speicherschlüssel / Hashes / E-Mails verlassen nie den Server) · Service-Rollen-Schlüssel nur serverseitig · Antwortbudgets + Paging · Graceful Degradation (niemals 500 für die Runde) · nur begrenzte Caches (OOM-sicher). Details in docs/ARCHITECTURE.md §3, §11.
This server cannot be installed
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 gradedqualityBmaintenanceEnables querying your team's work (stats, overdue, workload, active members, etc.) via natural language, scoped to your department with read-only signed-token access.46MIT
- AlicenseNot gradedqualityCmaintenanceEnables read-only access to VortexIQ ecommerce AI data, including store audits, KPIs, alerts, brand DNA, and reports, through natural language queries.MIT
- FlicenseNot gradedqualityBmaintenanceEnables querying of live organizational data (student records, outcomes, certifications, finances, donations, communications) via Claude using structured database queries and semantic search.
- FlicenseNot gradedqualityCmaintenanceProvides tools for querying student academic data such as subjects, marks, performance reports, timetable, exams, fees, events, holidays, and assignments via natural language.
Related MCP Connectors
Read-only access to your VortexIQ store data: audits, KPIs, alerts, Brand DNA, reports, Ask VIQ.
Official Microsoft MCP Server to query Microsoft Entra data using natural language
Ask your app anything — revenue, errors, read-cost, growth — and get rendered charts back.
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/mansigambhir-1313/Moodle-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server