Release v0.2.1 — Audit-Remediation komplett (0 critical/high/medium offen)
Komplette Umsetzung des mcp-audit-skill-Reviews. 0 critical / 0 high / 0 medium Findings offen.
Production-ready für:
- stdio (Claude Desktop, lokal)
- Single-instance HTTP auf Render via
render.yaml-Blueprint - Multi-Replica HTTP mit
MCP_STATELESS_HTTP=1
⚠️ Breaking Changes
- JSON-Output-Format: Tools mit
response_format="json"liefern jetzt einen Envelope{ "payload": ..., "provenance": { source, license, attribution, retrieved_at, data_source_url } }statt eines flachen Dicts. Markdown-Outputs unverändert. Konsumenten, die JSON parsen, müssen aufresult["payload"]zugreifen. - Entry-Point:
meteoswiss_mcp.server:mainstattmcp.run. Der neue Wrapper liestMCP_TRANSPORT/MCP_HOST/MCP_PORT/MCP_ALLOW_ANY_HOSTaus ENV. CLI-Flags--http/--portbleiben als Override.
Sicherheit
- SSRF-Prevention (SEC-004/SEC-021): Egress-Allow-List validiert alle Requests inkl. Redirect-Targets. Blockiert RFC1918 / Loopback / Link-Local-IPs (z.B.
169.254.169.254). - NeighborJack-Hardening (SEC-016):
MCP_HOSTdefaultet auf127.0.0.1;0.0.0.0-Binding nur mit explizitemMCP_ALLOW_ANY_HOST=1. - Container-Sandboxing (SEC-007): Multi-Stage-Dockerfile mit non-root user
mcp:10001. - Optionaler API-Key-Auth via
MCP_API_KEY(X-API-Key / Bearer, constant-time-Vergleich).
Neue Features (opt-in)
- CORS-Middleware via
MCP_ALLOWED_ORIGINS— claude.ai Web kann jetzt Sessions aufbauen. - Stateless-HTTP-Mode via
MCP_STATELESS_HTTP=1für Multi-Replica. - OpenTelemetry-Tracing via
OTEL_EXPORTER_OTLP_ENDPOINT+pip install meteoswiss-mcp[otel]. - Structured Logging (
structlog→ JSON auf stderr):tool_invoked,upstream_failed,egress_blocked,auth_rejected, ... - Health-Endpoint
GET /health(ohne Upstream-Pings). - OGD-Provenance-Envelope in allen JSON-Responses (CC BY 4.0 Attribution).
- Fuzzy-Geocoding-Fallback: nicht-deutsche Ortsnamen werden via Zweitversuch ohne language-Restriktion aufgelöst.
- Tool-Hash-Pinning (
tool-hashes.json+ CI-Guard) gegen Rug-Pull.
Infrastruktur
- Multi-Stage-Dockerfile +
render.yaml-Blueprint (plan starter, healthCheckPath, numInstances=1). - Dependabot für pip / github-actions / docker.
docs/roadmap.mdmit expliziter Phasen-Statustabelle.
Audit-Findings geschlossen
ARCH-002, ARCH-003, ARCH-009, ARCH-012, OPS-003, OBS-001, OBS-002, OBS-003, OBS-004, OBS-006, SDK-001, SDK-002, SDK-003, SDK-004, SCALE-001, SCALE-002, SCALE-003, SCALE-004, SCALE-006, SEC-004, SEC-005, SEC-006, SEC-007, SEC-009, SEC-013, SEC-016, SEC-021, SEC-022, CH-004.
Vollständiges CHANGELOG
Siehe CHANGELOG.md.
Upgrade-Pfad
# uvx
uvx meteoswiss-mcp@0.2.0
# pip
pip install -U meteoswiss-mcp==0.2.0
# Docker
docker pull ghcr.io/malkreide/meteoswiss-mcp:v0.2.0 # falls Image-Publish konfiguriert