[build-system] requires = ["hatchling"] build-backend = "hatchling.build" [project] name = "ato-mcp" version = "0.8.32" description = "MCP server for Australian Taxation Office statistics. Plain-English access to personal tax by postcode, company tax by industry, corporate tax transparency, GST collections, super contributions, and the ACNC charity register." readme = "README.md" requires-python = ">=3.11" license = { text = "MIT" } authors = [{ name = "Harry Vass" }] keywords = [ "mcp", "model-context-protocol", "claude", "fastmcp", "ato", "taxation", "tax-statistics", "acnc", "charity-register", "australia", "australian", "public-data", "government-data", "data-gov-au", "property-tech", "fintech", ] classifiers = [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "Intended Audience :: Financial and Insurance Industry", "Intended Audience :: Science/Research", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Topic :: Scientific/Engineering :: Information Analysis", "Topic :: Office/Business :: Financial", "Typing :: Typed", ] dependencies = [ "fastmcp>=2.0,<4", "httpx>=0.27", "pydantic>=2.7", "rapidfuzz>=3.9", "pandas>=2.2,<3", "openpyxl>=3.1", "pyarrow>=15", "aiosqlite>=0.20", "PyYAML>=6.0", "aus-identity>=0.1.0", ] [project.optional-dependencies] dev = [ "pytest>=8", "pytest-asyncio>=0.23", "respx>=0.21", "ruff>=0.5", ] [project.scripts] ato-mcp = "ato_mcp.server:main" [project.urls] Homepage = "https://ausdata.io" Documentation = "https://ausdata.io/sources/ato/" Repository = "https://github.com/Bigred97/ato-mcp" Issues = "https://github.com/Bigred97/ato-mcp/issues" Changelog = "https://github.com/Bigred97/ato-mcp/blob/main/CHANGELOG.md" PyPI = "https://pypi.org/project/ato-mcp/" [tool.hatch.build.targets.wheel] packages = ["src/ato_mcp"] [tool.pytest.ini_options] asyncio_mode = "auto" markers = ["live: hits real data.gov.au (downloads ATO XLSX/CSV files)"] addopts = "-m 'not live'" testpaths = ["tests"] pythonpath = ["src"] [tool.ruff] line-length = 100 target-version = "py311" [tool.ruff.lint] # Defaults plus pyflakes-extras + pycodestyle warnings + pyupgrade. We don't # enable line-length (E501) — long descriptive docstrings in curated YAML # generators and test assertions outweigh the cost. select = ["F", "E", "W", "UP", "I"] ignore = [ "E501", # line too long — docstrings + test messages are intentionally long "UP015", # `open(file, "r")` — unnecessary mode arg, but explicit is fine ] [tool.ruff.lint.per-file-ignores] # Tests can re-import for clarity and use fixture pollution patterns "tests/*" = ["F401", "F811"]