Skip to content

Releases: Bigred97/apra-mcp

v0.8.20

Choose a tag to compare

@Bigred97 Bigred97 released this 20 May 21:58

[0.8.20] — 2026-05-19

Fixed

  • Per-thread _client cache (P0 prod bug, observed on ausdata-api):
    module-global _client bound to the FIRST event loop and tripped
    RuntimeError: Event loop is closed when called from a multi-loop
    host that wraps the MCP and runs asyncio.run(_get_data_impl(...))
    in a worker thread per request. Cache moved to threading.local()
    so each worker thread gets its own client bound to its own loop.
    reset_client_for_tests() now only clears the calling thread.

0.8.19 — prewarm_curated() + --warmup CLI

Choose a tag to compare

@Bigred97 Bigred97 released this 18 May 03:40

Ports abs-mcp 0.11.14 prewarm pattern. 304 unit tests pass.

0.8.18 — year-range hints on out-of-range filter

Choose a tag to compare

@Bigred97 Bigred97 released this 18 May 00:50

Same year-range messaging fix as aihw 0.4.16. 304 unit tests pass.

0.8.17 — short-query ranker fix

Choose a tag to compare

@Bigred97 Bigred97 released this 17 May 23:39

Short-query partial_ratio supplement so single-token queries find their canonical dataset by name even when the name has lots of additional context. Matches ato 0.8.16 design. 304 unit tests pass.

v0.1.2 — latest() fix + period normalisation + did-you-mean

Choose a tag to compare

@Bigred97 Bigred97 released this 12 May 20:20

Three real customer-facing bugs squashed.

Bugs fixed

  • latest() on long-format insurance datasets returned a single record
    instead of the latest quarter's worth. Root cause was last_n=1 collapsing
    to one record per measure; long-format datasets carry a single value
    measure with the semantic metric in the data_item dimension. After the
    fix latest("LIFE_INSURANCE") returns ~860 records (the full latest-period
    slice). Affects INSURANCE_GENERAL, INSURANCE_GENERAL_HISTORICAL,
    LIFE_INSURANCE, LIFE_INSURANCE_HISTORICAL.

  • Period filters with quarter shorthand (2025-Q4) or bare years (2024)
    silently returned zero rows.
    Lexical string comparison put Q > 1 in
    ASCII so ISO dates were always excluded. New _expand_period_input
    normaliser converts YYYY, YYYY-MM, YYYY-Qx (and lowercase q) into
    proper ISO YYYY-MM-DD bounds.

  • Did-you-mean suggestions on unknown filter values:
    Unknown value 'major' for filter 'sector'. Did you mean 'major_banks'?

Documentation honesty

The ADI centralised publication and the Super fund-level XLSX are
snapshot files (latest quarter only), not the multi-year time series
the filenames suggest. ADI_KEY_STATS, ADI_RISK_WEIGHTED_ASSETS, and
SUPER_FUND_LEVEL YAMLs corrected to say so. Insurance datasets remain
true time series.

Quality

  • 263 unit tests (34 new) + 16 live integration tests
  • Zero-flake across 10 sequential runs
  • Wheel built and verified in isolation against live APRA Q4 2025 data

Install

uvx --upgrade apra-mcp
# or, direct from this release:
pip install https://github.com/Bigred97/apra-mcp/releases/download/v0.1.2/apra_mcp-0.1.2-py3-none-any.whl

v0.1.1 — CC-BY 3.0 AU + final dataset scope

Choose a tag to compare

@Bigred97 Bigred97 released this 12 May 08:02

First public release with a settled licence + dataset scope.

What ships

7 curated APRA datasets through 6 MCP tools (search_datasets, describe_dataset, get_data, latest, top_n, list_curated):

ID Coverage
ADI_KEY_STATS per-bank CET1 / Tier 1 / Total capital + RWA, quarterly since Mar 2013
ADI_RISK_WEIGHTED_ASSETS per-bank RWA breakdown (credit / operational / market / IRRBB)
SUPER_FUND_LEVEL fund-by-fund member counts, benefits, demographics
INSURANCE_GENERAL + _HISTORICAL paired post/pre-AASB17 general insurance
LIFE_INSURANCE + _HISTORICAL paired post/pre-AASB17 life insurance

Reliability

  • 3-tier URL discovery — live scrape → bundled seed manifest → YAML default. apra.gov.au publishes XLSX at date-versioned paths that change every quarter; the discovery layer scrapes the landing page (with ETag conditional GET → 304 between releases costs zero bytes).
  • SQLite cache with corruption self-heal at ~/.apra-mcp/cache.db.
  • Host pinning — refuses any URL outside apra.gov.au.
  • Framework-break metadata on every insurance response (AASB-17 Q3-2023 boundary surfaces in the framework block).

Attribution

Every response carries:

Source: Australian Prudential Regulation Authority.
Licensed under Creative Commons Attribution 3.0 Australia
(https://creativecommons.org/licenses/by/3.0/au/).

Quality bar

  • 229 unit tests + 16 live integration tests = 245 total
  • Zero-flake across 10 sequential unit runs
  • Live tests verified against real APRA Q4 2025 data

Install

uvx --upgrade apra-mcp

Claude Desktop config in examples/.

Deferred to v0.2

ADI_PROPERTY_EXPOSURES + SUPER_AGGREGATE — both are transposed multi-tab industry-aggregate files that need a transposed-layout parser. See CHANGELOG for the rationale.