Skip to main content
Glama
ryanduguid

Aus Accounting MCP

Compare figures to ATO benchmarks

get_ato_benchmarks
Read-onlyIdempotent

Compare your business expense buckets against ATO small-business benchmarks for your industry and turnover, returning ratios, ranges, and source citations to identify where your figures sit relative to typical businesses.

Instructions

Compare bucket totals against ATO small-business benchmarks.

Every amount is an AUD decimal string such as "1000.00": finite, at most 2 decimal places, absolute value at most 1000000000000.00. Omit or null means not supplied; use "0.00" only for an established zero. industry is an ATO business-type name (see list_ato_benchmark_industries). other_income is needed for any ratio: the ATO turnover rule reads it to choose the denominator, so without it every ratio is not_supplied. Pass 0 only where the operator established the business has no other income. This is a comparison, not a finding that anything is wrong. Supply at least one expense bucket; omitted buckets remain not_supplied, never evidenced zeros. Returns ratios, ranges, source citations and warnings from ato-benchmark-compare. Runs locally with no network, writes or lodgements. Not tax advice.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
w1NoActivity statement W1 total for the same period; used by the engine when greater thanthe reconstructed salary and wages label. Supply associated_persons too.
rentNoBusiness rent expenses for the comparison period.
yearNoBenchmark dataset year in YYYY-YY form, e.g. "2023-24". Omit or null selects the latest shipped dataset, not a live ATO lookup.
industryYesATO business-type name returned by list_ato_benchmark_industries. Select an industry before comparing figures.
turnoverYesSales of goods and services, excluding other income.
other_incomeNoNon-sales business income, e.g. interest or grants. Required to establish any ratiodenominator.
salary_wagesNoSalary and wages outside cost of sales, excluding separately bucketed payments toassociated persons.
cost_of_salesNoCost of sales excluding salary and wages; put that labour in cost_of_sales_labour.
motor_vehicleNoBusiness motor vehicle expenses for the comparison period.
other_expenseNoOther expenses, including superannuation and depreciation; exclude amounts already inanother bucket and income tax expense.
associated_personsNoPayments to associated persons, kept separate from salary/wage buckets to avoid doublecounting. Needed for labour comparison when w1 is supplied.
cost_of_sales_labourNoSalary and wages within cost of sales, excluding separately bucketed payments toassociated persons.
contractor_commissionNoContractor, subcontractor and commission expenses.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
okYesThe review ran; this does not mean compliance or a known verdict.
notesYesDataset and missing-fact explanations.
engineYesDelegated distribution that produced this result.
ratiosYesComparisons, including unevidenced ratios.
sourceYesUnmodified engine source metadata and review provenance.
figuresYesEngine figures; unevidenced totals are null.
turnoverYesEngine decimal string, or null when unavailable; null is not zero.
key_ratioYesSelected ATO key-ratio identifier.
disclaimerYesEngine limitations on using benchmark comparisons.
bucket_totalsYesBucket amounts; omitted inputs remain null.
business_typeYesSelected ATO industry name.
turnover_bandYesSelected dataset band and label, or null if unavailable.
benchmark_yearYesIncome or dataset year in YYYY-YY form.
checks_to_makeYesSuggested human checks, not findings of wrongdoing.
engine_versionYesInstalled version of that engine.
turnover_basisYesEngine denominator basis; null if unestablished.
omitted_bucketsYesBuckets not supplied; never evidence of zero.
complete_bucketsYesWhether all required expense buckets were supplied.
supplied_bucketsYesBuckets explicitly supplied by the operator.
unreviewed_accountsYesUnknown: this tool receives totals, not an account ledger.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed24 schema fields changedv0.1.13
    • changedInput schema / properties / associated_persons / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maxLength": 60,
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / associated_persons / description
      Previous value: -"Payments to associated persons, kept separate from salary/wage buckets to avoid double counting. Needed for labour comparison when w1 is supplied. AUD decimal string, e.g. \"1000.00\"; finite, at most 2 decimal places, absolute value at most 1000000000000.00. Omit or null means not supplied; use \"0.00\" only for an established zero."New value: +"Payments to associated persons, kept separate from salary/wage buckets to avoid doublecounting. Needed for labour comparison when w1 is supplied."
    • changedInput schema / properties / contractor_commission / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maxLength": 60,
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / contractor_commission / description
      Previous value: -"Contractor, subcontractor and commission expenses. AUD decimal string, e.g. \"1000.00\"; finite, at most 2 decimal places, absolute value at most 1000000000000.00. Omit or null means not supplied; use \"0.00\" only for an established zero."New value: +"Contractor, subcontractor and commission expenses."
    • changedInput schema / properties / cost_of_sales / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maxLength": 60,
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / cost_of_sales / description
      Previous value: -"Cost of sales excluding salary and wages; put that labour in cost_of_sales_labour. AUD decimal string, e.g. \"1000.00\"; finite, at most 2 decimal places, absolute value at most 1000000000000.00. Omit or null means not supplied; use \"0.00\" only for an established zero."New value: +"Cost of sales excluding salary and wages; put that labour in cost_of_sales_labour."
    • changedInput schema / properties / cost_of_sales_labour / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maxLength": 60,
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / cost_of_sales_labour / description
      Previous value: -"Salary and wages within cost of sales, excluding separately bucketed payments to associated persons. AUD decimal string, e.g. \"1000.00\"; finite, at most 2 decimal places, absolute value at most 1000000000000.00. Omit or null means not supplied; use \"0.00\" only for an established zero."New value: +"Salary and wages within cost of sales, excluding separately bucketed payments toassociated persons."
    • addedInput schema / properties / industry / maxLength
      Added value: +120
    • changedInput schema / properties / motor_vehicle / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maxLength": 60,
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / motor_vehicle / description
      Previous value: -"Business motor vehicle expenses for the comparison period. AUD decimal string, e.g. \"1000.00\"; finite, at most 2 decimal places, absolute value at most 1000000000000.00. Omit or null means not supplied; use \"0.00\" only for an established zero."New value: +"Business motor vehicle expenses for the comparison period."
    • changedInput schema / properties / other_expense / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maxLength": 60,
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / other_expense / description
      Previous value: -"Other expenses, including superannuation and depreciation; exclude amounts already in another bucket and income tax expense. AUD decimal string, e.g. \"1000.00\"; finite, at most 2 decimal places, absolute value at most 1000000000000.00. Omit or null means not supplied; use \"0.00\" only for an established zero."New value: +"Other expenses, including superannuation and depreciation; exclude amounts already inanother bucket and income tax expense."
    • changedInput schema / properties / other_income / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maxLength": 60,
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / other_income / description
      Previous value: -"Non-sales business income, e.g. interest or grants. Required to establish any ratio denominator. AUD decimal string, e.g. \"1000.00\"; finite, at most 2 decimal places, absolute value at most 1000000000000.00. Omit or null means not supplied; use \"0.00\" only for an established zero."New value: +"Non-sales business income, e.g. interest or grants. Required to establish any ratiodenominator."
    • changedInput schema / properties / rent / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maxLength": 60,
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / rent / description
      Previous value: -"Business rent expenses for the comparison period. AUD decimal string, e.g. \"1000.00\"; finite, at most 2 decimal places, absolute value at most 1000000000000.00. Omit or null means not supplied; use \"0.00\" only for an established zero."New value: +"Business rent expenses for the comparison period."
    • changedInput schema / properties / salary_wages / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maxLength": 60,
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / salary_wages / description
      Previous value: -"Salary and wages outside cost of sales, excluding separately bucketed payments to associated persons. AUD decimal string, e.g. \"1000.00\"; finite, at most 2 decimal places, absolute value at most 1000000000000.00. Omit or null means not supplied; use \"0.00\" only for an established zero."New value: +"Salary and wages outside cost of sales, excluding separately bucketed payments toassociated persons."
    • changedInput schema / properties / turnover / description
      Previous value: -"Sales of goods and services, excluding other income. AUD decimal string, e.g. \"1000.00\"; finite, at most 2 decimal places, absolute value at most 1000000000000.00."New value: +"Sales of goods and services, excluding other income."
    • addedInput schema / properties / turnover / maxLength
      Added value: +60
    • changedInput schema / properties / w1 / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maxLength": 60,
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / w1 / description
      Previous value: -"Activity statement W1 total for the same period; used by the engine when greater than the reconstructed salary and wages label. Supply associated_persons too. AUD decimal string, e.g. \"1000.00\"; finite, at most 2 decimal places, absolute value at most 1000000000000.00. Omit or null means not supplied; use \"0.00\" only for an established zero."New value: +"Activity statement W1 total for the same period; used by the engine when greater thanthe reconstructed salary and wages label. Supply associated_persons too."
    • changedInput schema / properties / year / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maxLength": 7,
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  2. Changed1 schema field changedv0.1.10
    • addedInput schema / additionalProperties
      Added value: +false
  3. Changed4 schema fields changedv0.1.8
    • addedOutput schema / $defs
      Added value: +{
      +  "BenchmarkRatio": {
      +    "additionalProperties": true,
      +    "properties": {
      +      "benchmark_max": {
      +        "anyOf": [
      +          {
      +            "description": "Finite engine decimal string, including exponent notation; retain its precision.",
      +            "pattern": "^[+-]?(?:[0-9]+(?:\\.[0-9]*)?|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?$",
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Engine decimal string, or null when unavailable; null is not zero.",
      +        "title": "Benchmark Max"
      +      },
      +      "benchmark_min": {
      +        "anyOf": [
      +          {
      +            "description": "Finite engine decimal string, including exponent notation; retain its precision.",
      +            "pattern": "^[+-]?(?:[0-9]+(?:\\.[0-9]*)?|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?$",
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Engine decimal string, or null when unavailable; null is not zero.",
      +        "title": "Benchmark Min"
      +      },
      +      "is_key_ratio": {
      +        "description": "Whether this is the selected ATO key ratio.",
      +        "title": "Is Key Ratio",
      +        "type": "boolean"
      +      },
      +      "label": {
      +        "description": "Human-readable ratio name.",
      +        "title": "Label",
      +        "type": "string"
      +      },
      +      "percent": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Formatted percentage, or null if unavailable.",
      +        "title": "Percent"
      +      },
      +      "ratio": {
      +        "description": "Ratio identifier.",
      +        "title": "Ratio",
      +        "type": "string"
      +      },
      +      "status": {
      +        "description": "Engine comparison status; not_supplied means facts do not establish the ratio.",
      +        "title": "Status",
      +        "type": "string"
      +      },
      +      "value": {
      +        "anyOf": [
      +          {
      +            "description": "Finite engine decimal string, including exponent notation; retain its precision.",
      +            "pattern": "^[+-]?(?:[0-9]+(?:\\.[0-9]*)?|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?$",
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Engine decimal string, or null when unavailable; null is not zero.",
      +        "title": "Value"
      +      }
      +    },
      +    "required": [
      +      "ratio",
      +      "label",
      +      "value",
      +      "percent",
      +      "benchmark_min",
      +      "benchmark_max",
      +      "status",
      +      "is_key_ratio"
      +    ],
      +    "title": "BenchmarkRatio",
      +    "type": "object"
      +  }
      +}
    • addedOutput schema / properties
      Added value: +{
      +  "benchmark_year": {
      +    "description": "Income or dataset year in YYYY-YY form.",
      +    "pattern": "^[0-9]{4}-[0-9]{2}$",
      +    "title": "Benchmark Year",
      +    "type": "string"
      +  },
      +  "bucket_totals": {
      +    "additionalProperties": {
      +      "anyOf": [
      +        {
      +          "description": "Finite engine decimal string, including exponent notation; retain its precision.",
      +          "pattern": "^[+-]?(?:[0-9]+(?:\\.[0-9]*)?|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?$",
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Engine decimal string, or null when unavailable; null is not zero."
      +    },
      +    "description": "Bucket amounts; omitted inputs remain null.",
      +    "title": "Bucket Totals",
      +    "type": "object"
      +  },
      +  "business_type": {
      +    "description": "Selected ATO industry name.",
      +    "title": "Business Type",
      +    "type": "string"
      +  },
      +  "checks_to_make": {
      +    "description": "Suggested human checks, not findings of wrongdoing.",
      +    "items": {
      +      "type": "string"
      +    },
      +    "title": "Checks To Make",
      +    "type": "array"
      +  },
      +  "complete_buckets": {
      +    "description": "Whether all required expense buckets were supplied.",
      +    "title": "Complete Buckets",
      +    "type": "boolean"
      +  },
      +  "disclaimer": {
      +    "description": "Engine limitations on using benchmark comparisons.",
      +    "title": "Disclaimer",
      +    "type": "string"
      +  },
      +  "engine": {
      +    "description": "Delegated distribution that produced this result.",
      +    "title": "Engine",
      +    "type": "string"
      +  },
      +  "engine_version": {
      +    "description": "Installed version of that engine.",
      +    "title": "Engine Version",
      +    "type": "string"
      +  },
      +  "figures": {
      +    "additionalProperties": {
      +      "anyOf": [
      +        {
      +          "description": "Finite engine decimal string, including exponent notation; retain its precision.",
      +          "pattern": "^[+-]?(?:[0-9]+(?:\\.[0-9]*)?|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?$",
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Engine decimal string, or null when unavailable; null is not zero."
      +    },
      +    "description": "Engine figures; unevidenced totals are null.",
      +    "title": "Figures",
      +    "type": "object"
      +  },
      +  "key_ratio": {
      +    "description": "Selected ATO key-ratio identifier.",
      +    "title": "Key Ratio",
      +    "type": "string"
      +  },
      +  "notes": {
      +    "description": "Dataset and missing-fact explanations.",
      +    "items": {
      +      "type": "string"
      +    },
      +    "title": "Notes",
      +    "type": "array"
      +  },
      +  "ok": {
      +    "const": true,
      +    "description": "The review ran; this does not mean compliance or a known verdict.",
      +    "title": "Ok",
      +    "type": "boolean"
      +  },
      +  "omitted_buckets": {
      +    "description": "Buckets not supplied; never evidence of zero.",
      +    "items": {
      +      "type": "string"
      +    },
      +    "title": "Omitted Buckets",
      +    "type": "array"
      +  },
      +  "ratios": {
      +    "description": "Comparisons, including unevidenced ratios.",
      +    "items": {
      +      "$ref": "#/$defs/BenchmarkRatio"
      +    },
      +    "title": "Ratios",
      +    "type": "array"
      +  },
      +  "source": {
      +    "additionalProperties": true,
      +    "description": "Unmodified engine source metadata and review provenance.",
      +    "title": "Source",
      +    "type": "object"
      +  },
      +  "supplied_buckets": {
      +    "description": "Buckets explicitly supplied by the operator.",
      +    "items": {
      +      "type": "string"
      +    },
      +    "title": "Supplied Buckets",
      +    "type": "array"
      +  },
      +  "turnover": {
      +    "anyOf": [
      +      {
      +        "description": "Finite engine decimal string, including exponent notation; retain its precision.",
      +        "pattern": "^[+-]?(?:[0-9]+(?:\\.[0-9]*)?|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?$",
      +        "type": "string"
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ],
      +    "description": "Engine decimal string, or null when unavailable; null is not zero.",
      +    "title": "Turnover"
      +  },
      +  "turnover_band": {
      +    "anyOf": [
      +      {
      +        "additionalProperties": {
      +          "type": "string"
      +        },
      +        "type": "object"
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ],
      +    "description": "Selected dataset band and label, or null if unavailable.",
      +    "title": "Turnover Band"
      +  },
      +  "turnover_basis": {
      +    "anyOf": [
      +      {
      +        "type": "string"
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ],
      +    "description": "Engine denominator basis; null if unestablished.",
      +    "title": "Turnover Basis"
      +  },
      +  "unreviewed_accounts": {
      +    "description": "Unknown: this tool receives totals, not an account ledger.",
      +    "title": "Unreviewed Accounts",
      +    "type": "null"
      +  }
      +}
    • addedOutput schema / required
      Added value: +[
      +  "ok",
      +  "engine",
      +  "engine_version",
      +  "benchmark_year",
      +  "business_type",
      +  "key_ratio",
      +  "turnover",
      +  "turnover_basis",
      +  "turnover_band",
      +  "figures",
      +  "bucket_totals",
      +  "ratios",
      +  "unreviewed_accounts",
      +  "notes",
      +  "checks_to_make",
      +  "source",
      +  "disclaimer",
      +  "supplied_buckets",
      +  "omitted_buckets",
      +  "complete_buckets"
      +]
    • changedOutput schema / title
      Previous value: -"get_ato_benchmarksDictOutput"New value: +"BenchmarkComparison"
  4. Changed13 schema fields changedv0.1.7
    • addedInput schema / properties / associated_persons / description
      Added value: +"Payments to associated persons, kept separate from salary/wage buckets to avoid double counting. Needed for labour comparison when w1 is supplied. AUD decimal string, e.g. \"1000.00\"; finite, at most 2 decimal places, absolute value at most 1000000000000.00. Omit or null means not supplied; use \"0.00\" only for an established zero."
    • addedInput schema / properties / contractor_commission / description
      Added value: +"Contractor, subcontractor and commission expenses. AUD decimal string, e.g. \"1000.00\"; finite, at most 2 decimal places, absolute value at most 1000000000000.00. Omit or null means not supplied; use \"0.00\" only for an established zero."
    • addedInput schema / properties / cost_of_sales / description
      Added value: +"Cost of sales excluding salary and wages; put that labour in cost_of_sales_labour. AUD decimal string, e.g. \"1000.00\"; finite, at most 2 decimal places, absolute value at most 1000000000000.00. Omit or null means not supplied; use \"0.00\" only for an established zero."
    • addedInput schema / properties / cost_of_sales_labour / description
      Added value: +"Salary and wages within cost of sales, excluding separately bucketed payments to associated persons. AUD decimal string, e.g. \"1000.00\"; finite, at most 2 decimal places, absolute value at most 1000000000000.00. Omit or null means not supplied; use \"0.00\" only for an established zero."
    • addedInput schema / properties / industry / description
      Added value: +"ATO business-type name returned by list_ato_benchmark_industries. Select an industry before comparing figures."
    • addedInput schema / properties / motor_vehicle / description
      Added value: +"Business motor vehicle expenses for the comparison period. AUD decimal string, e.g. \"1000.00\"; finite, at most 2 decimal places, absolute value at most 1000000000000.00. Omit or null means not supplied; use \"0.00\" only for an established zero."
    • addedInput schema / properties / other_expense / description
      Added value: +"Other expenses, including superannuation and depreciation; exclude amounts already in another bucket and income tax expense. AUD decimal string, e.g. \"1000.00\"; finite, at most 2 decimal places, absolute value at most 1000000000000.00. Omit or null means not supplied; use \"0.00\" only for an established zero."
    • addedInput schema / properties / other_income / description
      Added value: +"Non-sales business income, e.g. interest or grants. Required to establish any ratio denominator. AUD decimal string, e.g. \"1000.00\"; finite, at most 2 decimal places, absolute value at most 1000000000000.00. Omit or null means not supplied; use \"0.00\" only for an established zero."
    • addedInput schema / properties / rent / description
      Added value: +"Business rent expenses for the comparison period. AUD decimal string, e.g. \"1000.00\"; finite, at most 2 decimal places, absolute value at most 1000000000000.00. Omit or null means not supplied; use \"0.00\" only for an established zero."
    • addedInput schema / properties / salary_wages / description
      Added value: +"Salary and wages outside cost of sales, excluding separately bucketed payments to associated persons. AUD decimal string, e.g. \"1000.00\"; finite, at most 2 decimal places, absolute value at most 1000000000000.00. Omit or null means not supplied; use \"0.00\" only for an established zero."
    • addedInput schema / properties / turnover / description
      Added value: +"Sales of goods and services, excluding other income. AUD decimal string, e.g. \"1000.00\"; finite, at most 2 decimal places, absolute value at most 1000000000000.00."
    • addedInput schema / properties / w1 / description
      Added value: +"Activity statement W1 total for the same period; used by the engine when greater than the reconstructed salary and wages label. Supply associated_persons too. AUD decimal string, e.g. \"1000.00\"; finite, at most 2 decimal places, absolute value at most 1000000000000.00. Omit or null means not supplied; use \"0.00\" only for an established zero."
    • addedInput schema / properties / year / description
      Added value: +"Benchmark dataset year in YYYY-YY form, e.g. \"2023-24\". Omit or null selects the latest shipped dataset, not a live ATO lookup."
  5. First observedv0.1.6

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/idempotent annotations, the description discloses that the tool runs locally with no network, performs no writes or lodgements, returns ratios/ranges/citations/warnings, and is not tax advice. It also explains that omitted buckets remain not_supplied rather than being treated as zeros, which deeply shapes result interpretation. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Although fairly long, the description is tightly organized: purpose, amount format, critical dependencies, semantic caveats, and safety. Every sentence earns its place, and the density is justified by 13 parameters and subtle input rules. It is front-loaded with the tool's core purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex comparison tool, the description covers prerequisites (industry, other_income, at least one expense bucket), input semantics (declared zeros vs omitted), execution behavior (local, no network), and return contents (ratios, ranges, citations, warnings). The output schema handles return structure, so the description need not repeat it. An agent has enough to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents all 13 parameters at 100% coverage, but the description adds essential semantics: exact AUD decimal-string format, the null-vs-0 distinction, other_income's role in choosing the denominator, and the rule that omitted buckets are never evidenced zeros. These are operationally critical and not derivable from the schema descriptions alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence names a specific action ('Compare bucket totals') against a distinct resource ('ATO small-business benchmarks'), and later clarifies it is a comparison, not a finding that anything is wrong. This separates it from analysis/lodgement tools in the sibling list. It could name a closer alternative, but the purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear usage context: compare bucket totals against ATO benchmarks, select an industry from list_ato_benchmark_industries, supply other_income for ratios, and provide at least one expense bucket. It also states prerequisites like omitting or nulling absent values. It does not explicitly contrast with alternative comparison tools, but no close alternative exists among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.