MCP server for Australian economic data from the ABS and RBA.
Project description
ausecon-mcp-server
ausecon-mcp-server is a Python Model Context Protocol (MCP) server for structured Australian
macroeconomic and financial data. It exposes a small, source-aware tool surface over Australian
Bureau of Statistics (ABS) and Reserve Bank of Australia (RBA) datasets and returns
provenance-rich JSON suitable for downstream analysis.
The server is intentionally narrow in scope. It does not try to be a general economic chatbot. Instead, it gives MCP clients reliable discovery and retrieval tools that can be composed into research, policy, and analytical workflows.
Status
Releases are published to PyPI and versioned via git tags. See CHANGELOG.md for release history.
The current release includes:
- curated discovery across expanded ABS and RBA catalogues
- deterministic search ranking across dataset IDs, aliases, names, tags, and descriptions
- active-only RBA table discovery by default, with optional inclusion of discontinued tables
- ABS dataset structure retrieval
- ABS data retrieval in a normalised response shape
- compatibility with current live ABS structure and CSV payload shapes
- RBA table listing and retrieval
- a semantic resolver whose curated default concepts now narrow to concrete series
- stricter validation for tool inputs and parameter ranges
- source-aware upstream and parse error messages
- retry logic for transient ABS and RBA upstream failures
- provider caching keyed to upstream requests rather than client-side filters
- support for RBA event-style tables such as
a2
At this stage, the server should still be treated as an opinionated early release rather than a complete coverage layer for all ABS and RBA content.
Tool Surface
The MCP server currently exposes the following tools:
| Tool | Purpose | Key inputs |
|---|---|---|
search_datasets |
Search the curated ABS and RBA catalogue with deterministic ranking | query, source |
get_abs_dataset_structure |
Retrieve ABS SDMX dimensions and code lists | dataflow_id |
get_abs_data |
Retrieve ABS data in a normalised response shape | dataflow_id, key, start_period, end_period, last_n, updated_after |
list_rba_tables |
List curated RBA statistical tables | category, include_discontinued |
get_rba_table |
Retrieve an RBA statistical table in a normalised response shape | table_id, series_ids, start_date, end_date, last_n |
get_economic_series |
Resolve a small set of high-value economic concepts to ABS or RBA retrievals | concept, variant, geography, frequency, start, end |
Currently supported semantic concepts
get_economic_series currently supports:
cash_rate_targetheadline_cpitrimmed_mean_inflationgdp_growth
By default, these currently resolve to the following narrowed series:
cash_rate_target-> RBAa2cash rate target series (ARBAMPCNCRT)headline_cpi-> ABSCPIall groups CPI index for Australia, quarterly (1.10001.10.50.Q)trimmed_mean_inflation-> RBAg1year-ended trimmed mean inflation (GCPIOCPMTMYP)gdp_growth-> ABSANA_AGGquarterly real GDP growth (M2.GPM.20.AUS.Q)
variant, geography, and frequency are validated against the catalogue entry. For ABS
datasets, populated variants can be literal SDMX keys or partial fragments that are completed
against the live structure. For RBA tables, populated variants narrow the response to the declared
series IDs. Variants that are declared but not yet populated raise a clear "not yet wired" error.
Discovery And Validation
search_datasetsprioritises exact dataset or table IDs, then exact aliases, then exact names, then broader multi-term matches.- common economist phrasing is normalised for ranking, including terms such as "jobless", "mortgage", "rates", and "fx".
- discontinued RBA tables are excluded from
search_datasetsby default. list_rba_tablesexcludes discontinued tables by default and returns adiscontinuedboolean field on every row.- empty identifiers and empty search queries are rejected before any network call.
last_nmust be positive when provided.get_abs_datavalidates annual, quarterly, monthly, and half-yearly ABS period strings.get_rba_tablevalidates ISO date bounds.get_economic_seriesvalidatesstartandendafter resolving the target source.- transient ABS and RBA upstream failures are retried automatically.
- malformed upstream payloads are surfaced as source-aware parse failures.
search_datasetsscores should be treated as ranking metadata rather than a stable contract.
Response Shape
Data retrieval tools return a normalised payload with three top-level sections:
metadata: source, dataset or table identifier, retrieval URL, and related retrieval metadataseries: long-form series descriptors including labels, units, frequency, and dimensionsobservations: long-form observations keyed bydate,series_id, andvalue; some RBA observations may also includeraw_valuewhen the upstream cell is non-numeric
This design keeps source provenance explicit while making downstream processing simpler in Python, R, or other analytical environments.
Discovery Coverage
The curated catalogue is still intentionally selective, but v0.5.0 covers the main analyst
workflows more credibly:
- ABS prices and inflation, labour, national accounts, activity, housing and construction, external sector, and lending indicators
- RBA monetary policy, payments, money and credit, interest rates and yields, exchange rates, inflation, output and labour, and external sector tables
Requirements
- Python
3.10+ uv(for theuvxlauncher used by every client below)
Installation
The server is published to PyPI and is intended to
be launched by an MCP client on demand via uvx. No manual clone or
install is required — the client configurations below handle everything.
To confirm the server is reachable on your machine, you can run it once by hand:
uvx ausecon-mcp-server
uvx will download the package into an isolated, cached environment the first time. The server
speaks MCP over standard input/output and waits for a client to connect, so expect it to sit idle
until an MCP client attaches.
Connecting An MCP Client
This repository currently provides a local stdio MCP server only. Claude API / Anthropic MCP connector setups and other remote HTTP-based MCP connectors require a separately hosted HTTP server, which is out of scope for this repository today.
Claude Desktop
An example Claude Desktop configuration is included at examples/claude_desktop_config.json:
{
"mcpServers": {
"ausecon": {
"command": "uvx",
"args": ["ausecon-mcp-server"]
}
}
}
Claude Code
Add the server with the Claude Code CLI:
claude mcp add --transport stdio ausecon -- uvx ausecon-mcp-server
Codex
Add the server with the Codex CLI:
codex mcp add ausecon -- uvx ausecon-mcp-server
Cursor
Add an entry to ~/.cursor/mcp.json (or the project-level .cursor/mcp.json):
{
"mcpServers": {
"ausecon": {
"command": "uvx",
"args": ["ausecon-mcp-server"]
}
}
}
VS Code
Add an entry to .vscode/mcp.json in your workspace (or the user-level equivalent):
{
"servers": {
"ausecon": {
"type": "stdio",
"command": "uvx",
"args": ["ausecon-mcp-server"]
}
}
}
Resources
In addition to tools, the server exposes the curated catalogue as MCP
resources. Clients can render these in a resource picker without
calling search_datasets first.
| URI | Returns |
|---|---|
ausecon://catalogue |
Flat index of every curated ABS and RBA entry (id, source, name, description, category, frequency, tags). |
ausecon://abs/{dataflow_id} |
Full curated catalogue entry for a single ABS dataflow (e.g. ausecon://abs/CPI). |
ausecon://rba/{table_id} |
Full curated catalogue entry for a single RBA statistical table (e.g. ausecon://rba/g1). |
All resources are read-only, served as application/json, and sourced
from the static curated catalogue — no network calls are made to
render them.
Prompts
The server registers four prompt templates that chain the existing tools into common economist workflows. Clients such as Claude Desktop surface these as slash-commands.
| Prompt | Arguments | What it does |
|---|---|---|
summarise_latest_inflation |
months: int = 12 |
Pulls headline and trimmed-mean CPI via get_economic_series and summarises them against the RBA 2–3% target band. |
compare_cash_rate_to_cpi |
start: str, end: str | None |
Narrates the path of the cash rate target against headline CPI over the window. |
macro_snapshot |
as_of: str | None |
Assembles a compact snapshot table of cash rate, headline CPI, trimmed-mean CPI, and real GDP growth. |
discover_dataset |
topic: str |
Runs search_datasets and list_rba_tables for the topic, then recommends the top two candidates. |
Each tool is also annotated with readOnlyHint and openWorldHint so
compliant clients can indicate that the server only reads from
external, evolving sources.
How To Use The Server
The most reliable workflow is:
- Use
search_datasetswhen you do not yet know the exact ABS dataset or RBA table. - Use
get_abs_dataset_structurebeforeget_abs_datawhen you need to inspect valid ABS dimensions and keys. - Use
get_abs_dataorget_rba_tablefor retrieval once you know the target dataset or table. - Use
get_economic_seriesonly for the small curated semantic shortcuts listed above.
Example client requests
In an MCP-enabled client, the user can ask for things such as:
- "Search for datasets related to trimmed mean inflation."
- "Show me the ABS structure for CPI."
- "Fetch the last 12 observations from RBA table g1."
- "Get headline CPI from 2023 onwards."
- "Get quarterly real GDP growth from 2020."
Example retrieval patterns
Discover relevant datasets:
search_datasets(query="cash rate")
Inspect active inflation tables and optionally include discontinued RBA coverage:
list_rba_tables(category="inflation", include_discontinued=True)
Inspect ABS dataset structure before querying:
get_abs_dataset_structure(dataflow_id="CPI")
Fetch a filtered ABS dataset:
get_abs_data(
dataflow_id="CPI",
key="all",
start_period="2024-Q1",
end_period="2024-Q4",
last_n=4
)
Fetch an RBA table:
get_rba_table(
table_id="g1",
last_n=8
)
Fetch an event-style RBA policy table:
get_rba_table(
table_id="a2",
last_n=8
)
Resolve a curated economic concept:
get_economic_series(
concept="cash_rate_target",
start="2020-01-01"
)
Resolve trimmed mean inflation using the default narrowed series:
get_economic_series(
concept="trimmed_mean_inflation",
start="2020-01-01"
)
Resolve quarterly real GDP growth:
get_economic_series(
concept="gdp_growth",
start="2020-Q1"
)
Development
Install the development environment:
uv sync --python 3.12
Run the test suite:
uv run pytest
Run linting:
uv run ruff check src tests
Repository Structure
src/ausecon_mcp/
catalogue/ Curated ABS and RBA discovery metadata
parsers/ Source-specific parsers for ABS and RBA payloads
providers/ HTTP retrieval and cache-aware source adapters
cache.py Simple in-memory TTL cache
models.py Shared normalised data structures
server.py FastMCP server entry point and tool registration
tests/
examples/
Releasing
If you want to publish a release from this repository:
- ensure
pyproject.tomlcontains the intended version - commit the release-ready state
- create an annotated git tag such as
vX.Y.Z - push the branch and the tag to GitHub
- create a GitHub Release from that tag with release notes
An example tag command is:
git tag -a vX.Y.Z -m "vX.Y.Z"
git push origin main
git push origin vX.Y.Z
Once the tag is on GitHub, you can create the release in the GitHub interface under "Releases" -> "Draft a new release".
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ausecon_mcp_server-0.6.0.tar.gz.
File metadata
- Download URL: ausecon_mcp_server-0.6.0.tar.gz
- Upload date:
- Size: 134.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c2e20b4d2f04ea907f6bc5613cd90787e61cb265bee1a865e015db02c31efc5b
|
|
| MD5 |
bb2c76d3494b3e374da0c5a55fdbb908
|
|
| BLAKE2b-256 |
93f2c782f212261ba12919515e9f01b46c589e8c451dfcb52ae7750782719924
|
Provenance
The following attestation bundles were made for ausecon_mcp_server-0.6.0.tar.gz:
Publisher:
release.yml on AnthonyPuggs/ausecon-mcp-server
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ausecon_mcp_server-0.6.0.tar.gz -
Subject digest:
c2e20b4d2f04ea907f6bc5613cd90787e61cb265bee1a865e015db02c31efc5b - Sigstore transparency entry: 1332660801
- Sigstore integration time:
-
Permalink:
AnthonyPuggs/ausecon-mcp-server@481a91339eef30c7f131e5feb62c5e8caa092274 -
Branch / Tag:
refs/tags/v0.6.0 - Owner: https://github.com/AnthonyPuggs
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@481a91339eef30c7f131e5feb62c5e8caa092274 -
Trigger Event:
push
-
Statement type:
File details
Details for the file ausecon_mcp_server-0.6.0-py3-none-any.whl.
File metadata
- Download URL: ausecon_mcp_server-0.6.0-py3-none-any.whl
- Upload date:
- Size: 37.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
24c0207c1816934e52fddb24661357d548c0a2bfe55d0ea8317552c29f30259e
|
|
| MD5 |
d850450d4f87f3b51e0e04439199c471
|
|
| BLAKE2b-256 |
22e8d4aed731e6ab2a56c080a0816962404329f4d0c583ea7fd46efb5ac715ef
|
Provenance
The following attestation bundles were made for ausecon_mcp_server-0.6.0-py3-none-any.whl:
Publisher:
release.yml on AnthonyPuggs/ausecon-mcp-server
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ausecon_mcp_server-0.6.0-py3-none-any.whl -
Subject digest:
24c0207c1816934e52fddb24661357d548c0a2bfe55d0ea8317552c29f30259e - Sigstore transparency entry: 1332660902
- Sigstore integration time:
-
Permalink:
AnthonyPuggs/ausecon-mcp-server@481a91339eef30c7f131e5feb62c5e8caa092274 -
Branch / Tag:
refs/tags/v0.6.0 - Owner: https://github.com/AnthonyPuggs
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@481a91339eef30c7f131e5feb62c5e8caa092274 -
Trigger Event:
push
-
Statement type: