MCP 服务器

publicdata.au

au.publicdata/mcp
数据与分析 搜索与研究 公开且可连接 MCP 2025-11-25

此 MCP 可以做什么

Searches and queries Australian government open datasets, including filtering, aggregation, version comparison, and catalogue discovery.

count_rows
Count and sum 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 must be one of the two newest versions. 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.
只读 幂等
输入模式
{'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'Dataset slug from search_datasets'}, 'limit': {'type': 'integer', 'default': 100, 'maximum': 1000, 'minimum': 1, 'description': 'Groups to return, 1 to 1000. 100 when absent.'}, 'where': {'type': 'object', 'description': 'Filters by field name, applied to the whole table. A value may be a scalar for an exact, case-sensitive match, a list of scalars to match any of them, null to match blank or suppressed cells, {"min": n, "max": n} for an inclusive range, or {"like": "*text*"} for a case-insensitive match where * is the wildcard. A blank cell never matches a scalar, a list or a range.', 'additionalProperties': True}, 'metric': {'type': 'string', 'default': 'count', 'description': 'count, or sum, avg, min or max of a field written as sum.field_name. count when absent.'}, 'version': {'type': 'string', 'description': 'A version date, YYYY-MM-DD, from get_dataset. The newest version loaded for queries when absent.'}, 'group_by': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 3, 'description': 'Fields to group by, for example ["crash_severity"]. One total when absent.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'required': ['version', 'group_by', 'metric', 'groups', 'truncated', 'matched', 'query'], 'properties': {'query': {'type': 'string', 'description': 'The query API URL that gives the same answer'}, 'groups': {'type': 'array', 'items': {'type': 'object'}, 'description': 'One object per group, holding the group_by fields and the metric value, largest first'}, 'metric': {'type': 'string'}, 'matched': {'type': 'integer', 'description': 'Rows in the whole table that match where'}, 'version': {'type': ['string', 'null'], 'description': 'The version answered'}, 'group_by': {'type': 'array', 'items': {'type': 'string'}}, 'truncated': {'type': 'boolean', 'description': 'True when more groups exist than limit'}, 'attribution': {'type': ['string', 'null'], 'description': "The publisher's attribution string, to show with any answer"}}}
diff_versions
Compare 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. The call costs nothing against the rate limit.
只读 幂等
输入模式
{'type': 'object', 'required': ['slug', 'from', 'to'], 'properties': {'to': {'type': 'string', 'description': 'Newer version date, YYYY-MM-DD'}, 'from': {'type': 'string', 'description': 'Older version date, YYYY-MM-DD'}, 'slug': {'type': 'string', 'description': 'Dataset slug from search_datasets'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'required': ['dataset', 'from', 'to', 'rows_from', 'rows_to', 'key', 'schema'], 'properties': {'to': {'type': 'string', 'description': 'Newer version date'}, 'key': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Key fields compared on. Empty when none is declared'}, 'from': {'type': 'string', 'description': 'Older version date'}, 'note': {'type': 'string', 'description': 'Present when no key is declared and only row counts are compared'}, 'added': {'type': 'integer'}, 'schema': {'type': 'object', 'description': 'Fields added, removed and retyped between the versions'}, 'changed': {'type': 'integer'}, 'dataset': {'type': 'string'}, 'removed': {'type': 'integer'}, 'rows_to': {'type': 'integer'}, 'examples': {'type': 'array', 'description': 'Up to ten changed rows, each with its key and the fields that changed from and to'}, 'rows_from': {'type': 'integer'}, 'truncated': {'type': 'boolean', 'description': 'True when a key list stops at its cap'}, 'unchanged': {'type': 'integer'}, 'added_keys': {'type': 'array'}, 'changed_keys': {'type': 'array'}, 'removed_keys': {'type': 'array'}}}
get_dataset
Read a dataset
Read a served dataset's data package and full version history. Use it to download the whole table, check the licence, or find version dates for diff_versions and the version parameter. For field names use list_fields. To answer a question from the rows use query_rows or count_rows, which need no download. 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.
只读 幂等
输入模式
{'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'Dataset slug from search_datasets'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'required': ['datapackage', 'versions'], 'properties': {'versions': {'description': 'Every version with its date, the date its data is as at, row count, source hash and fetch time'}, 'datapackage': {'type': 'object', 'description': 'The Frictionless data package: description, licence, attribution string, source, and resources with the URL, format and size of the whole file in each format'}}}
list_backlog
List the build 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.
只读 幂等
输入模式
{'type': 'object', 'required': [], 'properties': {}, 'additionalProperties': False}
输出模式
{'type': 'object', 'required': ['entries', 'catalogue_votes'], 'properties': {'entries': {'type': 'array', 'items': {'type': 'object', 'required': ['slug', 'title', 'status', 'votes'], 'properties': {'slug': {'type': 'string', 'description': 'The key upvote_dataset takes'}, 'title': {'type': 'string'}, 'votes': {'type': 'integer'}, 'source': {'type': ['string', 'null'], 'description': "The publisher's own page for the data"}, 'status': {'enum': ['backlog', 'assessing', 'building', 'blocked'], 'type': 'string', 'description': 'backlog and assessing wait for votes, building is under way, blocked cannot be built yet'}, 'summary': {'type': ['string', 'null']}, 'publisher': {'type': ['string', 'null']}, 'blocked_reason': {'type': ['string', 'null'], 'description': 'Why a blocked entry cannot be built yet'}}}, 'description': 'Register entries that are not live yet, most votes first'}, 'catalogue_votes': {'type': 'array', 'items': {'type': 'object', 'required': ['vote', 'votes'], 'properties': {'vote': {'type': 'string', 'description': "The record's vote key, which search_catalogue finds"}, 'votes': {'type': 'integer'}}}, 'description': 'Votes on catalogue records no register entry has claimed yet, most first'}}}
list_fields
List a dataset's 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.
只读 幂等
输入模式
{'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'Dataset slug from search_datasets'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'required': ['slug', 'version', 'fields', 'key', 'partition_by'], 'properties': {'key': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Fields that identify a row, compared on by diff_versions. Empty when none is declared'}, 'rows': {'type': 'integer', 'description': 'Rows in that version'}, 'slug': {'type': 'string'}, 'title': {'type': 'string'}, 'fields': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'type'], 'properties': {'max': {}, 'min': {}, 'name': {'type': 'string'}, 'type': {'type': 'string'}, 'values': {'type': 'array'}, 'description': {'type': 'string'}}}, 'description': "Each field's name, type and publisher's description, with min and max for numbers and dates and values when it holds few"}, 'licence': {'type': ['string', 'null']}, 'version': {'type': 'string', 'description': 'The version the fields describe'}, 'publisher': {'type': ['string', 'null']}, 'attribution': {'type': ['string', 'null'], 'description': "The publisher's attribution string, to show with any answer"}, 'partition_by': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Fields list_partitions accepts'}}}
list_partitions
List partition files
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. To answer a question use query_rows or count_rows instead, and for the whole table 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.
只读 幂等
输入模式
{'type': 'object', 'required': ['slug', 'field'], 'properties': {'slug': {'type': 'string', 'description': 'Dataset slug from search_datasets'}, 'field': {'type': 'string', 'description': 'A partition field named in the data package, for example crash_year or loc_local_government_area'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'required': ['field', 'version_base', 'partitions'], 'properties': {'field': {'type': 'string'}, 'partitions': {'type': 'array', 'items': {'type': 'object', 'required': ['value', 'rows', 'url'], 'properties': {'url': {'type': 'string'}, 'rows': {'type': 'integer'}, 'value': {}}}, 'description': 'One entry per value: the value, its row count and the URL of a JSON file with every row holding it'}, 'version_base': {'type': 'string', 'description': 'The version these files belong to'}}}
query_rows
Query rows
Read individual rows of a served dataset, filtered across the whole table. For totals and breakdowns use count_rows. 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 must be one of the two newest versions. Page with offset 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.
只读 幂等
输入模式
{'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'Dataset slug from search_datasets'}, 'limit': {'type': 'integer', 'default': 50, 'maximum': 500, 'minimum': 1, 'description': 'Rows to return, 1 to 500. 50 when absent.'}, 'order': {'type': 'string', 'description': "field.asc or field.desc, comma-separated. The publisher's row order when absent."}, 'where': {'type': 'object', 'description': 'Filters by field name, applied to the whole table. A value may be a scalar for an exact, case-sensitive match, a list of scalars to match any of them, null to match blank or suppressed cells, {"min": n, "max": n} for an inclusive range, or {"like": "*text*"} for a case-insensitive match where * is the wildcard. A blank cell never matches a scalar, a list or a range.', 'additionalProperties': True}, 'offset': {'type': 'integer', 'default': 0, 'minimum': 0, 'description': 'Rows to skip. next_offset in each answer gives the next page.'}, 'select': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Fields to return. Every field when absent.'}, 'version': {'type': 'string', 'description': 'A version date, YYYY-MM-DD, from get_dataset. The newest version loaded for queries when absent.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'required': ['version', 'rows', 'matched', 'next_offset', 'query'], 'properties': {'rows': {'type': 'array', 'items': {'type': 'object'}, 'description': 'The rows, with the fields in select or every field'}, 'query': {'type': 'string', 'description': 'The query API URL that gives the same answer'}, 'matched': {'type': 'integer', 'description': 'Rows in the whole table that match where'}, 'version': {'type': ['string', 'null'], 'description': 'The version answered'}, 'attribution': {'type': ['string', 'null'], 'description': "The publisher's attribution string, to show with any answer"}, 'next_offset': {'type': ['integer', 'null'], 'description': 'offset for the next page, or null on the last'}}}
search_catalogue
Search government portals
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.
只读 幂等
输入模式
{'type': 'object', 'required': ['query'], 'properties': {'query': {'type': 'string', 'description': 'Words from a title, description or publisher'}, 'offset': {'type': 'integer', 'default': 0, 'maximum': 5000, 'minimum': 0, 'description': 'Rows to skip. next_offset in each answer gives the next page.'}, 'jurisdiction': {'enum': ['cth', 'nsw', 'vic', 'qld', 'wa', 'sa', 'tas', 'act', 'nt'], 'type': 'string', 'description': 'One government. All when absent.'}, 'votable_only': {'type': 'boolean', 'default': False, 'description': 'Leave out records that cannot take a vote'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'required': ['catalogue_read', 'rows'], 'properties': {'rows': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'title', 'state', 'vote'], 'properties': {'id': {'type': 'string'}, 'jur': {'type': 'string'}, 'url': {'type': 'string', 'description': "The record on the publisher's portal"}, 'page': {'type': 'string'}, 'vote': {'type': 'string', 'description': 'The key upvote_dataset takes'}, 'state': {'enum': ['votable', 'chosen', 'served', 'closed'], 'type': 'string', 'description': 'votable or chosen takes a vote, served is already readable, closed cannot be built'}, 'title': {'type': 'string'}, 'reason': {'type': ['string', 'null'], 'description': 'Why a closed record cannot be built'}, 'formats': {'type': 'string'}, 'licence': {'type': 'string'}, 'summary': {'type': 'string'}, 'modified': {'type': 'string'}, 'publisher': {'type': 'string'}, 'publisher_page': {'type': 'string'}}}}, 'total': {'type': 'integer', 'description': 'Records that match'}, 'records': {'type': 'integer'}, 'next_offset': {'type': ['integer', 'null'], 'description': 'offset for the next page, or null on the last'}, 'catalogue_read': {'type': 'string', 'description': 'Date the portal lists were read'}}}
search_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.
只读 幂等
输入模式
{'type': 'object', 'required': ['query'], 'properties': {'query': {'type': 'string', 'description': 'Words from a title, publisher or field name'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'required': ['results'], 'properties': {'results': {'type': 'array', 'items': {'type': 'object', 'required': ['slug', 'title'], 'properties': {'page': {'type': ['string', 'null'], 'description': 'The dataset page on publicdata.au'}, 'slug': {'type': 'string', 'description': 'The id every other tool takes'}, 'title': {'type': 'string'}, 'latest': {'type': ['string', 'null'], 'description': "URL of the newest version's whole file"}, 'licence': {'type': ['string', 'null'], 'description': 'Licence id, such as CC-BY-4.0'}, 'publisher': {'type': ['string', 'null']}}}, 'description': 'Matches, best first when the search index is loaded'}}}
upvote_dataset
Vote for a 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, and a second vote from the same caller on the same day adds nothing. The call costs nothing against the rate limit.
幂等
输入模式
{'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'The vote key of a search_catalogue row, or a slug from /backlog.json'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'required': ['slug', 'votes'], 'properties': {'slug': {'type': 'string'}, 'votes': {'type': 'integer', 'description': "The dataset's vote total after this call"}}}
已移除
vote_for_dataset
2026年10月2日 02:40
已添加
upvote_dataset
2026年10月2日 02:40
已添加
list_backlog
2026年10月2日 02:40
已更改
search_catalogue
2026年10月2日 02:40
已更改
count_rows
2026年10月2日 02:40
已更改
query_rows
2026年10月2日 02:40
已更改
list_fields
2026年10月2日 02:40
已更改
get_dataset
2026年10月2日 02:40
已更改
search_datasets
2026年10月2日 02:40
已添加
vote_for_dataset
2026年9月30日 02:40
已添加
search_catalogue
2026年9月30日 02:40
已添加
diff_versions
2026年9月30日 02:40
已添加
count_rows
2026年9月30日 02:40
已添加
query_rows
2026年9月30日 02:40
已添加
list_partitions
2026年9月30日 02:40
已添加
list_fields
2026年9月30日 02:40
已添加
get_dataset
2026年9月30日 02:40
已添加
search_datasets
2026年9月30日 02:40