Skip to main content
Glama
ryanduguid

Australian Accounting MCP

Calculate a bounded Australian tax worksheet

calculate_tax_worksheet
Read-onlyIdempotent

Calculate Australian tax and super worksheets (GST, income tax, FBT, super, PAYG, pension, study loan) for specified years and periods.

Instructions

Calculate one of ten bounded tax and super worksheets, GST to study loan repayment.

Each kind has a bounded scope and period in aus-accounting://scope. Most cover 2025-26; resident basic tax also covers 2024-25 and 2026-27. FBT covers the year ended 31 March 2026. PAYG withholding covers regular pays from 1 July 2026. Contribution caps and account-based pension minimums cover 2024-25 to 2026-27. Study loan repayments cover 2025-26 and 2026-27 from established repayment income. Require operator-established classifications and eligibility. Pass scope_confirmed true only after establishing every scope condition listed in calculation_worksheets for the kind; resolve missing or uncertain scope first. Scope confirmation is not evidence of eligibility. Never invent it. Every money field is a non-negative AUD amount in plain decimal notation, such as 1234.56, with at most 2 decimal places and at most 1000000000000.00. Results include engine version, source-check date, citations and exclusions. These worksheets do not prepare a BAS or return, calculate Medicare, limit a study loan repayment to the loan balance, value benefits or assets, or establish post-June 2026 SG entitlement. All maths stays in australian-tax-calculators. Local review aid, not advice.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
factsYesEstablished facts for one worksheet kind. Read calculation_worksheets in aus-accounting://scope before confirming scope. Supply established zero amounts explicitly; do not infer missing facts.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
okYesThe review ran; this does not mean compliance or a known verdict.
ratesYes
scopeYes
engineYesDelegated distribution that produced this result.
periodYes
amountsYes
sourcesYes
warningsYes
calculationYes
engine_versionYesInstalled version of that engine.
source_checkedYesDate in YYYY-MM-DD form.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed18 schema fields changedv0.1.22
    • addedInput schema / $defs / CapitalGainsFacts / properties / current_losses / pattern
      Added value: +"^\\s*-?[0-9]+(?:\\.[0-9]{1,2})?\\s*$"
    • addedInput schema / $defs / CapitalGainsFacts / properties / discount_gains / pattern
      Added value: +"^\\s*-?[0-9]+(?:\\.[0-9]{1,2})?\\s*$"
    • addedInput schema / $defs / CapitalGainsFacts / properties / other_gains / pattern
      Added value: +"^\\s*-?[0-9]+(?:\\.[0-9]{1,2})?\\s*$"
    • addedInput schema / $defs / CapitalGainsFacts / properties / prior_losses / pattern
      Added value: +"^\\s*-?[0-9]+(?:\\.[0-9]{1,2})?\\s*$"
    • addedInput schema / $defs / ContributionCapsFacts / properties / concessional_contributions / pattern
      Added value: +"^\\s*-?[0-9]+(?:\\.[0-9]{1,2})?\\s*$"
    • addedInput schema / $defs / ContributionCapsFacts / properties / non_concessional_contributions / pattern
      Added value: +"^\\s*-?[0-9]+(?:\\.[0-9]{1,2})?\\s*$"
    • addedInput schema / $defs / ContributionCapsFacts / properties / total_super_balance / pattern
      Added value: +"^\\s*-?[0-9]+(?:\\.[0-9]{1,2})?\\s*$"
    • addedInput schema / $defs / ContributionCapsFacts / properties / unused_concessional_cap / pattern
      Added value: +"^\\s*-?[0-9]+(?:\\.[0-9]{1,2})?\\s*$"
    • addedInput schema / $defs / DepreciationFacts / properties / cost / pattern
      Added value: +"^\\s*-?[0-9]+(?:\\.[0-9]{1,2})?\\s*$"
    • addedInput schema / $defs / FbtFacts / properties / type_one_value / pattern
      Added value: +"^\\s*-?[0-9]+(?:\\.[0-9]{1,2})?\\s*$"
    • addedInput schema / $defs / FbtFacts / properties / type_two_value / pattern
      Added value: +"^\\s*-?[0-9]+(?:\\.[0-9]{1,2})?\\s*$"
    • addedInput schema / $defs / GstFacts / properties / amount / pattern
      Added value: +"^\\s*-?[0-9]+(?:\\.[0-9]{1,2})?\\s*$"
    • addedInput schema / $defs / PaygWithholdingFacts / properties / earnings / pattern
      Added value: +"^\\s*-?[0-9]+(?:\\.[0-9]{1,2})?\\s*$"
    • addedInput schema / $defs / PensionMinimumFacts / properties / account_balance / pattern
      Added value: +"^\\s*-?[0-9]+(?:\\.[0-9]{1,2})?\\s*$"
    • addedInput schema / $defs / ResidentTaxFacts / properties / taxable_income / pattern
      Added value: +"^\\s*-?[0-9]+(?:\\.[0-9]{1,2})?\\s*$"
    • addedInput schema / $defs / SgFacts / properties / ordinary_time_earnings / pattern
      Added value: +"^\\s*-?[0-9]+(?:\\.[0-9]{1,2})?\\s*$"
    • addedInput schema / $defs / SgFacts / properties / qualifying_contributions / pattern
      Added value: +"^\\s*-?[0-9]+(?:\\.[0-9]{1,2})?\\s*$"
    • addedInput schema / $defs / StudyLoanRepaymentFacts / properties / repayment_income / pattern
      Added value: +"^\\s*-?[0-9]+(?:\\.[0-9]{1,2})?\\s*$"
  2. Changed3 schema fields changedv0.1.20
    • addedInput schema / $defs / StudyLoanRepaymentFacts
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "kind": {
      +      "const": "study_loan_repayment",
      +      "title": "Kind",
      +      "type": "string"
      +    },
      +    "repayment_income": {
      +      "description": "Established repayment income for the year in whole dollars: taxable income excluding assessable FHSS released amounts, plus reportable fringe benefits, total net investment loss, reportable super contributions and exempt foreign employment income.",
      +      "maxLength": 60,
      +      "title": "Repayment Income",
      +      "type": "string"
      +    },
      +    "scope_confirmed": {
      +      "description": "Scope confirmation for this kind; false is refused.",
      +      "title": "Scope Confirmed",
      +      "type": "boolean"
      +    },
      +    "year": {
      +      "enum": [
      +        "2025-26",
      +        "2026-27"
      +      ],
      +      "title": "Year",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "scope_confirmed",
      +    "kind",
      +    "year",
      +    "repayment_income"
      +  ],
      +  "title": "StudyLoanRepaymentFacts",
      +  "type": "object"
      +}
    • addedInput schema / properties / facts / discriminator / mapping / study_loan_repayment
      Added value: +"#/$defs/StudyLoanRepaymentFacts"
    • changedInput schema / properties / facts / oneOf
      Previous value: -[
      -  {
      -    "$ref": "#/$defs/GstFacts"
      -  },
      -  {
      -    "$ref": "#/$defs/ResidentTaxFacts"
      -  },
      -  {
      -    "$ref": "#/$defs/CapitalGainsFacts"
      -  },
      -  {
      -    "$ref": "#/$defs/FbtFacts"
      -  },
      -  {
      -    "$ref": "#/$defs/DepreciationFacts"
      -  },
      -  {
      -    "$ref": "#/$defs/SgFacts"
      -  },
      -  {
      -    "$ref": "#/$defs/PaygWithholdingFacts"
      -  },
      -  {
      -    "$ref": "#/$defs/ContributionCapsFacts"
      -  },
      -  {
      -    "$ref": "#/$defs/PensionMinimumFacts"
      -  }
      -]New value: +[
      +  {
      +    "$ref": "#/$defs/GstFacts"
      +  },
      +  {
      +    "$ref": "#/$defs/ResidentTaxFacts"
      +  },
      +  {
      +    "$ref": "#/$defs/CapitalGainsFacts"
      +  },
      +  {
      +    "$ref": "#/$defs/FbtFacts"
      +  },
      +  {
      +    "$ref": "#/$defs/DepreciationFacts"
      +  },
      +  {
      +    "$ref": "#/$defs/SgFacts"
      +  },
      +  {
      +    "$ref": "#/$defs/PaygWithholdingFacts"
      +  },
      +  {
      +    "$ref": "#/$defs/ContributionCapsFacts"
      +  },
      +  {
      +    "$ref": "#/$defs/PensionMinimumFacts"
      +  },
      +  {
      +    "$ref": "#/$defs/StudyLoanRepaymentFacts"
      +  }
      +]
  3. Changed5 schema fields changedv0.1.17
    • addedInput schema / $defs / ContributionCapsFacts
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "concessional_contributions": {
      +      "description": "AUD decimal string.",
      +      "maxLength": 60,
      +      "title": "Concessional Contributions",
      +      "type": "string"
      +    },
      +    "kind": {
      +      "const": "contribution_caps",
      +      "title": "Kind",
      +      "type": "string"
      +    },
      +    "non_concessional_contributions": {
      +      "description": "AUD decimal string.",
      +      "maxLength": 60,
      +      "title": "Non Concessional Contributions",
      +      "type": "string"
      +    },
      +    "scope_confirmed": {
      +      "description": "Scope confirmation for this kind; false is refused.",
      +      "title": "Scope Confirmed",
      +      "type": "boolean"
      +    },
      +    "total_super_balance": {
      +      "description": "Total super balance at the 30 June before the year.",
      +      "maxLength": 60,
      +      "title": "Total Super Balance",
      +      "type": "string"
      +    },
      +    "under_75_in_year": {
      +      "description": "Whether the person is under 75 at any time in the income year.",
      +      "title": "Under 75 In Year",
      +      "type": "boolean"
      +    },
      +    "unused_concessional_cap": {
      +      "description": "Unexpired unused concessional cap from the previous 5 years; 0.00 if none.",
      +      "maxLength": 60,
      +      "title": "Unused Concessional Cap",
      +      "type": "string"
      +    },
      +    "year": {
      +      "enum": [
      +        "2024-25",
      +        "2025-26",
      +        "2026-27"
      +      ],
      +      "title": "Year",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "scope_confirmed",
      +    "kind",
      +    "year",
      +    "total_super_balance",
      +    "concessional_contributions",
      +    "unused_concessional_cap",
      +    "non_concessional_contributions",
      +    "under_75_in_year"
      +  ],
      +  "title": "ContributionCapsFacts",
      +  "type": "object"
      +}
    • addedInput schema / $defs / PensionMinimumFacts
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "account_balance": {
      +      "description": "Balance on 1 July, or on the commencement day in the first year.",
      +      "maxLength": 60,
      +      "title": "Account Balance",
      +      "type": "string"
      +    },
      +    "age": {
      +      "description": "Age on the day the account balance is taken.",
      +      "maximum": 150,
      +      "minimum": 0,
      +      "title": "Age",
      +      "type": "integer"
      +    },
      +    "days": {
      +      "description": "Days in the year from and including the commencement day; every day of the year for a pension running on 1 July.",
      +      "maximum": 365,
      +      "minimum": 1,
      +      "title": "Days",
      +      "type": "integer"
      +    },
      +    "kind": {
      +      "const": "pension_minimum",
      +      "title": "Kind",
      +      "type": "string"
      +    },
      +    "scope_confirmed": {
      +      "description": "Scope confirmation for this kind; false is refused.",
      +      "title": "Scope Confirmed",
      +      "type": "boolean"
      +    },
      +    "year": {
      +      "enum": [
      +        "2024-25",
      +        "2025-26",
      +        "2026-27"
      +      ],
      +      "title": "Year",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "scope_confirmed",
      +    "kind",
      +    "year",
      +    "account_balance",
      +    "age",
      +    "days"
      +  ],
      +  "title": "PensionMinimumFacts",
      +  "type": "object"
      +}
    • addedInput schema / properties / facts / discriminator / mapping / contribution_caps
      Added value: +"#/$defs/ContributionCapsFacts"
    • addedInput schema / properties / facts / discriminator / mapping / pension_minimum
      Added value: +"#/$defs/PensionMinimumFacts"
    • changedInput schema / properties / facts / oneOf
      Previous value: -[
      -  {
      -    "$ref": "#/$defs/GstFacts"
      -  },
      -  {
      -    "$ref": "#/$defs/ResidentTaxFacts"
      -  },
      -  {
      -    "$ref": "#/$defs/CapitalGainsFacts"
      -  },
      -  {
      -    "$ref": "#/$defs/FbtFacts"
      -  },
      -  {
      -    "$ref": "#/$defs/DepreciationFacts"
      -  },
      -  {
      -    "$ref": "#/$defs/SgFacts"
      -  },
      -  {
      -    "$ref": "#/$defs/PaygWithholdingFacts"
      -  }
      -]New value: +[
      +  {
      +    "$ref": "#/$defs/GstFacts"
      +  },
      +  {
      +    "$ref": "#/$defs/ResidentTaxFacts"
      +  },
      +  {
      +    "$ref": "#/$defs/CapitalGainsFacts"
      +  },
      +  {
      +    "$ref": "#/$defs/FbtFacts"
      +  },
      +  {
      +    "$ref": "#/$defs/DepreciationFacts"
      +  },
      +  {
      +    "$ref": "#/$defs/SgFacts"
      +  },
      +  {
      +    "$ref": "#/$defs/PaygWithholdingFacts"
      +  },
      +  {
      +    "$ref": "#/$defs/ContributionCapsFacts"
      +  },
      +  {
      +    "$ref": "#/$defs/PensionMinimumFacts"
      +  }
      +]
  4. Changed3 schema fields changedv0.1.15
    • addedInput schema / $defs / PaygWithholdingFacts
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "earnings": {
      +      "description": "AUD decimal string.",
      +      "maxLength": 60,
      +      "title": "Earnings",
      +      "type": "string"
      +    },
      +    "kind": {
      +      "const": "payg_withholding",
      +      "title": "Kind",
      +      "type": "string"
      +    },
      +    "pay_period": {
      +      "enum": [
      +        "weekly",
      +        "fortnightly",
      +        "monthly"
      +      ],
      +      "title": "Pay Period",
      +      "type": "string"
      +    },
      +    "scale": {
      +      "description": "Schedule 1 scale from the payee's declarations; scale 4 is not supported.",
      +      "enum": [
      +        1,
      +        2,
      +        3,
      +        5,
      +        6
      +      ],
      +      "title": "Scale",
      +      "type": "integer"
      +    },
      +    "scope_confirmed": {
      +      "description": "Scope confirmation for this kind; false is refused.",
      +      "title": "Scope Confirmed",
      +      "type": "boolean"
      +    },
      +    "year": {
      +      "const": "2026-27",
      +      "title": "Year",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "scope_confirmed",
      +    "kind",
      +    "year",
      +    "earnings",
      +    "pay_period",
      +    "scale"
      +  ],
      +  "title": "PaygWithholdingFacts",
      +  "type": "object"
      +}
    • addedInput schema / properties / facts / discriminator / mapping / payg_withholding
      Added value: +"#/$defs/PaygWithholdingFacts"
    • changedInput schema / properties / facts / oneOf
      Previous value: -[
      -  {
      -    "$ref": "#/$defs/GstFacts"
      -  },
      -  {
      -    "$ref": "#/$defs/ResidentTaxFacts"
      -  },
      -  {
      -    "$ref": "#/$defs/CapitalGainsFacts"
      -  },
      -  {
      -    "$ref": "#/$defs/FbtFacts"
      -  },
      -  {
      -    "$ref": "#/$defs/DepreciationFacts"
      -  },
      -  {
      -    "$ref": "#/$defs/SgFacts"
      -  }
      -]New value: +[
      +  {
      +    "$ref": "#/$defs/GstFacts"
      +  },
      +  {
      +    "$ref": "#/$defs/ResidentTaxFacts"
      +  },
      +  {
      +    "$ref": "#/$defs/CapitalGainsFacts"
      +  },
      +  {
      +    "$ref": "#/$defs/FbtFacts"
      +  },
      +  {
      +    "$ref": "#/$defs/DepreciationFacts"
      +  },
      +  {
      +    "$ref": "#/$defs/SgFacts"
      +  },
      +  {
      +    "$ref": "#/$defs/PaygWithholdingFacts"
      +  }
      +]
  5. Changed17 schema fields changedv0.1.13
    • changedInput schema / $defs / CapitalGainsFacts / properties / current_losses / description
      Previous value: -"Non-negative AUD decimal string, at most 2dp and 1000000000000.00."New value: +"AUD decimal string."
    • changedInput schema / $defs / CapitalGainsFacts / properties / discount_gains / description
      Previous value: -"Non-negative AUD decimal string, at most 2dp and 1000000000000.00."New value: +"AUD decimal string."
    • changedInput schema / $defs / CapitalGainsFacts / properties / other_gains / description
      Previous value: -"Non-negative AUD decimal string, at most 2dp and 1000000000000.00."New value: +"AUD decimal string."
    • changedInput schema / $defs / CapitalGainsFacts / properties / prior_losses / description
      Previous value: -"Non-negative AUD decimal string, at most 2dp and 1000000000000.00."New value: +"AUD decimal string."
    • changedInput schema / $defs / CapitalGainsFacts / properties / scope_confirmed / description
      Previous value: -"Pass true only after establishing every scope condition in aus-accounting://scope calculation_worksheets for this kind. Missing or uncertain scope must be resolved first; false is refused."New value: +"Scope confirmation for this kind; false is refused."
    • changedInput schema / $defs / DepreciationFacts / properties / cost / description
      Previous value: -"Non-negative AUD decimal string, at most 2dp and 1000000000000.00."New value: +"AUD decimal string."
    • changedInput schema / $defs / DepreciationFacts / properties / scope_confirmed / description
      Previous value: -"Pass true only after establishing every scope condition in aus-accounting://scope calculation_worksheets for this kind. Missing or uncertain scope must be resolved first; false is refused."New value: +"Scope confirmation for this kind; false is refused."
    • changedInput schema / $defs / FbtFacts / properties / scope_confirmed / description
      Previous value: -"Pass true only after establishing every scope condition in aus-accounting://scope calculation_worksheets for this kind. Missing or uncertain scope must be resolved first; false is refused."New value: +"Scope confirmation for this kind; false is refused."
    • changedInput schema / $defs / FbtFacts / properties / type_one_value / description
      Previous value: -"Non-negative AUD decimal string, at most 2dp and 1000000000000.00."New value: +"AUD decimal string."
    • changedInput schema / $defs / FbtFacts / properties / type_two_value / description
      Previous value: -"Non-negative AUD decimal string, at most 2dp and 1000000000000.00."New value: +"AUD decimal string."
    • changedInput schema / $defs / GstFacts / properties / amount / description
      Previous value: -"Non-negative AUD decimal string, at most 2dp and 1000000000000.00."New value: +"AUD decimal string."
    • changedInput schema / $defs / GstFacts / properties / scope_confirmed / description
      Previous value: -"Pass true only after establishing every scope condition in aus-accounting://scope calculation_worksheets for this kind. Missing or uncertain scope must be resolved first; false is refused."New value: +"Scope confirmation for this kind; false is refused."
    • changedInput schema / $defs / ResidentTaxFacts / properties / scope_confirmed / description
      Previous value: -"Pass true only after establishing every scope condition in aus-accounting://scope calculation_worksheets for this kind. Missing or uncertain scope must be resolved first; false is refused."New value: +"Scope confirmation for this kind; false is refused."
    • changedInput schema / $defs / ResidentTaxFacts / properties / taxable_income / description
      Previous value: -"Non-negative AUD decimal string, at most 2dp and 1000000000000.00."New value: +"AUD decimal string."
    • changedInput schema / $defs / SgFacts / properties / ordinary_time_earnings / description
      Previous value: -"Non-negative AUD decimal string, at most 2dp and 1000000000000.00."New value: +"AUD decimal string."
    • changedInput schema / $defs / SgFacts / properties / qualifying_contributions / description
      Previous value: -"Non-negative AUD decimal string, at most 2dp and 1000000000000.00."New value: +"AUD decimal string."
    • changedInput schema / $defs / SgFacts / properties / scope_confirmed / description
      Previous value: -"Pass true only after establishing every scope condition in aus-accounting://scope calculation_worksheets for this kind. Missing or uncertain scope must be resolved first; false is refused."New value: +"Scope confirmation for this kind; false is refused."
  6. Addedv0.1.10

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds real value beyond them: return contents (engine version, source-check date, citations, exclusions), that scope confirmation is not evidence of eligibility, and the instruction never to invent scope. It stops short of describing failure/refusal behavior in more detail, so a 4.

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

Conciseness4/5

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

Purpose and the alternative-routing constraint are front-loaded, and each sentence carries scope, period, or constraint information rather than filler. It is long, but the length is justified by ten worksheet variants and the money-format rules.

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?

With an output schema present, the description need not explain return values, and it still notes what results include. For a ten-variant calculation tool with annotations covering safety, the scope, period, and eligibility caveats are complete enough to call correctly.

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

Parameters4/5

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

Schema coverage is 100% and there is a single discriminated-union 'facts' parameter, so baseline would be 3. The description earns the bump by explaining scope_confirmed semantics per kind and the AUD decimal format and bounds, adding meaning beyond the per-field schema text.

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?

States a specific verb and resource ('Calculate one of ten bounded tax and super worksheets, GST to study loan repayment') and enumerates the kinds, immediately distinguishing it from the sibling lookup/review tools. An agent knows exactly what this computes and its breadth.

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

Usage Guidelines5/5

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

Gives explicit prerequisites ('Pass scope_confirmed true only after establishing every scope condition listed in calculation_worksheets for the kind; resolve missing or uncertain scope first') and a clear when-not list (no BAS/return, no Medicare, no benefit valuation, no post-June 2026 SG). Nothing is left to inference.

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