Skip to content

Releases: AnthonyPuggs/ausecon-mcp-server

v1.0.0 Stable release

07 May 00:11

Choose a tag to compare

v1.0.0 Stable release

This is the first stable release of ausecon-mcp-server: a local stdio MCP server for analyst-friendly access to Australian economic data from the ABS and RBA.

Highlights

  • Added list_economic_concepts, a model-controlled discovery tool for curated economic concepts.
  • Made get_economic_series the preferred LLM-facing retrieval path for economists and analysts.
  • Added natural date bounds for semantic retrieval: YYYY, YYYY-Qn, YYYY-Sn, YYYY-MM, and YYYY-MM-DD.
  • Preserved source-native expert tools for direct ABS and RBA access.
  • Added semantic provenance metadata to retrieval responses.
  • Reworked MCP prompts so generated tool calls are valid, bounded, and aligned with the registered tool schemas.
  • Added human-readable MCP tool titles and clearer server instructions.
  • Deprecated list_rba_tables as a compatibility alias in favour of list_catalogue(source="rba").

New Semantic Discovery Workflow

list_economic_concepts now exposes analyst-friendly concepts with:

  • concept name
  • source
  • dataset id
  • variant
  • frequency
  • geography
  • description
  • aliases
  • recommended get_economic_series call

This gives LLM clients a direct model-controlled discovery surface instead of relying only on MCP resources.

Improved get_economic_series

get_economic_series now accepts natural analyst date bounds and normalises them internally:

  • RBA concepts are resolved to ISO date ranges.
  • ABS concepts are resolved to the appropriate ABS period format.
  • Raw get_abs_data and get_rba_table remain strict and source-native.

Semantic responses now include provenance metadata covering the requested bounds, resolved bounds, concept, variant, geography, frequency, and upstream target.

MCP UX And Standards

This release improves alignment with current MCP expectations:

  • tools expose clearer descriptions and annotation titles
  • prompts generate executable, schema-valid calls
  • response schema documents optional semantic metadata
  • README now separates the LLM-friendly semantic workflow from the source-native expert workflow
  • ausecon://concepts and list_economic_concepts now share one concept-index implementation

Compatibility Notes

list_rba_tables remains available but is now deprecated as a compatibility alias. New clients should use:

list_catalogue(source="rba")

v0.14.0 - MCP contract hardening, prompt reliability, and analytic metadata

28 Apr 02:29

Choose a tag to compare

Summary

This release hardens the MCP server contract and improves the economic reliability of returned data. It adds richer generated input schemas, wires retrieval tools to the checked-in response schema, preserves more ABS analytic metadata, fixes prompt templates that could previously suggest invalid tool calls, and improves multi-series filtering semantics.

Highlights

  • Added stronger MCP input schemas using constrained argument types, including source/category enums, date and period patterns, and numeric bounds.
  • Added retrieval output schemas for get_abs_data, get_rba_table, and get_economic_series, backed by schemas/response.schema.json.
  • Expanded the response schema with clearer metadata requirements, field descriptions, ABS period/date validation, and optional ABS analytic fields.
  • Fixed prompt templates so generated calls use source-appropriate dates and parameters, including ABS start_period, RBA ISO dates, and valid RBA categories.
  • Changed last_n filtering for multi-series results to return the last N observations per series rather than N observations globally.
  • Preserved ABS UNIT_MULT, DECIMALS, BASE_PERIOD, and OBS_COMMENT as structured series/observation metadata.
  • Fixed ABS structure lookup for catalogue entries that use separate structure IDs, including LF_UNDER / DS_LF_UNDER.
  • Improved discovery for common economist wording such as real GDP.
  • Fixed integration-test cache isolation so local runs do not touch the user’s real platform cache.
  • Removed tracked local Claude session metadata and updated public docs that had drifted from runtime behaviour.
  • Updated smoke and maintenance scripts for the richer FastMCP structured-output behaviour.

