mcpbeat Sign in

publicdata.au MCP Server

by publicdata Your server? Claim it
answering

publicdata.au is answering right now. Last checked 13 min ago. It exposes 12 tools. Last commit 30 Oct 2026.

Search, filter, count and sum Australian government open data, with every version kept.

Uptime history 34 days of history · worst day 99%
34 days agonow
100.0%
Uptime 24h
91 of 91 checks
12
Tools
read from the server
195 ms
Response time
average over 24h
5
Stars
last commit 30 Oct 2026

What changed 252

Every tool that appeared, vanished or quietly changed what it asks for. Recorded since 30 September 2026. No other catalogue keeps this.

30 Oct a tool changed version2 times that day
29 Oct a tool changed version2 times that day
28 Oct a tool changed version
27 Oct a tool changed version5 times that day
26 Oct a tool changed version6 times that day
25 Oct a tool changed version3 times that day
24 Oct a tool changed version19 times that day
23 Oct a tool changed version9 times that day
22 Oct a tool changed version
21 Oct a tool changed version2 times that day
and 242 more, back to 30 September 2026

What the code does

We read the source, 2 d ago · tools taken from the live server · rules 995398eba69f

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.

      <select id="cat-jur" name="jur"><option value="">All governments</option>{% for j in jurisdictions %}<option value="{{ j.seg }}">{{ j.name }}</option>{% endfor %}</select>
Reads files and sends them to the network pipeline/publicdata/explorer.py:204
    files = sorted(p for p in staged.rglob("*") if p.is_file() and p.name != ".done")

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 mcp --transport http https://publicdata.au/mcp
Settings → Connectors → Add custom connector, then paste this address
https://publicdata.au/mcp
~/.codex/config.toml
[mcp_servers.mcp]
url = "https://publicdata.au/mcp"
.cursor/mcp.json
{
  "mcpServers": {
    "mcp": {
      "url": "https://publicdata.au/mcp"
    }
  }
}
.vscode/mcp.json
{
  "servers": {
    "mcp": {
      "type": "http",
      "url": "https://publicdata.au/mcp"
    }
  }
}

Available tools 12

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

backlog
list_backlog
List the datasets people have asked publicdata.au to build, most votes first. Use it to see what is wanted or under way, or to check that a vote counted. To add a vote use upvote_dataset. To read a dataset that is already served use search_datasets. Votes on catalogue records that no entry has claimed yet come back apart, under the vote key search_catalogue uses. The whole backlog comes back in one answer, with no paging, and the call costs nothing against the rate limit.
catalogue
search_catalogue
Search every dataset listed on Australia's government portals, including the many publicdata.au does not serve yet. Its records describe data held elsewhere, which cannot be queried here. Use it when search_datasets finds nothing, to find where a dataset is published, or to pick one for upvote_dataset. query matches every word against the title, summary and publisher, as search_datasets does. A page holds 20 records, those that can take a vote first. Pass next_offset as offset for the next page, up to 5000. Each call costs three of the 60 queries each address may make in 10 seconds.
count
count_rows
Count, sum, average, minimum or maximum rows of a served dataset across the whole table, grouped by up to three fields. For the rows themselves use query_rows. Field names and values for group_by and where come from list_fields. sum and avg need a numeric or true-or-false field. min and max take any field. version can be any date in the version history from get_dataset. A version too large for one file is stored as period parts and answered from them. A filter on the period field reads only the parts it can match, and parts names the periods read. Groups come back largest first, and truncated means raise limit or narrow where. An unknown field or version returns an error naming it. Each call costs two of the 60 queries each address may make in 10 seconds.
dataset
get_dataset
Read a served dataset's data package and full version history: licence, attribution, whole-table files and the version dates diff_versions and the version parameter take. It carries no rows. To answer from the rows use query_rows or count_rows, and for field names use list_fields. slug is lowercase letters, digits and hyphens, the part after /d/ in a dataset page URL, such as au-road-deaths. The whole history comes back in one answer, with no paging. It needs no key or sign-in, and costs nothing against the rate limit. A slug that is not served returns a 404 error.
datasets
search_datasets
Find the slug of a served dataset. Start here for any question about Australian government data, since the other tools read only the datasets this finds. Every word in query must match the title, summary, publisher, keywords or a field name. A word matches its plural and other endings but never as a prefix, so bus does not find business. Up to 50 matches come back in one answer, with no paging. If nothing matches, try fewer or broader words, then search_catalogue. Each call costs one of the 60 queries each address may make in 10 seconds.
diff
diff_versions
Compare two consecutive versions of a served dataset row by row on its key fields, to see what a publisher changed between releases. from and to must be adjacent dates in the version history from get_dataset, older first. Any other pair returns a 404 error, so step through a longer span one pair at a time. A dataset with no key, which list_fields shows as an empty key, gets row counts only, and a dataset with one version has nothing to compare. One answer holds the counts of rows added, removed, changed and unchanged, the keys of the rows added, removed and changed, and up to ten changed rows with their old and new values. The call costs nothing against the rate limit.
fetch
fetch
Read one served dataset's record as text to quote and cite: its summary, publisher, licence, attribution string, newest version and the URL of that version. It is the fetch that ChatGPT deep research and company knowledge call, with an id from search. It carries no rows. To answer from the data use query_rows or count_rows, and for every version and file use get_dataset. One answer holds the text, with the same facts under metadata. An id that is not served returns an error. The call costs nothing against the rate limit.
fields
list_fields
List a served dataset's fields, with their types, descriptions, ranges and values, before querying it. Call it before query_rows or count_rows unless you already know the exact names and values, because where matches values exactly and an unknown field is an error. It also names the key fields diff_versions compares on and the partition fields list_partitions accepts. slug is lowercase letters, digits and hyphens, the part after /d/ in a dataset page URL, such as au-road-deaths. The answer describes the newest version, in one page. The call costs nothing against the rate limit. A slug that is not served or not loaded for queries returns an error.
partitions
list_partitions
List the download files that split a served dataset's newest version by one field, such as one file per year. Use it to hand someone a slice of the data as a file. It gives file links and no rows, so to answer a question use query_rows or count_rows instead, and for the whole table as one file use get_dataset. field must be one of the partition_by fields that list_fields names, and any other field returns a 404 error. Every value comes back in one answer, with no paging. The call costs nothing against the rate limit.
rows
query_rows
Read individual rows of a served dataset, filtered across the whole table. For totals and breakdowns use count_rows, and for files use get_dataset or list_partitions. Field names and values for where, select and order come from list_fields. Filters hold at most 90 values per call, and a list value cannot contain a comma. version can be any date in the version history from get_dataset. A version too large for one file is stored as period parts and answered from them, in period order. A filter on the period field reads only the parts it can match, and parts names the periods read. One page holds up to limit rows, and offset steps through the rest until next_offset is null. An unknown field or version returns an error naming it. Each call costs two of the 60 queries each address may make in 10 seconds.
search
search
Find served datasets by keyword and return each one's id, title and citation URL, in the shape ChatGPT deep research and company knowledge call search with. It runs the same search as search_datasets, so every word in query must match. Pass an id to fetch to read the dataset's licence, attribution and newest version. The same id is the slug that list_fields, query_rows and count_rows take. Up to 50 matches come back in one answer, with no paging. Each call costs one of the 60 queries each address may make in 10 seconds.
upvote
upvote_dataset
Add one anonymous vote for a government dataset that publicdata.au does not serve yet, so it is built sooner. To read a served dataset use search_datasets, and to see the votes so far use list_backlog. slug is a vote key from search_catalogue, such as act-3u5a-ve4j, or a list_backlog slug. A dataset that is served, being built or closed returns an error saying it is not open for votes. No identity is recorded, so a vote cannot be withdrawn, and a second vote from the same caller on the same day adds nothing. The answer gives the dataset's vote total after this call. The call costs nothing against the rate limit.

