0.3.0 — Audit cycle complete
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
lifespanwith a pooledhttpx.AsyncClientreused across all tool calls (SDK-001). - Live CSV parsing for
seco_get_unemployment_overview,seco_get_youth_unemployment,
andseco_get_job_seekerswith 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). OccupationInputPydantic 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.1by 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.pyandtests/test_live.py(OPS-001).
Removed
- Unused
KNOWN_DATASETSconstant. - Dead
if params.month == 0branch inseco_get_monthly_report_url.