Behaviour Notes

  • last_n now applies per series. For broad ABS requests and multi-component concepts such as housing credit, clients will receive recent observations for each returned series instead of only the final rows of the flattened payload.
  • The JSON response shape is intended to remain compatible, but clients that introspect MCP tool metadata will now see stricter input and output schemas.
  • pydantic is now a direct runtime dependency because tool argument schemas use explicit field constraints.

Validation

  • uv run pytest: 443 passed.
  • uv run ruff check src tests integration_tests scripts: passed.
  • uv run pytest integration_tests/ -q: 16 passed.
  • uv run python scripts/audit_catalogue.py: no drifted or disappeared curated ABS/RBA entries.
  • uv run python scripts/mcp_client_smoke.py: mcp-smoke-ok.
  • uv build: source distribution and wheel built successfully.

v0.13.1 - Cache hardening

21 Apr 11:47

Choose a tag to compare

This patch release hardens the cache layer for sandboxed or otherwise restricted environments.

Fixed

  • Disk-cache permission failures now degrade a cache instance to in-process memory caching for the lifetime of the process.
  • The server no longer emits repeated warning-level cache.disk_error events on every cache access attempt after the first permission-denied failure.
  • In-process caching continues to work even when the platform app-cache directory is unavailable.

Behaviour

  • No MCP tool changes.
  • No response-schema changes.
  • No new environment variables.
  • AUSECON_CACHE_DISABLED still means “disable all caching”.

Documentation

  • Added a README note explaining the degraded cache mode when the platform cache directory is unavailable.

Verification

  • uv run pytest tests/test_cache.py tests/test_logging.py
  • Manual smoke check: AuseconService().get_economic_series("unemployment_rate", last_n=1) returned live ABS data without warning-level cache.disk_error noise in the sandboxed path that previously triggered it.

v0.13.0 - Coverage closure

19 Apr 21:21
b7b44f9

Choose a tag to compare

Release v0.13.0 is focused on coverage-closure and surface-cleanup.

This release does not broaden the server to new sources or new MCP tools. Instead, it closes a small number of high-value ABS coverage gaps, removes misleading runtime placeholders, and tightens the release path ahead of the RC cycle.

Highlights

  • Added a dedicated live ABS catalogue entry for building approvals: BUILDING_APPROVALS
  • Added one new semantic shortcut: dwelling_approvals
  • Re-activated RT after live validation confirmed the ABS retail trade dataflow is current again
  • Removed unwired placeholder variants from the runtime catalogue and MCP resources
  • Added maintainer release artefacts including docs/contributing.md, docs/migration-v0.13.0.md, and a checked-in FastMCP client smoke script

What Changed

Added

  • BUILDING_APPROVALS, backed by live ABS dataflow BA_GCCSA
  • dwelling_approvals, resolving to BUILDING_APPROVALS.headline_approvals
  • docs/contributing.md
  • docs/migration-v0.13.0.md
  • scripts/mcp_client_smoke.py for pre-tag stdio client verification

Changed

  • Runtime catalogue entries now expose only fully wired variants
  • Placeholder ABS variants with no abs_key and placeholder RBA variants with no rba_series_ids are no longer public at runtime
  • RT is live again and no longer suppressed from ordinary discovery
  • BUILDING_ACTIVITY no longer carries building approvals aliasing now that approvals have a dedicated live entry

MCP Surface

There are no new MCP tools in v0.13.0, and the retrieval response schema is unchanged.

The public MCP tools remain:

  • search_datasets
  • list_catalogue
  • get_abs_dataset_structure
  • get_abs_data
  • list_rba_tables
  • get_rba_table
  • get_economic_series

Compatibility Notes

This release includes one intentional discovery-surface cleanup:

  • placeholder variant names that never had a live upstream binding are no longer exposed through runtime resources or accepted as valid semantic variants
  • if you previously relied on one of those placeholder names, it will now be treated as an unknown variant until a real wired binding is added

This is a surface-cleanup change, not a retrieval-contract change.

Deferred

  • RPPI remains ceased in v0.13.0
  • a like-for-like live replacement was not cleanly auditable against the current time-series contract, so it was left out on purpose rather than replaced with an approximate substitute

Validation

