Skip to main content
Glama

reference-data

Server Details

Asian govt data, cited to source: rates, VAT, tax, wages, holidays, FX. 28 countries; Japan free.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
98.3% over 77 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A3.6/5.0

Scored across 33 tools

Disambiguation2/5

Several clusters overlap heavily: count_working_days vs business_days_between, get_filing_deadlines vs next_filings, cost_hire vs compute_employment_cost vs hire_compare, and compute_vat vs charge_sale vs invoice_check. The descriptions are detailed, but an agent can easily misselect among paid variants and scoped retrieval tools.

Naming Consistency3/5

All names use snake_case, but verb/noun conventions are mixed: get_series and compare_series sit beside cost_hire, hire_compare, invoice_check, next_filings, evidence_pack, and settlement_date. Still readable, but not a predictable verb_noun pattern throughout.

Tool Count2/5

33 tools is well above the 25-tool threshold and feels sprawling, with many paid/free and certified/non-certified variants. The domain is broad, but the surface is heavy enough to burden selection and maintenance.

Completeness3/5

Coverage spans series retrieval, calculations, calendars, invoices, filings, alerts, and receipt verification, but notable gaps remain: no alert lifecycle beyond register_alert, and gross-to-net payroll is referenced via compute_payroll yet not present as a tool. These gaps can create dead ends for common workflows.

Available Tools

33 tools
add_business_daysAdd business days to a dateA
Read-onlyIdempotent
Inspect

FREE, unmetered. The date n business days after (or, for negative n, before) a start date. The start date is day 0 and never counted; n = 0 returns the date itself if it is a business day, otherwise the next one. Lists every non-business day skipped and why. Uses the country's national public-holiday calendar and its statutory weekend rule (Gulf Friday+Saturday, Israel Saturday-only, India 2nd/4th Saturdays, Nepal's 2026 change, China's multi-day breaks and make-up working days). A date in a year whose holidays we do not hold is refused with error year_not_held and the years_held list; it is never computed from weekends alone. A statutory holiday whose date is not yet fixed is refused as holiday_date_pending. Regional (sub-national) holidays are not applied.

NameRequiredDescriptionDefault
nYesBusiness days to add; negative walks backward
dateYesStart date (day 0), YYYY-MM-DD
countryYesISO 3166-1 alpha-2 country code, e.g. 'za', 'ae', 'in'. Every country we hold a holiday calendar for is accepted on every brand, not only this brand's region.

Output Schema

NameRequiredDescription
nNo
freeNo
yearNoOn year_not_held: the year we do not hold
basisNo
errorNoPresent on a free refusal or error; no charge
priceNo
caveatsNo
countryNo
reachedNoOn a refusal: the first date the calculation could not classify
weekendNoWeekend days applied, the basis of that rule, and any dated or sub-national note
calendarNoHoliday calendar used: years_held, source, last_confirmed, stale
directionNo
no_chargeNo
price_usdNo
conventionNo
disclaimerNo
how_to_payNo
start_dateNo
years_heldNoOn year_not_held: the years whose holidays we do hold
bind_seriesNo
explanationNo
result_dateNo
x_next_bindNo
country_nameNo
http_endpointNo
result_weekdayNo
what_you_can_doNo
payment_requiredNotrue when the call needs payment; how_to_pay explains x402 or card
calendar_days_movedNo
non_business_days_skippedNo

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already establish read-only, idempotent, closed-world behavior, but the description goes well beyond them: it enumerates the country statutory weekend rules, discloses that regional holidays are NOT applied, and names two concrete refusal modes (year_not_held with years_held, holiday_date_pending). That is exactly the behavioral context an agent cannot get from structured fields alone.

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?

Front-loaded with the metering status and the core operation, then progressively narrows to edge cases, refusal modes, and exclusions. It is dense and multi-clause, but nearly every sentence carries a distinct rule an agent needs; only the parenthetical country-rule laundry list is slightly over-packed.

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, return-shape details are correctly omitted, and the description still covers the failure modes, the calendar-coverage boundary, and the exclusions an agent must know to call this safely. Little is left for the agent to discover at runtime.

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%, so the baseline is 3, and the description genuinely adds semantics beyond the schema: the start date is day 0 and never counted, n=0 returns the date itself if it is a business day else the next one, and negative n walks backward. The only gap is that the +/-500 bound and country-code format are left entirely to the schema.

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?

Precise verb+resource: add N business days to a start date, with the direction (negative n walks backward) stated up front. This cleanly separates it from siblings like business_days_between, count_working_days, and is_business_day, which count or test rather than advance a date.

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

Usage Guidelines3/5

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

The description explains the day-0 convention and the n=0 edge case, which implies the correct usage context, but it never explicitly names an alternative tool or states when to prefer this over business_days_between/count_working_days. Usage is inferable rather than routed.

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

business_days_betweenCount business days between two datesA
Read-onlyIdempotent
Inspect

FREE, unmetered. Business days between two dates. business_days counts (from, to] and is negative when to is before from, so add_business_days(from, business_days) lands on to whenever to is a business day; business_days_inclusive counts both ends. Also returns weekend days and the public holidays in range. Uses the country's national public-holiday calendar and its statutory weekend rule (Gulf Friday+Saturday, Israel Saturday-only, India 2nd/4th Saturdays, Nepal's 2026 change, China's multi-day breaks and make-up working days). A date in a year whose holidays we do not hold is refused with error year_not_held and the years_held list; it is never computed from weekends alone. A statutory holiday whose date is not yet fixed is refused as holiday_date_pending. Regional (sub-national) holidays are not applied.

NameRequiredDescriptionDefault
toYesRange end, YYYY-MM-DD
fromYesRange start, YYYY-MM-DD
countryYesISO 3166-1 alpha-2 country code, e.g. 'za', 'ae', 'in'. Every country we hold a holiday calendar for is accepted on every brand, not only this brand's region.

Output Schema

NameRequiredDescription
toNo
freeNo
fromNo
yearNoOn year_not_held: the year we do not hold
basisNo
errorNoPresent on a free refusal or error; no charge
priceNo
caveatsNo
countryNo
reachedNoOn a refusal: the first date the calculation could not classify
weekendNoWeekend days applied, the basis of that rule, and any dated or sub-national note
calendarNoHoliday calendar used: years_held, source, last_confirmed, stale
no_chargeNo
price_usdNo
conventionNo
disclaimerNo
how_to_payNo
years_heldNoOn year_not_held: the years whose holidays we do hold
bind_seriesNo
explanationNo
x_next_bindNo
country_nameNo
weekend_daysNo
business_daysNoBusiness days in (from, to]; negative when to is before from
http_endpointNo
what_you_can_doNo
payment_requiredNotrue when the call needs payment; how_to_pay explains x402 or card
business_days_inclusiveNoBusiness days counting both ends
calendar_days_inclusiveNo
public_holidays_on_weekdaysNo
public_holidays_on_weekendsNo

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations, the description adds substantial behavioral detail: it is free and unmetered, defines the counting semantics including negative ranges, explains that weekend days and public holidays are returned, lists specific statutory weekend rules, and documents error behaviors such as year_not_held and holiday_date_pending. These are all meaningful operational traits not covered by the readOnly/idempotent annotations.

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?

The description is front-loaded with the core purpose and key constraint, and most sentences are dense with useful detail. It is somewhat long and includes several illustrative country examples that, while relevant, could be trimmed for brevity, but the structure remains clear and purposeful.

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?

Given the tool's complexity and the existence of an output schema, the description is complete enough for correct invocation. It covers calculation semantics, return contents, calendar limitations, and explicit error conditions, leaving no significant ambiguity for an agent to resolve.

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?

Although schema coverage is already 100%, the description adds important semantic meaning: country selects a national public-holiday calendar and statutory weekend rule, from/to follow half-open interval semantics with potential negative counts, and regional holidays are excluded. This goes well beyond the schema's terse date and country-code descriptions.

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 precise verb and resource: counting business days between two dates. It distinguishes itself from the sibling add_business_days by explaining the inverse relationship and the interval convention '(from, to]', and it clarifies the inclusive-counting variant, so an agent can identify the tool's exact purpose without opening the schema.

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 clearly explains when the tool is appropriate: counting business days between two dates while accounting for national holidays and statutory weekends. It also notes limitations such as regional holidays not being applied and errors for unsupported years, but it does not explicitly contrast with other date-related siblings like is_business_day or count_working_days.

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

charge_saleA
Read-onlyIdempotent
Inspect

PAID ($0.50). Charge this sale: should this invoice carry VAT, which country's and how much - place of supply under the EU, UK and South Africa rules, net/VAT/gross, registration threshold, rule cited. Omit buyer_country for single-country rate maths. Anything we cannot answer in full is refused free (coverage_gap, no_charge). Shares the 3 free calls per IP per day with the answer tools. Pass api_key if you have one (card checkout at /pricing); otherwise the result is the x402 payment requirement. Optional receipt (boolean, default false): on a paid success, include an Ed25519 answer receipt at no extra USDC. An answer receipt is not a series certified extract (GET /v1/certified/{country}/{series} is $0.10 and is not an MCP tool) and is not legal advice. Verify with verify_answer_receipt against /certified/public-key.

NameRequiredDescriptionDefault
bandNoVAT band key, e.g. reduced
amountYesSale amount
api_keyNoAPI key (bypasses x402; metered for invoicing)
receiptNoDefault false. When true, a paid success includes an Ed25519 answer receipt (kind answer_receipt) at no extra USDC. Unpaid 402 and free refusals do not include one. Not a series certified extract (GET /v1/certified/{country}/{series} at $0.10; that SKU is not an MCP tool).
amount_isNonet adds VAT (default); gross extracts it
buyer_typeNoDefault unknown
buyer_countryNoOmit for single-country rate maths
seller_countryYesISO 3166-1 alpha-2 (EL = Greece, UK = United Kingdom)

Output Schema

NameRequiredDescription
jobNo
errorNoPresent on a free refusal or error; no charge
statusNo
evidenceNo
no_chargeNo
price_usdNo
disclaimerNo
how_to_payNo
bind_seriesNo
explanationNo
x_next_bindNo
http_endpointNo
payment_requiredNotrue when the call needs payment; how_to_pay explains x402 or card

TDQS

A4.1/5.0
Behavior5/5

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

Beyond the annotations (readOnly/idempotent/openWorld), it discloses pricing ($0.50), the x402 payment flow, shared rate limits (3 free calls per IP per day), free refusals on incomplete coverage (coverage_gap, no_charge), and receipt issuance/verification semantics. This is unusually rich behavioral disclosure for a paid tool.

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

Conciseness3/5

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

It is front-loaded with the price and action, but the remainder is a dense run-on mixing pricing, payment, rate limits, receipt semantics, and verification. The receipt explanation partially duplicates the schema's own description, adding some redundancy.

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

Completeness4/5

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

With an output schema present, return values need not be described, and the description covers payment, refusals, limits, and receipt behavior. It is close to complete for a complex paid tool, missing only explicit sibling routing.

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 already 100%, so the baseline is 3, but the description adds genuine semantics: omitting buyer_country for single-country maths, api_key bypassing x402, and the receipt flag's effect on paid successes. It goes beyond restating the schema.

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

Purpose4/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 ('Charge this sale') and enumerates the deliverable precisely: VAT applicability, place of supply under EU/UK/South Africa rules, net/VAT/gross, registration threshold, and rule cited. It distinguishes the answer receipt from the certified extract, though it does not explicitly differentiate itself from the sibling compute_vat.

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 concrete invocation conditions: 'Omit buyer_country for single-country rate maths', 'Pass api_key if you have one; otherwise the result is the x402 payment requirement', and the free-refusal behavior. However, it never routes the agent explicitly between charge_sale and the sibling compute_vat or charge_sale_certified.

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

charge_sale_certifiedA
Read-onlyIdempotent
Inspect

PAID ($0.75). The charge_sale dossier plus an Ed25519-signed certified extract of the governing VAT rate, for a filing. Refused free when the governing source cannot be certified right now. Anything we cannot answer in full is refused free (coverage_gap, no_charge). Shares the 3 free calls per IP per day with the answer tools. Pass api_key if you have one (card checkout at /pricing); otherwise the result is the x402 payment requirement. Optional receipt (boolean, default false): on a paid success, include an Ed25519 answer receipt at no extra USDC. An answer receipt is not a series certified extract (GET /v1/certified/{country}/{series} is $0.10 and is not an MCP tool) and is not legal advice. Verify with verify_answer_receipt against /certified/public-key.

NameRequiredDescriptionDefault
bandNoVAT band key, e.g. reduced
amountYesSale amount
api_keyNoAPI key (bypasses x402; metered for invoicing)
receiptNoDefault false. When true, a paid success includes an Ed25519 answer receipt (kind answer_receipt) at no extra USDC. Unpaid 402 and free refusals do not include one. Not a series certified extract (GET /v1/certified/{country}/{series} at $0.10; that SKU is not an MCP tool).
amount_isNonet adds VAT (default); gross extracts it
buyer_typeNoDefault unknown
buyer_countryNoOmit for single-country rate maths
seller_countryYesISO 3166-1 alpha-2 (EL = Greece, UK = United Kingdom)

Output Schema

NameRequiredDescription
jobNo
errorNoPresent on a free refusal or error; no charge
statusNo
evidenceNo
no_chargeNo
price_usdNo
disclaimerNo
how_to_payNo
bind_seriesNo
explanationNo
x_next_bindNo
http_endpointNo
payment_requiredNotrue when the call needs payment; how_to_pay explains x402 or card

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the annotations it discloses price ($0.75), the free-refusal policy and its reasons, rate limiting (3 free/IP/day), auth paths (api_key bypasses x402), and exactly when a receipt is and is not included. This is unusually rich behavioral disclosure for a paid tool.

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?

It front-loads the price and the core deliverable, then the refusal policy, then auth. Efficient but dense, with the receipt/certified-extract distinction repeated in both description and schema, which costs a little polish.

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 paid, complex, high-stakes tool this covers cost, payment paths, refusal semantics, rate limits, and verification route, and an output schema exists so return values need no prose. Nothing an agent needs to invoke it correctly is absent.

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%, so the schema already documents all 8 parameters including net/gross, buyer_type defaults and api_key bypass. The description largely restates the receipt flag rather than adding new parameter semantics, so the baseline 3 applies.

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 line states a concrete verb, resource and price: 'charge_sale dossier plus an Ed25519-signed certified extract of the governing VAT rate.' It explicitly differentiates from the answer-receipt SKU and the non-MCP /v1/certified series extract, so an agent can situate it against sibling charge_sale and the answer 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?

It gives strong operating context: use 'for a filing', refusal is free for coverage_gap/no_charge, 3 free calls per IP per day shared with answer tools, and api_key vs x402 fallback. What is missing is an explicit routing statement against the sibling charge_sale (when to pay $0.75 for certification vs the plain charge).

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

check_minimum_wageA
Read-onlyIdempotent
Inspect

PAID ($0.02). Compliance verdict: is a salary at, above or below the country's statutory minimum wage? Returns verdict, margin, the statutory floor and the legal instrument it rests on. Honest statuses when no enforceable floor exists or the period doesn't match the floor's period (cross-period conversion is never guessed). Pass api_key if you have one (instant card checkout at /pricing); otherwise the response explains how to pay via x402. The evaluation country is free to try (see list_series). Optional receipt (boolean, default false): on a paid success, include an Ed25519 answer receipt at no extra USDC. An answer receipt is not a series certified extract (GET /v1/certified/{country}/{series} is $0.10 and is not an MCP tool) and is not legal advice. Verify with verify_answer_receipt against /certified/public-key.

NameRequiredDescriptionDefault
amountYesWage to check, in the country's own currency
periodYesPeriod the amount covers — must match the statutory floor's period
api_keyNoAPI key (bypasses x402; metered for invoicing)
countryYesISO country code
receiptNoDefault false. When true, a paid success includes an Ed25519 answer receipt (kind answer_receipt) at no extra USDC. Unpaid 402 and free refusals do not include one. Not a series certified extract (GET /v1/certified/{country}/{series} at $0.10; that SKU is not an MCP tool).

Output Schema

NameRequiredDescription
basisNo
errorNoPresent on a free refusal or error; no charge
floorNo
statusNoAnswer status, e.g. computed or an honest no-answer status
countryNo
receiptNoEd25519 answer receipt when receipt=true on a paid success
verdictNo
questionNo
no_chargeNo
price_usdNo
disclaimerNo
how_to_payNo
provenanceNoCited official sources behind the answer
bind_seriesNo
explanationNo
label_basisNoInputs and the rule ids that produced the two labels
x_next_bindNo
http_endpointNo
coverage_labelNoHow much of the question is covered: ready = complete; partial = held with a disclosed limitation or default; gap = no number served. Rules at /label-rules
confidence_labelNoEvidence verdict derived from source type, verification age and the stale flag (answers: the weakest series read). Rules at /label-rules
payment_requiredNotrue when the call needs payment; how_to_pay explains x402 or card

TDQS

A4.4/5.0
Behavior5/5

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

Adds substantial behavior beyond the annotations: pricing ($0.02), payment paths, honest statuses when no enforceable floor exists or periods mismatch (and that cross-period conversion is never guessed), receipt issuance rules, and a not-legal-advice disclaimer. Annotations cover safety (readOnly, idempotent, non-destructive), and the description layers on the operational and financial traits an agent needs.

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?

Front-loads the verdict purpose before payment and receipt mechanics, which is the right ordering. It is fairly dense and carries some pricing/marketing detail that could be trimmed, but every sentence is roughly on-task and nothing critical is buried.

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?

An output schema exists so return values need not be explained, yet the description still covers payment, receipt verification (verify_answer_receipt against /certified/public-key), free-tier scope, and edge-case statuses. For a paid, open-world compliance tool this is complete enough to invoke correctly.

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%, so all five parameters are already documented, including the receipt default and period enum constraint. The description reinforces receipt behavior and api_key bypass but adds little syntax or format detail beyond the schema, so baseline 3 applies.

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 ('check minimum wage') plus the exact question answered: is a salary at, above or below the statutory floor. Names the return payload (verdict, margin, statutory floor, legal instrument), which clearly separates it from siblings like compare_series, get_series, and compute_employment_cost.

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?

Gives clear operating context: the evaluation country is free to try (routing to list_series), how to pay (api_key or x402), and explicitly notes that a certified extract is a separate, non-MCP SKU. It stops short of an explicit when-to-use-this-vs-alternatives statement for the core verdict, but the context is strong.

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

compare_seriesA
Read-onlyIdempotent
Inspect

PAID ($0.02). One series (e.g. vat, policy-rate, minimum-wage, corporate-tax) across up to 10 countries of this brand in one call; each row carries its own source, dates and labels, and countries without the series are listed under missing. Malformed requests are refused free. Pass api_key if you have one; otherwise the response explains how to pay via x402. After a 200, bind get_changes (free poll) or register_alert (HMAC push; Register: $0 · Delivery after trial: $0.05) on this series so a later gazette does not silently retire the value.

NameRequiredDescriptionDefault
seriesYesSeries id from list_series, e.g. vat
api_keyNoAPI key
countriesYesISO 3166-1 alpha-2 codes on this brand, at most 10

Output Schema

NameRequiredDescription
rowsNo
as_ofNo
countNo
errorNoPresent on a free refusal or error; no charge
seriesNo
missingNo
no_chargeNo
price_usdNo
disclaimerNo
how_to_payNo
bind_seriesNo
explanationNo
x_next_bindNo
http_endpointNo
payment_requiredNotrue when the call needs payment; how_to_pay explains x402 or card

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations by disclosing cost ($0.02), that malformed requests are refused free, that missing countries are surfaced under a 'missing' key, that each row carries its own source/dates/labels, and the api_key vs x402 payment path. Annotations cover safety/idempotency, but this adds concrete pricing, error and auth behavior.

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?

Front-loaded with the paid cost and the core one-series-many-countries scope, and each clause carries operational detail. It is a dense run-on paragraph and includes sibling pricing ('Register: $0 · Delivery after trial: $0.05') that is arguably outside this tool's remit.

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 paid, open-world read tool with an output schema, the description covers cost, payment/auth paths, error handling, the missing-countries behavior, and the recommended follow-up binding. Nothing an agent needs to invoke it correctly is absent.

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%, so baseline is 3, and the description adds value by giving concrete series examples (vat, policy-rate, minimum-wage, corporate-tax) and restating the 10-country cap, plus explaining the api_key alternative path. It stops short of documenting any format beyond the schema.

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 (compare) and resource (one series across countries) with scope bounded to 'up to 10 countries of this brand in one call'. It is clearly distinguishable from siblings like get_series (single fetch) and get_series_history (time series) because it frames the multi-country, single-call dimension.

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?

Gives clear context for when it applies (one series, many countries) and names the correct follow-up tools (get_changes or register_alert) to use after a 200. It does not, however, explicitly contrast itself with get_series/get_snapshot, so the 'when not to use' side 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.

compute_employment_costA
Read-onlyIdempotent
Inspect

PAID ($0.05). Cost to employ: prices every statutory contribution on both the employee and employer sides for a gross salary, returning line-by-line amounts with instrument citations and an explicit refused list for schemes that could not be priced (unknown, not zero). Does NOT compute income tax — use compute_payroll for gross-to-net take-home where supported. Pass api_key if you have one (instant card checkout at /pricing); otherwise the response explains how to pay via x402. The evaluation country is free to try (see list_series). Optional receipt (boolean, default false): on a paid success, include an Ed25519 answer receipt at no extra USDC. An answer receipt is not a series certified extract (GET /v1/certified/{country}/{series} is $0.10 and is not an MCP tool) and is not legal advice. Verify with verify_answer_receipt against /certified/public-key.

NameRequiredDescriptionDefault
grossYesGross pay in local currency
periodNoPeriod the gross covers (default month)
api_keyNoAPI key (bypasses x402; metered for invoicing)
countryYesISO country code with a costed contribution schedule
receiptNoDefault false. When true, a paid success includes an Ed25519 answer receipt (kind answer_receipt) at no extra USDC. Unpaid 402 and free refusals do not include one. Not a series certified extract (GET /v1/certified/{country}/{series} at $0.10; that SKU is not an MCP tool).
contractNoContract type where rates differ
nationalityNoGulf nationality for pension reach
subdivisionNoOptional ISO 3166-2 regional schedule (e.g. CA-QC, DE-SN)
childless_over_23NoGermany care surcharge
children_under_25NoGermany per-child care reduction
workplace_pensionNoAuto-enrolment / PPK participation (default true)
zusatzbeitrag_rateNoGermany sickness-fund supplement

Output Schema

NameRequiredDescription
basisNo
errorNoPresent on a free refusal or error; no charge
statusNoAnswer status, e.g. computed or an honest no-answer status
countryNo
receiptNoEd25519 answer receipt when receipt=true on a paid success
questionNo
no_chargeNo
price_usdNo
disclaimerNo
how_to_payNo
provenanceNoCited official sources behind the answer
bind_seriesNo
explanationNo
label_basisNoInputs and the rule ids that produced the two labels
x_next_bindNo
http_endpointNo
coverage_labelNoHow much of the question is covered: ready = complete; partial = held with a disclosed limitation or default; gap = no number served. Rules at /label-rules
confidence_labelNoEvidence verdict derived from source type, verification age and the stale flag (answers: the weakest series read). Rules at /label-rules
payment_requiredNotrue when the call needs payment; how_to_pay explains x402 or card

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the readOnly/idempotent/destructive annotations: discloses the $0.05 price, the nonzero 'refused list' semantics for unpriceable schemes, the Ed25519 receipt behavior, and the payment/auth mechanics. This is exactly the kind of mutation-adjacent, billing-relevant context an agent needs.

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?

Front-loads the core purpose and the income-tax exclusion well, but the tail of the description is a dense run-on about receipts, certified extracts, and legal disclaimers that partly duplicates the schema's receipt field. It is informative rather than padded, but not maximally tight.

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?

An output schema exists (so return values need not be explained), and the description still covers the non-obvious complexities of a paid, open-world tool: pricing, payment fallbacks, refusal semantics, and receipt verification. Nothing essential to correct invocation appears missing.

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 4 params are enum-constrained, so the schema carries most of the burden (baseline 3). The description adds real meaning for receipt (default false, paid-success only, not a certified extract) and api_key (bypasses x402), lifting it above baseline.

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 with scope: 'prices every statutory contribution on both the employee and employer sides for a gross salary.' It further distinguishes itself from compute_income_tax by explicitly excluding income tax and naming an alternative, so an agent can route correctly without opening a 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?

Explicitly gives when to use (cost-to-employ pricing), when not to use (income tax), and the alternative ('use compute_payroll for gross-to-net take-home'). It also explains the payment path (api_key vs x402) and that the evaluation country is free to try via list_series.

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

compute_income_taxA
Read-onlyIdempotent
Inspect

PAID ($0.02). Statutory income tax on a TAXABLE-income figure using the country's verified marginal bracket schedule, with full per-bracket workings, effective rate and marginal rate. You pass the amount in local currency. IMPORTANT: this is tax on taxable income, NOT net take-home pay — reliefs/allowances and social-security contributions are the caller's concern and are not applied (see the response scope_note). Pass api_key if you have one (instant card checkout at /pricing); otherwise the response explains how to pay via x402. The evaluation country is free to try (see list_series). Optional receipt (boolean, default false): on a paid success, include an Ed25519 answer receipt at no extra USDC. An answer receipt is not a series certified extract (GET /v1/certified/{country}/{series} is $0.10 and is not an MCP tool) and is not legal advice. Verify with verify_answer_receipt against /certified/public-key.

