Releases: AnthonyPuggs/ausecon-mcp-server
v1.0.0 Stable release
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_seriesthe preferred LLM-facing retrieval path for economists and analysts. - Added natural date bounds for semantic retrieval:
YYYY,YYYY-Qn,YYYY-Sn,YYYY-MM, andYYYY-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_tablesas a compatibility alias in favour oflist_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_seriescall
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_dataandget_rba_tableremain 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://conceptsandlist_economic_conceptsnow 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
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, andget_economic_series, backed byschemas/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_nfiltering for multi-series results to return the last N observations per series rather than N observations globally. - Preserved ABS
UNIT_MULT,DECIMALS,BASE_PERIOD, andOBS_COMMENTas 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_nnow 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.
pydanticis 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
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_errorevents 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_DISABLEDstill 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-levelcache.disk_errornoise in the sandboxed path that previously triggered it.
v0.13.0 - Coverage closure
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
RTafter 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 dataflowBA_GCCSAdwelling_approvals, resolving toBUILDING_APPROVALS.headline_approvalsdocs/contributing.mddocs/migration-v0.13.0.mdscripts/mcp_client_smoke.pyfor pre-tag stdio client verification
Changed
- Runtime catalogue entries now expose only fully wired variants
- Placeholder ABS variants with no
abs_keyand placeholder RBA variants with norba_series_idsare no longer public at runtime RTis live again and no longer suppressed from ordinary discoveryBUILDING_ACTIVITYno longer carriesbuilding approvalsaliasing 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_datasetslist_catalogueget_abs_dataset_structureget_abs_datalist_rba_tablesget_rba_tableget_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
RPPIremains ceased inv0.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 scriptsenv UV_CACHE_DIR=.uv-cache uv run pytestenv UV_CACHE_DIR=.uv-cache uv run pytest integration_tests/ -venv UV_CACHE_DIR=.uv-cache uv run python scripts/audit_catalogue.pyenv 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
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.jsonto the correct release version - fixes the release metadata after
v0.12.0was cut with stale0.11.0registry fields - moves the contract-freeze notes into the correct changelog release history so
v0.12.0andv0.12.1are 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_datasetslist_catalogueget_abs_dataset_structureget_abs_datalist_rba_tablesget_rba_tableget_economic_series
Breaking Changes
None.
Validation
This release metadata correction was verified with:
uv run pytest tests/test_repository_hygiene.py -vuv 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
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_atto retrieval responses - Consolidated shared client-side filtering into
src/ausecon_mcp/filters.py - Added
py.typedfor 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, andget_economic_seriesnow have a documented, checked-in JSON Schema - ABS and RBA providers now stamp
metadata.retrieved_atin addition to existing provenance fields such asretrieval_url,truncated, andserver_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, andAGENTS.mdwere 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-serverconsole 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_datasetslist_catalogueget_abs_dataset_structureget_abs_datalist_rba_tablesget_rba_tableget_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 testsuv run pytestuv run pytest integration_tests/ -vuv 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
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(liveDS_LF_UNDERstructure) - ⚡
last_nparameter onget_economic_series - 🔎
list_cataloguetool — unranked complement tosearch_datasets - 📚
ausecon://conceptsresource — 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), notf16— modelling-friendly and
coupon-free. housing_creditreturns two SA series (DLCACOHSowner-occupier +DLCACIHSinvestor) rather than
a pre-aggregated total.producer_price_inflationusesPPI_FD(final demand), matching the commonly reported headline.commodity_pricesuses the SDR index (GRCPAISDR) so AUD moves aren't baked into the default.underemployment_ratecomposes via structure idDS_LF_UNDERwhile keeping dataflow idLF_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)forwardslast_nto the underlying ABS or RBA call.
Discovery
list_catalogue— unranked listing withsource,category,tag,include_ceased,
include_discontinuedfilters. 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_serieswherever a v0.11.0 concept covers the workflow.
Verification
uv run pytest— 407 passeduv run pytest integration_tests/test_semantic_live.py— 10/10 live concepts green against real
upstream (ABS SDMX + RBA CSV)uv run ruff check src tests integration_tests scripts— cleanuv 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
This release tightens catalogue accuracy and introduces automated drift
detection against live ABS and RBA upstreams.
Catalogue corrections
- Renamed
LCI→SLCIto match the live ABS dataflow label
(Selected Living Cost Indexes). The real ABS dataflow IDLCIis
preserved viaupstream_idindirection so resolver behaviour is
unchanged. - Switched 4 ABS entries from
discontinuedtoceasedto
distinguish upstream-dead datasets from semantically retired ones:
CPI_M,RT,BUSINESS_TURNOVER,RPPI. Catalogue search suppresses
both flags. - Resolved the
a5spot-check: table is still active upstream — the
entry is un-discontinued and recategorised underexchange_rates.
Audit governance
- Every catalogue entry now carries an
auditblock with
last_audited,upstream_url, andupstream_title; ~100 entries
calibrated against live ABS and RBA. - New
scripts/audit_catalogue.pyfetches 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.pyenforcesauditblock
presence and a 24-month freshness ceiling onlast_audited.
CI
- Nightly Integration workflow now runs the audit step alongside
live integration tests, uploadsaudit-output.mdas an artifact, and
appends the audit tail to the auto-createdupstream-driftissue
when drift is detected.
Fixes
- Updated the live CPI structure integration test to assert on stable
structural dimensions (MEASURE,REGION) rather thanTIME_PERIOD,
which the structure parser does not surface (it lives on the SDMX
TimeDimensionelement).
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
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'snamefield; 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_idfield on ABS catalogue entries. This decouples the ergonomic catalogue key from the real SDMX dataflow ID. Entries withoutupstream_idcontinue to pass their key straight through, so all existing entries keep working unchanged.csv_pathfield on RBA catalogue entries. This lets an entry override the default{id}-data.csvURL pattern for tables whose CSV path does not follow that convention.resolve_abs_dataflow_id/resolve_rba_csv_pathhelpers incatalogue/resolver.py, wired intoAuseconServiceso every ABS and RBA retrieval goes through the mapping layer before hitting the provider.discontinued: trueflag support on ABS catalogue entries, mirroring the existing RBA convention.search_cataloguenow 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 newupstream_idfield to map the ergonomic catalogue key to the real SDMX dataflowABS_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 newcsv_pathfield to point at the non-standardf17-yields.csvURL) - Exchange rates:
f11.1(extended bilateral series)
- Banking:
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
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_DIRis no longer supported.
The on-disk cache now stays under the platform app-cache directory:- Linux:
~/.cache/ausecon-mcp/ - macOS:
~/Library/Caches/ausecon-mcp/
- Linux:
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 testsuv run ruff check src testsuv 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.