loading…
Search for a command to run...
loading…
Ask Claude "What's the unemployment rate in NSW?" and get a real answer. Wraps the Australian Bureau of Statistics API with plain-English tools and curated mapp
Ask Claude "What's the unemployment rate in NSW?" and get a real answer. Wraps the Australian Bureau of Statistics API with plain-English tools and curated mappings for 10 economic indicators (unemployment, inflation, wages, GDP, housing, population).
tests PyPI Python License: MIT Glama MCP server quality
Ask Claude about the Australian economy and get real, current numbers — not "I don't have access to that data." This MCP server gives Claude (and other MCP clients like Cursor) live access to the ABS Data API, with curated mappings for the 10 most-asked Australian economic indicators.

Behind the scenes it wraps SDMX 2.1, but you never see SDMX codes — just plain-English filters like region: "nsw" and measure: "unemployment_rate". Five tools, ten curated dataflows (Labour Force, CPI, Wage Price Index, Job Vacancies, Average Weekly Earnings, GDP / National Accounts, quarterly + annual Estimated Resident Population, Building Approvals, Lending Indicators), and 1,200+ other ABS dataflows accessible via raw codes.
Companion to rba-mcp (Reserve Bank of Australia — cash rate, FX, lending rates), ato-mcp (Australian Taxation Office — postcode-level personal tax, company tax by industry, corporate tax transparency, ACNC charity register), and au-weather-mcp (Australian weather — 21 curated locations + postcode/place-name lookup, current observations, 16-day forecasts, 80yr historical archive). Install all four for the full AU macro / regulator / tax / climate stack.
Once installed, your LLM can answer questions like:
| Question | Real response (verified) |
|---|---|
| What's the unemployment rate in NSW? | 4.27% (Mar 2026) |
| AU annual CPI inflation? | 4.60% (Mar 2026) |
| AU annual wage growth? | 3.40% (Q4 2025) |
| Average weekly earnings in Australia? | $1,562 (Sep–Oct 2025) |
| AU GDP quarterly growth? | 0.80% (Q4 2025) |
| AU GDP per capita? | $24,900/qtr (Q4 2025) |
| Job vacancies in NSW? | 101,200 (Q1 2026) |
| Dwelling approvals in NSW? | 4,400/month (Mar 2026) |
| New NSW housing loan commitments? | $19.7B (Q4 2025) |
| Quarterly population of Australia? | 27.7M (Q3 2025) |
Every answer comes with the period, units, and a link back to the ABS source page. Comparisons and time-series queries work just as well — see Worked examples below.
# After publish:
uvx --upgrade abs-mcp
# Local dev install:
uv pip install -e .
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"abs": {
"command": "uvx",
"args": ["--upgrade", "abs-mcp"]
}
}
}
Why
--upgrade?uvx abs-mcp(without the flag) uses whatever wheel is cached and never adopts new PyPI releases on its own — Claude Desktop's MCP child process keeps running the same wheel until you fully quit the app and refresh the cache by hand.--upgrademakes uvx check PyPI on each launch and pull a newer release if one exists. To verify which version is currently serving you, look at theserver_versionfield on anyDataResponse(added in 0.2.10).
For a local checkout (before PyPI publish):
{
"mcpServers": {
"abs": {
"command": "uv",
"args": ["run", "--directory", "/absolute/path/to/abs-mcp", "abs-mcp"]
}
}
}
Restart Claude Desktop. The abs server appears in the tools panel with five tools.
Add to ~/.cursor/mcp.json (or workspace .cursor/mcp.json):
{
"mcpServers": {
"abs": {
"command": "uvx",
"args": ["--upgrade", "abs-mcp"]
}
}
}
| Tool | What it does |
|---|---|
search_datasets(query, limit=10) |
Fuzzy-search ABS dataflow names. Returns the top matches. |
describe_dataset(dataset_id) |
Plain-English description of a dataflow's dimensions and values. |
get_data(dataset_id, filters, start_period, end_period, format) |
Query a dataflow with filters. Returns clean records (default), grouped series, or CSV. |
latest(dataset_id, filters) |
Just the most recent observation(s) — wraps get_data with lastNObservations=1. |
list_curated() |
The ten dataflow IDs that have hand-curated plain-English support. |
For these ten, filters accepts plain-English values (e.g. "region": "nsw" instead of "REGION": "1"):
Any other ABS dataflow still works — pass raw SDMX dimension IDs and codes.
"What's the current unemployment rate in NSW?"
Claude calls:
latest(dataset_id="LF", filters={"region": "nsw", "measure": "unemployment_rate"})
Returns:
{
"dataset_id": "LF",
"dataset_name": "Labour Force",
"query": {"region": "nsw", "measure": "unemployment_rate"},
"period": {"start": "2026-03", "end": "2026-03"},
"unit": "Percent",
"records": [
{
"period": "2026-03",
"value": 4.27,
"dimensions": {"measure": "Unemployment rate", "region": "New South Wales", "sex": "Persons"},
"unit": "Percent"
}
],
"source": "Australian Bureau of Statistics",
"retrieved_at": "2026-05-11T03:14:22Z",
"abs_url": "https://www.abs.gov.au/statistics/labour/employment-and-unemployment/labour-force-australia"
}
"Show me NSW housing approvals over the last two years"
get_data(dataset_id="BA_GCCSA", filters={"region": "nsw", "measure": "dwelling_units"}, start_period="2024")
"Compare quarterly CPI in Sydney vs Melbourne"
get_data(dataset_id="CPI", filters={"region": ["sydney", "melbourne"], "measure": "change_year"}, start_period="2023")
ABS uses different period formats per dataflow. Pass start_period / end_period in the matching format:
| Dataflows | Frequency | Format | Example |
|---|---|---|---|
| LF, BA_GCCSA | Monthly | YYYY-MM |
"2026-03" |
| CPI, WPI, JV, ANA_AGG, LEND_HOUSING, ERP_Q | Quarterly | YYYY-Q* or YYYY-MM |
"2025-Q4" |
| AWE | Half-yearly | YYYY-S* |
"2025-S2" |
| ABS_ANNUAL_ERP_ASGS2021 | Annual | YYYY |
"2025" |
The running MCP server reports its version on every DataResponse:
{ ..., "server_version": "0.2.11", ... }
If you see a value below the latest on PyPI, your uvx cache is stale. Either switch to ["--upgrade", "abs-mcp"] in your config (recommended), or refresh manually:
uvx --refresh abs-mcp --help
# Then fully quit and relaunch Claude Desktop (Cmd+Q — window-close is not enough).
Claude Desktop's MCP child processes are long-lived; refreshing the wheel cache does not restart an already-running server. Cold app launch is required.
git clone https://github.com/Bigred97/abs-mcp.git
cd abs-mcp
uv sync --extra dev
uv pip install -e .
# Unit tests (no network)
uv run pytest
# Live integration tests (hits real ABS API)
uv run pytest -m live
The SQLite cache lives at ~/.abs-mcp/cache.db. Catalogue refreshes every 24h, codelists every 7 days, data responses every hour, latest 15 minutes. Delete the file to force a refresh.
When you ask Claude an ABS question, it picks the right tool, fills in the curated filters, and calls the live ABS API. You see the reasoning + tool call inline:

Claude does the picking; this server does the SDMX translation, unit attribution, and clean response shaping. You don't have to know what M13.3.1599.20.1.M means — and neither does Claude.
The one existing community option (seansoreilly/abs) exposes a single query_dataset tool that passes raw SDMX through. This package offers semantic tools and curated mappings for the highest-value dataflows so an LLM can answer real questions without you needing to know what M13.3.1599.20.1.M means.
See CHANGELOG.md for release history.
MIT — Harry Vass, 2026.
Выполни в терминале:
claude mcp add australian-bureau-of-statistics -- npx