This release was verified with:

  • env UV_CACHE_DIR=.uv-cache RUFF_CACHE_DIR=/tmp/ausecon-ruff-cache uv run ruff check src tests integration_tests scripts
  • env UV_CACHE_DIR=.uv-cache uv run pytest
  • env UV_CACHE_DIR=.uv-cache uv run pytest integration_tests/ -v
  • env UV_CACHE_DIR=.uv-cache uv run python scripts/audit_catalogue.py
  • env UV_CACHE_DIR=.uv-cache uv run python scripts/mcp_client_smoke.py

Why This Release Matters

v0.12.0 froze the retrieval contract. v0.13.0 cleans up the remaining public discovery surface so users see live, intentional coverage rather than dead aliases or unwired placeholders.

This is intended to be the last pre-RC feature release before the move to v0.14.0-rc1.

v0.12.1

19 Apr 08:07

Choose a tag to compare

v0.12.1

v0.12.1 is a small release-metadata correction follow-up to v0.12.0.

There are no runtime feature changes in this release. The ABS + RBA MCP surface, retrieval contract, schema, and semantic/discovery behaviour are unchanged from v0.12.0.

What This Fixes

  • syncs server.json to the correct release version
  • fixes the release metadata after v0.12.0 was cut with stale 0.11.0 registry fields
  • moves the contract-freeze notes into the correct changelog release history so v0.12.0 and v0.12.1 are represented cleanly

Why This Release Exists

v0.12.0 introduced the contract-freeze work for the retrieval layer, but the release metadata was not fully aligned at tag time. This patch release exists so the repository state, MCP registry manifest, and tagged release history all agree.

MCP Surface

No changes.

The public MCP tools remain:

  • search_datasets
  • list_catalogue
  • get_abs_dataset_structure
  • get_abs_data
  • list_rba_tables
  • get_rba_table
  • get_economic_series

Breaking Changes

None.

Validation

This release metadata correction was verified with:

  • uv run pytest tests/test_repository_hygiene.py -v
  • uv run pytest
  • local sdist and wheel builds via pyproject-build

Notes

If you want the substantive contract-freeze changes, schema, and docs additions, see the v0.12.0 release. v0.12.1 is the patch release that brings the release metadata into line with that work.

v0.12.0

19 Apr 07:23
b4c362a

Choose a tag to compare

Release v0.12.0 is a contract-freeze and release-discipline release for ausecon-mcp-server.

This release does not broaden the server to new sources or new MCP tools. Instead, it stabilises and documents the existing ABS + RBA retrieval surface so downstream clients can rely on it more confidently ahead of v1.0.0.

Highlights

  • Added a checked-in retrieval contract at schemas/response.schema.json
  • Added focused documentation for architecture, semantic variants, and the response schema
  • Added representative checked-in example payloads under examples/payloads/
  • Added additive metadata.retrieved_at to retrieval responses
  • Consolidated shared client-side filtering into src/ausecon_mcp/filters.py
  • Added py.typed for typed-package consumers
  • Hardened release workflow verification with a built-wheel smoke test before PyPI publish

What Changed

  • Retrieval responses from get_abs_data, get_rba_table, and get_economic_series now have a documented, checked-in JSON Schema
  • ABS and RBA providers now stamp metadata.retrieved_at in addition to existing provenance fields such as retrieval_url, truncated, and server_version
  • Shared filtering behaviour for last_n, date windows, and series pruning now lives in one place, reducing the chance of ABS/RBA drift
  • README, CLAUDE.md, and AGENTS.md were refreshed to reflect the frozen retrieval contract and the current preferred discovery surfaces
  • The release workflow now installs the built wheel and verifies that the ausecon-mcp-server console script is present before publish

MCP Surface

There are no new tools in v0.12.0, and there are no removals.

The public MCP surface remains intentionally stable:

  • search_datasets
  • list_catalogue
  • get_abs_dataset_structure
  • get_abs_data
  • list_rba_tables
  • get_rba_table
  • get_economic_series

