mcpbeat Sign in

ABS Data (observed) MCP Server

answering

ABS Data (observed) is answering right now. Last checked 13 min ago. It exposes 6 tools. Last commit 9 Sep 2026.

Australian Bureau of Statistics data: 1,227 tables, offering only options confirmed to serve data

Uptime history 9 days of history
9 days agonow
100.0%
Uptime 24h
91 of 91 checks
6
Tools
read from the server
341 ms
Response time
average over 24h
0
Stars
last commit 9 Sep 2026

What the code does

We read the source, 20 h ago · tools taken from the live server · rules 3dff92dd89df

Capabilities

What this server is able to do. For an MCP server this is often the job itself — a terminal server runs commands because that is what it is for. Listed so you know what you are plugging in, not as an accusation.

Page executes code built at runtime packages/catalogue/src/artifact/template.html:582
  $("stats").innerHTML = stats.map((s) =>

Is this your server and something here is wrong? Tell us — corrections are free and do not require a plan.

This code can reach further than it looks

We found places where it runs commands, builds paths or queries from values it is given. None of that is a flaw by itself — it becomes one when the code changes, and code changes quietly between releases. We re-read it on every one.

Three servers free · no card

Connect this server

Endpoint below is the one we actually reach during checks — not the one copied from a README. Last verified 13 min ago.

run in your terminal
claude mcp add abs-data --transport http https://abs-data-front-door.aicolab.workers.dev/mcp
~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "abs-data": {
      "url": "https://abs-data-front-door.aicolab.workers.dev/mcp"
    }
  }
}
~/.codex/config.toml
[mcp_servers.abs-data]
url = "https://abs-data-front-door.aicolab.workers.dev/mcp"
.cursor/mcp.json
{
  "mcpServers": {
    "abs-data": {
      "url": "https://abs-data-front-door.aicolab.workers.dev/mcp"
    }
  }
}
.vscode/mcp.json
{
  "mcpServers": {
    "abs-data": {
      "url": "https://abs-data-front-door.aicolab.workers.dev/mcp"
    }
  }
}

Available tools 6

Read directly from the server with tools/list, grouped by what they act on. If a tool disappears, we record the date.

data
get_data
Fetch observations. `select` maps dimension ids to option codes or labels (several allowed); omitted dimensions match everything. The selection is verified live against ABS before fetching, so a call that succeeds always returns real data. Returns up to maxRows observations (default 500, most recent 12 periods per series unless a period range is given), a summary, and the URL for the complete pull. If an option or combination does not exist you are asked to choose from the valid ones.
describe
describe_table
A table's dimensions in key order, its coverage dates, and its observed options. Dimensions with up to 64 options list them inline with labels; larger ones (geography, occupations) say how many and are searchable with search_options.
execute
execute
Run JavaScript in an isolated sandbox whose only capability is `abs`, a client with the same four verbs as this server (searchTables, describeTable, searchOptions, getData) and the same guarantees: every selection is verified against ABS before fetching. Use it for multi-series or multi-table analysis — fetch several series, compute growth rates, rank capitals, join tables — and `return` only the computed result, so large payloads never reach the conversation. No network beyond `abs`. Budgets: 10s CPU, 50 calls, 25s wall clock, 200KB result. Your code runs inside an async function; use `await`; console.log is captured. // The `abs` object available in execute(): interface Abs { searchTables(input: { query?: string; geography?: string; frequency?: "A"|"S"|"Q"|"M"|"W"|"D"; limit?: number }): Promise<{ results: TableSummary[]; total: number }>; describeTable(table: string): Promise<{ table: TableSummary; dimensions: { id: string; position: number; optionCount: number; options?: { code: string; label: string|null }[] }[]; keyFormat: string }>; searchOptions(input: { table: string; dimension: string; query: string; limit?: number }): Promise<{ options: { code: string; label: string|null; parent?: string|null }[]; total: number }>; getData(input: { table: string; select?: Record<string, string|string[]>; startPeriod?: string; endPeriod?: string; lastN?: number; firstN?: number; maxRows?: number }): Promise<{ key: string; rows: { series: string; period: string; value: number|null; unit?: string|null }[]; rowsReturned: number; truncated: boolean; seriesMatched: number; fullDataUrl: string }>; } interface TableSummary { id: string; name: string|null; seriesCount: number; frequencies: string[]; coverage: { from: string|null; to: string|null }; dimensions: string[]; family: string|null; geography: string|null; matchedOptions?: { dimension: string; code: string; label: string|null }[] } // getData throws an Error whose message is JSON: { reason, dimension, message, validOptions?, alternatives? } — catch it, read validOptions, correct and retry.
options
search_options
Find option codes by label text within one dimension of one table — e.g. a suburb name in a geography dimension. Returns codes to use in get_data's select.
search
search
Run JavaScript against the whole catalogue document — every table, its dimensions, coverage and small-dimension options — in an isolated sandbox with no network. Use it to answer questions the fixed verbs make awkward: 'which tables have both an SA2 geography and a quarterly frequency?', 'list every dimension name and how often it appears', 'find codelists whose labels mention rent'. Your code runs inside an async function with `catalogue` in scope; `return` a JSON-serialisable value; console.log output is captured. // The `catalogue` object available in search(): interface Catalogue { provenance: { runId: string; observedAt: string }; corpus: { tables: number; seriesConfirmed: number; seriesImpliedByMetadata: number; density: number }; tables: Record<string, { // keyed by table id, e.g. catalogue.tables.CPI id: string; name: string|null; description: string|null; seriesCount: number; frequencies: string[]; coverage: { from: string|null; to: string|null }; density: number|null; family: string|null; geography: string|null; topics: string[]; dimensions: { id: string; position: number; codelist: string|null; optionCount: number; literal: boolean }[]; }>; options: { literal: Record<string, Record<string, string|null>>; // codelist id -> { code: label } for small codelists (<=64 options) branded: Record<string, number>; // large codelists -> option count (use abs.searchOptions in execute) }; }
tables
search_tables
Find ABS statistical tables (dataflows) by topic words, geography level or frequency. Matches table names, topics and dimension names, and also option labels inside dimensions — a search for 'rent' finds CPI through its INDEX option 'Rents' and reports the match in matchedOptions. Census tables published at several geography levels are collapsed to one result with familyGeographies listing the others (use the geography filter to pick one). Every result is confirmed to serve data — nothing here comes from documentation alone. Start here, then describe_table.