NameRequiredDescriptionDefault
api_keyNoAPI key (bypasses x402; metered for invoicing)
countryYesISO country code
receiptNoDefault false. When true, a paid success includes an Ed25519 answer receipt (kind answer_receipt) at no extra USDC. Unpaid 402 and free refusals do not include one. Not a series certified extract (GET /v1/certified/{country}/{series} at $0.10; that SKU is not an MCP tool).
taxable_incomeYesTaxable income in the country's local currency, in the schedule's own period basis (annual for most; monthly for Côte d'Ivoire, Uganda, Ethiopia, Costa Rica)

Output Schema

NameRequiredDescription
taxNo
basisNo
errorNoPresent on a free refusal or error; no charge
statusNoAnswer status, e.g. computed or an honest no-answer status
countryNo
receiptNoEd25519 answer receipt when receipt=true on a paid success
questionNo
breakdownNo
no_chargeNo
price_usdNo
disclaimerNo
how_to_payNo
provenanceNoCited official sources behind the answer
scope_noteNo
bind_seriesNo
explanationNo
label_basisNoInputs and the rule ids that produced the two labels
x_next_bindNo
http_endpointNo
marginal_rateNo
coverage_labelNoHow much of the question is covered: ready = complete; partial = held with a disclosed limitation or default; gap = no number served. Rules at /label-rules
effective_rateNo
confidence_labelNoEvidence verdict derived from source type, verification age and the stale flag (answers: the weakest series read). Rules at /label-rules
payment_requiredNotrue when the call needs payment; how_to_pay explains x402 or card

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/openWorld/non-destructive, and the description adds what they cannot: the $0.02 price, the API-key bypass, the x402 fallback, the free evaluation country, and the receipt's exact semantics (paid-success only, Ed25519, not a certified extract, not legal advice) plus how to verify it. This is behavior an agent cannot infer from annotations or schema.

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

Conciseness3/5

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

The core purpose is front-loaded, but the receipt paragraph duplicates the schema's receipt description nearly verbatim and the pricing/certified-extract asides add bulk. Dense and mostly useful, yet some sentences do not earn their place.

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, return values need not be described. The description still covers the payment model, scope caveats (reliefs/SS excluded, see scope_note), receipt verification path, and the certified-extract distinction, so an agent has everything needed to call and interpret it.

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%, so the schema already documents country, taxable_income (currency and period basis), receipt, and api_key. The description largely restates these (local currency, receipt semantics) rather than adding new syntax or format detail, so the baseline 3 applies.

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+resource (statutory income tax on a taxable-income figure) and enumerates the outputs (per-bracket workings, effective rate, marginal rate). The explicit 'tax on taxable income, NOT net take-home pay' framing cleanly separates it from siblings like compute_employment_cost and compute_vat.

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?

Gives clear context: pass local-currency taxable income, reliefs/SS contributions are the caller's concern, the evaluation country is free, and payment routing (api_key vs x402) is spelled out. It does not explicitly name a sibling alternative for take-home/net-pay calculations, so it stops short of full when/when-not routing.

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

compute_statutory_interestA
Read-onlyIdempotent
Inspect

PAID ($0.02). Simple statutory interest on a principal at the cited statutory-interest series rate: Actual/365 simple, principal × (rate/100) × (days/365). Pass days, or from and to as YYYY-MM-DD (from inclusive, to exclusive). If both are sent and disagree, the call is refused free. A series with no numeric rate after materialization (mechanism-only) is refused free — a non-answer is not sold. Not legal advice. Jurisdiction-specific compounding and day-count statutes are not applied. Pass api_key if you have one (instant card checkout at /pricing); otherwise the response explains how to pay via x402. Every JP series is free to try. Optional receipt (boolean, default false): on a paid success, include an Ed25519 answer receipt at no extra USDC. An answer receipt is not a series certified extract (GET /v1/certified/{country}/{series} is $0.10 and is not an MCP tool) and is not legal advice. Verify with verify_answer_receipt against /certified/public-key.

NameRequiredDescriptionDefault
toNoPeriod end, YYYY-MM-DD, exclusive.
daysNoDay-count days. Omit when from and to are set. If both are sent and disagree, the answer is refused free (HTTP 400).
fromNoPeriod start, YYYY-MM-DD, inclusive. Pair with to. Day count is calendar days from inclusive to to exclusive (UTC dates).
api_keyNoAPI key (bypasses x402; metered for invoicing)
countryYesISO country code
receiptNoDefault false. When true, a paid success includes an Ed25519 answer receipt (kind answer_receipt) at no extra USDC. Unpaid 402 and free refusals do not include one. Not a series certified extract (GET /v1/certified/{country}/{series} at $0.10; that SKU is not an MCP tool).
principalYesPrincipal in the country's own currency. Must be a finite number greater than 0.

Output Schema

NameRequiredDescription
basisNo
errorNoPresent on a free refusal or error; no charge
statusNoAnswer status, e.g. computed or an honest no-answer status
countryNo
receiptNoEd25519 answer receipt when receipt=true on a paid success
questionNo
no_chargeNo
price_usdNo
disclaimerNo
how_to_payNo
provenanceNoCited official sources behind the answer
bind_seriesNo
explanationNo
label_basisNoInputs and the rule ids that produced the two labels
x_next_bindNo
http_endpointNo
coverage_labelNoHow much of the question is covered: ready = complete; partial = held with a disclosed limitation or default; gap = no number served. Rules at /label-rules
confidence_labelNoEvidence verdict derived from source type, verification age and the stale flag (answers: the weakest series read). Rules at /label-rules
payment_requiredNotrue when the call needs payment; how_to_pay explains x402 or card

TDQS

A4.2/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description layers on substantial extra behavior: $0.02 pricing, free refusal on ambiguous inputs or mechanism-only series, api_key vs x402 payment paths, JP series free to try, and receipt emission rules. It also discloses a meaningful limitation (no jurisdiction-specific compounding/day-count statutes) and a legal disclaimer.

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?

Front-loaded with the formula and payment model, and most sentences carry distinct information. It is slightly bloated by repeating the certified-extract caveat twice and re-explaining the receipt already covered in the schema, but nothing is truly wasted.

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?

An output schema exists, so return values need not be explained, and the description still covers everything else an agent needs: payment/refusal semantics, the optional receipt and how to verify it, and scope limits. Complete for a paid computation tool.

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%, so the schema already documents every parameter, and the description largely restates it (from inclusive/to exclusive, days conflict, receipt default false). It adds the derivation formula and the free-refusal consequence, but the per-parameter meaning is already carried by the schema. Baseline 3.

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 (compute statutory interest) and immediately pins down the exact method: 'Actual/365 simple, principal × (rate/100) × (days/365)'. This distinguishes it cleanly from siblings like compute_income_tax, compute_vat, or compute_employment_cost.

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

Usage Guidelines3/5

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

Gives clear operating rules for its own inputs ('Pass days, or from and to as YYYY-MM-DD', refusal on disagreement), but never states when to choose this tool over sibling calculators or what conditions make it inapplicable. Usage is implied rather than routed.

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

compute_vatA
Read-onlyIdempotent
Inspect

PAID ($0.01). VAT breakdown for an amount: net, tax and gross using the country's current statutory rate, including per-levy components where the rate is composite (e.g. Ghana VAT + NHIL + GETFund). mode=add treats the amount as net; mode=extract backs VAT out of a gross amount. Pass api_key if you have one (instant card checkout at /pricing); otherwise the response explains how to pay via x402. The evaluation country is free to try (see list_series). Optional receipt (boolean, default false): on a paid success, include an Ed25519 answer receipt at no extra USDC. An answer receipt is not a series certified extract (GET /v1/certified/{country}/{series} is $0.10 and is not an MCP tool) and is not legal advice. Verify with verify_answer_receipt against /certified/public-key.

NameRequiredDescriptionDefault
modeNoadd = amount is net (default); extract = amount is gross
amountYesAmount in the country's own currency
api_keyNoAPI key
countryYesISO country code
receiptNoDefault false. When true, a paid success includes an Ed25519 answer receipt (kind answer_receipt) at no extra USDC. Unpaid 402 and free refusals do not include one. Not a series certified extract (GET /v1/certified/{country}/{series} at $0.10; that SKU is not an MCP tool).

Output Schema

NameRequiredDescription
netNo
taxNo
rateNo
basisNo
errorNoPresent on a free refusal or error; no charge
grossNo
statusNoAnswer status, e.g. computed or an honest no-answer status
countryNo
receiptNoEd25519 answer receipt when receipt=true on a paid success
questionNo
workingsNo
no_chargeNo
price_usdNo
disclaimerNo
how_to_payNo
provenanceNoCited official sources behind the answer
bind_seriesNo
explanationNo
label_basisNoInputs and the rule ids that produced the two labels
x_next_bindNo
http_endpointNo
coverage_labelNoHow much of the question is covered: ready = complete; partial = held with a disclosed limitation or default; gap = no number served. Rules at /label-rules
confidence_labelNoEvidence verdict derived from source type, verification age and the stale flag (answers: the weakest series read). Rules at /label-rules
payment_requiredNotrue when the call needs payment; how_to_pay explains x402 or card

TDQS

A4.4/5.0
Behavior5/5

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

Goes well beyond the readOnly/idempotent annotations by disclosing the $0.01 cost, the x402 payment fallback, the receipt behavior (Ed25519, free on paid success, absent on 402/refusals), the 'not legal advice' caveat, and the verify_answer_receipt verification path. This is unusually rich behavioral context for an agent.

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 cost are front-loaded, and the sentences are information-dense. However the receipt behavior is explained both in the description and the schema's receipt description, which is mild redundancy in an otherwise tight definition.

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, return-value details are unnecessary, and the description already covers pricing, payment, receipt/verification and legal caveats. Nothing an agent needs in order to invoke this correctly is missing.

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 schema already documents mode (add/extract), amount currency, country ISO code and receipt. The description restates the mode semantics but adds no format detail beyond the schema, so the baseline 3 applies.

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+resource ('VAT breakdown for an amount: net, tax and gross') plus the exact output fields and the composite-rate case (Ghana VAT + NHIL + GETFund). This clearly separates it from siblings like compute_income_tax and compute_employment_cost, which handle different tax computations.

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?

Gives concrete operating context: pass api_key for instant checkout, otherwise x402 payment is explained in the response, and names the free evaluation country pointing to list_series. It does not explicitly contrast when to prefer this over sibling tax tools, but the usage conditions are otherwise clear.

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

cost_hireA
Read-onlyIdempotent
Inspect

PAID ($0.50). Cost this hire: one cited dossier for a salary - wage-floor verdict, employer and employee contributions (or PAYE net pay for NG/KE), employer cost, optional income tax on taxable_income and first working day on or after start_date. Countries here: AE. Anything we cannot answer in full is refused free (coverage_gap, no_charge). Shares the 3 free calls per IP per day with the answer tools. Pass api_key if you have one (card checkout at /pricing); otherwise the result is the x402 payment requirement. Optional receipt (boolean, default false): on a paid success, include an Ed25519 answer receipt at no extra USDC. An answer receipt is not a series certified extract (GET /v1/certified/{country}/{series} is $0.10 and is not an MCP tool) and is not legal advice. Verify with verify_answer_receipt against /certified/public-key.

NameRequiredDescriptionDefault
grossYesGross pay, local currency
periodNoDefault month
api_keyNoAPI key (bypasses x402; metered for invoicing)
countryYesISO country code with a full cost-this-hire dossier
receiptNoDefault false. When true, a paid success includes an Ed25519 answer receipt (kind answer_receipt) at no extra USDC. Unpaid 402 and free refusals do not include one. Not a series certified extract (GET /v1/certified/{country}/{series} at $0.10; that SKU is not an MCP tool).
start_dateNoYYYY-MM-DD; returns the first working day on or after it
subdivisionNoContribution region where held (e.g. CA-QC)
hours_per_weekNoLets an hourly wage floor be checked
taxable_incomeNoAnnual taxable income; applies the income-tax schedule

Output Schema

NameRequiredDescription
jobNo
errorNoPresent on a free refusal or error; no charge
statusNo
evidenceNo
no_chargeNo
price_usdNo
disclaimerNo
how_to_payNo
bind_seriesNo
explanationNo
x_next_bindNo
http_endpointNo
payment_requiredNotrue when the call needs payment; how_to_pay explains x402 or card

TDQS

A3.8/5.0
Behavior5/5

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

With readOnlyHint/idempotentHint/destructiveHint already declaring the safety profile, the description goes well beyond them: exact price, free-refusal behavior on coverage gaps, per-IP rate limiting shared with other tools, x402 payment path, api_key metering for invoicing, and the Ed25519 receipt's limits (not a certified extract, not legal advice). This is the kind of behavioral context an agent needs and cannot get from annotations.

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

Conciseness3/5

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

Front-loading the price and the core deliverable is good, but the description is dense and rambling, embedding a receipt disclaimer and a certified-extract SKU note (explicitly not an MCP tool) that do not help an agent select or invoke this tool. Several clauses could be cut without losing selection signal.

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

Completeness4/5

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

An output schema exists, so return values need not be explained, and the description still covers cost, refusal semantics, rate limits, payment paths, and receipt behavior. The only real gap is the unaddressed boundary against closely related siblings, which the usage dimension already penalizes.

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 coverage is 100%, so every parameter is already documented in the schema, which sets the baseline at 3. The description restates a few parameter effects (income tax on taxable_income, first working day from start_date, receipt default false) but adds little beyond the schema text, and it even mentions NG/KE PAYE while the country enum permits only 'ae'.

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

Purpose4/5

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

The description states a specific verb and deliverable: cost a hire by returning a cited dossier with a wage-floor verdict, employer/employee contributions, employer cost, and optional income tax. It is clearly distinguishable from generic siblings like compute_employment_cost or check_minimum_wage, though it never explicitly says how it differs from them. Naming the covered country (AE) further narrows the scope.

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

Usage Guidelines3/5

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

It gives operational context (paid at $0.50, free refusal on coverage_gap, shares the 3 free calls/IP/day, pass api_key or get an x402 requirement), which implies when the call is viable. However, it never states when to choose this over siblings like compute_employment_cost, hire_compare, or check_minimum_wage, leaving the main routing decision to inference.

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

count_working_daysA
Read-onlyIdempotent
Inspect

PAID ($0.002). Working days in a date range for a country: weekends (Egypt's Fri–Sat handled) and statutory public holidays applied, with the holidays hit by name and the next working day after the range. Range max 366 days. Pass api_key if you have one (instant card checkout at /pricing); otherwise the response explains how to pay via x402. The evaluation country is free to try (see list_series). Optional receipt (boolean, default false): on a paid success, include an Ed25519 answer receipt at no extra USDC. An answer receipt is not a series certified extract (GET /v1/certified/{country}/{series} is $0.10 and is not an MCP tool) and is not legal advice. Verify with verify_answer_receipt against /certified/public-key.

NameRequiredDescriptionDefault
toYesRange end, YYYY-MM-DD, inclusive
fromYesRange start, YYYY-MM-DD, inclusive
api_keyNoAPI key
countryYesISO country code
receiptNoDefault false. When true, a paid success includes an Ed25519 answer receipt (kind answer_receipt) at no extra USDC. Unpaid 402 and free refusals do not include one. Not a series certified extract (GET /v1/certified/{country}/{series} at $0.10; that SKU is not an MCP tool).
subdivisionNoOptional ISO 3166-2 region code (e.g. 'DE-BY') to apply that region's statutory holidays on top of the national calendar. Regions are listed under `subdivisions` by get_public_holidays. Unknown code is refused free with the list.

Output Schema

NameRequiredDescription
basisNo
errorNoPresent on a free refusal or error; no charge
statusNoAnswer status, e.g. computed or an honest no-answer status
countryNo
receiptNoEd25519 answer receipt when receipt=true on a paid success
questionNo
no_chargeNo
price_usdNo
disclaimerNo
how_to_payNo
provenanceNoCited official sources behind the answer
bind_seriesNo
explanationNo
label_basisNoInputs and the rule ids that produced the two labels
x_next_bindNo
http_endpointNo
coverage_labelNoHow much of the question is covered: ready = complete; partial = held with a disclosed limitation or default; gap = no number served. Rules at /label-rules
confidence_labelNoEvidence verdict derived from source type, verification age and the stale flag (answers: the weakest series read). Rules at /label-rules
payment_requiredNotrue when the call needs payment; how_to_pay explains x402 or card

TDQS

A3.9/5.0
Behavior5/5

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

Annotations already establish read-only, idempotent, non-destructive behavior, and the description layers on material operational facts: the $0.002 price, the 366-day range cap, that holidays are returned by name plus the next working day after the range, the receipt opt-in semantics, and the free evaluation tier. This is exactly the kind of paid-flow and limit-disclosure that annotations cannot express.

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

Conciseness3/5

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

The most decision-relevant fact, the $0.002 price, is correctly front-loaded, and the range/limit constraint follows promptly. But the back half sprawls into the certified-extract SKU caveat and a legal-advice disclaimer that are tangential to invoking this tool, diluting an otherwise dense and useful block of text.

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

Completeness4/5

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

For a paid, policy-heavy tool the description is nearly complete: pricing, payment paths, range limit, receipt behavior, free tier, and an output schema is present so return values need not be restated. The remaining gap is sibling differentiation (notably vs business_days_between), which is the one thing an agent must resolve before calling.

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 the baseline is 3 and the schema already documents from/to/country/receipt/subdivision. The description adds meaning specifically for api_key (card checkout at /pricing vs x402 fallback) and for receipt (Ed25519 answer receipt at no extra cost, not a certified extract, verify with verify_answer_receipt), which elevates it slightly above the schema-only baseline.

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

Purpose4/5

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

States a specific verb and resource: counts working days over a date range for a country, with weekends (including Egypt's Fri–Sat) and statutory holidays applied. This is a clear, concrete purpose. However, it never differentiates itself from the sibling business_days_between, which by name sounds like it computes the same quantity, so an agent cannot confidently route between the two from the description alone.

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

Usage Guidelines3/5

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

The description gives rich operational context (when to pass api_key, card checkout at /pricing vs x402, the free evaluation country, when to use verify_answer_receipt), but it gives no guidance on when to select this tool over business_days_between, add_business_days, or is_business_day. Usage context is implied rather than an explicit when/when-not selection rule.

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

evidence_packA
Read-onlyIdempotent
Inspect

PAID ($0.25). Country evidence pack: the full cited country brief plus up to 3 Ed25519-signed certified extracts (default the first certifiable of vat, policy-rate, minimum-wage). Named series must all be certifiable. Anything we cannot answer in full is refused free (coverage_gap, no_charge). Shares the 3 free calls per IP per day with the answer tools. Pass api_key if you have one (card checkout at /pricing); otherwise the result is the x402 payment requirement. Optional receipt (boolean, default false): on a paid success, include an Ed25519 answer receipt at no extra USDC. An answer receipt is not a series certified extract (GET /v1/certified/{country}/{series} is $0.10 and is not an MCP tool) and is not legal advice. Verify with verify_answer_receipt against /certified/public-key.

NameRequiredDescriptionDefault
seriesNo1 to 3 series ids to certify
api_keyNoAPI key (bypasses x402; metered for invoicing)
countryYesISO country code
receiptNoDefault false. When true, a paid success includes an Ed25519 answer receipt (kind answer_receipt) at no extra USDC. Unpaid 402 and free refusals do not include one. Not a series certified extract (GET /v1/certified/{country}/{series} at $0.10; that SKU is not an MCP tool).

Output Schema

NameRequiredDescription
jobNo
errorNoPresent on a free refusal or error; no charge
statusNo
evidenceNo
no_chargeNo
price_usdNo
disclaimerNo
how_to_payNo
bind_seriesNo
explanationNo
x_next_bindNo
http_endpointNo
payment_requiredNotrue when the call needs payment; how_to_pay explains x402 or card

TDQS

A4.6/5.0
Behavior5/5

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

Despite annotations already declaring readOnly/idempotent/non-destructive, the description layers on pricing ($0.25), the free-refusal path (coverage_gap, no_charge), shared rate limits, payment mechanics (x402 vs api_key), and receipt conditions on success vs 402 vs refusal. This is unusually rich behavioral disclosure beyond the structured fields.

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?

Front-loaded with price and content, and most sentences carry distinct facts (refusal policy, rate limits, payment, receipt). It is dense and slightly repetitive, since the receipt param schema restates much of the same receipt/legal-advice caveat, but little is pure 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?

An output schema exists, so return-shape explanation is unnecessary, and the annotations cover safety. Given a 4-param, payment-gated tool, the description supplies everything an agent needs: cost, refusal semantics, auth options, rate limits, and verification pointer to verify_answer_receipt.

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 already 100%, so the baseline is 3, but the description adds genuine meaning: series defaults to the first certifiable of vat/policy-rate/minimum-wage and all named series must be certifiable, and receipt is scoped to paid successes only and explicitly distinguished from a certified extract. It adds value beyond the 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 paid resource ('Country evidence pack') with its exact composition: the full cited country brief plus up to 3 Ed25519-signed certified extracts. It distinguishes itself from siblings by noting that the certified-extract endpoint 'is not an MCP tool' and by clarifying the relationship to the answer 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?

Gives clear operational context: series must all be certifiable, unanswerable requests are refused free with coverage_gap, the 3 free calls/day are shared with the answer tools, and api_key vs x402 payment routing is explained. It stops short of explicitly comparing against the closest free sibling (get_country_brief) to say when this paid pack is preferred over it.

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

get_calendarA
Read-onlyIdempotent
Inspect

FREE, unmetered. GET /v1/calendar for this brand's continent. Optional country (ISO 3166-1 alpha-2) and series. Derives reverify_by from last_confirmed + update_cycle_days (the same window that sets stale) and, only when current.effective_to is a non-empty string, next_effective_known with basis effective_to. status unknown omits that date. Never parses notes. Does not invent MPC, budget, or wage-review dates. next_effective_known is the recorded end of the current value, not a promised gazette event. A 402 is a gate bug — do not pay. Past changes stay on get_changes.

NameRequiredDescriptionDefault
seriesNoOptional series id (for example policy-rate). Omit for every series. A valid country with no match stays free.
countryNoOptional ISO 3166-1 alpha-2. Omit for every series on this brand's continent. Unknown to the catalog is 404 free. Not two letters is 400 free.

Output Schema

NameRequiredDescription
as_ofNo
brandNo
countNo
errorNoPresent on a free refusal or error; no charge
entriesNo
no_chargeNo
price_usdNo
disclaimerNo
how_to_payNo
bind_seriesNo
explanationNo
x_next_bindNo
http_endpointNo
payment_requiredNotrue when the call needs payment; how_to_pay explains x402 or card

TDQS

A4/5.0
Behavior5/5

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

Annotations cover the safety profile (readOnly, idempotent, openWorld, non-destructive), yet the description adds substantial context beyond them: no metering/cost, 400/404 responses are free, and a 402 is flagged as a gate bug that should not be paid. It also exposes derivation rules (reverify_by from last_confirmed + update_cycle_days), the conditional emission of next_effective_known, and anti-hallucination guarantees (never parses notes, does not invent MPC/budget/wage-review dates).

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

Conciseness3/5

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

Cost and endpoint are sensibly front-loaded, but the text then runs into a dense stream of caveats with undefined jargon (last_confirmed, update_cycle_days, stale, MPC) that assumes prior knowledge, harming readability. Several clauses are genuinely useful, but the run-on construction and internal shorthand could be tightened.

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

Completeness4/5

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

With an output schema present, return values need not be re-explained, yet the description still covers derived fields, conditional omissions, error-code economics, and where historical data lives. The main omission is a plain statement of what the calendar contains for a first-time caller, but overall an agent has enough to invoke it correctly.

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 coverage is 100% and the two parameters are fully documented in the schema (ISO 3166-1 alpha-2 format, series example policy-rate, omission semantics, free-on-mismatch behavior). The description reinforces the same facts but adds little syntax or format detail the schema lacks, so this lands at the baseline 3.

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

Purpose4/5

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

States the concrete resource/endpoint (GET /v1/calendar) and scope (this brand's continent, optional country/series), and it names the sibling that owns past data (get_changes), so it is distinguishable from adjacent tools. It stops short of plainly saying 'returns upcoming compliance/effective-date events with reverify windows', leaving the actual subject matter to be inferred from field names like reverify_by and next_effective_known.

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?

Gives clear operating context: FREE and unmetered, omit country for all series on the continent, valid-but-unmatched country stays free, and past changes belong on get_changes. This routes the agent to the right tool for historical vs current data. It lacks an explicit 'use this when you need X' framing and does not contrast with the many compute_* siblings.

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

get_changesA
Read-onlyIdempotent
Inspect

FREE unmetered change + freshness feed. After any paid series or answer call, call this before you assume the cached value is still the law. Returns every series whose current value took effect on or after since (default last 30 days), newest first, each with last_confirmed and stale, PLUS a dataset-wide freshness summary: how many of the served series were re-verified within 1/7/30/90 days, how many are past their window, and which single series has gone longest without a check. Freshness is checkable or it is marketing. Args: since? (YYYY-MM-DD). Do not re-pay get_series to discover a diff. For a push bind, use register_alert (Register: $0 · Delivery after trial: $0.05). For a filing freeze of the current value, GET /v1/certified/{country}/{series} ($0.10).

NameRequiredDescriptionDefault
sinceNoYYYY-MM-DD. Omit for the server default (last 30 days). Free, unmetered.

Output Schema

NameRequiredDescription
as_ofNo
errorNoPresent on a free refusal or error; no charge
sinceNo
changesNo
no_chargeNo
price_usdNo
disclaimerNo
how_to_payNo
bind_seriesNo
explanationNo
x_next_bindNo
http_endpointNo
payment_requiredNotrue when the call needs payment; how_to_pay explains x402 or card

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already cover read-only, idempotent, open-world, and non-destructive traits, and the description still adds substantial behavioral context beyond them: return ordering (newest first), per-row fields (last_confirmed, stale), the 1/7/30/90-day freshness buckets, and pricing/metering ($0 free, alternatives at $0.05/$0.10). Nothing is left for the agent to infer about cost or shape.

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?

Front-loaded with the key fact ('FREE unmetered') and well organized, but it carries some non-essential weight: the slogan 'Freshness is checkable or it is marketing' does no routing work, and pricing parentheticals add length. Still, most sentences earn their place by steering the agent away from paid alternatives.

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?

An output schema exists, so return values needn't be fully enumerated, yet the description still describes the shape (per-series freshness fields plus a dataset summary). Combined with the alternatives and cost model, an agent has everything needed to select and invoke this 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% for the single `since` parameter, so the baseline is 3, but the description adds genuine semantic meaning beyond the schema's format note: it defines what `since` filters on (series whose current value *took effect* on or after that date) and restates the default window. The added value is real, though modest for a one-param tool.

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+resource combination ('FREE unmetered change + freshness feed') and precisely what it returns: every series whose current value took effect on or after `since`, plus a dataset-wide freshness summary. It differentiates itself from siblings by naming get_series, register_alert, and the certified endpoint as distinct things to use instead.

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?

Explicit trigger ('After any paid series or answer call, call this before you assume the cached value is still the law'), an explicit anti-pattern ('Do not re-pay get_series to discover a diff'), and named alternatives with conditions ('For a push bind, use register_alert', 'For a filing freeze ... GET /v1/certified/...'). When/when-not/alternatives are all covered.

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

get_country_briefA
Read-onlyIdempotent
Inspect

PAID ($0.01). Country brief: every reference series we hold for one country (policy rate, VAT/GST, CPI, taxes, minimum wage, holidays...) in one call, each with value, unit, effective and last-confirmed dates, official source and confidence label. Cheaper than buying the series one by one. Pass api_key if you have one (card checkout at /pricing); otherwise the response explains how to pay via x402. After a 200, bind get_changes (free poll) or register_alert (HMAC push; Register: $0 · Delivery after trial: $0.05) on this series so a later gazette does not silently retire the value.

NameRequiredDescriptionDefault
api_keyNoAPI key
countryYesISO country code

Output Schema

NameRequiredDescription
nameNo
as_ofNo
errorNoPresent on a free refusal or error; no charge
seriesNo
countryNo
no_chargeNo
price_usdNo
disclaimerNo
how_to_payNo
bind_seriesNo
explanationNo
x_next_bindNo
series_countNo
http_endpointNo
payment_requiredNotrue when the call needs payment; how_to_pay explains x402 or card

TDQS

A4.6/5.0
Behavior5/5

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

Annotations cover safety (readOnly, idempotent), but the description adds critical context beyond them: it is paid ($0.01), requires a payment mechanism (api_key or x402), explains what happens without a key, and describes the returned payload's fields (value, unit, effective and last-confirmed dates, official source, confidence label). It also warns about downstream binding to get_changes or register_alert. This is rich behavioral context that annotations cannot convey.

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?

The description is front-loaded with the price and the core purpose, then moves to payment mechanics and follow-up recommendations. Every sentence carries information, though the final sentence about binding get_changes/register_alert is somewhat tangential to the brief itself and could be moved to a 'see also' note. Still, no 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?

Given the tool is paid and has an output schema, the description covers pricing, authentication, payment fallback, and the richness of the returned data. It also covers a post-success workflow. Nothing essential for an agent to invoke it correctly is missing.

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%, so the baseline is 3. The description adds meaning beyond the schema for api_key by explaining its purpose (payment) and the fallback payment flow via x402. The country parameter's enum is already in the schema, so no extra credit there. It also implicitly sets expectations about the response shape when no key is passed.

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 (brief) and resource (country), enumerates the exact series returned (policy rate, VAT/GST, CPI, taxes, minimum wage, holidays), and distinguishes itself from siblings that fetch single series (get_series, get_series_history). An agent knows precisely what this tool yields without opening the schema.

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?

Explains when to use it (one call for every reference series for a country) and why it is preferable to buying series one by one. It also names follow-up tools (get_changes, register_alert) and the condition for using them. It does not explicitly say when NOT to use it (e.g., when only one series is needed, use get_series), but the comparative hint is strong.

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

get_filing_deadlinesStatutory filing deadlinesA
Read-onlyIdempotent
Inspect

PAID ($0.003, same as any series). Recurring statutory tax deadlines for a country — VAT/GST returns and payments, PAYE/payroll withholding remittances, corporate income tax returns and provisional/instalment payments — as RULES, each cited to the official source with the verbatim phrase that states it, plus the actual DUE DATES in a window, rolled for the country's weekend and national public holidays (every skipped day is listed). Where a rule's source does not say which way a weekend deadline moves, the date is flagged roll_unverified rather than guessed. Countries or taxes we could not verify are returned as a free coverage_gap with reasons, never invented. Pass year_end (MM-DD) to re-anchor corporate-tax rules on the company's own accounting year end. The HTML page /{country}/filing-deadlines shows the rules free. Every JP series is free to try. After a 200, bind get_changes (free poll) or register_alert (HMAC push; Register: $0 · Delivery after trial: $0.05) on this series so a later gazette does not silently retire the value.

NameRequiredDescriptionDefault
toNoWindow end, YYYY-MM-DD. Default from + 365 days; at most 400 days after from
taxNoOnly this tax's rules and dates
fromNoWindow start, YYYY-MM-DD. Default today
api_keyNoAPI key (bypasses x402; metered for invoicing)
countryYesISO country code
year_endNoCompany accounting year end, MM-DD (e.g. 06-30). Applies to rules marked year_end_variable

Output Schema

NameRequiredDescription
gapsNo
unitNo
errorNoPresent on a free refusal or error; no charge
notesNo
staleNo
valueNoThe rules. Each carries its own source {name, url, anchor} and last_confirmed
seriesNo
sourceNo
statusNoOn a coverage gap: researched_no_verified_rule or not_yet_researched
countryNo
due_datesNoComputed occurrences in the window, sorted by due_date
no_chargeNo
price_usdNo
confidenceNo
disclaimerNo
how_to_payNo
bind_seriesNo
explanationNo
label_basisNoInputs and the rule ids that produced the two labels
x_next_bindNo
coverage_gapsNoTaxes in scope with no verified rule for this country, and why
http_endpointNo
coverage_labelNoHow much of the question is covered: ready = complete; partial = held with a disclosed limitation or default; gap = no number served. Rules at /label-rules
effective_fromNo
last_confirmedNo
confidence_labelNoEvidence verdict derived from source type, verification age and the stale flag (answers: the weakest series read). Rules at /label-rules
payment_requiredNotrue when the call needs payment; how_to_pay explains x402 or card
computed_disclaimerNo

TDQS

A4.1/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description adds substantial behavioral detail beyond them: deadlines are rolled for weekends and national holidays with every skipped day listed, uncertain weekend rolls are flagged roll_unverified rather than guessed, unverifiable countries/taxes surface as coverage_gap with reasons and are 'never invented.' This tells the agent exactly how to interpret output quality and edge cases.

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

Conciseness3/5

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

Purpose and behavior are front-loaded, which is good, but the definition is long and carries heavy commercial/CTA content ('PAID ($0.003, same as any series)', 'Every JP series is free to try', 'Register: $0 · Delivery after trial: $0.05') that competes for space with the substantive behavioral facts an agent needs.

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, yet it still characterizes the rule/date/flag structure. Combined with 100% schema coverage and annotations covering the safety profile, an agent has everything needed to call this correctly.

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%, so the schema already documents all six parameters, setting the baseline at 3. The description adds only modest extra meaning, explaining that year_end re-anchors corporate-tax rules on the company's own accounting year end, while from/to/tax/api_key receive no elaboration beyond the schema.

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 names a specific resource (recurring statutory tax deadlines) and enumerates the exact content: VAT/GST returns and payments, PAYE/payroll withholding remittances, and corporate income tax returns/instalment payments delivered 'as RULES... plus the actual DUE DATES.' That level of specificity makes it unmistakable against siblings like get_public_holidays, settlement_date, or compute_vat.

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

Usage Guidelines3/5

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

It gives some routing context (the HTML page /{country}/filing-deadlines shows the rules free; bind get_changes or register_alert after a 200) and tells the agent when to pass year_end. However, it never states when to choose this tool over the many neighboring tax/calendar tools (compute_statutory_interest, get_country_brief, etc.), so usage is implied rather than defined.

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

get_key_balanceA
Read-onlyIdempotent
Inspect

FREE. Remaining allowance for an API key (free, card or metered): plan, quota, used, remaining, reset date and what the key covers. Never metered. Pass api_key, or send the key as the X-API-Key header on /mcp.

NameRequiredDescriptionDefault
api_keyNoAPI key. Optional when sent as the X-API-Key header on /mcp.

Output Schema

NameRequiredDescription
planNo
usedNo
errorNoPresent on a free refusal or error; no charge
quotaNo
coversNo
no_chargeNo
price_usdNo
remainingNo
resets_onNo
disclaimerNo
how_to_payNo
bind_seriesNo
explanationNo
x_next_bindNo
http_endpointNo
payment_requiredNotrue when the call needs payment; how_to_pay explains x402 or card

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive, and openWorld. The description adds real value beyond them: the pricing behavior ('FREE', 'Never metered') and the dual auth path. It does not mention pagination or error behavior, but with an output schema present the return shape is covered.

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?

Dense but front-loaded: cost and return contents come first, then auth mechanics. Every phrase carries information, though the parenthetical '(free, card or metered)' packs three concepts into a fragment that reads slightly telegraphically.

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?

Complete for a zero-required-parameter, single-purpose read tool: it covers cost, return fields, plan/coverage semantics, and both authentication paths, while the output schema handles return structure. An agent has everything needed to call it 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 description coverage is 100% and the schema already explains api_key is optional when sent as a header. The description reinforces this by stating the alternative header mechanism explicitly, adding marginal convenience rather than new semantics.

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+resource (get key balance) and enumerates exactly what is returned: plan, quota, used, remaining, reset date, coverage. No sibling tool overlaps this domain, and the name alone would be ambiguous without this detail.

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?

Explicitly says 'FREE' and 'Never metered', telling the agent this is a no-cost, non-billing call, and explains the two calling conventions (api_key param or X-API-Key header). It stops short of naming alternatives or when-not-to-call, but for a one-purpose utility tool there is little ambiguity.

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

get_public_holidaysA
Read-onlyIdempotent
Inspect

FREE. Official public-holiday calendar for a supported country, including gazetted movable holidays, with the official government source cited. Some countries also carry sub-national calendars (e.g. the German Laender): the subdivisions field lists them, and passing subdivision (ISO 3166-2, e.g. 'DE-BY') returns the national calendar merged with that region's statutory days.

NameRequiredDescriptionDefault
countryYesISO country code
subdivisionNoOptional ISO 3166-2 region code (e.g. 'DE-BY'). Returns national + that region's statutory holidays, each tagged national/regional. Omit for the national calendar.

Output Schema

NameRequiredDescription
unitNo
errorNoPresent on a free refusal or error; no charge
notesNo
staleNo
valueNo
seriesNo
sourceNo
countryNo
no_chargeNo
price_usdNo
confidenceNo
disclaimerNo
how_to_payNo
bind_seriesNo
explanationNo
label_basisNoInputs and the rule ids that produced the two labels
subdivisionNo
x_next_bindNo
http_endpointNo
coverage_labelNoHow much of the question is covered: ready = complete; partial = held with a disclosed limitation or default; gap = no number served. Rules at /label-rules
effective_fromNo
last_confirmedNo
confidence_labelNoEvidence verdict derived from source type, verification age and the stale flag (answers: the weakest series read). Rules at /label-rules
payment_requiredNotrue when the call needs payment; how_to_pay explains x402 or card
available_subdivisionsNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds value beyond that by disclosing cost ('FREE'), data provenance (official government source cited), and the merge/tagging behavior for regional calendars. No rate-limit or freshness details, so it stops short of a 5.

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?

Front-loaded with the cost signal and the core purpose, then a focused second sentence on sub-national behavior. Three clauses with little waste, though the subdivision sentence is dense and could be tightened.

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

Completeness4/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 correctly focuses on scope, cost, provenance, and the subdivision flag. Complete enough for correct invocation, with the only real gap being routing guidance against the worldwide sibling.

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%, so baseline is 3. The description's explanation of `subdivision` (ISO 3166-2, 'DE-BY', merged with national statutory days, tagged national/regional) largely restates what the schema already documents, adding little beyond the structured field text.

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

Purpose4/5

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

States a specific verb+resource ('official public-holiday calendar for a supported country') and adds scope details like gazetted movable holidays and government sourcing. It implicitly contrasts with the worldwide sibling via 'for a supported country', but never names get_public_holidays_worldwide, so the differentiation is left to inference.

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

Usage Guidelines3/5

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

The description clearly explains when to pass `subdivision` versus omitting it, which is genuine usage guidance. However, it gives no guidance on when to choose this tool over get_public_holidays_worldwide, get_calendar, or the business-day siblings, and no explicit exclusions.

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

get_public_holidays_worldwideA
Read-onlyIdempotent
Inspect

FREE with any API key, including the free key by email (https://asiaref.dev/free-key). Same as get_public_holidays, but for every country across all seven brands, not only Asian. Unmetered: never counts against the key's allowance. Pass api_key, or send the key as the X-API-Key header on /mcp.

NameRequiredDescriptionDefault
api_keyNoAny valid API key. Optional when the key is sent as the X-API-Key header on /mcp.
countryYesISO country code, any covered country
subdivisionNoOptional ISO 3166-2 region code (e.g. 'DE-BY'). Returns national + that region's statutory holidays, each tagged national/regional. Omit for the national calendar.

Output Schema

NameRequiredDescription
unitNo
errorNoPresent on a free refusal or error; no charge
notesNo
staleNo
valueNo
seriesNo
sourceNo
countryNo
no_chargeNo
price_usdNo
confidenceNo
disclaimerNo
how_to_payNo
bind_seriesNo
explanationNo
label_basisNoInputs and the rule ids that produced the two labels
subdivisionNo
x_next_bindNo
http_endpointNo
coverage_labelNoHow much of the question is covered: ready = complete; partial = held with a disclosed limitation or default; gap = no number served. Rules at /label-rules
effective_fromNo
last_confirmedNo
confidence_labelNoEvidence verdict derived from source type, verification age and the stale flag (answers: the weakest series read). Rules at /label-rules
payment_requiredNotrue when the call needs payment; how_to_pay explains x402 or card
available_subdivisionsNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, non-destructive, and open-world traits, so the bar is lower. The description adds genuinely useful behavior beyond that: quota/billing semantics ('Unmetered: never counts against the key's allowance') and authentication mechanics (pass api_key or send X-API-Key on /mcp). Return shape is left to the output schema, which is acceptable.

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 compact sentences that lead with the billing benefit and then the scope distinction, both highly relevant to tool choice. The embedded free-key URL is slightly promotional overhead, but the content is densely useful with little waste.

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

Completeness4/5

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

With an output schema present, return values need no explanation, and auth, cost, and sibling scope are all covered. The country/subdivision semantics live in the schema and are thorough. Only a brief note on what the returned calendar contains would be needed for a 5.

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%, so the schema fully documents api_key, the country enum, and the subdivision behavior (including the national/regional tagging). The description repeats the auth options already stated in the api_key property description and adds no new parameter-level meaning. Baseline 3 applies.

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

Purpose4/5

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

The description defines the tool by reference to a sibling ('Same as get_public_holidays, but for every country across all seven brands, not only Asian'), which sharply delimits scope and distinguishes it from the Asian-only sibling. However, the verb+resource is inherited rather than stated outright, so an agent must know what get_public_holidays does to fully grasp it.

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 a clear routing condition relative to the sibling: use this one for countries outside Asia. It also notes the tool is unmetered, which is a practical selection incentive. There is no explicit 'when not to use' beyond the implied Asian-scope exclusion, so it falls short of a full 5.

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

get_seriesA
Read-onlyIdempotent
Inspect

PAID ($0.003). Current value of a reference series — e.g. series=policy-rate, vat, minimum-wage. Every value carries its official source citation, effective date, last-confirmed date and staleness flag. Pass api_key if you have one (instant card checkout at /pricing); otherwise the response explains how to pay via x402. Every JP series is free to try. After a 200, bind get_changes (free poll) or register_alert (HMAC push; Register: $0 · Delivery after trial: $0.05) on this series so a later gazette does not silently retire the value.

NameRequiredDescriptionDefault
seriesYesSeries id, e.g. policy-rate, vat, minimum-wage
api_keyNoAPI key (bypasses x402; metered for invoicing)
countryYesISO country code

Output Schema

NameRequiredDescription
unitNo
errorNoPresent on a free refusal or error; no charge
notesNo
staleNo
valueNo
seriesNo
sourceNo
countryNo
no_chargeNo
price_usdNo
confidenceNo
disclaimerNo
how_to_payNo
bind_seriesNo
explanationNo
label_basisNoInputs and the rule ids that produced the two labels
x_next_bindNo
http_endpointNo
coverage_labelNoHow much of the question is covered: ready = complete; partial = held with a disclosed limitation or default; gap = no number served. Rules at /label-rules
effective_fromNo
last_confirmedNo
confidence_labelNoEvidence verdict derived from source type, verification age and the stale flag (answers: the weakest series read). Rules at /label-rules
payment_requiredNotrue when the call needs payment; how_to_pay explains x402 or card

TDQS

A4.6/5.0
Behavior5/5

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

Annotations cover the safety profile (readOnly, idempotent, non-destructive), and the description adds substantial non-obvious context: pay-per-call pricing, the auth/checkout mechanism, the free-tier carve-out, and exactly what each returned value carries (source citation, effective date, last-confirmed date, staleness flag). This is well beyond what structured fields provide.

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?

Front-loads the price and purpose, then layers citation detail, auth handling, and follow-up tools. Dense but nearly every sentence carries operational information; the parenthetical pricing for register_alert is slightly cluttered but earns its place for cost-aware agents.

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?

An output schema exists, yet the description still flags the important return fields, and it covers payment prerequisites, trial limits, and the intended next step. Nothing needed to invoke this tool correctly is missing.

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%, so the baseline is 3, but the description adds meaning the schema does not: api_key bypasses x402 and is metered for invoicing, and series is illustrated with real ids. country is left to its enum with no added semantics.

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+resource ('Current value of a reference series') and immediately grounds it with concrete series ids (policy-rate, vat, minimum-wage). An agent can distinguish it from get_series_history and list_series 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 Guidelines4/5

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

Explains payment paths (api_key vs x402), the free JP trial, and names follow-up siblings (get_changes, register_alert) with the condition 'after a 200'. It stops short of explicitly contrasting with get_series_history for historical values, so routing between the two read tools is inferred rather than stated.

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

get_series_historyA
Read-onlyIdempotent
Inspect

PAID ($0.003). Historical values of a reference series with effective date ranges, optionally filtered by from/to (YYYY-MM-DD). Pass api_key if you have one (instant card checkout at /pricing); otherwise the response explains how to pay via x402. Every JP series is free to try. After a 200, bind get_changes (free poll) or register_alert (HMAC push; Register: $0 · Delivery after trial: $0.05) on this series so a later gazette does not silently retire the value.

NameRequiredDescriptionDefault
toNoLatest effective date, YYYY-MM-DD
fromNoEarliest effective date, YYYY-MM-DD
seriesYesSeries id
api_keyNoAPI key
countryYesISO country code

Output Schema

NameRequiredDescription
errorNoPresent on a free refusal or error; no charge
staleNo
seriesNo
countryNo
entriesNo
no_chargeNo
price_usdNo
disclaimerNo
how_to_payNo
bind_seriesNo
explanationNo
label_basisNoInputs and the rule ids that produced the two labels
x_next_bindNo
http_endpointNo
coverage_labelNoHow much of the question is covered: ready = complete; partial = held with a disclosed limitation or default; gap = no number served. Rules at /label-rules
confidence_labelNoEvidence verdict derived from source type, verification age and the stale flag (answers: the weakest series read). Rules at /label-rules
payment_requiredNotrue when the call needs payment; how_to_pay explains x402 or card

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover readOnly/idempotent/openWorld/non-destructive, yet the description adds real behavioral context: paid call ($0.003), api_key or x402 payment path, JP series free trial, and a genuine gotcha that a later gazette can silently retire the value. It does not describe pagination or response shape, which the output schema likely covers.

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?

Dense but front-loaded with the most decision-relevant fact (paid pricing) and then usage, payment, and follow-up advice. Every sentence carries information, though the run-on final sentence mixes several ideas that could be tighter.

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

Completeness4/5

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

With an output schema present, return values need no explanation, and the description covers payment, free-trial eligibility, and the post-call registration workflow. It is nearly complete for a paid read tool; only error/failure handling is left implicit.

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%, so all five parameters (from, to, series, api_key, country) are already documented in the schema. The description restates from/to filtering and api_key passing without adding format or semantics beyond what the schema provides; baseline 3 applies.

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

Purpose4/5

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

States a specific verb+resource: 'Historical values of a reference series with effective date ranges', which distinguishes it implicitly from get_series (current) and compare_series. It does not name a sibling tool explicitly to contrast scope, keeping it just below the top score.

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?

Gives clear usage context (fetch history, optionally filtered by from/to) and routes the agent to alternatives by naming get_changes (free poll) and register_alert (HMAC push) as the binding step after a 200. No explicit when-not-to-use, but alternatives and their pricing are spelled out.

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

get_snapshotA
Read-onlyIdempotent
Inspect

PAID ($0.02). Snapshot of every series for every country in one call. Pass api_key if you have one (instant card checkout at /pricing); otherwise the response explains how to pay via x402. Every JP series is free to try. After a 200, bind get_changes (free poll) or register_alert (HMAC push; Register: $0 · Delivery after trial: $0.05) on this series so a later gazette does not silently retire the value.

NameRequiredDescriptionDefault
api_keyNoAPI key

Output Schema

NameRequiredDescription
errorNoPresent on a free refusal or error; no charge
resultNoOne entry per country; every series value carries confidence_label, coverage_label and label_basis
countriesNo
no_chargeNo
price_usdNo
disclaimerNo
how_to_payNo
bind_seriesNo
explanationNo
x_next_bindNo
http_endpointNo
payment_requiredNotrue when the call needs payment; how_to_pay explains x402 or card

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), so the description earns credit for adding cost ($0.02), the payment mechanism, a free-tier caveat, and post-success follow-up behavior. These are real traits absent from the structured fields. The follow-up sentence is somewhat cryptic ('silently retire the value'), leaving the consequence slightly fuzzy.

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?

Front-loads the most decision-relevant fact, 'PAID ($0.02)', which is exactly the right ordering. It stays compact for the amount of pricing and follow-up information it carries, though the final sentence is dense and mixes two distinct follow-up mechanisms.

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

Completeness4/5

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

With a rich annotation set, a fully documented single parameter, and an output schema (so return values need not be explained), the description covers the remaining gaps: cost, payment, trial scope, and next steps. Little an agent needs for correct invocation is missing.

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?

Only one parameter and schema coverage is 100%, so the schema already documents api_key. The description adds only the conditional 'if you have one', which does not extend the schema's meaning. Baseline 3 is appropriate.

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

Purpose4/5

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

States a concrete resource and scope: 'Snapshot of every series for every country in one call.' That clearly separates it from narrower siblings like get_series and list_series, though it never names those alternatives explicitly. A specific verb is implied rather than stated, which keeps it just below the top mark.

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?

Gives a clear path for both cases: pass api_key if you have one, otherwise the response explains x402 payment, plus a free JP trial. It also tells the agent what to do after a 200 (bind get_changes or register_alert). It stops short of stating when NOT to use this versus the per-series siblings.

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

hire_compareA
Read-onlyIdempotent
Inspect

PAID ($0.75 for 2 countries, $1.00 for 3-5). Employer cost, employer and employee contributions, on-cost percent and wage-floor verdict side by side and ranked, every figure cited. Countries (any brand): AE, AU, CA, DE, ES, GB, IT, MX, PL, US. Gross is in each country's own currency; currencies are not converted. Anything we cannot answer in full is refused free (coverage_gap, no_charge). Shares the 3 free calls per IP per day with the answer tools. Pass api_key if you have one (card checkout at /pricing); otherwise the result is the x402 payment requirement. Optional receipt (boolean, default false): on a paid success, include an Ed25519 answer receipt at no extra USDC. An answer receipt is not a series certified extract (GET /v1/certified/{country}/{series} is $0.10 and is not an MCP tool) and is not legal advice. Verify with verify_answer_receipt against /certified/public-key.

NameRequiredDescriptionDefault
hiresYes2 to 5 hires
periodNoDefault month
api_keyNoAPI key (bypasses x402; metered for invoicing)
receiptNoDefault false. When true, a paid success includes an Ed25519 answer receipt (kind answer_receipt) at no extra USDC. Unpaid 402 and free refusals do not include one. Not a series certified extract (GET /v1/certified/{country}/{series} at $0.10; that SKU is not an MCP tool).

Output Schema

NameRequiredDescription
jobNo
errorNoPresent on a free refusal or error; no charge
statusNo
evidenceNo
no_chargeNo
price_usdNo
disclaimerNo
how_to_payNo
bind_seriesNo
explanationNo
x_next_bindNo
http_endpointNo
payment_requiredNotrue when the call needs payment; how_to_pay explains x402 or card

TDQS

A4.2/5.0
Behavior5/5

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

Annotations already declare the safe read-only/idempotent profile, and the description adds substantial behavioral context on top: cost tiers, the api_key-vs-x402 payment branch, free coverage_gap refusals, quota sharing with the answer tools, the optional Ed25519 receipt only on paid success, and the verification path. This is exactly the beyond-annotation detail an agent needs.

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

Conciseness3/5

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

A single dense paragraph that leads with pricing rather than the tool's purpose, and repeats the receipt/certified-extract distinction that also appears verbatim in the schema. Every fact is relevant, but the ordering and duplication cost readability.

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 needn't explain return values, and it still covers pricing, coverage limits, refusal semantics, payment flow, and receipt verification. Nothing an agent needs to call this correctly is missing.

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%, so the baseline is 3, and the description goes further by stating gross is in each country's own currency with no conversion, listing the allowed country brands, and confirming 2-5 hires. Those currency and range clarifications are genuine meaning beyond the schema fields.

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

Purpose4/5

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

States a specific verb+resource and enumerates the exact outputs (employer cost, employer/employee contributions, on-cost percent, wage-floor verdict) computed 'side by side and ranked' for 2-5 hires. This implicitly separates it from single-hire siblings like compute_employment_cost and cost_hire, but never names them, so the differentiation is inferred rather than explicit.

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?

Gives clear operating context: 2-5 countries from a fixed list, pricing tiers ($0.75 for 2, $1.00 for 3-5), free refusal for unanswerable requests, and shared 3-free-calls-per-IP quota. It stops short of telling the agent when to prefer a sibling tool (e.g. compute_employment_cost for a single hire) or when not to call this at all.

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

invoice_checkA
Read-onlyIdempotent
Inspect

PAID ($0.60). Check an invoice in one call: is the VAT right (place of supply, rate, expected amount vs vat_charged), is it overdue and how much statutory late interest is owed, and do seller/buyer tax IDs pass the official format check. Seller countries here: ID, IL, JO, JP, KR, KZ, LK, OM, PH, SA, TH, TR, TW, UZ, VN. Send due_date, or invoice_date with terms_days. Anything we cannot answer in full is refused free (coverage_gap, no_charge). Shares the 3 free calls per IP per day with the answer tools. Pass api_key if you have one (card checkout at /pricing); otherwise the result is the x402 payment requirement. Optional receipt (boolean, default false): on a paid success, include an Ed25519 answer receipt at no extra USDC. An answer receipt is not a series certified extract (GET /v1/certified/{country}/{series} is $0.10 and is not an MCP tool) and is not legal advice. Verify with verify_answer_receipt against /certified/public-key.

NameRequiredDescriptionDefault
as_ofNoYYYY-MM-DD; default today
amountYesInvoice amount, local currency
api_keyNoAPI key (bypasses x402; metered for invoicing)
receiptNoDefault false. When true, a paid success includes an Ed25519 answer receipt (kind answer_receipt) at no extra USDC. Unpaid 402 and free refusals do not include one. Not a series certified extract (GET /v1/certified/{country}/{series} at $0.10; that SKU is not an MCP tool).
due_dateNoYYYY-MM-DD contractual due date
amount_isNoDefault net
buyer_typeNo
terms_daysNoAgreed payment term in days
vat_chargedNoVAT amount on the invoice, to be checked
buyer_tax_idNoNeeds buyer_country
invoice_dateNoYYYY-MM-DD; with terms_days instead of due_date
buyer_countryNoISO code; omit for a domestic invoice
seller_tax_idNo
seller_countryYesISO country code of the seller

Output Schema

NameRequiredDescription
jobNo
errorNoPresent on a free refusal or error; no charge
statusNo
evidenceNo
no_chargeNo
price_usdNo
disclaimerNo
how_to_payNo
bind_seriesNo
explanationNo
x_next_bindNo
http_endpointNo
payment_requiredNotrue when the call needs payment; how_to_pay explains x402 or card

TDQS

A4.7/5.0
Behavior5/5

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

Annotations declare a safe read, but the description adds substantial context they cannot: price $0.60, free refusal on coverage_gap with no_charge, the 3-free-calls-per-IP-per-day limit, api_key vs x402 fallback, optional Ed25519 receipt, and the not-legal-advice disclaimer. This is exactly the beyond-annotation disclosure expected.

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?

Front-loaded with price and the one-call purpose, then constraints and options. Dense but every sentence carries operational information; the receipt clause duplicates the schema slightly but restates the payment caveat usefully.

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?

A 14-parameter paid tool with annotations, high schema coverage and an output schema; the description covers cost, payment path, refusal semantics, receipts and verification. Nothing an agent needs before calling is missing.

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 86% and the description still adds meaning: the due_date vs invoice_date+terms_days alternative, receipt being included at no extra USDC on paid success, and api_key bypassing x402. Only lightly beyond the schema, so a 4 rather than 5.

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?

Specific verb+resource: "Check an invoice in one call" plus the three concrete checks (VAT correctness, overdue/late interest, tax ID format). This clearly differentiates it from siblings compute_vat, compute_statutory_interest and validate_tax_id, which each do one part.

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?

Says how to invoke either branch ("Send due_date, or invoice_date with terms_days"), enumerates supported seller countries, and explains the paid/free/refusal routing. It does not explicitly say when to prefer the single-purpose siblings over this composite tool, so it falls short of a 5.

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

invoice_payableA
Read-onlyIdempotent
Inspect

PAID ($0.40). Is this invoice overdue, by how many days, and how much statutory late-payment interest is owed (Actual/365 simple, rate and workings cited). Late-payment regime: none here; statutory interest only: ID, IL, IQ, JO, JP, KR, KW, KZ, LK, OM, PH, SA, TH, TR, TW, UZ, VN. Send due_date, or invoice_date with terms_days. Anything we cannot answer in full is refused free (coverage_gap, no_charge). Shares the 3 free calls per IP per day with the answer tools. Pass api_key if you have one (card checkout at /pricing); otherwise the result is the x402 payment requirement. Optional receipt (boolean, default false): on a paid success, include an Ed25519 answer receipt at no extra USDC. An answer receipt is not a series certified extract (GET /v1/certified/{country}/{series} is $0.10 and is not an MCP tool) and is not legal advice. Verify with verify_answer_receipt against /certified/public-key.

NameRequiredDescriptionDefault
as_ofNoYYYY-MM-DD payment date or day asked about; default today
debtorNoDefault business
api_keyNoAPI key (bypasses x402; metered for invoicing)
countryYesISO country code
receiptNoDefault false. When true, a paid success includes an Ed25519 answer receipt (kind answer_receipt) at no extra USDC. Unpaid 402 and free refusals do not include one. Not a series certified extract (GET /v1/certified/{country}/{series} at $0.10; that SKU is not an MCP tool).
due_dateNoYYYY-MM-DD contractual due date
principalYesUnpaid amount, local currency
terms_daysNoAgreed payment term in days
invoice_dateNoYYYY-MM-DD; with terms_days instead of due_date

Output Schema

NameRequiredDescription
jobNo
errorNoPresent on a free refusal or error; no charge
statusNo
evidenceNo
no_chargeNo
price_usdNo
disclaimerNo
how_to_payNo
bind_seriesNo
explanationNo
x_next_bindNo
http_endpointNo
payment_requiredNotrue when the call needs payment; how_to_pay explains x402 or card

TDQS

A3.9/5.0
Behavior5/5

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

Goes well beyond the annotations: discloses the $0.40 price, the api_key-vs-x402 payment paths, that unanswerable queries are refused free (coverage_gap, no_charge), a per-IP rate limit of 3 free calls per day shared with the answer tools, and precisely what the optional receipt does and does not represent. This is exactly the payment/limits/error context annotations cannot carry.

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

Conciseness3/5

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

Front-loaded with the question it answers, which is good. But the single run-on paragraph packs pricing, coverage lists, rate limits, receipt disclaimers and cross-references into nested parentheticals, making it dense and harder to scan than it needs to be.

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

Completeness4/5

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

With an output schema present, return values need no explanation, and the description more than covers coverage gaps, payment mechanics, rate limits and receipts for a 9-parameter tool. The only missing piece is the boundary against compute_statutory_interest, which an agent could mistake for this tool.

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 the baseline is 3, but the description adds a non-obvious constraint the schema never states: due_date is an alternative to invoice_date paired with terms_days. It also clarifies the receipt flag semantics ('on a paid success') that the schema only partially captures.

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

Purpose4/5

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

States a specific computation with concrete outputs: is the invoice overdue, by how many days, and how much statutory late-payment interest (Actual/365 simple, rate and workings cited). The country coverage list and the 'statutory interest only / no late-payment regime' clause narrow the scope. It never distinguishes itself from the sibling compute_statutory_interest, which is the main ambiguity an agent would face.

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

Usage Guidelines3/5

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

It tells the agent how to call it ('Send due_date, or invoice_date with terms_days') and names verify_answer_receipt for receipts, which is useful routing. However, it gives no when-to-use/when-not against the closest sibling (compute_statutory_interest) or the other charge/compute tools, leaving selection to inference.

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

is_business_dayIs it a business day?A
Read-onlyIdempotent
Inspect

FREE, unmetered. Is this date a business day in this country? Returns is_business_day, the reason (weekend, public_holiday, makeup_workday…), the holiday names, and the next and previous business day. Uses the country's national public-holiday calendar and its statutory weekend rule (Gulf Friday+Saturday, Israel Saturday-only, India 2nd/4th Saturdays, Nepal's 2026 change, China's multi-day breaks and make-up working days). A date in a year whose holidays we do not hold is refused with error year_not_held and the years_held list; it is never computed from weekends alone. A statutory holiday whose date is not yet fixed is refused as holiday_date_pending. Regional (sub-national) holidays are not applied.

NameRequiredDescriptionDefault
dateYesDate to classify, YYYY-MM-DD
countryYesISO 3166-1 alpha-2 country code, e.g. 'za', 'ae', 'in'. Every country we hold a holiday calendar for is accepted on every brand, not only this brand's region.

Output Schema

NameRequiredDescription
dateNo
freeNo
yearNoOn year_not_held: the year we do not hold
basisNo
errorNoPresent on a free refusal or error; no charge
priceNo
reasonNo
caveatsNo
countryNo
reachedNoOn a refusal: the first date the calculation could not classify
weekdayNo
weekendNoWeekend days applied, the basis of that rule, and any dated or sub-national note
calendarNoHoliday calendar used: years_held, source, last_confirmed, stale
no_chargeNo
price_usdNo
disclaimerNo
how_to_payNo
years_heldNoOn year_not_held: the years whose holidays we do hold
bind_seriesNo
explanationNo
x_next_bindNo
country_nameNo
http_endpointNo
is_weekend_dayNo
is_business_dayNo
public_holidaysNo
what_you_can_doNo
payment_requiredNotrue when the call needs payment; how_to_pay explains x402 or card
next_business_dayNo{date, weekday}, or date null with why_unknown when it falls outside the held calendar
previous_business_dayNo

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), yet the description adds substantial behavior: the 'FREE, unmetered' cost signal, the refusal semantics (year_not_held with years_held, holiday_date_pending), the guarantee that results are never inferred from weekends alone, and the explicit exclusion of sub-national holidays. This is well beyond what structured fields convey.

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?

Front-loaded with the cost signal and the core question, followed by returns and then edge-case behavior; every clause carries operational information. The dense weekend-rule parenthetical is long but earns its place by pre-empting surprising classifications.

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 two-parameter classification tool with an output schema and full annotations, the description covers purpose, return shape, error/refusal paths, cost, and scope exclusions. Nothing an agent needs to call it correctly or interpret a refusal is missing.

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 coverage is 100% and both parameters (date YYYY-MM-DD, ISO alpha-2 country) are fully documented in the schema itself. The description reinforces the scope of 'country' (national calendar, accepted across brands) but adds no syntax or format detail beyond the schema, so the baseline 3 applies.

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?

'Is this date a business day in this country?' is a precise verb+resource, and the stated single-date classification scope implicitly separates it from the range-based siblings (business_days_between, count_working_days, add_business_days). The return summary (reason code, holiday names, adjacent business days) makes the operation 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?

The description sets clear usage boundaries — it explicitly says regional/supranational holidays are not applied, that unheld years are refused, and which weekend regimes apply, which tells an agent when the answer is authoritative. It does not, however, name an alternative sibling (e.g. get_public_holidays_worldwide or count_working_days) or state when to prefer them, so it stops short of full when/when-not routing.

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

list_seriesA
Read-onlyIdempotent
Inspect

FREE. Catalog of all asiaref reference-data series: supported countries, series ids, descriptions, freshness metadata and per-series URLs. Call this first to discover what data exists. Paid answer tools accept receipt=true (included in the answer price, no extra USDC) and, on a paid success, return an Ed25519 answer receipt (kind answer_receipt). That receipt is not a series certified extract and is not legal advice. Series certified extracts are GET /v1/certified/{country}/{series} at $0.10 and are not an MCP tool. Verify a receipt with verify_answer_receipt (free, public key only) against /certified/public-key. get_changes is free. get_calendar is free. register_alert registration is free.

NameRequiredDescriptionDefault
detailNoDefault false. Without country, false returns a compact index (country -> series ids). true returns the full catalog, which is large.
countryNoOptional ISO country code. Returns full per-series metadata (source, freshness, bands) for that country only.

Output Schema

NameRequiredDescription
noteNo
errorNoPresent on a free refusal or error; no charge
countriesNoCountry entries ({country, name, series}); on an unknown-country refusal, the list of valid codes
no_chargeNo
price_usdNo
disclaimerNo
how_to_payNo
bind_seriesNo
explanationNo
x_next_bindNo
http_endpointNo
payment_requiredNotrue when the call needs payment; how_to_pay explains x402 or card

TDQS

A4/5.0
Behavior4/5

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

Annotations already cover readOnly/idempotent/non-destructive, but the description adds cost semantics ('FREE') and clarifies that a paid answer receipt is not a certified extract and not legal advice, plus the distinction that certified extracts are a non-MCP HTTP endpoint. Most of this is genuinely additive context, though some of it describes sibling/pricing behavior rather than this tool's own output.

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

Conciseness3/5

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

The purpose and discovery directive are correctly front-loaded, but then it drifts into receipt signing, pricing, certified-extract endpoints, and a list of other free tools — content that belongs to those tools and dilutes this one. Roughly half the text does not serve list_series.

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

Completeness4/5

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

With an output schema, the return shape need not be explained, and the description covers the discovery role plus the compact-vs-full detail tradeoff implicitly. The receipt/legal-advice tangent is unnecessary for this free read tool, but nothing an agent needs to call it correctly is missing.

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%, so both 'detail' and 'country' are already documented with their size/semantics tradeoffs. The description adds no parameter meaning beyond the schema, so the baseline 3 applies.

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+resource: a catalog of all asiaref reference-data series, and enumerates the returned contents (countries, series ids, descriptions, freshness metadata, per-series URLs). 'Call this first to discover what data exists' cleanly separates it from get_series, which retrieves values rather than the catalog.

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?

'Call this first to discover what data exists' gives explicit sequencing guidance before using other tools. It does not name a specific alternative it should be used instead of (e.g., get_series vs list_series) or state when not to call it, so it stops short of full routing guidance.

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

next_filingsA
Read-onlyIdempotent
Inspect

PAID ($0.35). Upcoming VAT, PAYE and corporate-tax due dates in a window (default the next 90 days), rolled for weekends and national public holidays, each rule cited. Countries with verified rules here: AE, BH, CN, ID, IN, JP, KR, MY, OM, PK, QA, SA, SG, TH, TR, TW. Anything we cannot answer in full is refused free (coverage_gap, no_charge). Shares the 3 free calls per IP per day with the answer tools. Pass api_key if you have one (card checkout at /pricing); otherwise the result is the x402 payment requirement. Optional receipt (boolean, default false): on a paid success, include an Ed25519 answer receipt at no extra USDC. An answer receipt is not a series certified extract (GET /v1/certified/{country}/{series} is $0.10 and is not an MCP tool) and is not legal advice. Verify with verify_answer_receipt against /certified/public-key.

NameRequiredDescriptionDefault
toNoYYYY-MM-DD, max 366 days after from
taxNo
fromNoYYYY-MM-DD, default today
api_keyNoAPI key (bypasses x402; metered for invoicing)
countryYesISO country code
receiptNoDefault false. When true, a paid success includes an Ed25519 answer receipt (kind answer_receipt) at no extra USDC. Unpaid 402 and free refusals do not include one. Not a series certified extract (GET /v1/certified/{country}/{series} at $0.10; that SKU is not an MCP tool).
year_endNoMM-DD financial year end

Output Schema

NameRequiredDescription
jobNo
errorNoPresent on a free refusal or error; no charge
statusNo
evidenceNo
no_chargeNo
price_usdNo
disclaimerNo
how_to_payNo
bind_seriesNo
explanationNo
x_next_bindNo
http_endpointNo
payment_requiredNotrue when the call needs payment; how_to_pay explains x402 or card

TDQS

A3.9/5.0
Behavior5/5

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

Annotations already cover safety (readOnly, idempotent, non-destructive), and the description layers on substantial extra behavior: exact price, free refusal on coverage gaps, per-IP free-call sharing, api_key metering, and the receipt option. These are precisely the operational traits annotations cannot convey.

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

Conciseness3/5

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

Purpose is front-loaded, which is good, but the passage is a dense run-on that spends several clauses on pricing, receipts, certified-extract disclaimers, and legal caveats. The receipt explanation largely duplicates the schema's own receipt description, so not every sentence earns its place.

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

Completeness4/5

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

An output schema exists so return values need not be described, and the definition covers payment, coverage scope, refusal semantics, and validation for a paid 7-parameter tool. What is missing is any steer toward the near-duplicate sibling, leaving ambiguity in a crowded family.

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 high (86%), so the baseline is 3, but the description adds genuine default semantics (the window defaults to the next 90 days) and clarifies the receipt toggle's effect on paid vs. unpaid results. The api_key/x402 interaction is also explained beyond the schema's one-liner.

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

Purpose4/5

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

States a specific verb+resource: upcoming VAT/PAYE/cit due dates in a window, with defaults (90 days), holiday rolling, and rule citation. It lists exactly which countries are covered, which is unusually concrete. It does not, however, distinguish itself from the similarly-purposed sibling get_filing_deadlines.

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

Usage Guidelines3/5

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

It explains the payment path (api_key vs x402), the free-refusal condition (coverage_gap, no_charge), and a shared rate limit, which is real usage context. But it never says when to choose this over get_filing_deadlines or the calendar/holiday siblings, so the core routing decision 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.

register_alertAInspect

Bind a webhook so the next gazette does not silently stale a value you already paid for. REGISTERING IS FREE. Register: $0 · Delivery after trial: $0.05. First 3 deliveries are free; later deliveries are $0.05 and refunded if the webhook fails to send. HMAC-SHA256 signed. Two watch types on the same call: • series: ["za/vat-registration-threshold", "ke/", ""] → series.changed when the served value or its effective date moves. On usaref those watches are statutory (minimum-wage, income-tax, statutory-interest, sales-tax, public-holidays), not a FRED-macro subscription. • sources: [""] → source.changed when the document BYTES change (old/new sha256 + citing series). Bytes ≠ value. Value changes arrive as series.changed. Unknown URLs refuse free (source_not_fingerprinted). Max 20 series + 20 sources. Required: url. Optional: api_key stored on the subscription to fund deliveries after the trial. This call does not meter that key. Prefer this over polling get_changes if you are a long-running agent. This is retention, not a new data product.

NameRequiredDescriptionDefault
urlYesWebhook endpoint that will receive HMAC-SHA256 signed events
seriesNoValue watches, e.g. ["za/vat-registration-threshold", "ke/*", "*"]
api_keyNoOptional prepaid key stored on the subscription to fund deliveries after the trial. This call does not meter it.
sourcesNoExact official-source URLs from a series source.url. Unknown URLs are refused free.

Output Schema

NameRequiredDescription
errorNoPresent on a free refusal or error; no charge
no_chargeNo
price_usdNo
disclaimerNo
how_to_payNo
bind_seriesNo
explanationNo
x_next_bindNo
http_endpointNo
payment_requiredNotrue when the call needs payment; how_to_pay explains x402 or card

TDQS

A4.1/5.0
Behavior5/5

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

Beyond the annotations (openWorld, non-idempotent, non-destructive), the description discloses cost structure ($0 register, $0.05 delivery after trial, first 3 free, refunded on send failure), HMAC-SHA256 signing, hard limits (20 series + 20 sources), and refusal behavior (source_not_fingerprinted for unknown URLs). This is exactly the extra behavioral context an agent needs and cannot get from the structured fields.

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

Conciseness3/5

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

The purpose is front-loaded and the watch-type bullets are useful, but pricing is repeated ('REGISTERING IS FREE', '$0 · Delivery after trial: $0.05', 'First 3 deliveries are free'), and asides like 'not a FRED-macro subscription' and 'This is retention, not a new data product' are editorial noise. Several sentences do not earn their place.

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

Completeness4/5

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

An output schema exists, so return values need not be explained, and the description covers costs, limits, signing, and error behavior well. It omits lifecycle details an agent would want: idempotency of repeated registrations (annotations flag idempotent=false) and how to remove or update a subscription. Minor but real gaps for a subscription-creating tool.

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?

With schema coverage at 100%, the baseline is 3, but the description adds genuine meaning: it explains that series watches fire on value/effective-date movement (and contrasts statutory watches vs a FRED-macro subscription), that sources watches fire on document BYTES change with old/new sha256, and that api_key funds deliveries without being metered by this call. That goes meaningfully beyond the schema text.

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

Purpose4/5

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

The description states a specific verb+resource (bind a webhook / register an alert) and spells out two watch types (series → series.changed, sources → source.changed). It even differentiates from the sibling get_changes. The opening sentence ('so the next gazette does not silently stale a value you already paid for') is indirect and marketing-flavored, delaying the actual purpose, which keeps it short of a 5.

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 explicitly routes the agent: 'Prefer this over polling get_changes if you are a long-running agent,' naming the alternative and the condition that selects it. It also implies the monitoring use case via the two watch types, but gives no explicit when-not guidance (e.g. one-shot checks or short-lived agents), so it falls short of full when/when-not coverage.

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

settlement_dateA
Read-onlyIdempotent
Inspect

PAID ($0.02). Settlement/value date: the date n business days after a trade date, computed on the INTERSECTION of the calendars you name, with a per-day trail showing every skipped day and why, on which calendar. Supply business_days for a cycle you are trading under, or market + instrument_class to have a settlement cycle applied that we cite to its primary source (e.g. US equities T+1 under 17 CFR 240.15c6-1(a); UK gilts T+1 by DMO convention, which is NOT the T+2 equity cycle; Japan equities T+2 but JGBs T+1). Calendars are NATIONAL statutory holiday calendars with researched statutory weekend rules (Israel Saturday-only, Gulf Friday+Saturday, India Sundays plus the 2nd and 4th Saturday), NOT CSD or exchange calendars — each response states the basis and any known divergence. Use 'eu.t2' for the euro cash leg. We refuse FREE rather than guess: beyond published calendar coverage, no cited cycle for the instrument (government bonds never inherit an equity cycle), a cycle not in force on the trade date, or FX spot value dates. Free companion: GET /settlement-conventions. Optional receipt (boolean, default false): on a paid success, include an Ed25519 answer receipt at no extra USDC. An answer receipt is not a series certified extract (GET /v1/certified/{country}/{series} is $0.10 and is not an MCP tool) and is not legal advice. Verify with verify_answer_receipt against /certified/public-key.

NameRequiredDescriptionDefault
marketNoISO country of the market whose cited cycle should apply (with instrument_class)
api_keyNoAPI key (bypasses x402; metered for invoicing)
receiptNoDefault false. When true, a paid success includes an Ed25519 answer receipt (kind answer_receipt) at no extra USDC. Unpaid 402 and free refusals do not include one. Not a series certified extract (GET /v1/certified/{country}/{series} at $0.10; that SKU is not an MCP tool).
calendarsYesCalendar ids to intersect: two-letter ISO country codes, plus 'eu.t2' for the euro cash leg
trade_dateYesTrade/reference date, YYYY-MM-DD. Day 0: never counted, never rolled.
business_daysNoThe offset you are trading under (T+n)
instrument_classNoInstrument class — a government bond never inherits an equity cycle

Output Schema

NameRequiredDescription
basisNo
errorNoPresent on a free refusal or error; no charge
statusNoAnswer status, e.g. computed or an honest no-answer status
countryNo
receiptNoEd25519 answer receipt when receipt=true on a paid success
questionNo
no_chargeNo
price_usdNo
disclaimerNo
how_to_payNo
provenanceNoCited official sources behind the answer
bind_seriesNo
explanationNo
label_basisNoInputs and the rule ids that produced the two labels
x_next_bindNo
http_endpointNo
coverage_labelNoHow much of the question is covered: ready = complete; partial = held with a disclosed limitation or default; gap = no number served. Rules at /label-rules
confidence_labelNoEvidence verdict derived from source type, verification age and the stale flag (answers: the weakest series read). Rules at /label-rules
payment_requiredNotrue when the call needs payment; how_to_pay explains x402 or card

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description adds substantial context beyond them: the $0.02 paid nature, the free-refusal policy, the statutory-vs-CSD calendar basis with stated divergence disclosure, and the optional Ed25519 receipt mechanics. This is exactly the kind of behavioral detail annotations cannot carry.

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

Conciseness3/5

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

The core definition is front-loaded, which is good, but the body is an overstuffed block that folds pricing, receipt semantics, legal disclaimers, and verification instructions into one paragraph. The receipt explanation is largely duplicated in the schema description, and the wall-of-text form hurts scannability.

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?

An output schema exists, so return values need no prose, and the description still covers pricing, refusal behavior, calendar provenance, the receipt option, and how to verify it. For a paid, citation-bearing computation tool this leaves no material gap for an agent.

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%, so the schema already documents every parameter; the description still adds meaning by explaining the market+instrument_class pairing, the 'eu.t2' pseudo-id for the euro cash leg, and the rule that government bonds never inherit an equity cycle. That is more than a restatement of the schema, though it does not add syntax detail for every field.

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: compute a settlement/value date n business days after a trade date on the intersection of named calendars, with a per-day audit trail. The scope is precise enough to separate it from generic siblings like add_business_days or is_business_day, since it layers cited settlement cycles on top of plain calendar arithmetic.

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?

Gives explicit routing between the two input paths (business_days for a cycle you are trading under vs market + instrument_class for a cited cycle) and enumerates the refusal conditions (uncovered calendars, no cited cycle, cycle not in force, FX spot). It does not compare itself against sibling MCP tools, only a non-MCP companion endpoint, so it falls short of a 5.

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

validate_tax_idA
Read-onlyIdempotent
Inspect

PAID ($0.003). Offline format and check-digit validation of a business tax ID or VAT number for one country of this brand: valid/invalid, normalised form, id type, check level (checksum only where the authority publishes the algorithm) and why it failed, with official sources. Does not confirm registration; follow official_lookup for that. Countries without a sourced rule answer free with status 'unknown'. Pass api_key if you have one; otherwise the response explains how to pay via x402. After a 200, bind get_changes (free poll) or register_alert (HMAC push; Register: $0 · Delivery after trial: $0.05) on this series so a later gazette does not silently retire the value.

NameRequiredDescriptionDefault
idYesThe tax ID / VAT number as written; spaces, dots, dashes and a VAT country prefix are accepted
api_keyNoAPI key
countryYesISO country code

Output Schema

NameRequiredDescription
as_ofNo
errorNoPresent on a free refusal or error; no charge
validNo
reasonNo
statusNo
countryNo
id_typeNo
sourcesNo
no_chargeNo
price_usdNo
disclaimerNo
how_to_payNo
normalisedNo
bind_seriesNo
check_levelNo
explanationNo
reason_codeNo
x_next_bindNo
http_endpointNo
payment_requiredNotrue when the call needs payment; how_to_pay explains x402 or card

TDQS

A4.5/5.0
Behavior5/5

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

Goes far beyond annotations, which only declare read-only/idempotent/open-world. The description discloses that the tool is a paid call ($0.003), the exact return payload (valid/invalid, normalised form, id type, check level, failure reason), that unsourced countries return 'unknown' for free, the api_key vs x402 payment paths, and the recommended follow-up binding tools. That is substantial behavioral context.

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

Conciseness3/5

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

Front-loads the paid price and core purpose well, but the sentence packs several distinct ideas (validation result shape, registration caveat, unknown-country rule, payment options, follow-up tool binding) into a dense block. Every idea is useful, but the flowing single paragraph could be structured into clearer chunks.

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 validation tool with a full schema, output schema present and annotations covering safety, the description supplies the remaining decision-critical context: result shape, failure semantics, unknown handling, pricing/payment paths and the recommended follow-up tools. Nothing essential to call it correctly is missing.

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 coverage is 100%, so the schema already documents id, country enum and api_key. The description adds some behavioral color (sourced-rule gating, payment options for api_key) but little syntax detail beyond the schema. 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 ('Offline format and check-digit validation of a business tax ID or VAT number') with a precise scope limited to 'one country of this brand'. The distinction from registration verification ('Does not confirm registration; follow official_lookup for that') makes the boundary explicit.

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?

Clearly explains when to use it (format/check-digit validation), what it does not do (confirm registration) and points to the alternative path (official_lookup for registration). Also specifies what happens for unsourced countries and payment flow options.

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

verify_answer_receiptA
Read-onlyIdempotent
Inspect

FREE. Verify an answer receipt (kind answer_receipt) with the Ed25519 public key only. Pass the receipt object or its canonical JSON, signature_value when the signature is not inside the receipt, and public_key_pem to verify offline. If public_key_pem is omitted, the tool may GET signature.public_key (/certified/public-key) and read public_key_pem. Never send a private key. A valid signature shows this service issued that exact receipt. It does not turn the receipt into a series certified extract (GET /v1/certified/{country}/{series} at $0.10, not an MCP tool) and it is not legal advice. Same key and canonical-JSON rule as /certified/public-key.

NameRequiredDescriptionDefault
receiptYesAnswer receipt object (signature may be nested) or the canonical JSON of that object. A canonical JSON string of the signed body (signature omitted) is accepted when signature_value is also passed.
public_key_pemNoSPKI public key PEM from GET /certified/public-key (field public_key_pem). Required for offline verify. A private key PEM is refused.
public_key_urlNoOptional GET /certified/public-key URL used only when public_key_pem is omitted. Ignored when the PEM is present.
signature_valueNoBase64 Ed25519 signature. Required when the receipt object or JSON string does not already include signature.value. Overrides a nested signature when both are sent.

Output Schema

NameRequiredDescription
okNo
whyNo
errorNoPresent on a free refusal or error; no charge
no_chargeNo
price_usdNo
disclaimerNo
how_to_payNo
bind_seriesNo
explanationNo
x_next_bindNo
http_endpointNo
payment_requiredNotrue when the call needs payment; how_to_pay explains x402 or card

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, openWorld and non-destructive. The description adds real context beyond them: it discloses that the tool may perform a network GET of /certified/public-key when the PEM is absent, that it is FREE, and that a private key must never be sent. It does not discuss failure modes or error behavior, so it is useful but not exhaustive.

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?

Front-loaded with 'FREE. Verify...' and dense with no filler, though the closing 'Same key and canonical-JSON rule as /certified/public-key' and the repeated canonical-JSON instruction are mildly redundant. Appropriate length for a cryptographic verification tool.

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, return values need not be explained, and the description covers offline vs. online verification, cost, security constraints, and scope limits. Nothing an agent needs to invoke it correctly is missing.

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%, so the baseline is 3. The description largely restates what the schema documents (public_key_pem requirement, public_key_url only used when the PEM is absent, signature_value overriding a nested signature) and adds only the canonical-JSON rule and the private-key refusal warning.

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 (verify) plus resource (answer receipt) and the exact cryptographic method (Ed25519 public key only). It also sharply bounds the claim of what a valid result means, so an agent can distinguish this from any sibling without opening the 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?

Explicitly says what to pass (receipt object or canonical JSON, signature_value when the signature is not nested, public_key_pem for offline) and what happens when public_key_pem is omitted. It names the alternative path (GET /v1/certified/{country}/{series} at $0.10, explicitly not an MCP tool) and states the exclusion that a valid signature is not a certified extract.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool update
    • Addedinvoice_check
  2. 7 tool updates
    • Addedcharge_sale
    • Addedcharge_sale_certified
    • Addedcost_hire
    • Addedevidence_pack
    • Addedhire_compare
    • Addedinvoice_payable
    • Addednext_filings
  3. 16 tool updates
    • Changedcheck_minimum_wage5 fields changed
      • changedInput schema / properties / receipt / description
        Previous value: -"Default false. When true, a paid success includes an Ed25519 answer receipt (kind answer_receipt) at no extra USDC. Unpaid 402 and free refusals do not include one. Not a series certified extract (GET /v1/certified/{country}/{series} at $0.25; that SKU is not an MCP tool)."New value: +"Default false. When true, a paid success includes an Ed25519 answer receipt (kind answer_receipt) at no extra USDC. Unpaid 402 and free refusals do not include one. Not a series certified extract (GET /v1/certified/{country}/{series} at $0.10; that SKU is not an MCP tool)."
      • removedOutput schema / properties / label_basis / properties / source_type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / label_basis / properties / source_type / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / label_basis / properties / verification_age_days / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / label_basis / properties / verification_age_days / type
        Added value: +[
        +  "number",
        +  "null"
        +]
    • Addedcompare_series
    • Changedcompute_employment_cost5 fields changed
      • changedInput schema / properties / receipt / description
        Previous value: -"Default false. When true, a paid success includes an Ed25519 answer receipt (kind answer_receipt) at no extra USDC. Unpaid 402 and free refusals do not include one. Not a series certified extract (GET /v1/certified/{country}/{series} at $0.25; that SKU is not an MCP tool)."New value: +"Default false. When true, a paid success includes an Ed25519 answer receipt (kind answer_receipt) at no extra USDC. Unpaid 402 and free refusals do not include one. Not a series certified extract (GET /v1/certified/{country}/{series} at $0.10; that SKU is not an MCP tool)."
      • removedOutput schema / properties / label_basis / properties / source_type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / label_basis / properties / source_type / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / label_basis / properties / verification_age_days / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / label_basis / properties / verification_age_days / type
        Added value: +[
        +  "number",
        +  "null"
        +]
    • Changedcompute_income_tax5 fields changed
      • changedInput schema / properties / receipt / description
        Previous value: -"Default false. When true, a paid success includes an Ed25519 answer receipt (kind answer_receipt) at no extra USDC. Unpaid 402 and free refusals do not include one. Not a series certified extract (GET /v1/certified/{country}/{series} at $0.25; that SKU is not an MCP tool)."New value: +"Default false. When true, a paid success includes an Ed25519 answer receipt (kind answer_receipt) at no extra USDC. Unpaid 402 and free refusals do not include one. Not a series certified extract (GET /v1/certified/{country}/{series} at $0.10; that SKU is not an MCP tool)."
      • removedOutput schema / properties / label_basis / properties / source_type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / label_basis / properties / source_type / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / label_basis / properties / verification_age_days / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / label_basis / properties / verification_age_days / type
        Added value: +[
        +  "number",
        +  "null"
        +]
    • Changedcompute_statutory_interest5 fields changed
      • changedInput schema / properties / receipt / description
        Previous value: -"Default false. When true, a paid success includes an Ed25519 answer receipt (kind answer_receipt) at no extra USDC. Unpaid 402 and free refusals do not include one. Not a series certified extract (GET /v1/certified/{country}/{series} at $0.25; that SKU is not an MCP tool)."New value: +"Default false. When true, a paid success includes an Ed25519 answer receipt (kind answer_receipt) at no extra USDC. Unpaid 402 and free refusals do not include one. Not a series certified extract (GET /v1/certified/{country}/{series} at $0.10; that SKU is not an MCP tool)."
      • removedOutput schema / properties / label_basis / properties / source_type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / label_basis / properties / source_type / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / label_basis / properties / verification_age_days / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / label_basis / properties / verification_age_days / type
        Added value: +[
        +  "number",
        +  "null"
        +]
    • Changedcompute_vat5 fields changed
      • changedInput schema / properties / receipt / description
        Previous value: -"Default false. When true, a paid success includes an Ed25519 answer receipt (kind answer_receipt) at no extra USDC. Unpaid 402 and free refusals do not include one. Not a series certified extract (GET /v1/certified/{country}/{series} at $0.25; that SKU is not an MCP tool)."New value: +"Default false. When true, a paid success includes an Ed25519 answer receipt (kind answer_receipt) at no extra USDC. Unpaid 402 and free refusals do not include one. Not a series certified extract (GET /v1/certified/{country}/{series} at $0.10; that SKU is not an MCP tool)."
      • removedOutput schema / properties / label_basis / properties / source_type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / label_basis / properties / source_type / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / label_basis / properties / verification_age_days / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / label_basis / properties / verification_age_days / type
        Added value: +[
        +  "number",
        +  "null"
        +]
    • Changedcount_working_days5 fields changed
      • changedInput schema / properties / receipt / description
        Previous value: -"Default false. When true, a paid success includes an Ed25519 answer receipt (kind answer_receipt) at no extra USDC. Unpaid 402 and free refusals do not include one. Not a series certified extract (GET /v1/certified/{country}/{series} at $0.25; that SKU is not an MCP tool)."New value: +"Default false. When true, a paid success includes an Ed25519 answer receipt (kind answer_receipt) at no extra USDC. Unpaid 402 and free refusals do not include one. Not a series certified extract (GET /v1/certified/{country}/{series} at $0.10; that SKU is not an MCP tool)."
      • removedOutput schema / properties / label_basis / properties / source_type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / label_basis / properties / source_type / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / label_basis / properties / verification_age_days / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / label_basis / properties / verification_age_days / type
        Added value: +[
        +  "number",
        +  "null"
        +]
    • Addedget_country_brief
    • Changedget_filing_deadlines4 fields changed
      • removedOutput schema / properties / label_basis / properties / source_type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / label_basis / properties / source_type / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / label_basis / properties / verification_age_days / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / label_basis / properties / verification_age_days / type
        Added value: +[
        +  "number",
        +  "null"
        +]
    • Changedget_public_holidays4 fields changed
      • removedOutput schema / properties / label_basis / properties / source_type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / label_basis / properties / source_type / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / label_basis / properties / verification_age_days / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / label_basis / properties / verification_age_days / type
        Added value: +[
        +  "number",
        +  "null"
        +]
    • Changedget_public_holidays_worldwide4 fields changed
      • removedOutput schema / properties / label_basis / properties / source_type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / label_basis / properties / source_type / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / label_basis / properties / verification_age_days / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / label_basis / properties / verification_age_days / type
        Added value: +[
        +  "number",
        +  "null"
        +]
    • Changedget_series4 fields changed
      • removedOutput schema / properties / label_basis / properties / source_type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / label_basis / properties / source_type / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / label_basis / properties / verification_age_days / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / label_basis / properties / verification_age_days / type
        Added value: +[
        +  "number",
        +  "null"
        +]
    • Changedget_series_history8 fields changed
      • removedOutput schema / properties / entries / items / properties / label_basis / properties / source_type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / entries / items / properties / label_basis / properties / source_type / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / entries / items / properties / label_basis / properties / verification_age_days / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / entries / items / properties / label_basis / properties / verification_age_days / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / label_basis / properties / source_type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / label_basis / properties / source_type / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / label_basis / properties / verification_age_days / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / label_basis / properties / verification_age_days / type
        Added value: +[
        +  "number",
        +  "null"
        +]
    • Changedget_snapshot4 fields changed
      • removedOutput schema / properties / result / items / properties / series / items / properties / label_basis / properties / source_type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / result / items / properties / series / items / properties / label_basis / properties / source_type / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / result / items / properties / series / items / properties / label_basis / properties / verification_age_days / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / result / items / properties / series / items / properties / label_basis / properties / verification_age_days / type
        Added value: +[
        +  "number",
        +  "null"
        +]
    • Changedsettlement_date5 fields changed
      • changedInput schema / properties / receipt / description
        Previous value: -"Default false. When true, a paid success includes an Ed25519 answer receipt (kind answer_receipt) at no extra USDC. Unpaid 402 and free refusals do not include one. Not a series certified extract (GET /v1/certified/{country}/{series} at $0.25; that SKU is not an MCP tool)."New value: +"Default false. When true, a paid success includes an Ed25519 answer receipt (kind answer_receipt) at no extra USDC. Unpaid 402 and free refusals do not include one. Not a series certified extract (GET /v1/certified/{country}/{series} at $0.10; that SKU is not an MCP tool)."
      • removedOutput schema / properties / label_basis / properties / source_type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / label_basis / properties / source_type / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / label_basis / properties / verification_age_days / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / label_basis / properties / verification_age_days / type
        Added value: +[
        +  "number",
        +  "null"
        +]
    • Addedvalidate_tax_id
  4. 18 tool updates
    • Addedadd_business_days
    • Addedbusiness_days_between
    • Changedcheck_minimum_wage3 fields changed
      • addedOutput schema / properties / confidence_label
        Added value: +{
        +  "description": "Evidence verdict derived from source type, verification age and the stale flag (answers: the weakest series read). Rules at /label-rules",
        +  "enum": [
        +    "high",
        +    "medium",
        +    "low"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / coverage_label
        Added value: +{
        +  "description": "How much of the question is covered: ready = complete; partial = held with a disclosed limitation or default; gap = no number served. Rules at /label-rules",
        +  "enum": [
        +    "ready",
        +    "partial",
        +    "gap"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / label_basis
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Inputs and the rule ids that produced the two labels",
        +  "properties": {
        +    "confidence_reasons": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "coverage_reasons": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "inputs": {
        +      "items": {},
        +      "type": "array"
        +    },
        +    "rules": {
        +      "type": "string"
        +    },
        +    "rules_version": {
        +      "type": "string"
        +    },
        +    "source_type": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    },
        +    "stale": {
        +      "type": "boolean"
        +    },
        +    "verification_age_days": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedcompute_employment_cost3 fields changed
      • addedOutput schema / properties / confidence_label
        Added value: +{
        +  "description": "Evidence verdict derived from source type, verification age and the stale flag (answers: the weakest series read). Rules at /label-rules",
        +  "enum": [
        +    "high",
        +    "medium",
        +    "low"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / coverage_label
        Added value: +{
        +  "description": "How much of the question is covered: ready = complete; partial = held with a disclosed limitation or default; gap = no number served. Rules at /label-rules",
        +  "enum": [
        +    "ready",
        +    "partial",
        +    "gap"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / label_basis
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Inputs and the rule ids that produced the two labels",
        +  "properties": {
        +    "confidence_reasons": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "coverage_reasons": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "inputs": {
        +      "items": {},
        +      "type": "array"
        +    },
        +    "rules": {
        +      "type": "string"
        +    },
        +    "rules_version": {
        +      "type": "string"
        +    },
        +    "source_type": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    },
        +    "stale": {
        +      "type": "boolean"
        +    },
        +    "verification_age_days": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedcompute_income_tax3 fields changed
      • addedOutput schema / properties / confidence_label
        Added value: +{
        +  "description": "Evidence verdict derived from source type, verification age and the stale flag (answers: the weakest series read). Rules at /label-rules",
        +  "enum": [
        +    "high",
        +    "medium",
        +    "low"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / coverage_label
        Added value: +{
        +  "description": "How much of the question is covered: ready = complete; partial = held with a disclosed limitation or default; gap = no number served. Rules at /label-rules",
        +  "enum": [
        +    "ready",
        +    "partial",
        +    "gap"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / label_basis
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Inputs and the rule ids that produced the two labels",
        +  "properties": {
        +    "confidence_reasons": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "coverage_reasons": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "inputs": {
        +      "items": {},
        +      "type": "array"
        +    },
        +    "rules": {
        +      "type": "string"
        +    },
        +    "rules_version": {
        +      "type": "string"
        +    },
        +    "source_type": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    },
        +    "stale": {
        +      "type": "boolean"
        +    },
        +    "verification_age_days": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedcompute_statutory_interest3 fields changed
      • addedOutput schema / properties / confidence_label
        Added value: +{
        +  "description": "Evidence verdict derived from source type, verification age and the stale flag (answers: the weakest series read). Rules at /label-rules",
        +  "enum": [
        +    "high",
        +    "medium",
        +    "low"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / coverage_label
        Added value: +{
        +  "description": "How much of the question is covered: ready = complete; partial = held with a disclosed limitation or default; gap = no number served. Rules at /label-rules",
        +  "enum": [
        +    "ready",
        +    "partial",
        +    "gap"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / label_basis
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Inputs and the rule ids that produced the two labels",
        +  "properties": {
        +    "confidence_reasons": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "coverage_reasons": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "inputs": {
        +      "items": {},
        +      "type": "array"
        +    },
        +    "rules": {
        +      "type": "string"
        +    },
        +    "rules_version": {
        +      "type": "string"
        +    },
        +    "source_type": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    },
        +    "stale": {
        +      "type": "boolean"
        +    },
        +    "verification_age_days": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedcompute_vat3 fields changed
      • addedOutput schema / properties / confidence_label
        Added value: +{
        +  "description": "Evidence verdict derived from source type, verification age and the stale flag (answers: the weakest series read). Rules at /label-rules",
        +  "enum": [
        +    "high",
        +    "medium",
        +    "low"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / coverage_label
        Added value: +{
        +  "description": "How much of the question is covered: ready = complete; partial = held with a disclosed limitation or default; gap = no number served. Rules at /label-rules",
        +  "enum": [
        +    "ready",
        +    "partial",
        +    "gap"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / label_basis
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Inputs and the rule ids that produced the two labels",
        +  "properties": {
        +    "confidence_reasons": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "coverage_reasons": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "inputs": {
        +      "items": {},
        +      "type": "array"
        +    },
        +    "rules": {
        +      "type": "string"
        +    },
        +    "rules_version": {
        +      "type": "string"
        +    },
        +    "source_type": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    },
        +    "stale": {
        +      "type": "boolean"
        +    },
        +    "verification_age_days": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedcount_working_days3 fields changed
      • addedOutput schema / properties / confidence_label
        Added value: +{
        +  "description": "Evidence verdict derived from source type, verification age and the stale flag (answers: the weakest series read). Rules at /label-rules",
        +  "enum": [
        +    "high",
        +    "medium",
        +    "low"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / coverage_label
        Added value: +{
        +  "description": "How much of the question is covered: ready = complete; partial = held with a disclosed limitation or default; gap = no number served. Rules at /label-rules",
        +  "enum": [
        +    "ready",
        +    "partial",
        +    "gap"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / label_basis
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Inputs and the rule ids that produced the two labels",
        +  "properties": {
        +    "confidence_reasons": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "coverage_reasons": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "inputs": {
        +      "items": {},
        +      "type": "array"
        +    },
        +    "rules": {
        +      "type": "string"
        +    },
        +    "rules_version": {
        +      "type": "string"
        +    },
        +    "source_type": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    },
        +    "stale": {
        +      "type": "boolean"
        +    },
        +    "verification_age_days": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    }
        +  },
        +  "type": "object"
        +}
    • Addedget_filing_deadlines
    • Addedget_key_balance
    • Changedget_public_holidays3 fields changed
      • addedOutput schema / properties / confidence_label
        Added value: +{
        +  "description": "Evidence verdict derived from source type, verification age and the stale flag (answers: the weakest series read). Rules at /label-rules",
        +  "enum": [
        +    "high",
        +    "medium",
        +    "low"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / coverage_label
        Added value: +{
        +  "description": "How much of the question is covered: ready = complete; partial = held with a disclosed limitation or default; gap = no number served. Rules at /label-rules",
        +  "enum": [
        +    "ready",
        +    "partial",
        +    "gap"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / label_basis
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Inputs and the rule ids that produced the two labels",
        +  "properties": {
        +    "confidence_reasons": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "coverage_reasons": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "inputs": {
        +      "items": {},
        +      "type": "array"
        +    },
        +    "rules": {
        +      "type": "string"
        +    },
        +    "rules_version": {
        +      "type": "string"
        +    },
        +    "source_type": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    },
        +    "stale": {
        +      "type": "boolean"
        +    },
        +    "verification_age_days": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    }
        +  },
        +  "type": "object"
        +}
    • Addedget_public_holidays_worldwide
    • Changedget_series3 fields changed
      • addedOutput schema / properties / confidence_label
        Added value: +{
        +  "description": "Evidence verdict derived from source type, verification age and the stale flag (answers: the weakest series read). Rules at /label-rules",
        +  "enum": [
        +    "high",
        +    "medium",
        +    "low"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / coverage_label
        Added value: +{
        +  "description": "How much of the question is covered: ready = complete; partial = held with a disclosed limitation or default; gap = no number served. Rules at /label-rules",
        +  "enum": [
        +    "ready",
        +    "partial",
        +    "gap"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / label_basis
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Inputs and the rule ids that produced the two labels",
        +  "properties": {
        +    "confidence_reasons": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "coverage_reasons": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "inputs": {
        +      "items": {},
        +      "type": "array"
        +    },
        +    "rules": {
        +      "type": "string"
        +    },
        +    "rules_version": {
        +      "type": "string"
        +    },
        +    "source_type": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    },
        +    "stale": {
        +      "type": "boolean"
        +    },
        +    "verification_age_days": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_series_history7 fields changed
      • changedOutput schema / description
        Previous value: -"Historical entries of one series"New value: +"Historical entries of one series; top-level labels describe the current value, and each entry carries its own"
      • addedOutput schema / properties / confidence_label
        Added value: +{
        +  "description": "Evidence verdict derived from source type, verification age and the stale flag (answers: the weakest series read). Rules at /label-rules",
        +  "enum": [
        +    "high",
        +    "medium",
        +    "low"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / coverage_label
        Added value: +{
        +  "description": "How much of the question is covered: ready = complete; partial = held with a disclosed limitation or default; gap = no number served. Rules at /label-rules",
        +  "enum": [
        +    "ready",
        +    "partial",
        +    "gap"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / entries / items / additionalProperties
        Added value: +{}
      • addedOutput schema / properties / entries / items / properties
        Added value: +{
        +  "confidence": {},
        +  "confidence_label": {
        +    "description": "Evidence verdict derived from source type, verification age and the stale flag (answers: the weakest series read). Rules at /label-rules",
        +    "enum": [
        +      "high",
        +      "medium",
        +      "low"
        +    ],
        +    "type": "string"
        +  },
        +  "country": {
        +    "type": "string"
        +  },
        +  "coverage_label": {
        +    "description": "How much of the question is covered: ready = complete; partial = held with a disclosed limitation or default; gap = no number served. Rules at /label-rules",
        +    "enum": [
        +      "ready",
        +      "partial",
        +      "gap"
        +    ],
        +    "type": "string"
        +  },
        +  "effective_from": {},
        +  "label_basis": {
        +    "additionalProperties": {},
        +    "description": "Inputs and the rule ids that produced the two labels",
        +    "properties": {
        +      "confidence_reasons": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "coverage_reasons": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "inputs": {
        +        "items": {},
        +        "type": "array"
        +      },
        +      "rules": {
        +        "type": "string"
        +      },
        +      "rules_version": {
        +        "type": "string"
        +      },
        +      "source_type": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "stale": {
        +        "type": "boolean"
        +      },
        +      "verification_age_days": {
        +        "anyOf": [
        +          {
        +            "type": "number"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "last_confirmed": {},
        +  "notes": {},
        +  "series": {
        +    "type": "string"
        +  },
        +  "source": {},
        +  "stale": {
        +    "type": "boolean"
        +  },
        +  "unit": {},
        +  "value": {}
        +}
      • addedOutput schema / properties / entries / items / type
        Added value: +"object"
      • addedOutput schema / properties / label_basis
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Inputs and the rule ids that produced the two labels",
        +  "properties": {
        +    "confidence_reasons": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "coverage_reasons": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "inputs": {
        +      "items": {},
        +      "type": "array"
        +    },
        +    "rules": {
        +      "type": "string"
        +    },
        +    "rules_version": {
        +      "type": "string"
        +    },
        +    "source_type": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    },
        +    "stale": {
        +      "type": "boolean"
        +    },
        +    "verification_age_days": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_snapshot1 field changed
      • addedOutput schema / properties / result
        Added value: +{
        +  "description": "One entry per country; every series value carries confidence_label, coverage_label and label_basis",
        +  "items": {
        +    "additionalProperties": {},
        +    "properties": {
        +      "country": {
        +        "type": "string"
        +      },
        +      "series": {
        +        "items": {
        +          "additionalProperties": {},
        +          "properties": {
        +            "confidence": {},
        +            "confidence_label": {
        +              "description": "Evidence verdict derived from source type, verification age and the stale flag (answers: the weakest series read). Rules at /label-rules",
        +              "enum": [
        +                "high",
        +                "medium",
        +                "low"
        +              ],
        +              "type": "string"
        +            },
        +            "country": {
        +              "type": "string"
        +            },
        +            "coverage_label": {
        +              "description": "How much of the question is covered: ready = complete; partial = held with a disclosed limitation or default; gap = no number served. Rules at /label-rules",
        +              "enum": [
        +                "ready",
        +                "partial",
        +                "gap"
        +              ],
        +              "type": "string"
        +            },
        +            "effective_from": {},
        +            "label_basis": {
        +              "additionalProperties": {},
        +              "description": "Inputs and the rule ids that produced the two labels",
        +              "properties": {
        +                "confidence_reasons": {
        +                  "items": {
        +                    "type": "string"
        +                  },
        +                  "type": "array"
        +                },
        +                "coverage_reasons": {
        +                  "items": {
        +                    "type": "string"
        +                  },
        +                  "type": "array"
        +                },
        +                "inputs": {
        +                  "items": {},
        +                  "type": "array"
        +                },
        +                "rules": {
        +                  "type": "string"
        +                },
        +                "rules_version": {
        +                  "type": "string"
        +                },
        +                "source_type": {
        +                  "anyOf": [
        +                    {
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                },
        +                "stale": {
        +                  "type": "boolean"
        +                },
        +                "verification_age_days": {
        +                  "anyOf": [
        +                    {
        +                      "type": "number"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "last_confirmed": {},
        +            "notes": {},
        +            "series": {
        +              "type": "string"
        +            },
        +            "source": {},
        +            "stale": {
        +              "type": "boolean"
        +            },
        +            "unit": {},
        +            "value": {}
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
    • Addedis_business_day
    • Changedlist_series1 field changed
      • changedOutput schema / description
        Previous value: -"Catalog: brand metadata plus countries[] (compact: country, name, series ids; with country or detail: full per-series metadata)"New value: +"Catalog: brand metadata plus countries[] (compact: country, name, series ids; with country or detail: full per-series metadata including confidence_label and coverage_label)"
    • Changedsettlement_date3 fields changed
      • addedOutput schema / properties / confidence_label
        Added value: +{
        +  "description": "Evidence verdict derived from source type, verification age and the stale flag (answers: the weakest series read). Rules at /label-rules",
        +  "enum": [
        +    "high",
        +    "medium",
        +    "low"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / coverage_label
        Added value: +{
        +  "description": "How much of the question is covered: ready = complete; partial = held with a disclosed limitation or default; gap = no number served. Rules at /label-rules",
        +  "enum": [
        +    "ready",
        +    "partial",
        +    "gap"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / label_basis
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Inputs and the rule ids that produced the two labels",
        +  "properties": {
        +    "confidence_reasons": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "coverage_reasons": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "inputs": {
        +      "items": {},
        +      "type": "array"
        +    },
        +    "rules": {
        +      "type": "string"
        +    },
        +    "rules_version": {
        +      "type": "string"
        +    },
        +    "source_type": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    },
        +    "stale": {
        +      "type": "boolean"
        +    },
        +    "verification_age_days": {
        +      "anyOf": [
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    }
        +  },
        +  "type": "object"
        +}
  5. 16 tool updates
    • Changedcheck_minimum_wage1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "description": "Minimum-wage compliance verdict",
        +  "properties": {
        +    "basis": {},
        +    "bind_series": {},
        +    "country": {
        +      "type": "string"
        +    },
        +    "disclaimer": {},
        +    "error": {
        +      "description": "Present on a free refusal or error; no charge"
        +    },
        +    "explanation": {},
        +    "floor": {},
        +    "how_to_pay": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "http_endpoint": {
        +      "type": "string"
        +    },
        +    "no_charge": {
        +      "type": "boolean"
        +    },
        +    "payment_required": {
        +      "description": "true when the call needs payment; how_to_pay explains x402 or card",
        +      "type": "boolean"
        +    },
        +    "price_usd": {
        +      "type": "number"
        +    },
        +    "provenance": {
        +      "description": "Cited official sources behind the answer"
        +    },
        +    "question": {},
        +    "receipt": {
        +      "description": "Ed25519 answer receipt when receipt=true on a paid success"
        +    },
        +    "status": {
        +      "description": "Answer status, e.g. computed or an honest no-answer status",
        +      "type": "string"
        +    },
        +    "verdict": {},
        +    "x_next_bind": {}
        +  },
        +  "type": "object"
        +}
    • Changedcompute_employment_cost1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "description": "Employee and employer statutory contributions with citations",
        +  "properties": {
        +    "basis": {},
        +    "bind_series": {},
        +    "country": {
        +      "type": "string"
        +    },
        +    "disclaimer": {},
        +    "error": {
        +      "description": "Present on a free refusal or error; no charge"
        +    },
        +    "explanation": {},
        +    "how_to_pay": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "http_endpoint": {
        +      "type": "string"
        +    },
        +    "no_charge": {
        +      "type": "boolean"
        +    },
        +    "payment_required": {
        +      "description": "true when the call needs payment; how_to_pay explains x402 or card",
        +      "type": "boolean"
        +    },
        +    "price_usd": {
        +      "type": "number"
        +    },
        +    "provenance": {
        +      "description": "Cited official sources behind the answer"
        +    },
        +    "question": {},
        +    "receipt": {
        +      "description": "Ed25519 answer receipt when receipt=true on a paid success"
        +    },
        +    "status": {
        +      "description": "Answer status, e.g. computed or an honest no-answer status",
        +      "type": "string"
        +    },
        +    "x_next_bind": {}
        +  },
        +  "type": "object"
        +}
    • Changedcompute_income_tax1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "description": "Income tax on taxable income with per-bracket workings",
        +  "properties": {
        +    "basis": {},
        +    "bind_series": {},
        +    "breakdown": {},
        +    "country": {
        +      "type": "string"
        +    },
        +    "disclaimer": {},
        +    "effective_rate": {},
        +    "error": {
        +      "description": "Present on a free refusal or error; no charge"
        +    },
        +    "explanation": {},
        +    "how_to_pay": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "http_endpoint": {
        +      "type": "string"
        +    },
        +    "marginal_rate": {},
        +    "no_charge": {
        +      "type": "boolean"
        +    },
        +    "payment_required": {
        +      "description": "true when the call needs payment; how_to_pay explains x402 or card",
        +      "type": "boolean"
        +    },
        +    "price_usd": {
        +      "type": "number"
        +    },
        +    "provenance": {
        +      "description": "Cited official sources behind the answer"
        +    },
        +    "question": {},
        +    "receipt": {
        +      "description": "Ed25519 answer receipt when receipt=true on a paid success"
        +    },
        +    "scope_note": {},
        +    "status": {
        +      "description": "Answer status, e.g. computed or an honest no-answer status",
        +      "type": "string"
        +    },
        +    "tax": {},
        +    "x_next_bind": {}
        +  },
        +  "type": "object"
        +}
    • Changedcompute_statutory_interest1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "description": "Simple statutory interest at the cited rate",
        +  "properties": {
        +    "basis": {},
        +    "bind_series": {},
        +    "country": {
        +      "type": "string"
        +    },
        +    "disclaimer": {},
        +    "error": {
        +      "description": "Present on a free refusal or error; no charge"
        +    },
        +    "explanation": {},
        +    "how_to_pay": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "http_endpoint": {
        +      "type": "string"
        +    },
        +    "no_charge": {
        +      "type": "boolean"
        +    },
        +    "payment_required": {
        +      "description": "true when the call needs payment; how_to_pay explains x402 or card",
        +      "type": "boolean"
        +    },
        +    "price_usd": {
        +      "type": "number"
        +    },
        +    "provenance": {
        +      "description": "Cited official sources behind the answer"
        +    },
        +    "question": {},
        +    "receipt": {
        +      "description": "Ed25519 answer receipt when receipt=true on a paid success"
        +    },
        +    "status": {
        +      "description": "Answer status, e.g. computed or an honest no-answer status",
        +      "type": "string"
        +    },
        +    "x_next_bind": {}
        +  },
        +  "type": "object"
        +}
    • Changedcompute_vat1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "description": "VAT breakdown",
        +  "properties": {
        +    "basis": {},
        +    "bind_series": {},
        +    "country": {
        +      "type": "string"
        +    },
        +    "disclaimer": {},
        +    "error": {
        +      "description": "Present on a free refusal or error; no charge"
        +    },
        +    "explanation": {},
        +    "gross": {},
        +    "how_to_pay": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "http_endpoint": {
        +      "type": "string"
        +    },
        +    "net": {},
        +    "no_charge": {
        +      "type": "boolean"
        +    },
        +    "payment_required": {
        +      "description": "true when the call needs payment; how_to_pay explains x402 or card",
        +      "type": "boolean"
        +    },
        +    "price_usd": {
        +      "type": "number"
        +    },
        +    "provenance": {
        +      "description": "Cited official sources behind the answer"
        +    },
        +    "question": {},
        +    "rate": {},
        +    "receipt": {
        +      "description": "Ed25519 answer receipt when receipt=true on a paid success"
        +    },
        +    "status": {
        +      "description": "Answer status, e.g. computed or an honest no-answer status",
        +      "type": "string"
        +    },
        +    "tax": {},
        +    "workings": {},
        +    "x_next_bind": {}
        +  },
        +  "type": "object"
        +}
    • Changedcount_working_days1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "description": "Working-day count over a range with holidays hit",
        +  "properties": {
        +    "basis": {},
        +    "bind_series": {},
        +    "country": {
        +      "type": "string"
        +    },
        +    "disclaimer": {},
        +    "error": {
        +      "description": "Present on a free refusal or error; no charge"
        +    },
        +    "explanation": {},
        +    "how_to_pay": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "http_endpoint": {
        +      "type": "string"
        +    },
        +    "no_charge": {
        +      "type": "boolean"
        +    },
        +    "payment_required": {
        +      "description": "true when the call needs payment; how_to_pay explains x402 or card",
        +      "type": "boolean"
        +    },
        +    "price_usd": {
        +      "type": "number"
        +    },
        +    "provenance": {
        +      "description": "Cited official sources behind the answer"
        +    },
        +    "question": {},
        +    "receipt": {
        +      "description": "Ed25519 answer receipt when receipt=true on a paid success"
        +    },
        +    "status": {
        +      "description": "Answer status, e.g. computed or an honest no-answer status",
        +      "type": "string"
        +    },
        +    "x_next_bind": {}
        +  },
        +  "type": "object"
        +}
    • Changedget_calendar1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "description": "Derived reverify_by and next_effective_known dates",
        +  "properties": {
        +    "as_of": {},
        +    "bind_series": {},
        +    "brand": {},
        +    "count": {
        +      "type": "number"
        +    },
        +    "disclaimer": {},
        +    "entries": {
        +      "items": {},
        +      "type": "array"
        +    },
        +    "error": {
        +      "description": "Present on a free refusal or error; no charge"
        +    },
        +    "explanation": {},
        +    "how_to_pay": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "http_endpoint": {
        +      "type": "string"
        +    },
        +    "no_charge": {
        +      "type": "boolean"
        +    },
        +    "payment_required": {
        +      "description": "true when the call needs payment; how_to_pay explains x402 or card",
        +      "type": "boolean"
        +    },
        +    "price_usd": {
        +      "type": "number"
        +    },
        +    "x_next_bind": {}
        +  },
        +  "type": "object"
        +}
    • Changedget_changes1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "description": "Value changes since a date",
        +  "properties": {
        +    "as_of": {},
        +    "bind_series": {},
        +    "changes": {
        +      "items": {},
        +      "type": "array"
        +    },
        +    "disclaimer": {},
        +    "error": {
        +      "description": "Present on a free refusal or error; no charge"
        +    },
        +    "explanation": {},
        +    "how_to_pay": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "http_endpoint": {
        +      "type": "string"
        +    },
        +    "no_charge": {
        +      "type": "boolean"
        +    },
        +    "payment_required": {
        +      "description": "true when the call needs payment; how_to_pay explains x402 or card",
        +      "type": "boolean"
        +    },
        +    "price_usd": {
        +      "type": "number"
        +    },
        +    "since": {},
        +    "x_next_bind": {}
        +  },
        +  "type": "object"
        +}
    • Changedget_public_holidays1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "description": "Holiday calendar series with cited source; with subdivision, merged national+regional days",
        +  "properties": {
        +    "available_subdivisions": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "bind_series": {},
        +    "confidence": {},
        +    "country": {
        +      "type": "string"
        +    },
        +    "disclaimer": {},
        +    "effective_from": {},
        +    "error": {
        +      "description": "Present on a free refusal or error; no charge"
        +    },
        +    "explanation": {},
        +    "how_to_pay": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "http_endpoint": {
        +      "type": "string"
        +    },
        +    "last_confirmed": {},
        +    "no_charge": {
        +      "type": "boolean"
        +    },
        +    "notes": {},
        +    "payment_required": {
        +      "description": "true when the call needs payment; how_to_pay explains x402 or card",
        +      "type": "boolean"
        +    },
        +    "price_usd": {
        +      "type": "number"
        +    },
        +    "series": {
        +      "type": "string"
        +    },
        +    "source": {},
        +    "stale": {
        +      "type": "boolean"
        +    },
        +    "subdivision": {},
        +    "unit": {},
        +    "value": {},
        +    "x_next_bind": {}
        +  },
        +  "type": "object"
        +}
    • Changedget_series1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "description": "Current value of one series with source, effective date, last_confirmed and stale flag",
        +  "properties": {
        +    "bind_series": {},
        +    "confidence": {},
        +    "country": {
        +      "type": "string"
        +    },
        +    "disclaimer": {},
        +    "effective_from": {},
        +    "error": {
        +      "description": "Present on a free refusal or error; no charge"
        +    },
        +    "explanation": {},
        +    "how_to_pay": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "http_endpoint": {
        +      "type": "string"
        +    },
        +    "last_confirmed": {},
        +    "no_charge": {
        +      "type": "boolean"
        +    },
        +    "notes": {},
        +    "payment_required": {
        +      "description": "true when the call needs payment; how_to_pay explains x402 or card",
        +      "type": "boolean"
        +    },
        +    "price_usd": {
        +      "type": "number"
        +    },
        +    "series": {
        +      "type": "string"
        +    },
        +    "source": {},
        +    "stale": {
        +      "type": "boolean"
        +    },
        +    "unit": {},
        +    "value": {},
        +    "x_next_bind": {}
        +  },
        +  "type": "object"
        +}
    • Changedget_series_history1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "description": "Historical entries of one series",
        +  "properties": {
        +    "bind_series": {},
        +    "country": {
        +      "type": "string"
        +    },
        +    "disclaimer": {},
        +    "entries": {
        +      "items": {},
        +      "type": "array"
        +    },
        +    "error": {
        +      "description": "Present on a free refusal or error; no charge"
        +    },
        +    "explanation": {},
        +    "how_to_pay": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "http_endpoint": {
        +      "type": "string"
        +    },
        +    "no_charge": {
        +      "type": "boolean"
        +    },
        +    "payment_required": {
        +      "description": "true when the call needs payment; how_to_pay explains x402 or card",
        +      "type": "boolean"
        +    },
        +    "price_usd": {
        +      "type": "number"
        +    },
        +    "series": {
        +      "type": "string"
        +    },
        +    "stale": {
        +      "type": "boolean"
        +    },
        +    "x_next_bind": {}
        +  },
        +  "type": "object"
        +}
    • Changedget_snapshot1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "description": "Every series for every country of this brand",
        +  "properties": {
        +    "bind_series": {},
        +    "countries": {},
        +    "disclaimer": {},
        +    "error": {
        +      "description": "Present on a free refusal or error; no charge"
        +    },
        +    "explanation": {},
        +    "how_to_pay": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "http_endpoint": {
        +      "type": "string"
        +    },
        +    "no_charge": {
        +      "type": "boolean"
        +    },
        +    "payment_required": {
        +      "description": "true when the call needs payment; how_to_pay explains x402 or card",
        +      "type": "boolean"
        +    },
        +    "price_usd": {
        +      "type": "number"
        +    },
        +    "x_next_bind": {}
        +  },
        +  "type": "object"
        +}
    • Changedlist_series1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "description": "Catalog: brand metadata plus countries[] (compact: country, name, series ids; with country or detail: full per-series metadata)",
        +  "properties": {
        +    "bind_series": {},
        +    "countries": {
        +      "description": "Country entries ({country, name, series}); on an unknown-country refusal, the list of valid codes",
        +      "items": {},
        +      "type": "array"
        +    },
        +    "disclaimer": {},
        +    "error": {
        +      "description": "Present on a free refusal or error; no charge"
        +    },
        +    "explanation": {},
        +    "how_to_pay": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "http_endpoint": {
        +      "type": "string"
        +    },
        +    "no_charge": {
        +      "type": "boolean"
        +    },
        +    "note": {
        +      "type": "string"
        +    },
        +    "payment_required": {
        +      "description": "true when the call needs payment; how_to_pay explains x402 or card",
        +      "type": "boolean"
        +    },
        +    "price_usd": {
        +      "type": "number"
        +    },
        +    "x_next_bind": {}
        +  },
        +  "type": "object"
        +}
    • Changedregister_alert1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "description": "Alert subscription result (id, secret, trial) or refusal",
        +  "properties": {
        +    "bind_series": {},
        +    "disclaimer": {},
        +    "error": {
        +      "description": "Present on a free refusal or error; no charge"
        +    },
        +    "explanation": {},
        +    "how_to_pay": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "http_endpoint": {
        +      "type": "string"
        +    },
        +    "no_charge": {
        +      "type": "boolean"
        +    },
        +    "payment_required": {
        +      "description": "true when the call needs payment; how_to_pay explains x402 or card",
        +      "type": "boolean"
        +    },
        +    "price_usd": {
        +      "type": "number"
        +    },
        +    "x_next_bind": {}
        +  },
        +  "type": "object"
        +}
    • Changedsettlement_date1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "description": "Settlement date on intersected calendars with per-day trail",
        +  "properties": {
        +    "basis": {},
        +    "bind_series": {},
        +    "country": {
        +      "type": "string"
        +    },
        +    "disclaimer": {},
        +    "error": {
        +      "description": "Present on a free refusal or error; no charge"
        +    },
        +    "explanation": {},
        +    "how_to_pay": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "http_endpoint": {
        +      "type": "string"
        +    },
        +    "no_charge": {
        +      "type": "boolean"
        +    },
        +    "payment_required": {
        +      "description": "true when the call needs payment; how_to_pay explains x402 or card",
        +      "type": "boolean"
        +    },
        +    "price_usd": {
        +      "type": "number"
        +    },
        +    "provenance": {
        +      "description": "Cited official sources behind the answer"
        +    },
        +    "question": {},
        +    "receipt": {
        +      "description": "Ed25519 answer receipt when receipt=true on a paid success"
        +    },
        +    "status": {
        +      "description": "Answer status, e.g. computed or an honest no-answer status",
        +      "type": "string"
        +    },
        +    "x_next_bind": {}
        +  },
        +  "type": "object"
        +}
    • Changedverify_answer_receipt1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "description": "Receipt verification result",
        +  "properties": {
        +    "bind_series": {},
        +    "disclaimer": {},
        +    "error": {
        +      "description": "Present on a free refusal or error; no charge"
        +    },
        +    "explanation": {},
        +    "how_to_pay": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "http_endpoint": {
        +      "type": "string"
        +    },
        +    "no_charge": {
        +      "type": "boolean"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "payment_required": {
        +      "description": "true when the call needs payment; how_to_pay explains x402 or card",
        +      "type": "boolean"
        +    },
        +    "price_usd": {
        +      "type": "number"
        +    },
        +    "why": {
        +      "type": "string"
        +    },
        +    "x_next_bind": {}
        +  },
        +  "type": "object"
        +}
  6. 1 tool update
    • Changedlist_series2 fields changed
      • addedInput schema / properties / country
        Added value: +{
        +  "description": "Optional ISO country code. Returns full per-series metadata (source, freshness, bands) for that country only.",
        +  "type": "string"
        +}
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "Default false. Without country, false returns a compact index (country -> series ids). true returns the full catalog, which is large.",
        +  "type": "boolean"
        +}
  7. 1 tool update
    • Addedget_calendar
  8. 1 tool update
    • Addedcompute_statutory_interest
  9. 7 tool updates
    • Changedcheck_minimum_wage1 field changed
      • addedInput schema / properties / receipt
        Added value: +{
        +  "default": false,
        +  "description": "Default false. When true, a paid success includes an Ed25519 answer receipt (kind answer_receipt) at no extra USDC. Unpaid 402 and free refusals do not include one. Not a series certified extract (GET /v1/certified/{country}/{series} at $0.25; that SKU is not an MCP tool).",
        +  "type": "boolean"
        +}
    • Changedcompute_employment_cost1 field changed
      • addedInput schema / properties / receipt
        Added value: +{
        +  "default": false,
        +  "description": "Default false. When true, a paid success includes an Ed25519 answer receipt (kind answer_receipt) at no extra USDC. Unpaid 402 and free refusals do not include one. Not a series certified extract (GET /v1/certified/{country}/{series} at $0.25; that SKU is not an MCP tool).",
        +  "type": "boolean"
        +}
    • Changedcompute_income_tax1 field changed
      • addedInput schema / properties / receipt
        Added value: +{
        +  "default": false,
        +  "description": "Default false. When true, a paid success includes an Ed25519 answer receipt (kind answer_receipt) at no extra USDC. Unpaid 402 and free refusals do not include one. Not a series certified extract (GET /v1/certified/{country}/{series} at $0.25; that SKU is not an MCP tool).",
        +  "type": "boolean"
        +}
    • Changedcompute_vat1 field changed
      • addedInput schema / properties / receipt
        Added value: +{
        +  "default": false,
        +  "description": "Default false. When true, a paid success includes an Ed25519 answer receipt (kind answer_receipt) at no extra USDC. Unpaid 402 and free refusals do not include one. Not a series certified extract (GET /v1/certified/{country}/{series} at $0.25; that SKU is not an MCP tool).",
        +  "type": "boolean"
        +}
    • Changedcount_working_days1 field changed
      • addedInput schema / properties / receipt
        Added value: +{
        +  "default": false,
        +  "description": "Default false. When true, a paid success includes an Ed25519 answer receipt (kind answer_receipt) at no extra USDC. Unpaid 402 and free refusals do not include one. Not a series certified extract (GET /v1/certified/{country}/{series} at $0.25; that SKU is not an MCP tool).",
        +  "type": "boolean"
        +}
    • Changedsettlement_date1 field changed
      • addedInput schema / properties / receipt
        Added value: +{
        +  "default": false,
        +  "description": "Default false. When true, a paid success includes an Ed25519 answer receipt (kind answer_receipt) at no extra USDC. Unpaid 402 and free refusals do not include one. Not a series certified extract (GET /v1/certified/{country}/{series} at $0.25; that SKU is not an MCP tool).",
        +  "type": "boolean"
        +}
    • Addedverify_answer_receipt
  10. 2 tool updates
    • Addedget_changes
    • Addedregister_alert
  11. 1 tool update
    • Addedcompute_employment_cost
  12. 2 tool updates
    • Changedcount_working_days1 field changed
      • addedInput schema / properties / subdivision
        Added value: +{
        +  "description": "Optional ISO 3166-2 region code (e.g. 'DE-BY') to apply that region's statutory holidays on top of the national calendar. Regions are listed under `subdivisions` by get_public_holidays. Unknown code is refused free with the list.",
        +  "type": "string"
        +}
    • Changedget_public_holidays1 field changed
      • addedInput schema / properties / subdivision
        Added value: +{
        +  "description": "Optional ISO 3166-2 region code (e.g. 'DE-BY'). Returns national + that region's statutory holidays, each tagged national/regional. Omit for the national calendar.",
        +  "type": "string"
        +}
  13. 1 tool update
    • Addedsettlement_date
  14. 7 tool updates
    • Changedcheck_minimum_wage1 field changed
      • changedInput schema / properties / country / enum
        Previous value: -[
        -  "ae",
        -  "bd",
        -  "bh",
        -  "cn",
        -  "hk",
        -  "id",
        -  "il",
        -  "in",
        -  "jp",
        -  "kr",
        -  "kw",
        -  "kz",
        -  "lk",
        -  "my",
        -  "om",
        -  "ph",
        -  "pk",
        -  "qa",
        -  "sa",
        -  "sg",
        -  "th",
        -  "tr",
        -  "tw",
        -  "vn"
        -]New value: +[
        +  "ae",
        +  "bd",
        +  "bh",
        +  "cn",
        +  "hk",
        +  "id",
        +  "il",
        +  "in",
        +  "iq",
        +  "jo",
        +  "jp",
        +  "kr",
        +  "kw",
        +  "kz",
        +  "lk",
        +  "my",
        +  "np",
        +  "om",
        +  "ph",
        +  "pk",
        +  "qa",
        +  "sa",
        +  "sg",
        +  "th",
        +  "tr",
        +  "tw",
        +  "uz",
        +  "vn"
        +]
    • Changedcompute_income_tax1 field changed
      • changedInput schema / properties / country / enum
        Previous value: -[
        -  "ae",
        -  "bd",
        -  "bh",
        -  "cn",
        -  "hk",
        -  "id",
        -  "il",
        -  "in",
        -  "jp",
        -  "kr",
        -  "kw",
        -  "kz",
        -  "lk",
        -  "my",
        -  "om",
        -  "ph",
        -  "pk",
        -  "qa",
        -  "sa",
        -  "sg",
        -  "th",
        -  "tr",
        -  "tw",
        -  "vn"
        -]New value: +[
        +  "ae",
        +  "bd",
        +  "bh",
        +  "cn",
        +  "hk",
        +  "id",
        +  "il",
        +  "in",
        +  "iq",
        +  "jo",
        +  "jp",
        +  "kr",
        +  "kw",
        +  "kz",
        +  "lk",
        +  "my",
        +  "np",
        +  "om",
        +  "ph",
        +  "pk",
        +  "qa",
        +  "sa",
        +  "sg",
        +  "th",
        +  "tr",
        +  "tw",
        +  "uz",
        +  "vn"
        +]
    • Changedcompute_vat1 field changed
      • changedInput schema / properties / country / enum
        Previous value: -[
        -  "ae",
        -  "bd",
        -  "bh",
        -  "cn",
        -  "hk",
        -  "id",
        -  "il",
        -  "in",
        -  "jp",
        -  "kr",
        -  "kw",
        -  "kz",
        -  "lk",
        -  "my",
        -  "om",
        -  "ph",
        -  "pk",
        -  "qa",
        -  "sa",
        -  "sg",
        -  "th",
        -  "tr",
        -  "tw",
        -  "vn"
        -]New value: +[
        +  "ae",
        +  "bd",
        +  "bh",
        +  "cn",
        +  "hk",
        +  "id",
        +  "il",
        +  "in",
        +  "iq",
        +  "jo",
        +  "jp",
        +  "kr",
        +  "kw",
        +  "kz",
        +  "lk",
        +  "my",
        +  "np",
        +  "om",
        +  "ph",
        +  "pk",
        +  "qa",
        +  "sa",
        +  "sg",
        +  "th",
        +  "tr",
        +  "tw",
        +  "uz",
        +  "vn"
        +]
    • Changedcount_working_days1 field changed
      • changedInput schema / properties / country / enum
        Previous value: -[
        -  "ae",
        -  "bd",
        -  "bh",
        -  "cn",
        -  "hk",
        -  "id",
        -  "il",
        -  "in",
        -  "jp",
        -  "kr",
        -  "kw",
        -  "kz",
        -  "lk",
        -  "my",
        -  "om",
        -  "ph",
        -  "pk",
        -  "qa",
        -  "sa",
        -  "sg",
        -  "th",
        -  "tr",
        -  "tw",
        -  "vn"
        -]New value: +[
        +  "ae",
        +  "bd",
        +  "bh",
        +  "cn",
        +  "hk",
        +  "id",
        +  "il",
        +  "in",
        +  "iq",
        +  "jo",
        +  "jp",
        +  "kr",
        +  "kw",
        +  "kz",
        +  "lk",
        +  "my",
        +  "np",
        +  "om",
        +  "ph",
        +  "pk",
        +  "qa",
        +  "sa",
        +  "sg",
        +  "th",
        +  "tr",
        +  "tw",
        +  "uz",
        +  "vn"
        +]
    • Changedget_public_holidays1 field changed
      • changedInput schema / properties / country / enum
        Previous value: -[
        -  "ae",
        -  "bd",
        -  "bh",
        -  "cn",
        -  "hk",
        -  "id",
        -  "il",
        -  "in",
        -  "jp",
        -  "kr",
        -  "kw",
        -  "kz",
        -  "lk",
        -  "my",
        -  "om",
        -  "ph",
        -  "pk",
        -  "qa",
        -  "sa",
        -  "sg",
        -  "th",
        -  "tr",
        -  "tw",
        -  "vn"
        -]New value: +[
        +  "ae",
        +  "bd",
        +  "bh",
        +  "cn",
        +  "hk",
        +  "id",
        +  "il",
        +  "in",
        +  "iq",
        +  "jo",
        +  "jp",
        +  "kr",
        +  "kw",
        +  "kz",
        +  "lk",
        +  "my",
        +  "np",
        +  "om",
        +  "ph",
        +  "pk",
        +  "qa",
        +  "sa",
        +  "sg",
        +  "th",
        +  "tr",
        +  "tw",
        +  "uz",
        +  "vn"
        +]
    • Changedget_series1 field changed
      • changedInput schema / properties / country / enum
        Previous value: -[
        -  "ae",
        -  "bd",
        -  "bh",
        -  "cn",
        -  "hk",
        -  "id",
        -  "il",
        -  "in",
        -  "jp",
        -  "kr",
        -  "kw",
        -  "kz",
        -  "lk",
        -  "my",
        -  "om",
        -  "ph",
        -  "pk",
        -  "qa",
        -  "sa",
        -  "sg",
        -  "th",
        -  "tr",
        -  "tw",
        -  "vn"
        -]New value: +[
        +  "ae",
        +  "bd",
        +  "bh",
        +  "cn",
        +  "hk",
        +  "id",
        +  "il",
        +  "in",
        +  "iq",
        +  "jo",
        +  "jp",
        +  "kr",
        +  "kw",
        +  "kz",
        +  "lk",
        +  "my",
        +  "np",
        +  "om",
        +  "ph",
        +  "pk",
        +  "qa",
        +  "sa",
        +  "sg",
        +  "th",
        +  "tr",
        +  "tw",
        +  "uz",
        +  "vn"
        +]
    • Changedget_series_history1 field changed
      • changedInput schema / properties / country / enum
        Previous value: -[
        -  "ae",
        -  "bd",
        -  "bh",
        -  "cn",
        -  "hk",
        -  "id",
        -  "il",
        -  "in",
        -  "jp",
        -  "kr",
        -  "kw",
        -  "kz",
        -  "lk",
        -  "my",
        -  "om",
        -  "ph",
        -  "pk",
        -  "qa",
        -  "sa",
        -  "sg",
        -  "th",
        -  "tr",
        -  "tw",
        -  "vn"
        -]New value: +[
        +  "ae",
        +  "bd",
        +  "bh",
        +  "cn",
        +  "hk",
        +  "id",
        +  "il",
        +  "in",
        +  "iq",
        +  "jo",
        +  "jp",
        +  "kr",
        +  "kw",
        +  "kz",
        +  "lk",
        +  "my",
        +  "np",
        +  "om",
        +  "ph",
        +  "pk",
        +  "qa",
        +  "sa",
        +  "sg",
        +  "th",
        +  "tr",
        +  "tw",
        +  "uz",
        +  "vn"
        +]
  15. 7 tool updates
    • Changedcheck_minimum_wage1 field changed
      • changedInput schema / properties / country / enum
        Previous value: -[
        -  "ae",
        -  "bd",
        -  "bh",
        -  "cn",
        -  "hk",
        -  "id",
        -  "il",
        -  "in",
        -  "jp",
        -  "kr",
        -  "kw",
        -  "my",
        -  "om",
        -  "ph",
        -  "pk",
        -  "qa",
        -  "sa",
        -  "sg",
        -  "th",
        -  "tr",
        -  "tw",
        -  "vn"
        -]New value: +[
        +  "ae",
        +  "bd",
        +  "bh",
        +  "cn",
        +  "hk",
        +  "id",
        +  "il",
        +  "in",
        +  "jp",
        +  "kr",
        +  "kw",
        +  "kz",
        +  "lk",
        +  "my",
        +  "om",
        +  "ph",
        +  "pk",
        +  "qa",
        +  "sa",
        +  "sg",
        +  "th",
        +  "tr",
        +  "tw",
        +  "vn"
        +]
    • Changedcompute_income_tax1 field changed
      • changedInput schema / properties / country / enum
        Previous value: -[
        -  "ae",
        -  "bd",
        -  "bh",
        -  "cn",
        -  "hk",
        -  "id",
        -  "il",
        -  "in",
        -  "jp",
        -  "kr",
        -  "kw",
        -  "my",
        -  "om",
        -  "ph",
        -  "pk",
        -  "qa",
        -  "sa",
        -  "sg",
        -  "th",
        -  "tr",
        -  "tw",
        -  "vn"
        -]New value: +[
        +  "ae",
        +  "bd",
        +  "bh",
        +  "cn",
        +  "hk",
        +  "id",
        +  "il",
        +  "in",
        +  "jp",
        +  "kr",
        +  "kw",
        +  "kz",
        +  "lk",
        +  "my",
        +  "om",
        +  "ph",
        +  "pk",
        +  "qa",
        +  "sa",
        +  "sg",
        +  "th",
        +  "tr",
        +  "tw",
        +  "vn"
        +]
    • Changedcompute_vat1 field changed
      • changedInput schema / properties / country / enum
        Previous value: -[
        -  "ae",
        -  "bd",
        -  "bh",
        -  "cn",
        -  "hk",
        -  "id",
        -  "il",
        -  "in",
        -  "jp",
        -  "kr",
        -  "kw",
        -  "my",
        -  "om",
        -  "ph",
        -  "pk",
        -  "qa",
        -  "sa",
        -  "sg",
        -  "th",
        -  "tr",
        -  "tw",
        -  "vn"
        -]New value: +[
        +  "ae",
        +  "bd",
        +  "bh",
        +  "cn",
        +  "hk",
        +  "id",
        +  "il",
        +  "in",
        +  "jp",
        +  "kr",
        +  "kw",
        +  "kz",
        +  "lk",
        +  "my",
        +  "om",
        +  "ph",
        +  "pk",
        +  "qa",
        +  "sa",
        +  "sg",
        +  "th",
        +  "tr",
        +  "tw",
        +  "vn"
        +]
    • Changedcount_working_days1 field changed
      • changedInput schema / properties / country / enum
        Previous value: -[
        -  "ae",
        -  "bd",
        -  "bh",
        -  "cn",
        -  "hk",
        -  "id",
        -  "il",
        -  "in",
        -  "jp",
        -  "kr",
        -  "kw",
        -  "my",
        -  "om",
        -  "ph",
        -  "pk",
        -  "qa",
        -  "sa",
        -  "sg",
        -  "th",
        -  "tr",
        -  "tw",
        -  "vn"
        -]New value: +[
        +  "ae",
        +  "bd",
        +  "bh",
        +  "cn",
        +  "hk",
        +  "id",
        +  "il",
        +  "in",
        +  "jp",
        +  "kr",
        +  "kw",
        +  "kz",
        +  "lk",
        +  "my",
        +  "om",
        +  "ph",
        +  "pk",
        +  "qa",
        +  "sa",
        +  "sg",
        +  "th",
        +  "tr",
        +  "tw",
        +  "vn"
        +]
    • Changedget_public_holidays1 field changed
      • changedInput schema / properties / country / enum
        Previous value: -[
        -  "ae",
        -  "bd",
        -  "bh",
        -  "cn",
        -  "hk",
        -  "id",
        -  "il",
        -  "in",
        -  "jp",
        -  "kr",
        -  "kw",
        -  "my",
        -  "om",
        -  "ph",
        -  "pk",
        -  "qa",
        -  "sa",
        -  "sg",
        -  "th",
        -  "tr",
        -  "tw",
        -  "vn"
        -]New value: +[
        +  "ae",
        +  "bd",
        +  "bh",
        +  "cn",
        +  "hk",
        +  "id",
        +  "il",
        +  "in",
        +  "jp",
        +  "kr",
        +  "kw",
        +  "kz",
        +  "lk",
        +  "my",
        +  "om",
        +  "ph",
        +  "pk",
        +  "qa",
        +  "sa",
        +  "sg",
        +  "th",
        +  "tr",
        +  "tw",
        +  "vn"
        +]
    • Changedget_series1 field changed
      • changedInput schema / properties / country / enum
        Previous value: -[
        -  "ae",
        -  "bd",
        -  "bh",
        -  "cn",
        -  "hk",
        -  "id",
        -  "il",
        -  "in",
        -  "jp",
        -  "kr",
        -  "kw",
        -  "my",
        -  "om",
        -  "ph",
        -  "pk",
        -  "qa",
        -  "sa",
        -  "sg",
        -  "th",
        -  "tr",
        -  "tw",
        -  "vn"
        -]New value: +[
        +  "ae",
        +  "bd",
        +  "bh",
        +  "cn",
        +  "hk",
        +  "id",
        +  "il",
        +  "in",
        +  "jp",
        +  "kr",
        +  "kw",
        +  "kz",
        +  "lk",
        +  "my",
        +  "om",
        +  "ph",
        +  "pk",
        +  "qa",
        +  "sa",
        +  "sg",
        +  "th",
        +  "tr",
        +  "tw",
        +  "vn"
        +]
    • Changedget_series_history1 field changed
      • changedInput schema / properties / country / enum
        Previous value: -[
        -  "ae",
        -  "bd",
        -  "bh",
        -  "cn",
        -  "hk",
        -  "id",
        -  "il",
        -  "in",
        -  "jp",
        -  "kr",
        -  "kw",
        -  "my",
        -  "om",
        -  "ph",
        -  "pk",
        -  "qa",
        -  "sa",
        -  "sg",
        -  "th",
        -  "tr",
        -  "tw",
        -  "vn"
        -]New value: +[
        +  "ae",
        +  "bd",
        +  "bh",
        +  "cn",
        +  "hk",
        +  "id",
        +  "il",
        +  "in",
        +  "jp",
        +  "kr",
        +  "kw",
        +  "kz",
        +  "lk",
        +  "my",
        +  "om",
        +  "ph",
        +  "pk",
        +  "qa",
        +  "sa",
        +  "sg",
        +  "th",
        +  "tr",
        +  "tw",
        +  "vn"
        +]
  16. 7 tool updates
    • Changedcheck_minimum_wage1 field changed
      • changedInput schema / properties / country / enum
        Previous value: -[
        -  "ae",
        -  "bd",
        -  "cn",
        -  "hk",
        -  "id",
        -  "in",
        -  "jp",
        -  "kr",
        -  "my",
        -  "ph",
        -  "pk",
        -  "qa",
        -  "sa",
        -  "sg",
        -  "th",
        -  "tr",
        -  "tw",
        -  "vn"
        -]New value: +[
        +  "ae",
        +  "bd",
        +  "bh",
        +  "cn",
        +  "hk",
        +  "id",
        +  "il",
        +  "in",
        +  "jp",
        +  "kr",
        +  "kw",
        +  "my",
        +  "om",
        +  "ph",
        +  "pk",
        +  "qa",
        +  "sa",
        +  "sg",
        +  "th",
        +  "tr",
        +  "tw",
        +  "vn"
        +]
    • Changedcompute_income_tax1 field changed
      • changedInput schema / properties / country / enum
        Previous value: -[
        -  "ae",
        -  "bd",
        -  "cn",
        -  "hk",
        -  "id",
        -  "in",
        -  "jp",
        -  "kr",
        -  "my",
        -  "ph",
        -  "pk",
        -  "qa",
        -  "sa",
        -  "sg",
        -  "th",
        -  "tr",
        -  "tw",
        -  "vn"
        -]New value: +[
        +  "ae",
        +  "bd",
        +  "bh",
        +  "cn",
        +  "hk",
        +  "id",
        +  "il",
        +  "in",
        +  "jp",
        +  "kr",
        +  "kw",
        +  "my",
        +  "om",
        +  "ph",
        +  "pk",
        +  "qa",
        +  "sa",
        +  "sg",
        +  "th",
        +  "tr",
        +  "tw",
        +  "vn"
        +]
    • Changedcompute_vat1 field changed
      • changedInput schema / properties / country / enum
        Previous value: -[
        -  "ae",
        -  "bd",
        -  "cn",
        -  "hk",
        -  "id",
        -  "in",
        -  "jp",
        -  "kr",
        -  "my",
        -  "ph",
        -  "pk",
        -  "qa",
        -  "sa",
        -  "sg",
        -  "th",
        -  "tr",
        -  "tw",
        -  "vn"
        -]New value: +[
        +  "ae",
        +  "bd",
        +  "bh",
        +  "cn",
        +  "hk",
        +  "id",
        +  "il",
        +  "in",
        +  "jp",
        +  "kr",
        +  "kw",
        +  "my",
        +  "om",
        +  "ph",
        +  "pk",
        +  "qa",
        +  "sa",
        +  "sg",
        +  "th",
        +  "tr",
        +  "tw",
        +  "vn"
        +]
    • Changedcount_working_days1 field changed
      • changedInput schema / properties / country / enum
        Previous value: -[
        -  "ae",
        -  "bd",
        -  "cn",
        -  "hk",
        -  "id",
        -  "in",
        -  "jp",
        -  "kr",
        -  "my",
        -  "ph",
        -  "pk",
        -  "qa",
        -  "sa",
        -  "sg",
        -  "th",
        -  "tr",
        -  "tw",
        -  "vn"
        -]New value: +[
        +  "ae",
        +  "bd",
        +  "bh",
        +  "cn",
        +  "hk",
        +  "id",
        +  "il",
        +  "in",
        +  "jp",
        +  "kr",
        +  "kw",
        +  "my",
        +  "om",
        +  "ph",
        +  "pk",
        +  "qa",
        +  "sa",
        +  "sg",
        +  "th",
        +  "tr",
        +  "tw",
        +  "vn"
        +]
    • Changedget_public_holidays1 field changed
      • changedInput schema / properties / country / enum
        Previous value: -[
        -  "ae",
        -  "bd",
        -  "cn",
        -  "hk",
        -  "id",
        -  "in",
        -  "jp",
        -  "kr",
        -  "my",
        -  "ph",
        -  "pk",
        -  "qa",
        -  "sa",
        -  "sg",
        -  "th",
        -  "tr",
        -  "tw",
        -  "vn"
        -]New value: +[
        +  "ae",
        +  "bd",
        +  "bh",
        +  "cn",
        +  "hk",
        +  "id",
        +  "il",
        +  "in",
        +  "jp",
        +  "kr",
        +  "kw",
        +  "my",
        +  "om",
        +  "ph",
        +  "pk",
        +  "qa",
        +  "sa",
        +  "sg",
        +  "th",
        +  "tr",
        +  "tw",
        +  "vn"
        +]
    • Changedget_series1 field changed
      • changedInput schema / properties / country / enum
        Previous value: -[
        -  "ae",
        -  "bd",
        -  "cn",
        -  "hk",
        -  "id",
        -  "in",
        -  "jp",
        -  "kr",
        -  "my",
        -  "ph",
        -  "pk",
        -  "qa",
        -  "sa",
        -  "sg",
        -  "th",
        -  "tr",
        -  "tw",
        -  "vn"
        -]New value: +[
        +  "ae",
        +  "bd",
        +  "bh",
        +  "cn",
        +  "hk",
        +  "id",
        +  "il",
        +  "in",
        +  "jp",
        +  "kr",
        +  "kw",
        +  "my",
        +  "om",
        +  "ph",
        +  "pk",
        +  "qa",
        +  "sa",
        +  "sg",
        +  "th",
        +  "tr",
        +  "tw",
        +  "vn"
        +]
    • Changedget_series_history1 field changed
      • changedInput schema / properties / country / enum
        Previous value: -[
        -  "ae",
        -  "bd",
        -  "cn",
        -  "hk",
        -  "id",
        -  "in",
        -  "jp",
        -  "kr",
        -  "my",
        -  "ph",
        -  "pk",
        -  "qa",
        -  "sa",
        -  "sg",
        -  "th",
        -  "tr",
        -  "tw",
        -  "vn"
        -]New value: +[
        +  "ae",
        +  "bd",
        +  "bh",
        +  "cn",
        +  "hk",
        +  "id",
        +  "il",
        +  "in",
        +  "jp",
        +  "kr",
        +  "kw",
        +  "my",
        +  "om",
        +  "ph",
        +  "pk",
        +  "qa",
        +  "sa",
        +  "sg",
        +  "th",
        +  "tr",
        +  "tw",
        +  "vn"
        +]

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to retrieve and compare verified country facts such as VAT/GST, public holidays, visas, tipping, and minimum wages across 70 countries, with automatic x402 micropayments in USDC on Base per call.
    107 npm
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Public holiday data for 30+ countries. Check holidays, working days, and full calendars via AI assistants like Claude and Cursor.
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    The standard VAT rate in any of the 27 EU member states on any date since 2016, including temporary cuts. Runs offline with no API key.
    4
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Query current and historical UK official figures (tax bands, minimum wage, benefits, energy price cap and 100+ more) with effective dates and links to official government sources. Data refreshed whenever the official sources change.
    -
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources