Skip to content

Releases: AnthonyPuggs/ausecon-mcp-server

v1.11.0 — Derived transparency, cheaper latest-value fetches, hot-path performance

14 Jun 16:41
eea819e

Choose a tag to compare

v1.11.0 — Derived transparency, cheaper latest-value fetches, hot-path performance

This release closes the three open items from the latest code review: it makes the
derived layer's alignment method machine-readable, stops the "latest print" path
from downloading full history, and removes wasted work on the request hot path.
All changes are additive and backward-compatible.

Added

  • alignment_method on every derived series. metadata.derived now carries an
    explicit alignment_method — one of locf, exact_month, period_intersection,
    or year_ended_lag — so a consumer can tell how a derived indicator's operands were
    aligned (e.g. last-observation-carried-forward, which can bias spreads and ratios
    around turning points). Declared on all 16 derived concepts and added to the
    response JSON Schema. (#65)

Changed

  • Real-rate concepts now state their ex-post basis. real_cash_rate,
    real_10y_bond_yield, real_bank_bill_rate, real_business_lending_rate, and
    real_mortgage_rate descriptions now make explicit that they are ex-post real rates
    (nominal less realised year-ended CPI inflation), not the ex-ante Fisher
    definition. (#65)
  • Response contract: derived_metadata in schemas/response.schema.json gains a
    required alignment_method field. This is additive — existing fields and tool
    signatures are unchanged. (#65)

Performance

  • Cheaper latest-value fetches. get_latest_observations for ABS now requests
    only the most recent observations upstream via SDMX lastNObservations, keyed
    distinctly in the cache, instead of downloading the full dataflow and truncating
    client-side. The expert get_abs_data tool is unchanged. (#66)
  • Hot-path pass. Derived-operand fetches now run concurrently (asyncio.gather);
    payload copying is centralised in the cache (the request hot path drops from two
    deep copies to one); cache disk I/O is offloaded off the event loop; and concurrent
    identical upstream fetches are coalesced with a single-flight helper so a burst of
    duplicate requests hits the source only once. (#67)

Fixed

  • real_business_lending_rate now aligns its lending-rate and inflation operands by
    (year, month), so the RBA monthly end-of-month series and the ABS monthly CPI
    series intersect correctly instead of yielding an empty result.

v1.10.0 - Real-rate, growth & external-sector indicators

12 Jun 19:57

Choose a tag to compare


v1.10.0 - Real-rate, growth & external-sector indicators

A purely additive release: 7 new derived indicators and 5 new curated
concepts
, with no breaking changes to any tool or response shape.

✨ Added

Derived indicators (now 16)

Transparent, formula-based series available via get_derived_series:

Concept Formula Frequency
real_10y_bond_yield 10y AGS yield − monthly CPI inflation Monthly
real_bank_bill_rate 3m bank bill rate − monthly CPI inflation Monthly
real_business_lending_rate Small-business lending rate − monthly CPI inflation Monthly
broad_money_growth Year-ended growth of broad money Monthly
employment_growth Year-ended growth of employment Monthly
misery_index Unemployment rate + monthly CPI inflation Monthly
terms_of_trade 100 × export price index / import price index Quarterly

Semantic concepts (now 75)

Analyst-friendly shortcuts available via get_economic_series:


Release description (markdown)

v1.10.0 — Real-rate, growth & external-sector indicators

A purely additive release: 7 new derived indicators and 5 new curated
concepts
, with no breaking changes to any tool or response shape.

✨ Added

Derived indicators (now 16)

Transparent, formula-based series available via get_derived_series:

Concept Formula Frequency
real_10y_bond_yield 10y AGS yield − monthly CPI inflation Monthly
real_bank_bill_rate 3m bank bill rate − monthly CPI inflation Monthly
real_business_lending_rate Small-business lending rate − monthly CPI inflation Monthly
broad_money_growth Year-ended growth of broad money Monthly
employment_growth Year-ended growth of employment Monthly
misery_index Unemployment rate + monthly CPI inflation Monthly
terms_of_trade 100 × export price index / import price index Quarterly

Semantic concepts (now 75)

Analyst-friendly shortcuts available via get_economic_series:

  • export_price_index — ABS International Trade Price Index, exports (all groups)
  • import_price_index — ABS International Trade Price Index, imports (all groups)
  • household_debt_to_income — RBA E2, household debt to annualised disposable income
  • labour_productivity — RBA H4, non-farm labour productivity per hour (index)
  • real_twi — RBA F15, real trade-weighted index

🐛 Fixed

  • Year-ended growth derivations (credit_growth, broad_money_growth,
    employment_growth) now handle RBA monthly series that arrive as end-of-month
    ISO dates (YYYY-MM-DD) in addition to ABS YYYY-MM periods, instead of
    raising a period-format error.

🔁 Compatibility

No breaking changes. All existing tools, concepts, and the
{metadata, series, observations} response contract are unchanged.

v1.9.0 - Legible ABS payloads and leaner responses

10 Jun 20:52

Choose a tag to compare

v1.9.0 - Legible ABS payloads and leaner responses

This release implements the four High-priority findings from the 11 June code review,
all aimed at what the LLM consumer actually receives: ABS payloads a model can read
without a second lookup, responses that stop repeating themselves, and an MCP server
card that reports the full surface.

✨ ABS responses now carry labels, not codes

ABS data is now requested with format=csvfilewithlabels, so every retrieval returns
human-readable labels instead of bare SDMX codes:

Field Before After
Series label 1 / 10001 / 10 / 50 / Q Index numbers / All groups CPI / Original / Australia / Quarterly
unit IN Index Numbers
frequency Q Quarterly
REGION dimension {"code": "50", "label": "50"} {"code": "50", "label": "Australia"}
base_period 25 Sep 2025 = 100.0

ABS metadata also gains a title field (e.g. "Consumer Price Index (CPI)"),
matching what RBA payloads already provided.

The labelled layout pairs every code column with an adjacent label column and replaces
DATAFLOW with STRUCTURE/STRUCTURE_ID/STRUCTURE_NAME — verified against the live
API. The parser detects the paired-column layout automatically and still parses the
legacy code-only layout unchanged
, with dual-format fixtures proving both paths.

series_id is unaffected — it is still built from dimension codes, so existing
series references keep working.

📉 Per-observation dimensions are gone by default

Every observation used to repeat the full dimension dict already present on its series
descriptor — measured at ~3.5× payload inflation on the most common ABS calls, and it
would have grown further once labels landed. Observations are now slim by default:

{ "date": "2025-Q3", "series_id": "MEASURE=1|INDEX=10001|TSEST=10|REGION=50|FREQ=Q", "value": 141.1 }
  • Dimensions remain on each series descriptor and are encoded in series_id.
  • Pass include_observation_dimensions=true to get_abs_data, get_rba_table,
    get_apra_data, or get_economic_series to restore the per-observation dicts —
    served from the same cache, no refetch.
  • The response schema no longer lists dimensions as required on observations; the
    property stays defined for the opt-in case.

🛠 The server card now reports the full surface

/.well-known/mcp/server-card.json previously hard-coded "resources": [] and
"prompts": []. It now enumerates everything the server registers:

  • 2 resourcesausecon://catalogue, ausecon://concepts
  • 3 resource templates — including the previously missing
    ausecon://apra/{publication_id}, which now exposes curated APRA catalogue
    entries like its ABS and RBA counterparts
  • 8 prompts — with names, descriptions, and arguments

🧹 Housekeeping

  • Removed two git-tracked file-sync collision artefacts (* 2.py) and added a
    repository-hygiene test that rejects the pattern so it cannot recur.
  • Backfilled the missing 1.7.0, 1.7.1, and 1.8.0 changelog sections and reconciled
    server.json and the docs with the actual release history.

⚠️ Behavioural changes

  • Label-bearing fields change value on ABS responses: frequency is now "Quarterly"
    rather than "Q", unit is "Index Numbers" rather than "IN", and dimension
    labels are human-readable. Consumers matching on short codes should use
    dimensions[*].code (unchanged) instead.
  • Observations no longer include a dimensions key unless explicitly requested.
  • No tool names or existing inputs changed; the new include_observation_dimensions
    parameter is additive and defaults to false. series_id construction and
    chronological observation ordering are unchanged.

🧪 Verification

  • 803 tests passing, including new dual-format parser coverage, slim/opt-in service
    tests, server-card enumeration tests, and schema validation for both observation shapes.
  • ABS fixtures regenerated from live csvfilewithlabels captures.
  • Live smoke against the ABS API confirming labelled, slim, chronologically ordered
    CPI retrieval end-to-end.

Full changelog: v1.8.0...v1.9.0

v1.8.0 - Chronological observations, correct last_n, and clearer ABS 404s

09 Jun 22:03

Choose a tag to compare

v1.8.0 - Chronological observations, correct last_n, and clearer ABS 404s

This release fixes a family of correctness bugs around "latest value" retrieval that
affected every ABS dataset, and makes ABS error handling honest about what a 404 means.

🐛 Fixed: last_n returned the oldest ABS observations

The ABS SDMX API returns CSV rows in arbitrary order, but latest-N selection assumed
chronological input — so last_n=2 on headline_cpi returned 1986-Q2/Q3 instead of the
two most recent quarters. get_latest_observations and get_economic_series inherited
the same bug.

Observations are now sorted by parsed period before selection:

  • last_n selects the true most recent N observations per series, regardless of
    upstream row order.
  • All retrieval responses are now chronologically ascending — this is a contract
    guarantee, documented in the response schema docs.
  • Date-bound filtering compares parsed periods (interval overlap) instead of raw
    strings, so bounds like start=2025-11-15 interact correctly with quarterly data.

A new shared periods.py module handles all five period formats (YYYY, YYYY-QN,
YYYY-SN, YYYY-MM, YYYY-MM-DD), replacing duplicated parsing in derived.py and
bounds.py — and adding the previously missing semester support.

🐛 Fixed: ABS 404s are no longer one opaque error

The ABS API answers HTTP 404 for two very different situations. The server now tells
them apart by response body:

  • No data in the requested window (NoRecordsFound) → returns a valid empty payload
    with a plain-English metadata.warnings entry instead of raising.
  • Unknown / renamed / retired dataflow → raises AuseconNotFoundError with guidance
    to check search_datasets or list_catalogue.
  • 404s never fall back to stale cached data anymore; transient 5xx/timeout failures
    still do.

📦 Retail Trade (RT) marked as discontinued

The ABS ceased the Retail Trade publication after the June 2025 reference month. The
catalogue entry is now marked ceased (hidden from default discovery, available via
include_ceased=true) with a successor pointer to the Monthly Household Spending
Indicator
(household_spending concept, dataflow HSI_M), surfaced through
describe_dataset. The retail_turnover concept still retrieves the full historical
series (1982–2025).

✨ Improvements

  • New metadata.observations_dropped field records how many observations last_n
    removed; truncated is true exactly when this is non-zero.
  • describe_dataset now reports ceased and successor for every dataset.
  • ABS cache keys use structured encoding, eliminating a theoretical collision between
    absent parameters and literal "None" values.
  • Clearer last_n / count parameter descriptions on the MCP tool surface.

🧪 Testing

  • New regression suite drives a 64-row shuffled ABS fixture end-to-end — the exact
    failure mode that production CSVs exhibit and small ordered fixtures could never catch.
  • Coverage for both 404 paths, the stale-fallback exclusion, semester periods, and
    cache-key collisions.
  • Fixed two pre-existing Windows-only test failures (UTF-8 fixtures read with the
    platform default cp1252 encoding).

⚠️ Behavioural changes

  • ABS payload observation order changes from upstream-arbitrary to chronologically
    ascending (RBA/APRA were already chronological, now guaranteed).
  • ABS "no results in window" requests return an empty payload instead of raising.
  • RT no longer appears in default search_datasets / list_catalogue results.

No breaking schema changes — all new metadata fields are additive and optional.

v1.7.1 Response Schema Path Fix

08 Jun 19:47

Choose a tag to compare

v1.7.1 Response Schema Path Fix

  • Corrected response schema path which was causing the MCP server to locally disconnect after hitting the FileNotFoundError: Could not locate response.schema.json error

v1.7.0 APRA Governance and Source-Native Convenience

07 Jun 13:41

Choose a tag to compare

v1.7.0 - APRA Governance and Source-Native Convenience

This release strengthens APRA governance validation and improves the provenance exposed by the convenience tools, while keeping the public retrieval interface stable.

Highlights

  • Added maintainer-facing APRA governance validation for catalogue coverage, trusted XLSX seeds and fallbacks, audit metadata, table/variant wiring, and AASB 17 scope warnings.
  • Added scripts/audit_apra_governance.py with --check and --json modes for validating APRA source governance outside ordinary CI.
  • Extended list_release_events provenance:
    • ABS and RBA rows are labelled as official_calendar events from official_page sources.
    • APRA rows are labelled as expected_release events from cadence_estimate sources.
    • APRA release rows now include cadence, seed freshness, audit timestamp, and governance status metadata where relevant.
  • Extended describe_dataset with source-native retrieval guidance:
    • Exact identifier controls.
    • Supported filters and date-bound fields.
    • Explicitly unsupported arguments.
    • Safe example calls for get_latest_observations and get_top_observations.
    • APRA governance context and framework-break warnings.
  • Added latest selection metadata support alongside existing top_n metadata in the response schema.

Compatibility

This is an additive release. Existing MCP tool names and public inputs are unchanged:

  • get_latest_observations
  • get_top_observations
  • describe_dataset
  • list_release_events

The release does not add arbitrary APRA URL inputs, paid/authenticated data access, or weaker source-native identifier controls.

Maintainer Notes

APRA release rows should be interpreted as expected cadence estimates, not official release-calendar dates. ABS and RBA release rows continue to represent official calendar entries.

APRA governance validation remains a maintainer command rather than an ordinary CI gate to avoid upstream APRA landing-page flakiness in routine test runs.

Verification

Validated with targeted APRA governance, release-event, convenience, schema, and repository-hygiene tests; Ruff linting; direct response-schema validation; and a live APRA governance audit using:

UV_CACHE_DIR=.uv-cache PYTHONPATH=src uv run python scripts/audit_apra_governance.py --check

v.1.6.0 - APRA data access and convenience improvements

02 Jun 22:08

Choose a tag to compare

AusEcon MCP Server v1.6.0

This release adds release-ready convenience tooling and governance improvements for ABS, RBA, and APRA data access while preserving the existing source-native retrieval contract.

Highlights

  • Added MCP convenience tools for latest observations, top numeric observations, dataset descriptions, and release-event discovery.
  • Added ABS and RBA release-event awareness backed by official release-page parsing.
  • Added APRA release-pulse rows based on curated cadence and seed freshness, without presenting APRA as having a central official release calendar.
  • Strengthened APRA workbook URL resolution with live landing-page discovery, bundled APRA-hosted HTTPS .xlsx seed fallbacks, and trusted catalogue fallback metadata.
  • Scoped APRA AASB 17 framework-break warnings to relevant insurance performance publications only.
  • Added local Australian geography alias handling for semantic geography resolution.
  • Expanded response-schema metadata support for selection provenance, APRA URL resolution, framework breaks, and warnings.
  • Added CodeQL, Dependabot, and Python 3.10-3.13 CI coverage.

New MCP Tools

  • get_latest_observations
  • get_top_observations
  • describe_dataset
  • list_release_events

Contract Notes

Existing expert retrieval tools remain available and the {metadata, series, observations} response shape is preserved. Source-native ABS SDMX keys, RBA table and series IDs, and APRA publication, table, and series IDs remain visible.

Verification

  • uv run --python 3.12 ruff check src tests scripts
  • uv run --python 3.12 pytest (757 passed)
  • uv run --python 3.12 python scripts/update_docs_reference.py --check
  • npm --cache .npm-cache run build from docs-site
  • uv build --wheel --out-dir /private/tmp/ausecon-wheel-check

v1.5.0 - Semantic and Source Expansion

18 May 04:03

Choose a tag to compare

v1.5.0 - Semantic and Source Expansion

This release expands AusEcon MCP’s analyst-facing coverage while preserving the existing {metadata, series, observations} response contract.

Added

  • Added quarterly ABS Household Spending Indicator support via HSI_Q, including:

    • quarterly_household_spending_current
    • quarterly_household_spending_volume
  • Added selected RBA source-native table coverage:

    • a4
    • c1.1
    • c2.1
    • c4.1
    • d14.1
    • f1.1
    • f2.1
    • i5
    • j1
  • Expanded APRA catalogue coverage with additional official publications:

    • Quarterly Superannuation Industry Publication
    • Quarterly Fund-Level Statistics
    • Quarterly General Insurance Performance Statistics
    • Quarterly Life Insurance Performance Statistics
    • Quarterly Private Health Insurance Performance Statistics
    • Quarterly Private Health Insurance Membership Coverage
  • Added APRA-backed semantic concepts for banking, superannuation, insurance, and private health insurance:

    • adi_capital_ratio
    • adi_liquidity_coverage_ratio
    • adi_residential_mortgage_exposure
    • adi_commercial_property_exposure
    • superannuation_total_assets
    • superannuation_member_accounts
    • general_insurance_premium_revenue
    • general_insurance_claims_expense
    • life_insurance_premium_revenue
    • life_insurance_claims_expense
    • phi_premium_revenue
    • phi_claims_expense
    • phi_membership
  • Added transparent derived concepts:

    • mortgage_rate_spread
    • real_mortgage_rate
    • credit_to_gdp
    • household_spending_growth

Changed

  • Extended semantic provenance metadata to support APRA targets through apra_table_id and apra_series_ids.
  • Updated semantic bounds handling so APRA-backed semantic concepts accept the same analyst-friendly date bounds as RBA-backed concepts.
  • Regenerated the semantic concepts reference, increasing the curated concept count to 70.
  • Added APRA period-row workbook parsing support for private health insurance membership-style tables.

Validation

  • Full test suite passes: 716 passed.
  • Ruff checks pass across src, tests, and scripts.
  • Diff whitespace check passes with git diff --check.

Compatibility

This release is backwards-compatible. It does not add new MCP tools and does not change the top-level response shape.

v1.4.1

15 May 15:02

Choose a tag to compare

v1.4.1

Summary

v1.4.1 is a hosted reliability patch for the APRA source-native layer introduced in v1.4.0. It fixes a Render/Smithery runtime issue where large APRA XLSX workbook requests could block the MCP HTTP server long enough for Render health checks to time out and restart the instance.

There are no public API changes.

Fixed

  • Moved APRA XLSX parsing off the async event loop so /healthz and active MCP sessions remain responsive during large workbook parsing.
  • Changed APRA table requests to parse and cache the requested table_id separately instead of always parsing the full publication first.
  • Improved APRA provider logging with download duration, parse duration, response size, series count, and observation count.
  • Reduced hosted workload for APRA requests such as ADI_PROPERTY_EXPOSURES with table_id="tab_1b".

Documentation

  • Added hosted-usage guidance recommending table_id for APRA XLSX workbook requests.
  • Updated roadmap and release metadata for v1.4.1.

Verification

  • Full unit suite: 593 passed
  • APRA live integration: 2 passed
  • Ruff checks passed
  • Docs reference check passed
  • Docs-site npm run check and npm run build passed
  • Python 3.10 targeted compatibility checks passed

Upgrade Notes

No client changes are required. For best hosted performance, APRA users should provide table_id whenever they know the table they need.

v1.4.0 - Adding APRA Data

15 May 12:11

Choose a tag to compare

v1.4.0 - APRA Source-Native Foundation

v1.4.0 adds APRA as AusEcon MCP’s first third official data source, while preserving the existing read-only MCP contract and {metadata, series, observations} response shape.

What’s New

  • Added get_apra_data(...), a new source-native read-only MCP tool for curated APRA public XLSX publications.
  • Added APRA catalogue coverage for:
    • Monthly ADI Statistics
    • Quarterly ADI Performance Statistics
    • ADI Centralised Publication
    • ADI Property Exposures Statistics
  • Extended source filters to support abs | rba | apra across catalogue and discovery tools.
  • Updated README, generated references, docs site, response schema, Smithery/hosted docs, and roadmap wording for ten read-only MCP tools.

Security And Hosted Hardening

  • APRA workbook downloads are restricted to trusted APRA HTTPS hosts.
  • Added workbook parsing limits for compressed size, uncompressed XLSX size, member count, rows, and columns.
  • Added hosted HTTP request-size protection for oversized MCP requests.
  • Updated docs-site dependencies to resolve npm audit findings.

Scope Notes

  • APRA support is source-native only in this release.
  • No APRA-backed semantic get_economic_series concepts are added yet.
  • Treasury, ASX, modelling, forecasting, and v2 response-shape work remain deferred.

Validation

Verified with:

  • Python unit test suite
  • Python 3.10 compatibility test run
  • Ruff linting
  • Generated docs reference check
  • Docs-site type check and production build
  • Python and npm dependency audits
  • Bounded live APRA integration tests