list_rba_tables remains in place for backwards compatibility. For new unranked RBA browsing, list_catalogue(source="rba") is now the preferred surface.

Breaking Changes

None intended.

This release is designed to be additive and contract-stabilising rather than shape-breaking. In particular, the existing dimensions payload shape is unchanged in v0.12.0.

Validation

The release work was verified with:

  • uv run ruff check src tests
  • uv run pytest
  • uv run pytest integration_tests/ -v
  • uv run python scripts/audit_catalogue.py
  • local sdist and wheel builds
  • wheel smoke-install and console-script verification
  • FastMCP client smoke checks across discovery, retrieval, and semantic calls

Why This Release Matters

Earlier releases focused on correctness, audit governance, and semantic/discovery usability. v0.12.0 is the release that turns the existing retrieval layer into a more explicit public contract.

That makes it a better foundation for the final pre-v1.0.0 stabilisation cycle.

Notes

As before, the server remains deliberately narrow in scope:

  • ABS + RBA only
  • stdio MCP transport
  • read-only discovery and retrieval workflows
  • curated semantic shortcuts rather than a general analytics engine

Broader source expansion and transport work remain deferred until after the core contract is stable.

v0.11.0 — Semantic Layer Expansion

19 Apr 00:41
265a57d

Choose a tag to compare

Expands get_economic_series from a 4-concept demo to a 28-concept product surface, plus ergonomics and discovery items.

Highlights

  • 🧭 24 new curated concepts across prices, labour, activity, rates, FX, external sector, and credit
  • 🔧 ABS structure-id hardening unblocks underemployment_rate (live DS_LF_UNDER structure)
  • last_n parameter on get_economic_series
  • 🔎 list_catalogue tool — unranked complement to search_datasets
  • 📚 ausecon://concepts resource — index of every shortcut with its resolved target
  • 💬 Two new prompts: labour_slack_snapshot, yield_curve_snapshot

Semantic expansion

Area New concepts
Prices weighted_median_inflation, monthly_inflation, producer_price_inflation, living_cost_index
Labour unemployment_rate, underemployment_rate, employment_total, participation_rate, hours_worked, job_vacancies, wage_growth
Activity household_spending, population
Rates government_bond_yield_3y, government_bond_yield_10y, mortgage_rate, small_business_rate
FX aud_usd, trade_weighted_index
External exports_goods_services, imports_goods_services, current_account_balance, commodity_prices
Credit housing_credit, business_credit, consumer_credit

Locked default choices

  • Bond yields resolve to f17 (zero-coupon AGS yields), not f16 — modelling-friendly and
    coupon-free.
  • housing_credit returns two SA series (DLCACOHS owner-occupier + DLCACIHS investor) rather than
    a pre-aggregated total.
  • producer_price_inflation uses PPI_FD (final demand), matching the commonly reported headline.
  • commodity_prices uses the SDR index (GRCPAISDR) so AUD moves aren't baked into the default.
  • underemployment_rate composes via structure id DS_LF_UNDER while keeping dataflow id LF_UNDER
    for the data request.

ABS structure-id hardening

New resolve_abs_structure_id() helper and an optional structure_id field on ABS catalogue entries.
Required because the live ABS SDMX DataStructure for LF_UNDER is exposed as DS_LF_UNDER. Covered by
unit tests and an end-to-end live smoke test.

Ergonomics

  • get_economic_series(..., last_n=N) forwards last_n to the underlying ABS or RBA call.

Discovery

  • list_catalogue — unranked listing with source, category, tag, include_ceased,
    include_discontinued filters. Returns trimmed rows (id, source, name, category, frequency,
    tags) suitable for UI pickers.
  • ausecon://concepts — every curated shortcut with its resolved {source, dataset_id, variant} plus
    declared frequencies and geographies.

Prompts

  • labour_slack_snapshot — unemployment + underemployment signal.
  • yield_curve_snapshot — 3y vs 10y AGS curve shape and recent shift.
  • Existing templates now prefer get_economic_series wherever a v0.11.0 concept covers the workflow.