Endpoints

URLTransportStateLatencyChecked
https://publicdata.au/mcp streamable-http answering 127 ms 13 min ago

Alternatives to publicdata.au

same job, measured the same way
Korean Public Data
by songt-50

Korean government open data - weather, population, law search via data.go.kr

6 tools answering
Socrata MCP Server
by cyanheads

Search and query government open-data portals (Socrata SODA API).

722 installs/wk 6 tools answering
B
Book Metadata
by vetnet183

Search Google Books and Open Library for book metadata, covers, and publication info.

139 installs/wk local only
Data Gov Uk MCP
by mrfentmen

UK government open data search from data.gov.uk. No key required.

313 installs/wk local only
Government Tenders
by dataleadspro

Search government tenders and public procurement opportunities with structured results.

1 tools answering
PNCP
by mcp-dir

Search Brazilian government tenders and public procurement (PNCP): find notices and auctions by keyw

19 tools answering
Vergabeweiser
by vergabeweiser

German public tenders and contract awards: search, deadlines, winners, market figures. Open data.

8 tools answering
One U Education
by oneuedu-mcp

Search Australian courses, education providers and skilled occupations with One U Education.

46 tools answering

publicdata.au — questions

Answers built from our own checks of this server.

What can publicdata.au do?
It exposes 12 tools, read directly from the server on our last check. Among them: count_rows, diff_versions, fetch, get_dataset, list_backlog, list_fields and 6 more. 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 publicdata.au 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 195 ms. The bar chart above shows every period we have measured.
How do I connect publicdata.au?
Copy the ready config from this page. We generate it for Claude Code, Claude Desktop, Codex, Cursor and VS Code, each in the form that client actually reads. It is a remote server, so there is nothing to install — the client connects to the address.
Does publicdata.au need an API key?
No. publicdata.au completed a full MCP handshake with us as an anonymous client and listed its tools without asking for anything. All 12 of them are readable on this page. This is what we observed, not what the docs claim.
How fast is publicdata.au?
It answers our handshake in 195 ms on average, which is faster than 72% of all working MCP servers we measure. The comparison comes from our own checks across the whole registry, every 15 minutes.
Is publicdata.au open source?
The code is open source: it is published under the AGPL-3.0 licence, written in Python, 5 stars on GitHub and 15 open issues. The licence covers the code in the repository, not the hosted service at publicdata.au, which runs on its operator's own terms.