Skip to main content
Glama
aongzera

MyCourseVille MCP Server

by aongzera

MyCourseVille MCP Server

Ein MCP-Server, der einem KI-Agenten Zugriff auf dein MyCourseVille-Konto gewährt: neue Aufgaben mit ihren Fristen und Beschreibungen, Kursmaterialien und veröffentlichte Noten – plus einen „Was hat sich seit dem letzten Mal geändert?“-Feed.

Ein persönliches Werkzeug für deine eigenen Kontodaten. Halte das Polling-Intervall moderat und committe niemals deine Zugangsdaten.

So funktioniert es

MCV hat eine offizielle OAuth2-API (/api/v1/public/get/*), aber dafür muss man eine App registrieren, um an client_id/client_secret zu gelangen, und ihre Endpunktnamen sind nicht öffentlich dokumentiert. Dieser Server meldet sich stattdessen genau so an, wie es der MCV-Webclient tut – standardmäßig über den IT-Chula-SSO-Button, sonst über das einfache MCV-Formular – und liest dieselben servergerenderten Kursseiten, die auch der Browser geliefert bekommt: die Kursübersicht für Materialien, /assignment für Fristen und /portfolio-<student id> für Noten. Siehe docs/ENDPOINTS.md.

Die abgerufenen Daten landen in einem lokalen SQLite-Snapshot. Jede Synchronisation erzeugt einen Diff gegen diesen Snapshot und schreibt in ein events-Log – dieses Log liest whats_new, damit der Server dir mitteilen kann, was seit deinem letzten Blick neu aufgetaucht ist. Ein Hintergrund-Poller aktualisiert in einem bestimmten Intervall, sodass eine neue Aufgabe auch dann bemerkt wird, wenn gerade kein Chat geöffnet ist.

Zu „neu“: MCV legt keinen zuverlässigen Zeitstempel für die Veröffentlichung eines Objekts offen. Deshalb ist first_seen – der Zeitpunkt, zu dem dieser Server ein Element zum ersten Mal gesehen hat – der Stellvertreter. Die allererste Synchronisation befüllt alles unauffällig nach, statt dein gesamtes Semester als neu zu melden.

Related MCP server: UofT Student Helper MCP Server

Setup

uv sync --extra dev
cp .env.example .env      # then fill in MCV_USERNAME / MCV_PASSWORD
uv run mcv-mcp --selftest

--selftest meldet sich an, synchronisiert einmal und gibt aus, wie viele Kurse, Aufgaben, Materialien und Noten gefunden wurden. Bring das zum Laufen, bevor du den Agenten anbindest.

Registrieren bei Claude Code:

claude mcp add mcv -- uv --directory C:\Users\velys\Documents\mcp_mcv run mcv-mcp

Dann frag: „Was ist diese Woche fällig?“, „Gibt es etwas Neues bei ‚If MCV seit gestern?“, „Lade die neuesten Folien für Comp Prog herunter.“

Werkzeuge

Werkzeug

Das beantwortet es

whats_new

Neue/geänderte Aufgaben, Materialien und Noten seit einem bestimmten Zeitpunkt

list_upcoming_deadlines

Was in den nächsten N Tagen fällig wird, das Dringendste zuerst

list_courses

Eingeschriebene Kurse, optional nur ein Semester

list_assignments

Aufgaben mit Frist + Beschreibung

get_assignment

Alle Details zu einer einzelnen Aufgabe

list_materials

Dateien, die in einem Kurs bereitgestellt wurden (Ordner, Dateiname, URL)

download_material

Datei lokal speichern and PDF-Text extrahieren, damit er Datenschutz lesbar ist

list_grades

Veröffentlichte Noten

sync_now

Aktualisierung erzwingen (full=true – alle Semester)

auth_status

Diagnosen: Anmeldestatus, letzte Synchronisierung, Datensatzzahl

Konfiguration

Variable

Standard

Bedeutung

MCV_USERNAME / MCV_PASSWORD

Deine MCV-Anmeldedaten

MCV_LOGIN_METHOD

itchula

itchula für den IT-Chula-SSO-Button, mcv für das einfache Formular

MCV_POLL_MINUTES

30

Polling-Intervall (unechte Grenze 10)

MCV_POLL_ENABLED

1

Auf 0 setzen, um das Hintergrund-Polling zu deaktivieren

MCV_STATE_DIR

%LOCALAPPDATA%\mcv_mcp

Ablageort für Datenbank, Cookies und Downloads

Der Zustand wird außerhalb des Repositories gehalten. Cookies werden gespeichert, sodass nach einem Neustart keine erneute Anmeldung nötig ist.

Führe den Poller separat (z. B. im Taskplaner) aus mit:

uv run python -m mcv_mcp.poller

Aufbau

src/mcv_mcp/
  config.py    settings, URLs, state paths
  client.py    Chula SSO login, cookie persistence, throttled AJAX transport
  parsers.py   HTML -> dicts (pure functions, fixture-tested)
  store.py     SQLite snapshot + event log
  sync.py      orchestration + background poller
  server.py    MCP tool definitions

MCVs Markup ist der fragileteil, und er ist auf parsers.py eingegrenzt. Wenn etwas plötzlich keine Zeilen mehr zurückgibt, nimm eine frische Fixture (siehe docs/ENDPOINTS.md) auf und korrigiere den Selektor dort.

Status

Getestet mit einem echten Konto: Login, alle vier Parser, Downloads und Änderungserkennung sind Ende-zu-Ende verifiziert. Eine repräsentative Synchronisation lieferte 9 Kurse, 20 Aufgaben (alle mit geparster Frist bzw. Deadline), 112 Materialien und 69 benotete Einträge; die Folgesynchronisation meldete keine Änderungen – das Diff-Log bleibt also ruhig, bis sich tatsächlich etwas bewegt.

Bekannte Grenzen:

  • Die Notenveröffentlichung wird durch Polling erkannt, nicht öffentlich. Ein erscheinender Punkt taucht innerhalb eines Poll-Intervalls (Standard 30 Minuten) als Ereignis grade_changed auf.

  • Es wird nur das aktuelle Semester synchron is synchronisiert, es sei du du mit sync_now das full=true mitgibst.

  • Das Markup von MCV ist der fragile Teil. Wenn ein Parser keine Zeilen mehr liefert, nimm eine Fixture auf und korrigiere den Selektor – siehe docs/ENDPOINTS.md.

Entwicklung

uv run pytest
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

  • Your memory, everywhere AI goes. Build knowledge once, access it via MCP anywhere.

  • Brazilian Open Finance MCP — 30+ banks (Itaú, Nubank, etc.) to Claude/Cursor. Read-only.

  • Cross-AI personal memory. Save once in ChatGPT, recall in Claude, Mistral, Grok, or any MCP client.

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/aongzera/mcv-mcp'

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