Verification

  • uv run pytest407 passed
  • uv run pytest integration_tests/test_semantic_live.py10/10 live concepts green against real
    upstream (ABS SDMX + RBA CSV)
  • uv run ruff check src tests integration_tests scripts — clean
  • uv run python scripts/audit_catalogue.py — 0 drift, 0 disappeared
  • CI + Integration workflows green

Full changelog: v0.10.0...v0.11.0

v0.10.0 — Correctness & Audit Governance

18 Apr 16:39
e4b4554

Choose a tag to compare

This release tightens catalogue accuracy and introduces automated drift
detection against live ABS and RBA upstreams.

Catalogue corrections

  • Renamed LCISLCI to match the live ABS dataflow label
    (Selected Living Cost Indexes). The real ABS dataflow ID LCI is
    preserved via upstream_id indirection so resolver behaviour is
    unchanged.
  • Switched 4 ABS entries from discontinued to ceased to
    distinguish upstream-dead datasets from semantically retired ones:
    CPI_M, RT, BUSINESS_TURNOVER, RPPI. Catalogue search suppresses
    both flags.
  • Resolved the a5 spot-check: table is still active upstream — the
    entry is un-discontinued and recategorised under exchange_rates.

Audit governance

  • Every catalogue entry now carries an audit block with
    last_audited, upstream_url, and upstream_title; ~100 entries
    calibrated against live ABS and RBA.
  • New scripts/audit_catalogue.py fetches the ABS SDMX dataflow
    index and the RBA tables index, diffs each entry against live, and
    emits a markdown report covering:
    • Drifted — catalogue title no longer matches live
    • Disappeared — absent from live index and upstream URL
      unreachable (off-index but reachable is treated as active)
    • New — live entries not yet catalogued (informational)
  • New tests/test_catalogue_audit.py enforces audit block
    presence and a 24-month freshness ceiling on last_audited.

CI

  • Nightly Integration workflow now runs the audit step alongside
    live integration tests, uploads audit-output.md as an artifact, and
    appends the audit tail to the auto-created upstream-drift issue
    when drift is detected.

Fixes

  • Updated the live CPI structure integration test to assert on stable
    structural dimensions (MEASURE, REGION) rather than TIME_PERIOD,
    which the structure parser does not surface (it lives on the SDMX
    TimeDimension element).

Stats

  • 342 unit tests passing, ruff clean
  • First post-merge nightly integration run: 0 drift, 0 disappeared
    on both ABS and RBA

v0.9.0 - RBA and ABS Catalogue Correctness

18 Apr 04:16

Choose a tag to compare

Catalogue Correctness Release

The curated RBA and ABS catalogues were audited against the live upstream sources for the first time since the initial seed. Nineteen listed RBA entries pointed to tables that had been renumbered or consolidated by the RBA, and several ABS entries were mislabelled or had been ceased by the ABS.

Changed

  • Relabelled RBA catalogue entries to match the current RBA statistical tables index. Affected IDs: a1, a3, c7, c9, d4, d14, e13, f3, f4, f7, f8, f11, f12, g4, h2, h4, i2, i3, i4. Callers resolving these IDs will now receive data that matches the entry's name field; previously they silently received a different table's contents.
  • Updated ABS living cost catalogue labelling around "Selected Living Cost Indexes" (the dataflow the ID actually resolves to upstream), with new variants for employee, age-pensioner, self-funded retiree, other-transfer, and pensioner-beneficiary household types.

Added

  • upstream_id field on ABS catalogue entries. This decouples the ergonomic catalogue key from the real SDMX dataflow ID. Entries without upstream_id continue to pass their key straight through, so all existing entries keep working unchanged.
  • csv_path field on RBA catalogue entries. This lets an entry override the default {id}-data.csv URL pattern for tables whose CSV path does not follow that convention.
  • resolve_abs_dataflow_id / resolve_rba_csv_path helpers in catalogue/resolver.py, wired into AuseconService so every ABS and RBA retrieval goes through the mapping layer before hitting the provider.
  • discontinued: true flag support on ABS catalogue entries, mirroring the existing RBA convention. search_catalogue now suppresses ceased entries by default. Marked ceased: CPI_M, RT, RPPI, BUSINESS_TURNOVER.
  • docs/coverage-audit-2026-04.md, a one-off audit record documenting every existing entry's status against the live upstream.