Endpoints

URLTransportStateLatencyChecked
https://abs-data-front-door.aicolab.workers.dev/mcp streamable-http answering 513 ms 13 min ago

Alternatives to ABS Data (observed)

same job, measured the same way
Abs Au
by pipeworx-io

Australian Bureau of Statistics (ABS) Data API MCP.

34 tools answering
Kosis Openapi MCP
by rubatoyd

Korean official statistics (KOSIS) — tables, metadata and observations

local only
OeBB (Austrian Railways)
by slettmayer

OeBB (Austrian Railways) train data: stations, departures, connections, service alerts.

559 installs/wk local only
Bts
by pipeworx-io

U.S. Bureau of Transportation Statistics (BTS) — data.bts.gov open-data portal (Socrata platform).

34 tools answering
Rba
by pipeworx-io

RBA MCP — Reserve Bank of Australia statistics (free, no auth).

35 tools answering
Idescat MCP Server
by idescat

Query official statistics of Catalonia (Idescat): tables, metadata and JSON-stat data via MCP.

7 tools answering
Bls
by pipeworx-io

BLS MCP — Bureau of Labor Statistics public data API (v2)

36 tools answering
Planning
by com-feasibly

Australian planning data for ~455 councils, 7 states — clause-cited, confidence-tagged.

answering

ABS Data (observed) — questions

Answers built from our own checks of this server.

What can ABS Data (observed) do?
It exposes 6 tools, read directly from the server on our last check. Among them: describe_table, execute, get_data, search, search_options, search_tables. The full list with descriptions is on this page — we take it from the server itself via tools/list, not from a README. How MCP servers expose tools in the first place →
Is ABS Data (observed) working right now?
We send a real MCP handshake every 15 minutes. Over the last 24 hours 91 of 91 checks got a reply (100.0%), average response time 341 ms. The bar chart above shows every period we have measured.
How do I connect ABS Data (observed)?
Copy the ready config from this page — we generate it for Claude Code, Claude Desktop, Codex, Cursor and VS Code, each with the file path that client actually reads. It is a remote server, so there is nothing to install — the client connects to the address.
Does ABS Data (observed) need an API key?
No. ABS Data (observed) completed a full MCP handshake with us as an anonymous client and listed its tools without asking for anything. All 6 of them are readable on this page. This is what we observed, not what the docs claim.
How fast is ABS Data (observed)?
It answers our handshake in 341 ms on average, which is faster than 45% of all working MCP servers we measure. The comparison comes from our own checks across the whole registry, every 15 minutes.
Is ABS Data (observed) open source?
We cannot say either way: written in HTML and 0 stars on GitHub, but we could not determine the licence, and without one the code is not open source by default.