Skip to main content

ato-mcp

mcp-name: io.ausdata/ato-mcp

PyPI Python License Tests CodeQL Glama MCP server quality

MCP server for Australian Taxation Office statistics. Plain-English access to personal tax by postcode, company tax by industry, corporate tax transparency for every $100M+ entity, super contributions by age, salary by occupation, monthly GST collections, and the live ACNC charity register — all from a single uvx command.

Hosted access? For cross-source queries, webhooks, an always-on REST API, and a uniform response envelope across all 9 sources, see ausdata.io — free tier available (500 calls/mo, no card).

"What's the median taxable income in postcode 2000?"
"How much tax did BHP pay last year?"
"Which industries have the highest gross income?"
"How many Large charities are there in NSW?"
"What's the average super contribution for under-30s in the top tax bracket?"

Sister to abs-mcp (Australian Bureau of Statistics), rba-mcp (Reserve Bank of Australia), and au-weather-mcp (Australian weather via Open-Meteo + BOM). The four together cover the macro / regulator / tax / climate layer of Australian official data.


Install

# Run on demand via uvx (recommended)
uvx --upgrade ato-mcp

# Or install permanently
pip install ato-mcp

Claude Desktop

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "ato": { "command": "uvx", "args": ["--upgrade", "ato-mcp"] }
  }
}

Why --upgrade? uvx ato-mcp (without the flag) uses whatever wheel is cached and never adopts new PyPI releases on its own. --upgrade makes uvx check PyPI on each launch and pull a newer release if one exists. To verify which version is currently serving you, look at the server_version field on any DataResponse.

Claude Code / Cursor

claude mcp add ato --command uvx --args -- --upgrade ato-mcp

Auto-updating data

Beyond the wheel-level --upgrade, the server has a second auto-update path inside the data layer: when ATO publishes Taxation Statistics 2023-24 next year, ato-mcp resolves the new resource URL via data.gov.au's CKAN API at fetch time and uses the freshest match. Hard-coded YAML URLs are the safe fallback if discovery fails. You do not need to wait for a new wheel release to get new yearly data — just delete ~/.ato-mcp/cache.db to force a refresh, or wait for the 7-day TTL to expire.


What it exposes

Seven tools, all plain-English in, structured out:

Tool Purpose
search_datasets Fuzzy-search the curated catalog by keyword
describe_dataset List a dataset's filterable dimensions and returnable measures
get_data Query with filters, measures, period range, output format
latest Last observation per measure (shortcut)
top_n Rank rows by a measure, return top (or bottom) N
stats Aggregate stats (count, sum, mean, median, min, max, stddev) over a measure — optional group_by partitions before aggregating
list_curated Enumerate the curated dataset IDs

Every response is the same shape — dataset_id, dataset_name, query, period, unit, row_count, records, ato_url, attribution, server_version — across every curated dataset.


Curated datasets (14)

ID What it is Period Coverage
IND_POSTCODE Personal tax stats by taxable status × state × SA4 × postcode (~5,200 postcodes) 2022-23 80+ measures
IND_POSTCODE_MEDIAN Median & average taxable income by postcode, every year 2003-04 → 2022-23 21 yearly measures
COMPANY_INDUSTRY Company tax by ANZSIC broad + fine industry 2022-23 216 industry cells
CORP_TRANSPARENCY Entity-level tax disclosure for $100M+ corporations (name, ABN, income, tax) 2023-24 ~4,200 entities
SUPER_CONTRIB_AGE Super contributions by age × sex × taxable income bracket 2022-23 Employer/personal/other
ACNC_REGISTER Live register of every Australian charity (ABN, size, jurisdiction, beneficiaries) Current (weekly) ~60,000 entities
GST_MONTHLY Monthly GST / WET / LCT collections (gross GST, input tax credits, net GST, etc.) 2020-07 → 2024-06 10 metrics × 48 months
ATO_OCCUPATION Median/average income (taxable, salary/wage, total) by ANZSCO occupation × sex 2022-23 ~1,200 jobs × 7 measures
SMSF_FUNDS SMSF sector size — total funds, total members, total gross assets (trillion-$ sector) 2019-20 → 2024-25 3 metrics × 6 years
SBB_BENCHMARKS Industry total-expense + COGS ratio bands by turnover bracket (~100 industries) 2023-24 12 measures × 100 industries
HELP_DEBT HECS/HELP outstanding debt, indexation, compulsory + voluntary repayments annual 2005-06 → 2024-25 8 measures × 20 years
TAX_GAPS ATO's tax gap estimates — how much tax is being missed each year by tax type 2016-17 onward 5 measures × 4 tax types × ~7 years
RND_INCENTIVE R&D Tax Incentive transparency — every entity's R&D claim (name, ABN, $) 2022-23 ~13,000 entities
ACNC_AIS_FINANCIALS Per-charity financials from the ACNC Annual Information Statement (revenue, expenses, staff) 2023 ~60,000 charities × 23 measures

Adding a new dataset is a single YAML drop into src/ato_mcp/data/curated/ — see CONTRIBUTING.md.


Example queries (paste into Claude)

Cross-source compatibility. All location filters accept canonical state codes ("NSW"), full names ("New South Wales"), case-insensitive variants ("nsw"), ISO 3166-2 ("AU-NSW"), and 4-digit postcodes ("2000" → NSW) on the state filter. Powered by aus-identity — the same input shape works across abs-mcp, ato-mcp, apra-mcp, aihw-mcp, and asic-mcp.

Property-tech: "For postcodes 2000, 2008, 2026, and 2031 in NSW, give me the median taxable income across every available year so I can compare trajectories."

