Skip to main content
Glama

AI2Fin (2Fin) Tax MCP

GST/VAT add or remove calculator

compute_gst_vat
Read-onlyIdempotent

Add or remove a country's GST/VAT — or its other national consumption tax, such as Japan's consumption tax or Malaysia's SST — on a monetary amount, returning the net / tax / gross split. Use it to convert between tax-exclusive and tax-inclusive prices (invoices, quotes, receipts); for the rates themselves use tax_rate_lookup. Pure arithmetic on the current standard rate, rounded to 2 decimals, in the local currency. Pass region for a state or provincial rate (CA, US): in Canada that is GST plus the provincial tax, in the US the state sales tax. A country with no national rate (the US without a region, or a country with no consumption tax) returns an explanatory error instead of a wrong number. Results may include one sourced background fact (relatedFact); the figures do not depend on it.

Input Schema

NameRequiredDescriptionDefault
modeNo'add' puts tax on top of a net amount; 'remove' extracts the tax already inside a gross amountadd
amountYesThe monetary amount in the local currency — tax-exclusive when mode=add, tax-inclusive when mode=remove
regionNoOptional state or province code, for sub-national sales tax. Held for CA (13 provinces and territories), US (51 states incl. DC). E.g. 'ON' (Ontario) with country CA, or 'CA' (California) with country US. Answered from that state's or province's own cited rate; US figures are the state rate only — local sales taxes are not included.
countryYes2-letter ISO 3166-1 code of the country whose GST/VAT rate applies (case-insensitive)

Output Schema

NameRequiredDescriptionDefault
netYesAmount before tax (local currency, 2 dp)
taxYesThe GST/VAT portion (local currency, 2 dp)
codeYes2-letter ISO country code
modeYesWhich conversion was performed
rateYesStandard rate applied, as a fraction
grossYesAmount including tax (local currency, 2 dp)
regionNoState or province whose rate was applied — present only when region was passed
sourceYesThe national tax authority the figures were verified against (e.g. 'ATO — ato.gov.au')
countryYesCountry name
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
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
regionNameNoWhat applies in that region, in a sentence
relatedFactNoOne sourced background fact about the country's consumption tax; the figures do not depend on it. Absent when no sourced fact fits.
taxLocalNameYesThe tax's local name, e.g. 'GST', 'VAT'
dataVerifiedOnYesISO date the rate data was last confirmed against the authority

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changed
    • addedInput schema / properties / region
      Added value: +{
      +  "description": "Optional state or province code, for sub-national sales tax. Held for CA (13 provinces and territories), US (51 states incl. DC). E.g. 'ON' (Ontario) with country CA, or 'CA' (California) with country US. Answered from that state's or province's own cited rate; US figures are the state rate only — local sales taxes are not included.",
      +  "examples": [
      +    "ON",
      +    "CA",
      +    "NY"
      +  ],
      +  "maxLength": 2,
      +  "minLength": 2,
      +  "pattern": "^[A-Za-z]{2}$",
      +  "type": "string"
      +}
    • addedOutput schema / properties / region
      Added value: +{
      +  "description": "State or province whose rate was applied — present only when region was passed",
      +  "type": "string"
      +}
    • addedOutput schema / properties / regionName
      Added value: +{
      +  "description": "What applies in that region, in a sentence",
      +  "type": "string"
      +}
    • addedOutput schema / properties / relatedFact
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "One sourced background fact about the country's consumption 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 / 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"
      +}
  2. First observed

TDQS

A4.9/5.0
Behavior5/5

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

Annotations cover safety (readOnly, idempotent, non-destructive, closed-world), and the description still adds substantive behavior beyond them: 2-decimal rounding on the current standard rate, local-currency figures, Canadian regions meaning GST plus provincial tax, US meaning state rate only with local taxes excluded, and an explanatory error instead of a wrong number when no national rate exists. It even discloses that relatedFact is decorative and does not affect the computation — unusually candid.

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?

Five tight sentences, each carrying distinct load: scope, use case plus alternative, arithmetic guarantees, region semantics, and failure behavior. The routing constraint and the sibling alternative are front-loaded, and nothing is repetitive filler.

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 read-only four-parameter calculator with a full output schema, the description covers everything an agent needs to call it correctly: inputs, edge-case failure behavior, and scoping of region. Return values need not be explained because the output schema exists, and the relatedFact caveat closes the remaining ambiguity about the response.

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 description coverage is 100%, so 3 is the baseline, but the description adds meaning the schema does not spell out — that region in Canada yields GST plus provincial tax while US figures are the state sales tax only, and that a country with no national rate produces an explanatory error rather than a value. The mode and amount semantics largely restate the schema, so this is above baseline but not maximally additive.

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 description states a specific verb and resource — add or remove a country's GST/VAT (or equivalent national consumption tax) on a monetary amount — and names the exact output shape (net/tax/gross split). It also explicitly distinguishes itself from the sibling tax_rate_lookup, so an agent can route without opening either schema.

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?

It gives the use case directly (converting tax-exclusive to tax-inclusive prices on invoices, quotes, receipts) and names the alternative with the condition that selects it: 'for the rates themselves use tax_rate_lookup.' It also states the region prerequisite for sub-national rates, so the branch conditions are explicit rather than inferred.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources