Skip to content

0.3.0 — Audit cycle complete

Choose a tag to compare

@malkreide malkreide released this 26 May 12:09
e55709e

Version 0.2.0 was reserved for an earlier GitHub-only release (commit 89fc337,
pre-audit lint cleanup). Because PyPI version numbers are immutable, this
audit-completion snapshot ships as 0.3.0 to avoid a confusing collision
between the GitHub tag and what users would install from PyPI.

This release closes 13 findings from a complete mcp-audit-skill audit cycle
(2 HIGH, 4 MEDIUM, 3 LOW + 4 follow-up LOW from a re-audit).

Added

  • FastMCP lifespan with a pooled httpx.AsyncClient reused across all tool calls (SDK-001).
  • Live CSV parsing for seco_get_unemployment_overview, seco_get_youth_unemployment,
    and seco_get_job_seekers with defensive delimiter/encoding detection.
  • 24h TTL CSV cache (bounded to 50 entries, FIFO eviction).
  • SSRF prevention: HTTPS-only enforcement + async IP validation + follow_redirects=False (SEC-004).
  • OccupationInput Pydantic model for ARCH consistency.
  • 35 new unit tests (34 → 69) covering live CSV, SSRF, cache eviction, error split.

Changed

  • SSE binds to 127.0.0.1 by default (SEC-016).
  • FastMCP(..., mask_error_details=True) to prevent internal exception leakage (OBS-002).
  • 5xx/ConnectError/Timeout re-raised as protocol errors; 4xx/SSRF return recoverable strings (OBS-001).
  • Tests split into tests/test_unit.py and tests/test_live.py (OPS-001).

Removed

  • Unused KNOWN_DATASETS constant.
  • Dead if params.month == 0 branch in seco_get_monthly_report_url.