Skip to content

Releases: malkreide/global-education-mcp

v0.3.5

Choose a tag to compare

@malkreide malkreide released this 31 Jul 20:28
23dfda4

[0.3.5] — 2026-07-31

Hinzugefuegt

  • Der Server nennt jetzt seinen Namen. Bisher ging gegenueber jedem
    Upstream der httpx-Default hinaus: der Betreiber der Datenquelle sah
    eine Bibliothek, nicht uns, und hatte keinen Weg, uns bei Fehlverhalten
    zu erreichen. Neu traegt jeden der 3 HTTP-Clients
    global-education-mcp/<version> (+github.com/malkreide/global-education-mcp).

  • __version__ kommt aus den Paket-Metadaten. Vorher von Hand
    gepflegt bzw. gar nicht vorhanden. Ein Literal waere genau die Drift,
    die dieses Portfolio gerade ueberall beseitigt hat.

    Die Version stammt aus importlib.metadata und kann nicht getrennt vom
    Paket driften.

v0.3.0 — Audit-clean Release

Choose a tag to compare

@malkreide malkreide released this 21 May 12:16
ee75035

Highlights

Erstes Audit-clean Release. Adressiert alle 12 Findings des
MCP-Best-Practice-Audits
und ist via Re-Audit
mit 36 / 36 pass, 0 findings, Production-Ready ✅ verifiziert.

Was ist neu

Performance

  • FastMCP Lifespan mit shared httpx.AsyncClient über die gesamte
    Server-Laufzeit (kein Connection-Pool-Setup pro Request mehr).
  • Parallele Multi-Country-Calls via asyncio.gather + Semaphore-
    Throttling — ~5× schneller bei uis_compare_countries(15 Länder).
  • FastMCP Context-Injection in den drei Long-Running-Tools:
    Claude Desktop zeigt jetzt Progress-Events pro Upstream-Call.

Sicherheit

  • Tool-Hash-Pinning (tools.lock.json) gegen Rug-Pull-Angriffe;
    CI blockiert PRs mit unbewussten Signatur-Änderungen.
  • Tool-Description-Lint mit 8 Regex-Heuristiken gegen Prompt-Injection.
  • Container-Sandboxing: gehärtetes Multi-Stage Dockerfile (non-root
    uid 10001), docker-compose.yml mit read_only, cap_drop ALL,
    no-new-privileges; CI-Smoke-Build verifiziert die Hardening-Flags.
  • Default MCP_HOST=127.0.0.1 (vorher 0.0.0.0); Warnung bei
    versehentlicher LAN-Exposition.

Observability

  • Structured JSON Logging (logging_setup.JSONFormatter) auf
    stderr mit RFC-5424-Severities — SIEM-ready.
  • @logged_tool-Decorator auf allen 10 Tools mit tool,
    duration_ms, status-Feldern pro Aufruf.
  • Protocol vs. Execution Errors: raise_if_transient() raised
    McpError für 5xx/Timeout/Connect (Host kann retryen), 4xx bleibt
    Tool-Result-Text (LLM kann sich anpassen).

Compliance (Stadt Zürich)

  • ISDS-Schutzbedarfsklasse G1 (öffentlich) explizit dokumentiert.
  • Schulamt-BUI-Klassifikation für Tool-Output, Cache, Logs.
  • Compatibility-Matrix für MCP-Protocol, SDK, Python, httpx, pydantic.

Dependency-Management

  • Obere Schranken auf den drei Kern-Dependencies:
    mcp[cli]>=1.0.0,<2.0.0, httpx>=0.27.0,<1.0.0, pydantic>=2.0.0,<3.0.0.
  • Erstes vollständiges CHANGELOG.md (Keep-a-Changelog 1.1.0).

Breaking Changes

Keine API-Breaking-Changes für MCP-Clients. Drei Verhaltensänderungen
in der Server-Konfiguration:

  1. MCP_HOST Default ist jetzt 127.0.0.1 statt 0.0.0.0. Bei
    Cloud-Deployment (Render etc.) muss MCP_HOST=0.0.0.0 explizit
    gesetzt werden.
  2. Transient-Upstream-Fehler (UNESCO/OECD 5xx/Timeout) werden
    jetzt als McpError an den Host eskaliert statt als Tool-Result-
    Text. Hosts ohne Retry-Logik sehen einen anderen Fehlertyp.
  3. stderr-Output: Strukturierte JSON-Logs landen jetzt auf stderr.
    Wer stderr stumm geschaltet hat, verliert die Tool-Call-Telemetrie.

Upgrade

pip install --upgrade global-education-mcp
# oder via uvx (Claude Desktop):
uvx --refresh global-education-mcp

v0.2.0 – Initial PyPI Release

Choose a tag to compare

@malkreide malkreide released this 22 Mar 17:06
9361165
Add files via upload