Corporate tax: "Get the total income, taxable income, and tax payable for BHP IRON ORE (JIMBLEBAR) PTY LTD."

Industry analysis: "Which fine industry codes under 'C. Manufacturing' have the highest total income, and how many companies are in each?"

Charity/non-profit tech: "Find every charity in NSW with size 'Large' that operates_in_VIC = Y."

Retirement planning: "What's the average personal super contribution for males aged 30-39 in the $120,001–$180,000 bracket?"

Each prompt resolves to one get_data call. The response includes the source URL so the agent can cite it back.


Architecture

Same shape as the sister packages — client → cache → parsing → shaping → server:

  • client.py wraps httpx with a SQLite-backed disk cache (per-resource TTL).
  • parsing.py reads XLSX (via openpyxl/pandas) and CSV (via pandas). Header rows + sheet names live in the curated YAML so future format quirks are a YAML edit, not a code change.
  • curated.py loads dataset specs from data/curated/*.yaml — each one declares its dimensions, measures, dimension value enums, source/download URLs, format, and parse layout.
  • shaping.py transforms the parsed DataFrame into DataResponse (records / series / csv).
  • server.py is the FastMCP entrypoint — seven tools, full input validation with helpful "Try X" hints on error.

Cache lives under ~/.ato-mcp/cache.db. Data on data.gov.au refreshes once a year (ATO) or weekly (ACNC), and the TTLs are tuned for that.


Attribution

Data sourced from the Australian Taxation Office and the Australian Charities and Not-for-profits Commission, both via data.gov.au. Licensed under Creative Commons Attribution 3.0 Australia (CC BY 3.0 AU). The MCP server is MIT-licensed; the data carries the upstream CC-BY 3.0 AU licence, which is echoed in every response's attribution field.


Sister MCPs (Australian Public Data portfolio)

Want all 9 sources behind one REST API? The hosted gateway at ausdata.io adds cross-source joins, full history, webhooks, and HMAC-signed responses on top of these MCPs — free tier (500 calls/mo, no card).

  • abs-mcp — Australian Bureau of Statistics (CPI, unemployment, ERP, building approvals)
  • rba-mcp — Reserve Bank of Australia (cash rate, lending stats, exchange rates)
  • ato-mcp — this one. Tax, super, and charity registers.
  • apra-mcp — Australian Prudential Regulation Authority (banking, insurance, super)
  • aihw-mcp — Australian Institute of Health and Welfare
  • asic-mcp — Australian Securities and Investments Commission (company registers)
  • aemo-mcp — Australian Energy Market Operator (NEM dispatch, spot prices, generation)
  • au-weather-mcp — Open-Meteo (Bureau of Meteorology aggregator)
  • wgea-mcp — Workplace Gender Equality Agency
  • aus-identity — Postcode / state / ABN normalisation helper used by all sisters

The portfolio is designed to compose: an agent can ask for "unemployment + cash rate + median income + climate" in postcode 2000 and one shot fans out across multiple MCPs.


Roadmap (next iterations)

  • v0.2: GST_MONTHLY transposed time series; multi-year CORP_TRANSPARENCY; ATO_OCCUPATION (salary by occupation code)
  • v0.3: hosted version with x402 per-call paywall; programmatic SEO pages
  • v0.4: listing on MCPay + Apify; paid tier for high-volume agent users

CHANGELOG tracks every release.


Development

git clone https://github.com/Bigred97/ato-mcp.git
cd ato-mcp
uv venv
uv pip install -e ".[dev]"
pytest                  # 53 unit tests, ~7s
pytest -m live          # 3 integration tests against data.gov.au, ~3s

Issues, ideas, and contributions welcome: github.com/Bigred97/ato-mcp/issues.

Release files for ato-mcp 0.8.32

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ato-mcp 0.8.32
File Size Uploaded
ato_mcp-0.8.32.tar.gz 5.3 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for ato-mcp 0.8.32
File Interpreter ABI Platform
ato_mcp-0.8.32-py3-none-any.whl Python 3 none any Details

Total release size: 5.4 MB

Release files / ato_mcp-0.8.32.tar.gz

Download URL ato_mcp-0.8.32.tar.gz
Size 5.3 MB
Tags Source
SHA-256 checksum
How to use checksums
55c710516d1f2a62d54dd5ea49bc8d680b8a41c496e90f1b378fe203ef314f5d
BLAKE2b-256 checksum
How to use checksums
766eb37aa707cd492e120ba4d33d2844959a4589b7fdf28174ec456375c3581e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 16, 2026.

Transparency log

Release files / ato_mcp-0.8.32-py3-none-any.whl

Download URL ato_mcp-0.8.32-py3-none-any.whl
Size 88.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b64887615fbee90b52283fc5d9b5d42aee78a752f73c94d7273ec3f12af7375c
BLAKE2b-256 checksum
How to use checksums
2015f70cf4a0de9ffb4f4bcb943d03d965fca971cc12a7a6785740c6f913ecad
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 16, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.8.32 This release

2 release files

0.8.31

2 release files

0.8.27

2 release files

0.8.26

2 release files

0.8.25

2 release files

0.8.24

2 release files

0.8.23

2 release files

0.8.22

2 release files

0.8.21

2 release files

0.8.20

2 release files

0.8.19

2 release files

0.8.18

2 release files

0.8.17

2 release files

0.8.16

2 release files

0.8.15

2 release files

0.8.14

2 release files

0.8.13

2 release files

0.8.12

2 release files

0.8.11

2 release files

0.8.10

2 release files

0.8.9

2 release files

0.8.8

2 release files

0.8.7

2 release files

0.8.6

2 release files

0.8.5

2 release files

0.8.4

2 release files

0.8.2

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.7.0

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.3

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page