Skip to main content
Glama

AI2Fin (2Fin) Tax MCP

Income tax & take-home estimate (57 countries)

income_tax_estimate
Read-onlyIdempotent

Estimate personal income tax and take-home pay from gross annual income for 57 countries, using the engine's effective-dated brackets with each country's own levies, offsets and social contributions as its scheme defines them. Covered: AE, AR, AT, AU, BD, BE, BR, CA, CH, CL, CN, CO, CR, CZ, DE, DK, EE, EG, ES, FI, FR, GB, GR, GT, HU, ID, IE, IL, IN, IS, IT, JM, JP, KE, KR, LU, LV, MX, MY, NG, NL, NO, NZ, PH, PK, PL, PT, SA, SE, SG, SI, SK, TH, TR, US, VN, ZA. Any other country returns 'not covered' rather than a guess; its headline rates live in tax_rate_lookup. Pass region for a state, province or nation where the scheme has one (CA: 13 regions, e.g. AB, BC, MB; ES: 3 regions, e.g. AN, CT, MD; GB: SCT (Scotland); US: 51 regions, e.g. AK, AL, AR); without it the answer is national only and says so in its assumptions. For Finland pass municipality (Finnish or Swedish name, e.g. 'Tampere' or 'Helsingfors') for that municipality's own rate — otherwise the national average is used and the answer says so — plus church for a parish member and age where it changes the contributions; Finland also returns the tax-card rate (veroprosentti). The figure is for EMPLOYMENT income (salary or wages) wherever a country applies an employee-only item — India's salary standard deduction, UK Class 1 National Insurance, US FICA — and the first assumption says so. For freelance or self-employed profit pass incomeType "self-employed": India and the UK compute it, countries where it is taxed the same answer it, and the rest refuse with what differs rather than return a salaried figure. This is a resident-individual estimate, not a filing calculation: relay the assumptions it returns. Each answer cites the income-tax source and date for that country — not the GST/VAT one. For AU HELP/HECS use student_loan_repayment. Results may include one sourced background fact (relatedFact); the figures do not depend on it.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
ageNoFinland only: age at the end of the tax year. Changes the employee pension and unemployment contributions and, from 66, the earned-income credit; omit to assume a working age (18–64 from 2026, when the 53–62 pension surcharge ended; 18–52 for 2025)
churchNoFinland only: parish membership, for church tax. Needs `municipality`, because each parish sets its own ratenone
incomeYesGross annual income in local currency, before tax
regionNoOptional state, province or nation code, where the country's scheme has one: CA: 13 regions, e.g. AB, BC, MB; ES: 3 regions, e.g. AN, CT, MD; GB: SCT (Scotland); US: 51 regions, e.g. AK, AL, AR
countryYes2-letter ISO code of a covered country (upper case)
taxYearNoTax year as people write it, e.g. '2026-27' or '2026/27' (AU/NZ/GB/IN), '2026' (calendar-year countries), 'YA 2027' (Singapore), 'Tax Year 2027' (Pakistan, which names a year by its end); omit for the current tax year. A year not on file is refused with the years on file
incomeTypeNoWhat the income is: "employment" (salary or wages, the default) or "self-employed" (freelance or sole-trader profit after business expenses). Countries that do not model self-employed income refuse it with what differs instead of returning the employment figure
municipalityNoFinland only: the municipality (kunta) of residence on 31 December of the previous year, in Finnish or Swedish, e.g. 'Helsinki', 'Espoo', 'Tampere', 'Åbo'. Sets the municipal and parish tax rates; omit to use the national average municipal rate

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
litoYesKept for compatibility: AU Low Income Tax Offset only, 0 for every other country. See `offsets` for the general figure.
grossYesGross annual income used
leviesYesCharges on top of the offset tax, by name (social contributions, regional tax) — empty array when none apply
regionNoState, province or nation whose tax was included — present only when region was passed
sourceYesThe national tax authority the figures were verified against (e.g. 'ATO — ato.gov.au')
countryYesCountry estimated (2-letter ISO code)
offsetsYesCredits that reduced the tax, by name — empty array when none apply
taxYearYesTax year the brackets belong to
taxableYesIncome after any pre-band deduction (UK personal allowance, IN standard deduction, US standard deduction)
currencyYesCurrency of every monetary field
takeHomeYesGross minus total tax
totalTaxYesTotal tax after levies and offsets
incomeTaxYesIncome tax before levies and offsets
sourceUrlNohttps link to the authority page the rate was verified against. Present only on rate answers backed by a verified ledger row — absent (never empty) otherwise, so its presence is itself the claim
churchRateNoFinland: church-tax rate applied, as a fraction (0 for a non-member)
disclaimerYesGeneral-information note that must accompany any figure shown to a person
mayBeStaleYesTrue once the verification date is over a year old — re-confirm with the authority
assumptionsNoAssumptions the figures depend on — relay them with the numbers; the first is always the income basis
averageRateNoTotal tax over gross, as a fraction
incomeBasisNoWhat income the figure was computed for: employment (employee-only items applied), self-employed, or any (nothing depends on the income type). The first assumption says the same in words
relatedFactNoOne sourced background fact about the country's income tax; the figures do not depend on it. Absent when no sourced fact fits.
taxCardRateNoFinland: the withholding percentage (veroprosentti) Vero would put on the tax card — rounded up to the next half point. Employee pension and unemployment contributions are withheld on top of it
marginalRateNoMarginal rate on the next unit of income, as a fraction
medicareLevyYesKept for compatibility: AU Medicare levy only, 0 for every other country. See `levies` for the general figure.
municipalityNoFinland: the municipality whose rates were used, or "national average"
municipalRateNoFinland: municipal income-tax rate applied, as a fraction
dataVerifiedOnYesISO date the rate data was last confirmed against the authority
taxCardWithheldNoFinland: the tax the tax card covers for the year, to the cent (state, municipal, church, health insurance and YLE tax, less the credit)
separatelyWithheldNoFinland: employee pension and unemployment contributions for the year, to the cent — withheld by the employer on top of the tax card

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changed
    • changedInput schema / properties / age / description
      Previous value: -"Finland only: age at the end of the tax year. Changes the employee pension and unemployment contributions and, from 66, the earned-income credit; omit to assume a working age of 18–52"New value: +"Finland only: age at the end of the tax year. Changes the employee pension and unemployment contributions and, from 66, the earned-income credit; omit to assume a working age (18–64 from 2026, when the 53–62 pension surcharge ended; 18–52 for 2025)"
    • addedInput schema / properties / incomeType
      Added value: +{
      +  "description": "What the income is: \"employment\" (salary or wages, the default) or \"self-employed\" (freelance or sole-trader profit after business expenses). Countries that do not model self-employed income refuse it with what differs instead of returning the employment figure",
      +  "enum": [
      +    "employment",
      +    "self-employed"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / taxYear / description
      Previous value: -"Tax-year label as the country uses it, e.g. '2025-26' (AU/NZ/GB/IN) or '2026' (calendar-year countries); omit for the current tax year. An unknown year is refused with the years on file"New value: +"Tax year as people write it, e.g. '2026-27' or '2026/27' (AU/NZ/GB/IN), '2026' (calendar-year countries), 'YA 2027' (Singapore), 'Tax Year 2027' (Pakistan, which names a year by its end); omit for the current tax year. A year not on file is refused with the years on file"
    • changedOutput schema / properties / assumptions / description
      Previous value: -"Assumptions the figures depend on — relay them with the numbers"New value: +"Assumptions the figures depend on — relay them with the numbers; the first is always the income basis"
    • addedOutput schema / properties / incomeBasis
      Added value: +{
      +  "description": "What income the figure was computed for: employment (employee-only items applied), self-employed, or any (nothing depends on the income type). The first assumption says the same in words",
      +  "enum": [
      +    "employment",
      +    "self-employed",
      +    "any"
      +  ],
      +  "type": "string"
      +}
  2. Changed32 schema fields changed
    • addedInput schema / properties / age
      Added value: +{
      +  "description": "Finland only: age at the end of the tax year. Changes the employee pension and unemployment contributions and, from 66, the earned-income credit; omit to assume a working age of 18–52",
      +  "maximum": 100,
      +  "minimum": 15,
      +  "type": "integer"
      +}
    • addedInput schema / properties / church
      Added value: +{
      +  "default": "none",
      +  "description": "Finland only: parish membership, for church tax. Needs `municipality`, because each parish sets its own rate",
      +  "enum": [
      +    "none",
      +    "evangelical-lutheran",
      +    "orthodox"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / country / description
      Previous value: -"Country with bracket data: AU (Australia) or NZ (New Zealand)"New value: +"2-letter ISO code of a covered country (upper case)"
    • changedInput schema / properties / country / enum
      Previous value: -[
      -  "AU",
      -  "NZ"
      -]New value: +[
      +  "AE",
      +  "AR",
      +  "AT",
      +  "AU",
      +  "BD",
      +  "BE",
      +  "BR",
      +  "CA",
      +  "CH",
      +  "CL",
      +  "CN",
      +  "CO",
      +  "CR",
      +  "CZ",
      +  "DE",
      +  "DK",
      +  "EE",
      +  "EG",
      +  "ES",
      +  "FI",
      +  "FR",
      +  "GB",
      +  "GR",
      +  "GT",
      +  "HU",
      +  "ID",
      +  "IE",
      +  "IL",
      +  "IN",
      +  "IS",
      +  "IT",
      +  "JM",
      +  "JP",
      +  "KE",
      +  "KR",
      +  "LU",
      +  "LV",
      +  "MX",
      +  "MY",
      +  "NG",
      +  "NL",
      +  "NO",
      +  "NZ",
      +  "PH",
      +  "PK",
      +  "PL",
      +  "PT",
      +  "SA",
      +  "SE",
      +  "SG",
      +  "SI",
      +  "SK",
      +  "TH",
      +  "TR",
      +  "US",
      +  "VN",
      +  "ZA"
      +]
    • changedInput schema / properties / income / description
      Previous value: -"Gross annual income in local currency (AUD for AU, NZD for NZ), before tax"New value: +"Gross annual income in local currency, before tax"
    • addedInput schema / properties / municipality
      Added value: +{
      +  "description": "Finland only: the municipality (kunta) of residence on 31 December of the previous year, in Finnish or Swedish, e.g. 'Helsinki', 'Espoo', 'Tampere', 'Åbo'. Sets the municipal and parish tax rates; omit to use the national average municipal rate",
      +  "maxLength": 60,
      +  "type": "string"
      +}
    • addedInput schema / properties / region
      Added value: +{
      +  "description": "Optional state, province or nation code, where the country's scheme has one: CA: 13 regions, e.g. AB, BC, MB; ES: 3 regions, e.g. AN, CT, MD; GB: SCT (Scotland); US: 51 regions, e.g. AK, AL, AR",
      +  "maxLength": 8,
      +  "type": "string"
      +}
    • changedInput schema / properties / taxYear / description
      Previous value: -"Financial-year label like '2025-26'; omit to use the current financial year in that country's timezone"New value: +"Tax-year label as the country uses it, e.g. '2025-26' (AU/NZ/GB/IN) or '2026' (calendar-year countries); omit for the current tax year. An unknown year is refused with the years on file"
    • removedInput schema / properties / taxYear / examples
      Removed value: -[
      -  "2025-26"
      -]
    • removedInput schema / properties / taxYear / pattern
      Removed value: -"^\\d{4}-\\d{2}$"
    • addedOutput schema / properties / assumptions
      Added value: +{
      +  "description": "Assumptions the figures depend on — relay them with the numbers",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / averageRate
      Added value: +{
      +  "description": "Total tax over gross, as a fraction",
      +  "type": "number"
      +}
    • addedOutput schema / properties / churchRate
      Added value: +{
      +  "description": "Finland: church-tax rate applied, as a fraction (0 for a non-member)",
      +  "type": "number"
      +}
    • changedOutput schema / properties / country / description
      Previous value: -"Country estimated"New value: +"Country estimated (2-letter ISO code)"
    • removedOutput schema / properties / country / enum
      Removed value: -[
      -  "AU",
      -  "NZ"
      -]
    • changedOutput schema / properties / currency / description
      Previous value: -"Currency of every monetary field (AUD or NZD)"New value: +"Currency of every monetary field"
    • addedOutput schema / properties / levies
      Added value: +{
      +  "description": "Charges on top of the offset tax, by name (social contributions, regional tax) — empty array when none apply",
      +  "items": {
      +    "properties": {
      +      "amount": {
      +        "type": "number"
      +      },
      +      "name": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "name",
      +      "amount"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / properties / lito / description
      Previous value: -"Low Income Tax Offset applied (AU only; 0 otherwise)"New value: +"Kept for compatibility: AU Low Income Tax Offset only, 0 for every other country. See `offsets` for the general figure."
    • addedOutput schema / properties / marginalRate
      Added value: +{
      +  "description": "Marginal rate on the next unit of income, as a fraction",
      +  "type": "number"
      +}
    • changedOutput schema / properties / medicareLevy / description
      Previous value: -"Medicare levy (AU only; 0 for NZ)"New value: +"Kept for compatibility: AU Medicare levy only, 0 for every other country. See `levies` for the general figure."
    • addedOutput schema / properties / municipalRate
      Added value: +{
      +  "description": "Finland: municipal income-tax rate applied, as a fraction",
      +  "type": "number"
      +}
    • addedOutput schema / properties / municipality
      Added value: +{
      +  "description": "Finland: the municipality whose rates were used, or \"national average\"",
      +  "type": "string"
      +}
    • addedOutput schema / properties / offsets
      Added value: +{
      +  "description": "Credits that reduced the tax, by name — empty array when none apply",
      +  "items": {
      +    "properties": {
      +      "amount": {
      +        "type": "number"
      +      },
      +      "name": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "name",
      +      "amount"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / region
      Added value: +{
      +  "description": "State, province or nation whose tax was included — present only when region was passed",
      +  "type": "string"
      +}
    • addedOutput schema / properties / relatedFact
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "One sourced background fact about the country's income tax; the figures do not depend on it. Absent when no sourced fact fits.",
      +  "properties": {
      +    "context": {
      +      "description": "Present on a state or provincial answer: the fact is about the country as a whole",
      +      "enum": [
      +        "national"
      +      ],
      +      "type": "string"
      +    },
      +    "country": {
      +      "description": "2-letter ISO code of the country the fact is about",
      +      "type": "string"
      +    },
      +    "detail": {
      +      "description": "Longer supporting detail, when the corpus has it",
      +      "type": "string"
      +    },
      +    "fact": {
      +      "description": "The fact, in one or two sentences",
      +      "type": "string"
      +    },
      +    "kind": {
      +      "description": "'origin' = when the tax began and what it replaced; 'anniversary' = the same, on the anniversary of its start date; 'story' = a dated story from the facts corpus",
      +      "enum": [
      +        "origin",
      +        "story",
      +        "anniversary"
      +      ],
      +      "type": "string"
      +    },
      +    "more": {
      +      "description": "The tool that returns the full sourced fact set for this country",
      +      "enum": [
      +        "tax_facts"
      +      ],
      +      "type": "string"
      +    },
      +    "sourceName": {
      +      "description": "Who the fact is sourced to",
      +      "type": "string"
      +    },
      +    "sourceUrl": {
      +      "description": "Link to that source — always present",
      +      "type": "string"
      +    },
      +    "topic": {
      +      "description": "Which tax the fact is about",
      +      "enum": [
      +        "gst",
      +        "income",
      +        "company",
      +        "cgt",
      +        "super",
      +        "studentloan",
      +        "general"
      +      ],
      +      "type": "string"
      +    },
      +    "verifiedDate": {
      +      "description": "ISO date the fact was last checked against its source, when recorded",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "kind",
      +    "topic",
      +    "country",
      +    "fact",
      +    "sourceName",
      +    "sourceUrl",
      +    "more"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / separatelyWithheld
      Added value: +{
      +  "description": "Finland: employee pension and unemployment contributions for the year, to the cent — withheld by the employer on top of the tax card",
      +  "type": "number"
      +}
    • addedOutput schema / properties / sourceUrl
      Added value: +{
      +  "description": "https link to the authority page the rate was verified against. Present only on rate answers backed by a verified ledger row — absent (never empty) otherwise, so its presence is itself the claim",
      +  "type": "string"
      +}
    • addedOutput schema / properties / taxCardRate
      Added value: +{
      +  "description": "Finland: the withholding percentage (veroprosentti) Vero would put on the tax card — rounded up to the next half point. Employee pension and unemployment contributions are withheld on top of it",
      +  "type": "number"
      +}
    • addedOutput schema / properties / taxCardWithheld
      Added value: +{
      +  "description": "Finland: the tax the tax card covers for the year, to the cent (state, municipal, church, health insurance and YLE tax, less the credit)",
      +  "type": "number"
      +}
    • changedOutput schema / properties / taxYear / description
      Previous value: -"Financial year the brackets belong to"New value: +"Tax year the brackets belong to"
    • addedOutput schema / properties / taxable
      Added value: +{
      +  "description": "Income after any pre-band deduction (UK personal allowance, IN standard deduction, US standard deduction)",
      +  "type": "number"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "country",
      -  "currency",
      -  "taxYear",
      -  "gross",
      -  "incomeTax",
      -  "medicareLevy",
      -  "lito",
      -  "totalTax",
      -  "takeHome",
      -  "source",
      -  "dataVerifiedOn",
      -  "mayBeStale",
      -  "disclaimer"
      -]New value: +[
      +  "country",
      +  "currency",
      +  "taxYear",
      +  "gross",
      +  "taxable",
      +  "incomeTax",
      +  "medicareLevy",
      +  "lito",
      +  "offsets",
      +  "levies",
      +  "totalTax",
      +  "takeHome",
      +  "source",
      +  "dataVerifiedOn",
      +  "mayBeStale",
      +  "disclaimer"
      +]
  3. First observed

TDQS

Score is being calculated.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources