Skip to content

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