Skip to main content
Glama

Tallyfern Rates (Canada)

GST/HST small supplier ($30,000) check

gst_hst_small_supplier_check
Read-onlyIdempotent

Apply the CRA's $30,000 small-supplier tests (single calendar quarter and four consecutive calendar quarters) to taxable revenue by calendar quarter. Says whether the person must register for the GST/HST, when they stop being a small supplier, the effective date of registration, and headroom for next quarter. Most businesses only (not charities/public service bodies). Returns structuredContent with status, headline, the triggering quarter (or null), per-quarter rolling totals, next-quarter headroom, sources and an as-of date.

Input Schema

NameRequiredDescriptionDefault
quartersYesConsecutive calendar quarters, no gaps (use 0 for quarters with no sales).
taxiOrRideshareNoTrue if self-employed taxi or commercial ride-sharing driver (must register regardless).

Output Schema

NameRequiredDescriptionDefault
asOfYesDate the rules were last verified
ruleYesIdentifier of the rule set applied (ca-gst-hst-small-supplier)
latestYesSummary for the most recent quarter given
statusYesResult of the small-supplier tests
sourcesYesOfficial canada.ca pages used for this answer
triggerYesThe first quarter that triggered registration, or null
currencyYesCurrency of all amounts: Canadian dollars
headlineYesOne-sentence answer
quartersYesEach quarter checked, oldest first
thresholdYesSmall-supplier threshold (30000)
disclaimerYesNot-tax-advice notice
dataVersionYesVersion of the Tallyfern Rates dataset, e.g. 2026.10.03
explanationYesShort plain-language points explaining the result
nextQuarterYesThe quarter after the latest one given, with remaining headroom
relatedLinkYesRelated free Tallyfern tool or page
ruleVersionYesVersion of that rule set, e.g. 1.0.0

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed18 schema fields changed
    • addedOutput schema / properties / currency / description
      Added value: +"Currency of all amounts: Canadian dollars"
    • addedOutput schema / properties / explanation / description
      Added value: +"Short plain-language points explaining the result"
    • addedOutput schema / properties / latest / description
      Added value: +"Summary for the most recent quarter given"
    • addedOutput schema / properties / latest / properties / percentOfThreshold / description
      Added value: +"rollingFourQuarters as a percent of the $30,000 threshold"
    • changedOutput schema / properties / latest / properties / rollingFourQuarters / description
      Previous value: -"Amount in Canadian dollars (CAD)"New value: +"Total of the latest quarter and up to three previous quarters"
    • addedOutput schema / properties / nextQuarter / description
      Added value: +"The quarter after the latest one given, with remaining headroom"
    • addedOutput schema / properties / nextQuarter / properties / quarter / description
      Added value: +"Calendar quarter: 1 = Jan–Mar, 2 = Apr–Jun, 3 = Jul–Sep, 4 = Oct–Dec"
    • addedOutput schema / properties / nextQuarter / properties / year / description
      Added value: +"Calendar year, e.g. 2026"
    • changedOutput schema / properties / quarters / items / properties / amount / description
      Previous value: -"Amount in Canadian dollars (CAD)"New value: +"Taxable revenue entered for this quarter"
    • addedOutput schema / properties / quarters / items / properties / overFourQuarters / description
      Added value: +"True if the rolling total is over $30,000"
    • addedOutput schema / properties / quarters / items / properties / overSingleQuarter / description
      Added value: +"True if this quarter alone is over $30,000"
    • addedOutput schema / properties / quarters / items / properties / quarter / description
      Added value: +"Calendar quarter: 1 = Jan–Mar, 2 = Apr–Jun, 3 = Jul–Sep, 4 = Oct–Dec"
    • addedOutput schema / properties / quarters / items / properties / quartersInWindow / description
      Added value: +"How many quarters (1–4) are in that rolling total"
    • addedOutput schema / properties / quarters / items / properties / year / description
      Added value: +"Calendar year, e.g. 2026"
    • addedOutput schema / properties / rule / description
      Added value: +"Identifier of the rule set applied (ca-gst-hst-small-supplier)"
    • addedOutput schema / properties / ruleVersion / description
      Added value: +"Version of that rule set, e.g. 1.0.0"
    • addedOutput schema / properties / sources / description
      Added value: +"Official canada.ca pages used for this answer"
    • changedOutput schema / properties / trigger / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "amount": {
      -        "description": "Revenue that went over the threshold",
      -        "type": "number"
      -      },
      -      "ceasesOn": {
      -        "anyOf": [
      -          {
      -            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Last day as a small supplier (four-quarter test); null for the single-quarter test"
      -      },
      -      "ceasesToBeSmallSupplier": {
      -        "type": "string"
      -      },
      -      "effectiveRegistration": {
      -        "type": "string"
      -      },
      -      "label": {
      -        "description": "e.g. 'Q2 2026 (April 1 to June 30)'",
      -        "type": "string"
      -      },
      -      "note": {
      -        "type": "string"
      -      },
      -      "quarter": {
      -        "maximum": 4,
      -        "minimum": 1,
      -        "type": "integer"
      -      },
      -      "test": {
      -        "description": "Which test was failed first",
      -        "enum": [
      -          "single_quarter",
      -          "four_quarters"
      -        ],
      -        "type": "string"
      -      },
      -      "year": {
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "test",
      -      "year",
      -      "quarter",
      -      "label",
      -      "amount",
      -      "ceasesOn",
      -      "ceasesToBeSmallSupplier",
      -      "effectiveRegistration"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "amount": {
      +        "description": "Revenue that went over the threshold",
      +        "type": "number"
      +      },
      +      "ceasesOn": {
      +        "anyOf": [
      +          {
      +            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Last day as a small supplier (four-quarter test); null for the single-quarter test"
      +      },
      +      "ceasesToBeSmallSupplier": {
      +        "description": "Plain-language statement of when the person stops being a small supplier",
      +        "type": "string"
      +      },
      +      "effectiveRegistration": {
      +        "description": "Plain-language effective date of registration (when to start charging GST/HST)",
      +        "type": "string"
      +      },
      +      "label": {
      +        "description": "e.g. 'Q2 2026 (April 1 to June 30)'",
      +        "type": "string"
      +      },
      +      "note": {
      +        "description": "Extra caveat, e.g. a later quarter that is also over the threshold on its own",
      +        "type": "string"
      +      },
      +      "quarter": {
      +        "description": "Calendar quarter: 1 = Jan–Mar, 2 = Apr–Jun, 3 = Jul–Sep, 4 = Oct–Dec",
      +        "maximum": 4,
      +        "minimum": 1,
      +        "type": "integer"
      +      },
      +      "test": {
      +        "description": "Which test was failed first",
      +        "enum": [
      +          "single_quarter",
      +          "four_quarters"
      +        ],
      +        "type": "string"
      +      },
      +      "year": {
      +        "description": "Calendar year of the triggering quarter",
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "test",
      +      "year",
      +      "quarter",
      +      "label",
      +      "amount",
      +      "ceasesOn",
      +      "ceasesToBeSmallSupplier",
      +      "effectiveRegistration"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  2. First observed

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive/openWorld=false, and the description adds genuine context beyond them: the exact legal determinations computed, the excluded taxpayer population, and the structured output contents. It does not address behavior on short or gapped quarter sequences (beyond the schema note), or how a null triggering quarter should be read.

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?

Three dense sentences, front-loaded with the computation being performed and followed by the outputs. The parenthetical test qualifiers and the return-field enumeration are lengthy but each carries useful information; only the return-field list is partly recoverable from the output schema.

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 calculation tool with an output schema, full annotation coverage, and 100% parameter documentation, the description supplies everything an agent needs: what is computed, who is in scope, and what comes back. No gaps remain that would affect correct invocation.

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

Parameters3/5

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

Schema description coverage is 100%, and the nested quarter objects document year, quarter, amount, and the contiguous-quarter requirement thoroughly. The description restates the taxable-revenue concept but adds nothing about the taxiOrRideshare override or the minimum-quarter requirements beyond what the schema already says, so the baseline 3 is correct.

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: applies the CRA $30,000 small-supplier tests (single quarter and four consecutive quarters) to taxable revenue by calendar quarter. It also names the outputs produced (registration requirement, small-supplier cessation, effective date, headroom), which distinguishes it cleanly from the sibling rate-lookup tools.

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?

The description gives clear context for use (quarterly taxable revenue, registration question) and an explicit exclusion: 'Most businesses only (not charities/public service bodies).' It does not name the sibling tools or state when to prefer them over this one, so it falls short of explicit alternative routing.

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