Fixed

  • Search results no longer surface ABS dataflows that the ABS has ceased publishing.

Expanded Coverage

  • 7 new ABS dataflows verified against the live SDMX registry:

    • ANA_IND_GVA (GDP production / GVA by industry)
    • ANA_SFD (State Final Demand)
    • EWD (Engineering Construction Work Done)
    • BOP_STATE (Balance of Payments by state)
    • ERP_COMP_Q (population components — natural increase and migration)
    • POP_PROJ (long-run population projections)
    • LABOUR_ACCT_A (Annual Balanced Labour Account, which uses the new upstream_id field to map the ergonomic catalogue key to the real SDMX dataflow ABS_LABOUR_ACCT)
  • 16 new RBA tables verified against the live statistical tables index:

    • Banking: b1 (Assets of Financial Institutions), b2 (Off-Balance Sheet Business), b3 (Repo and Stock Lending)
    • Payments: c1.2 (credit cards, personal/commercial split), c2 (debit cards), c3 (merchant fees), c4 (ATMs), c5 (cheques), c6 (direct entry and NPP), c8 (access points)
    • Credit: d9 (rural debt), d10 (margin lending)
    • Interest rates: f4.1 (paid deposit rates), f16 (AGS indicative mid yields), f17 (zero-coupon analytical yield curve, which uses the new csv_path field to point at the non-standard f17-yields.csv URL)
    • Exchange rates: f11.1 (extended bilateral series)

Scope was audit-gated: every plan candidate was verified against the upstream before being added. Candidates that turned out to be Excel-only (FIN_WEALTH, GFS_Q/A, TAX_REV, PRODUCTIVITY, LF_DETAILED, BUSINESS_COUNTS, IND_DISPUTES, EEH, CHARACTERISTICS_EMP) were dropped from this milestone because they require new provider support rather than a catalogue entry.

Prompts (prompts.py)

  • 2 new templates + tests:
  • living_costs_vs_cpi exercises the LCI (Selected Living Cost Indexes) relabel from Phase 0, compares household-type divergence against headline CPI
  • construction_pipeline: exercises the new EWD entry alongside existing CWD and BUILDING_ACTIVITY

README updates

  • Status bullet updated: "four MCP prompt templates" → "six"
  • Prompts table refreshed: inclusion of the two new rows
  • Example client queries extended: three entries touching SLCI vs CPI, engineering construction, zero-coupon curve

v0.8.0 - Security tightening

18 Apr 02:32

Choose a tag to compare

This release hardens the server against the CodeQL findings identified after v0.7.0, tightens GitHub Actions supply-chain security, and cleans up pre-existing formatter drift in the repository.

Highlights

  • Hardened on-disk cache path handling so cache reads, writes, and deletes are validated against the cache instance's trusted app-cache root.
  • Pinned third-party GitHub Actions to immutable commit SHAs in CI, integration, and release workflows.
  • Added least-privilege top-level workflow permissions where CodeQL flagged missing defaults.
  • Cleaned up pre-existing Ruff formatting drift in untouched source files so the branch is locally clean under stricter formatting checks.

Breaking change

  • AUSECON_CACHE_DIR is no longer supported.
    The on-disk cache now stays under the platform app-cache directory:
    • Linux: ~/.cache/ausecon-mcp/
    • macOS: ~/Library/Caches/ausecon-mcp/

If you previously redirected the cache to a custom location, you will need to adjust your deployment or operating environment accordingly.

Verification

Local verification for this release branch:

  • uv run ruff format --check src tests
  • uv run ruff check src tests
  • uv run pytest

Result:

  • Ruff format check passed
  • Ruff lint passed
  • Test suite passed (126 passed)

Notes

This release is intended to remediate the code paths and workflow patterns behind the previously reported CodeQL alerts. Final alerts are now no longer open and have been fixed.