Release 0.2.0 — full MCP audit remediation (10/10 findings, PRs #2–#7)
sbb-opendata-mcp v0.2.0 — Audit-Remediation & Hardening
Dieses Release schliesst die vollständige Remediation eines MCP-Sicherheits- und
Qualitäts-Audits ab (durchgeführt mit der mcp-audit-skill).
Alle 10 Findings (2 High · 4 Medium · 4 Low) wurden behoben — über die PRs #2–#7.
Es gibt keine Breaking Changes für bestehende MCP-Clients: der menschenlesbare
Markdown-Output aller Tools bleibt unverändert.
🔒 Security
- ODSQL-Injection geschlossen (F-SEC-01):
year/cantonwerden per Regex validiert,
alle in diewhere-Klausel interpolierten Werte (inkl. zuvor ungeschützter
operator/phase/traffic_type) laufen über ein zentrales Escaping. - Streamable-HTTP-Transport gehärtet (F-SEC-02): DNS-Rebinding-/Origin-Schutz aktiv;
Bind-Host und Allowlists viaMCP_HOST/MCP_ALLOWED_HOSTS/MCP_ALLOWED_ORIGINS. - Keine Error-Leaks mehr (F-SEC-03): Upstream-Bodies/Exception-Details landen nur noch
im Server-Log, der Client erhält bereinigte Meldungen. - Supply Chain (F-SEC-04): Abhängigkeiten mit Major-Caps gepinnt + reproduzierbarer
uv.lock.
📈 Observability
- Strukturiertes Logging (F-OBS-01) auf stderr (stdout bleibt dem stdio-JSON-RPC-Kanal
vorbehalten), konfigurierbar überLOG_LEVELundLOG_FORMAT(text/json).
⚡ Performance
- Connection-Pooling + Nebenläufigkeit (F-SCALE-01): gemeinsamer
httpx.AsyncClient
mit Keep-Alive;compare_stationsruft die Stationen parallel ab (vorher 2×N sequentiell).
🧩 API & DX
- MCP
structuredContentauf allen Tools (F-SDK-01) — zusätzlich zum Markdown-Text,
additiv und nicht-breaking. response_formatjetzt auch fürcompare_stations(F-ARCH-01).- Robuste Zahlenformatierung der Nutzfläche (F-SEC-05).
pip install -e ".[dev]"funktioniert (dev-Extra), pytest-Markerliveregistriert (F-OPS-01).
✅ Qualität
- Testsuite 34 → 60 Tests (alle grün),
ruff checksauber. - Audit-Evidenz unter
audits/2026-06-04-sbb-opendata-mcp/(alle Findings alscloseddokumentiert).
📦 Installation
uvx sbb-opendata-mcp # oder: pip install sbb-opendata-mcp