Geo-Parity
Server Details
Cost of living, fair global pay, healthcare costs, nomad visas and tax residency. Free, no key.
- Status
- Healthy
- Uptime
- 25.6% over 56 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 62 tools
Several overlapping clusters exist: check_travel_residency explicitly supersedes three still-available residency tools; find_country_fit and rank_livability both produce weighted livability/cost rankings; and multiple cost/affordability tools (compare_total_cost, estimate_micro_costs, retire_on_budget, find_fire_locations) address similar questions. The descriptions are unusually detailed and often cross-reference each other, which helps, but the overlaps still create a real risk of misselection.
The vast majority of names use consistent snake_case with clear semantic prefixes (compare_*, find_*, check_*, calculate_*, estimate_*). A few are noun-only (passport_power, property_rules, travel_advice) rather than verb_noun, so it is not perfectly uniform, but the pattern is predictable and readable throughout.
62 tools is an extreme over-provision for a single MCP surface, far beyond the 50+ threshold for extreme mismatch. Even for a broad geo-parity domain, the set could be consolidated into parameterized comparisons, and the sheer count imposes a heavy selection burden on any agent.
The surface covers an exceptionally wide range of relocation and geo-arbitrage concerns: cost of living, taxes, visas, healthcare, safety, climate, connectivity, banking, pensions, property, employment rules, public holidays and more. No major gaps are apparent for the stated purpose, and many tools explicitly handle off-coverage cases rather than returning misleading defaults.
Available Tools
62 toolsarrival_costWhat It Costs to ArriveARead-onlyIdempotentInspect
The cash needed to ARRIVE somewhere, as opposed to what a month costs once you live there: the entry fee for a given passport, the first month's rent, the deposit, and a long-stay visa fee where one has been verified against the issuing government. READ complete BEFORE totalUsd. Rent covers a subset of the country spine and most visa fees could not be verified, so the total is a FLOOR whenever complete is false, and missing names every component that could not be priced. The total can legitimately be 0 - visa-free entry into a country with no rent figure sums to nothing known - which is honest arithmetic and a false headline. depositMonths is a STATED ASSUMPTION, not a measurement: no free global dataset of deposit norms exists. The entry route itself is derived exactly from passport mobility data, so 'for this passport, this destination is visa-free' is always answered even when no fee is.
| Name | Required | Description | Default |
|---|---|---|---|
| income | No | Monthly remote income in USD. Optional; enables housing's income-relative view but is not needed for the arrival total. | |
| passport | Yes | ISO alpha-2 of the traveller's passport, e.g. 'US'. Determines the entry route and therefore the fee. | |
| destination | Yes | ISO alpha-2 of the destination. Must be in the PPP country registry; some countries with a verified nomad-visa fee (e.g. BB) are not and appear only in find_nomad_visas. | |
| depositMonths | No | Months of rent held as a deposit. Defaults to the site's stated assumption of 1; override it if you know the market. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| rows | No | |
| focus | No | |
| updated | No | |
| excluded | No | |
| attribution | No |
TDQS
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), and the description layers on genuinely new behavior: the total is a FLOOR whenever `complete` is false, `missing` enumerates every unpriced component, a total of 0 is legitimate-but-misleading, and `depositMonths` is a stated assumption rather than a measurement. This is exactly the kind of context structured fields 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with the core definition and each sentence carries distinct information — floor semantics, missing list, zero-total caveat, deposit assumption, entry-route derivation. It is dense and leans on emphatic capitals, but avoids padding; only minor tightening is possible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 instead supplies the interpretive frame the output requires (complete/missing/floor logic). For a 4-parameter required-passport/destination tool, nothing an agent needs to invoke or read the result correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 beyond the schema: it says the entry route is 'derived exactly from passport mobility data' and explains the rationale for `depositMonths` ('no free global dataset of deposit norms exists'), which the schema does not state. The `destination` parameter gains nothing new over the schema's registry note.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource — 'the cash needed to ARRIVE somewhere' — and immediately contrasts it with 'what a month costs once you live there,' which cleanly separates it from cost-of-living siblings like compare_total_cost. It even enumerates the components the total is built from (entry fee, first month's rent, deposit, verified long-stay visa fee).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives operational guidance ('READ `complete` BEFORE `totalUsd`') and routes the agent elsewhere in one case, naming find_nomad_visas for countries absent from the PPP registry. The intended context (pre-move arrival budgeting vs ongoing monthly cost) is clear, though there is no explicit when-not-to-use statement beyond the opening contrast.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
banking_accessBanking access — opening an account, deposit protection and instant paymentsARead-onlyIdempotentInspect
Whether a newcomer can open a personal bank account in a country (yes, restricted or no) with the documents usually asked for from a fixed vocabulary, the statutory deposit guarantee per depositor per bank in local currency AND converted to USD at the site's FX snapshot, the country's instant payment systems from the World Bank's Project FASTT tracker, the EU basic-account right under Directive 2014/92/EU where it applies, and a FATCA flag where banks commonly decline US citizens — a hand-curated register over all 186 spine countries, added 17 Sep 2026, with the scheme or regulator page and check date per row (confidence: "secondary" where the official page could not be fetched, separately on depositGuarantee for the figure). A country with no deposit-insurance scheme has NO depositGuarantee — never a zero — and a country absent from FASTT has no instantPayments, which is not the same as having no instant payments. country for one entry, countries for a side-by-side; without either, ranks by metric (depositGuaranteeUsd default, or instantPaymentsSince, whose sort=lowest lists the longest-running first), optionally narrowed by access, with countries lacking the metric in excluded. internationalOptions describes the kinds of cross-border account and what protects the money — categories only, never a named provider. For information only — not financial advice; banks set their own onboarding policies and every response says so first.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Defaults to highest, or lowest for instantPaymentsSince (longest-running first). | |
| limit | No | Maximum rows in a ranking. | |
| access | No | Narrow a ranking to one non-resident access rule. | |
| metric | No | Ranking metric when no country is given. | depositGuaranteeUsd |
| country | No | ISO alpha-2 code for a single country, e.g. PT. | |
| countries | No | Comma-separated ISO alpha-2 codes, at least two, e.g. GB,TH,NG. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| rows | No | |
| caveats | No | |
| excluded | No | |
| attribution | No | |
| internationalOptions | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the readOnly/idempotent annotations by disclosing data provenance (hand-curated over 186 spine countries, added 17 Sep 2026), per-row scheme/regulator page and check date, `confidence: "secondary"` semantics, and the critical absence-vs-zero distinction for `depositGuarantee` and `instantPayments`. It also discloses the mandatory non-advice disclaimer returned in every response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core question is front-loaded, and every clause carries information, but it is delivered as two sprawling run-on sentences with dense parentheticals and backtick-heavy inline syntax. Readable enough, but not efficiently structured or chunked for fast agent parsing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 shape, and it still covers the interpretation traps (no scheme means no field, not zero; absent from FASTT is not the same as no instant payments) that an agent would otherwise misread. Nothing needed 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds genuine meaning: `sort=lowest` flips the direction for `instantPaymentsSince` (longest-running first), `metric` defaults to `depositGuaranteeUsd`, and `access` is a narrowing filter on rankings rather than a selector for single-country lookup. This is more than restating the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource with unusual precision: newcomer account-opening rules, statutory deposit guarantee (local + USD), instant payment systems, EU basic-account right, and FATCA flag. An agent can distinguish this from compare_banking_access (which is a comparison sibling) 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes among modes: `country` for a single entry, `countries` for a side-by-side, and neither to get a ranking by `metric` (with `sort` semantics and `access` narrowing, plus `excluded` for countries lacking the metric). It does not name the natural alternative (compare_banking_access) or state when-not-to-use, so it stops 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.
build_pay_rangeBuild a defensible pay range for a role in a countryARead-onlyIdempotentInspect
Returns a floor, midpoint and ceiling salary for a broad occupation and seniority in a country, anchored on ILO's measured earnings where they exist and on the modelled national wage ladder where they do not — basis says which. Built for the employer side of pay transparency: since 7 June 2026 the EU Pay Transparency Directive has required a starting salary or pay range in the job advert. IT IS NOT LEGAL ADVICE AND DOES NOT CERTIFY COMPLIANCE — it is a market range from official statistics, and every response carries a caveats array saying so, which should be reproduced alongside any figure quoted from it. Seniority is applied as a percentile offset within the country's own distribution rather than a fixed multiplier, so the same level means the same position locally rather than the same ratio. The gender pay gap for the occupation is reported beside the range and never folded into it. ISCO-08 major groups are broad families of work, not job titles.
| Name | Required | Description | Default |
|---|---|---|---|
| country | Yes | ISO 3166-1 alpha-2 country code (case-insensitive). | |
| seniority | No | Defaults to 'mid'. An unrecognised value is rejected. | |
| occupation | No | ISCO-08 major group. Defaults to 'total' (all occupations). An unrecognised value is rejected, never widened to the default. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| year | No | |
| basis | No | 'measured' or 'modelled' — never blurred. |
| floor | No | |
| caveats | No | Always present. Reproduce these with any quoted figure. |
| ceiling | No | |
| country | No | |
| midpoint | No | |
| seniority | No | |
| occupation | No | |
| genderGapPct | No | |
| occupationMedianMonthlyUsd | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds rich behavioral context beyond the annotations: it explains the floor/midpoint/ceiling output, the basis field, the caveats array that should be reproduced, how seniority is applied as a percentile offset, and that gender pay gap data is reported separately. These details help an agent understand the tool's limitations and usage constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core output before moving to use case, caveats, and methodology. It is dense and somewhat long, but most sentences add substantive context for this legal-adjacent, statistics-based tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With rich annotations and an output schema, the description covers the remaining important context: methodology, legal disclaimer, required caveats, interpretation of seniority, and occupation group limitations. Nothing essential for correct invocation appears to be missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 meaningful semantic detail. It clarifies that seniority is a local percentile offset rather than a fixed multiplier and that ISCO-08 major groups are broad families of work, not job titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it returns floor, midpoint and ceiling salary for a broad occupation and seniority in a country. It clearly defines scope, including ILO measured vs modelled basis, but does not explicitly differentiate this tool from similar siblings such as calculate_wage_bands or compare_occupation_pay.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear use context: employer-side pay transparency and EU job-advert requirements. It also warns that it is not legal advice and does not certify compliance. However, it does not name alternative tools or explicitly state when a different sibling should be used instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_pppCalculate Purchasing Power ParityARead-onlyIdempotentInspect
Given a US-denominated annual income and a target country code, returns the effective local purchasing power (income / pppIndex), the lifestyle equilibrium cost (income * pppIndex), and the purchasing power ratio (1 / pppIndex). Figures use real PPP data (World Bank, IMF, OECD, Penn World Table) relative to a US baseline of 1.0.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | Optional city slug (e.g. 'london', 'san-francisco') for a sub-national Capital-to-Rural adjustment: multiplies the national price level by a per-city factor (curated overrides / US-metro BEA RPP / population-tier heuristic). Unknown slug = national figure. | |
| income | Yes | Nominal annual income, denominated against the US baseline. | |
| source | No | PPP dataset to draw figures from. 'consensus' = per-country median across the GDP-based providers (recommended default); 'worldbank' = World Bank GDP price level; 'imf' = IMF WEO implied PPP; 'oecd' = OECD PPP-for-GDP (members + key partners only); 'pwt' = Penn World Table; 'worldbank-cons' = World Bank household-consumption price level; 'bigmac' = The Economist Big Mac index (single-good consumer PPP, ~40 countries); 'factbook' = CIA World Factbook derived price level for ~100 micro-states/territories the macro sources ignore (coarse). Defaults to 'consensus' if omitted. | consensus |
| target | Yes | ISO 3166-1 alpha-2 target country code (case-insensitive). Available codes depend on the chosen source. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| source | No | |
| target | No | |
| metrics | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, idempotent, non-destructive, closed-world behavior, so the bar is lower. The description adds genuine value beyond them: it discloses the exact formulas used for each returned figure, the US baseline of 1.0, and the real-world data sources (World Bank, IMF, OECD, Penn World Table), which helps the agent trust and interpret results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence that opens with the inputs and moves to the outputs and provenance. Slightly dense with three formula definitions packed in, but every clause carries information and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only calculation tool with a 100%-covered schema and an output schema, the description supplies everything the agent needs: the computational model, the baseline convention, and the data sources. Any remaining return-format detail is covered by the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 enum values, defaults, and per-parameter nuances (city slug heuristic, source dataset semantics) are all documented in the schema itself. The description only restates the two required inputs (US-denominated income, country code) and adds no syntax or selection detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise operation with three named outputs (effective local purchasing power as income/pppIndex, lifestyle equilibrium cost as income*pppIndex, purchasing power ratio as 1/pppIndex) and names the data provenance. An agent can distinguish this computation tool from sibling cost/salary comparison tools 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied by the required inputs (US-denominated income + country code), but there is no explicit when-to-use guidance, no mention of when this is preferable to siblings like localize_salary, compare_total_cost, or compare_food_cost, and no stated prerequisites or limitations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_runwayRunway multiplier from relocating (bootstrap buffer)ARead-onlyIdempotentInspect
For founders/freelancers stretching savings: computes how many extra months of runway relocating to a cheaper hub buys. Burn is split into fixed (location-independent — subscriptions, debt, insurance) and local; only the local slice scales by the target's cost-of-living ratio (city-level where a curated hub is given, else national, incl. Factbook-only countries). Returns the home baseline plus each hub's monthly burn, runway months, extra months, run-out date and the ×multiplier. Estimates from purchasing-power data, not financial advice.
| Name | Required | Description | Default |
|---|---|---|---|
| burn | Yes | Total current monthly burn at home (in `currency`). | |
| home | No | Home country alpha-2 code. Default US. | |
| fixed | No | Location-independent slice of burn (0…burn) that won't fall when you move. | |
| savings | Yes | Total savings (in `currency`). | |
| targets | Yes | 1–3 hubs, comma-separated: COUNTRY or COUNTRY:citySlug (e.g. TH:chiang-mai,AR:buenos-aires,GE). | |
| currency | No | ISO code for the money inputs (e.g. GBP). Default USD. | |
| homeCity | No | Optional curated home-city slug. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| home | No | |
| hubs | No | Sorted by extra months; each has runwayMonths, extraMonths, multiplier, monthlyBurnUsd, runsOut, priceRatio and a coverage note when approximate. |
| fixedFloorMonths | No | Runway cap even at zero local cost (savings ÷ fixed burn). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive), yet the description adds genuine behavioral context: the fixed/local burn split, city-level vs national scaling, Factbook-only country fallback, and the 'purchasing-power estimate, not financial advice' caveat. That is meaningful added transparency 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the audience and the core computation, then the methodology, then the return summary and caveat. Dense but every clause carries information; slightly long, though nothing is truly wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 enumerate return fields, and its inclusion of them is harmless but slightly redundant. For a 7-param analytical tool it supplies adequate scope, methodology, and caveats; only explicit alternative-tool guidance is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 earns an extra point by explaining the conceptual model behind `fixed` (location-independent slice that won't fall) and the cost-of-living ratio logic applied to `targets`, adding interpretive meaning beyond the field text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('computes how many extra months of runway relocating... buys') with the resource and scope, and even names the audience (founders/freelancers). An agent can distinguish it from siblings like find_fire_locations or retire_on_budget 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The framing 'For founders/freelancers stretching savings' clearly signals the use case and implicitly excludes retirement/visa-planning tools. It does not, however, name an alternative or state when NOT to use it (e.g., vs. find_fire_locations), so it stops short of explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_wage_bandsBenchmark local salary bands (min, median, top 10%)ARead-onlyIdempotentInspect
Models a country's wage distribution as log-normal, calibrated from World Bank GNI per capita (mean) and the Gini index (spread: sigma = sqrt(2)*normInv((Gini+1)/2)), then returns the survival floor (essentials), statutory minimum (ILOSTAT where available, else curated; null where none exists), median (p50), comfortable (p75), top 10% (p90) and top 1% (p99) bands — each monthly and annual, USD and local currency. Optional salary locates a pay figure on the curve (percentile + out-earns %); percentile returns that exact threshold wage. Model estimates for benchmarking, not payroll data.
| Name | Required | Description | Default |
|---|---|---|---|
| salary | No | Your salary to locate on the distribution. Values over 20000 are read as annual (÷12), else monthly. | |
| country | Yes | ISO 3166-1 alpha-2 country code (case-insensitive). | |
| percentile | No | Return the exact wage threshold at this percentile (e.g. 90 for the top-10% floor). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| bands | No | |
| model | No | |
| country | No | |
| standing | No | |
| atPercentile | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive behavior, so the bar is lower. The description goes well beyond them, disclosing the statistical model (log-normal), the calibration sources (World Bank GNI per capita, Gini index, ILOSTAT with curated fallback), the 'null where none exists' handling, and the estimate-vs-payroll caveat.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single dense paragraph, but the methodology is front-loaded and every clause carries information (inputs, formula, outputs, caveat). No filler sentences, though the em-dash chain is heavy and would benefit from light structuring.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 annotations cover the safety profile; the description still fully specifies the model, sources, and outputs. It is essentially complete, missing only sibling-relative routing guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 still adds value: it explains that 'salary' locates a pay figure on the curve returning a percentile and out-earns %, and that 'percentile' returns the exact threshold wage — semantics that go beyond the terse schema field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Models a country's wage distribution', 'returns the ... bands') and enumerates the exact outputs (survival floor, minimum, p50, p75, p90, p99). It does not name or distinguish itself from close siblings like build_pay_range, localize_salary, or compare_occupation_pay, so an agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: the closing clause 'Model estimates for benchmarking, not payroll data' signals the intended use case and warns against misuse. However, with ~50 sibling comparison tools, there is no explicit guidance on when to pick this over build_pay_range or localize_salary, nor when the optional salary/percentile paths apply instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_residencyCheck tax-residency day countsARead-onlyIdempotentInspect
Count distinct days of presence per country per calendar year and evaluate the generic 183-day rule, the US Substantial Presence Test (weighted 3-year formula), and the UK 183-day tax-year test. Early-warning day counter — not tax advice.
| Name | Required | Description | Default |
|---|---|---|---|
| stays | Yes | ||
| referenceDate | No | Optional 'as of' date. Defaults to today (UTC). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| countries | No |
TDQS
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), so credit here goes to what the description adds: the exact rule sets applied (generic 183-day, US SPT weighted 3-year formula, UK tax-year test) and an explicit disclaimer that results are not tax advice. That is meaningful behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the computation and its scope, then the rule sets, then the disclaimer. No filler and nothing buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 explanation, and the description names all three evaluated tests. What remains uncovered is the counting convention for ambiguous date ranges and the overlap/duplicate-day behavior, which matters for correctness of the input.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: referenceDate and country are documented in the schema, while entry/exit carry only date formats. The description's 'per country per calendar year' hints at grouping but does not clarify day-counting conventions such as whether entry and exit days are inclusive or how overlapping/duplicate stays are handled — a real gap for a day-count tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('count distinct days of presence per country per calendar year') and enumerates the three rule sets evaluated, so the computation is unambiguous. It does not differentiate itself from overlapping siblings such as check_tax_residency_risk or check_travel_residency, which an agent would need to disambiguate at selection time.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The clause 'Early-warning day counter — not tax advice' implies a screening use case and sets a scope boundary, but there is no explicit when-to-use/when-not guidance and no routing to the closely related residency siblings. Usage is inferable but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_schengenCheck a Schengen 90/180-day visa itineraryARead-onlyIdempotentInspect
Validate a set of trips against the Schengen Area rule: a non-EU visitor may be present at most 90 days within any rolling 180-day window. Entry and exit days both count as days of presence; overlapping trips are de-duplicated. Returns days used in the current window, days remaining, an overall compliance flag, and the exact first overstay date (if any).
| Name | Required | Description | Default |
|---|---|---|---|
| trips | Yes | List of Schengen stays. | |
| plannedEntry | No | Optional planned entry date. When set, the response adds plan: { maxStay, latestExit, fullResetDate } — the longest compliant stay starting on that date. | |
| referenceDate | No | Optional 'as of' date (ISO YYYY-MM-DD). Defaults to today (UTC). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| daysUsed | No | |
| compliant | No | |
| windowStart | No | |
| daysRemaining | No | |
| referenceDate | No | |
| maxDaysInWindow | No | |
| firstOverstayDate | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world behavior, so the bar is lower. The description adds valuable behavioral detail beyond that: entry and exit days both count as presence, overlapping trips are de-duplicated, and the response includes specific compliance outputs. It does not cover edge cases like timezone handling or the default reference date, but the core semantics are well disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three tightly written sentences with zero waste: the first states the rule, the second clarifies counting and de-duplication, and the third summarizes the outputs. It is front-loaded with the purpose and appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a full input schema, an output schema, and complete annotations, the description is largely complete for correct invocation. It does not mention the optional plannedEntry plan computation or referenceDate behavior, but those are fully covered by the schema, so the definition as a whole is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 the trips, plannedEntry, and referenceDate parameters. The description adds no parameter-specific meaning beyond what the schema provides, which matches the baseline of 3 when structured data does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Validate) and a precise resource (a set of trips against the Schengen 90/180-day rule), making the tool's purpose immediately clear. It does not explicitly differentiate itself from the overlapping sibling check_travel_residency, so it falls 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the domain statement—the agent can infer this is for Schengen day-count validation—but there is no explicit when-to-use guidance, no conditions for choosing it over sibling tools like check_travel_residency, and no exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_tax_residency_riskCheck tax-residency risk for remote work abroadARead-onlyIdempotentInspect
Remote Worker Tax Trap radar: evaluates how close a stay is to triggering tax residency (183-day rule with per-country variations across 43 tax jurisdictions) and estimates the tax owed on the FULL annual income if the threshold is crossed — comparing the standard resident effective rate against the country's special expat/nomad regime (Spain's Beckham Law 24%, Portugal's IFICI 20%, Italy's impatriati, territorial/remittance systems, …). Optionally computes leave-by/residency dates from an arrival date and warns where the Schengen 90/180 tourist limit bites first. Early-warning estimates — not tax advice.
| Name | Required | Description | Default |
|---|---|---|---|
| days | Yes | Days of presence in the relevant counting period. | |
| income | Yes | Gross annual income (USD) the residency cliff would expose. | |
| arrival | No | Optional arrival date — adds leaveBy and residencyDate to the response. | |
| country | Yes | ISO 3166-1 alpha-2 country code (case-insensitive). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| risk | No | |
| dates | No | |
| projection | No | |
| daysRemaining | No | |
| thresholdDays | No | |
| pctOfThreshold | No | |
| schengenWarning | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds real value beyond them: the 43-jurisdiction coverage, the resident-vs-expat regime comparison model, that arrival adds leaveBy/residencyDate to the response, the Schengen 90/180 cross-warning, and the explicit 'early-warning estimates — not tax advice' caveat.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, which is good, but it is a single sprawling ~90-word sentence. The parenthetical regime examples (Beckham Law 24%, IFICI 20%, impatriati, territorial/remittance, …) with a trailing ellipsis are padding that lengthens an already dense line without adding invocation-critical information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 restated, and the description still volunteers that arrival yields leaveBy/residencyDate. Scope, caveats and the Schengen interaction are covered; what is missing is sibling differentiation against check_residency/check_schengen, which is the main residual gap for a tool with this many near-neighbors.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 adds framing (183-day counting period, per-country variations, income exposure measured on the FULL annual income if the cliff is crossed) but does not supply formats or semantics beyond what the schema already documents for days, income, country and arrival.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: it evaluates proximity to a tax-residency threshold and estimates tax owed if crossed, with concrete scope (183-day rule, 43 jurisdictions, resident vs expat regimes). The purpose is unmistakable, though it never names or contrasts with the obvious siblings check_residency, check_travel_residency, or check_schengen, so an agent must infer the boundary itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'evaluates how close a stay is to triggering tax residency' plus 'Optionally computes leave-by/residency dates' signals a planning/early-warning use case. There is no explicit when-to-use/when-not statement, no prerequisites (e.g. that it needs a presence count or arrival date), and no routing to alternatives despite several overlapping siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_travel_residencyUnified Schengen + tax-residency + tax-cost trackerARead-onlyIdempotentInspect
The comprehensive engine: from one travel itinerary it returns (1) Schengen 90/180 tourist-visa status (days used/remaining, first overstay, longest compliant stay), (2) per-country tax-residency risk on each country's OWN threshold and basis — the 183-day rule, Cyprus's conditional 60-day rule (flagged only when you're not 183+ resident elsewhere), the US Substantial Presence Test and the UK tax-year test — with safe days left, leave-by dates and a safe/warning/triggered rating, and (3) with an optional income, the tax cost of triggering residency at the standard rate vs an expat regime. Supersedes check_schengen / check_residency / check_tax_residency_risk (all still available). Early-warning day math — not tax advice.
| Name | Required | Description | Default |
|---|---|---|---|
| stays | Yes | ||
| income | No | Optional gross annual income (USD) — enables the tax-cost projection for at-risk countries. | |
| referenceDate | No | Optional 'as of' date. Defaults to today (UTC). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| summary | No | |
| schengen | No | 90/180 status when any Schengen stay exists: daysUsed, daysRemaining, compliant, firstOverstayDate, maxStayFromRef. |
| countries | No | |
| referenceDate | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only, idempotent, non-destructive profile, so the bar is lower, yet the description adds real behavioral nuance: the Cyprus conditional 60-day rule is flagged only when you're not 183+ resident elsewhere, ratings are safe/warning/triggered, and it frames the output as early-warning day math rather than tax advice. It does not discuss pagination or limits, but for a computation tool that is minor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with 'The comprehensive engine' and organized into three numbered output groups, so the structure is clear. It is dense to the point of reading as one long passage, but nearly every clause carries useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema and rich annotations already present, the description completes the picture by stating scope (single itinerary input), the caveat (not tax advice), and the sibling supersession. 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67% and the description only elaborates on the optional income parameter ('enables the tax-cost projection for at-risk countries'). The stays structure and referenceDate are documented by the schema itself, so the description adds marginal meaning beyond structured fields. Baseline 3 is appropriate here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific engine and enumerates exactly the three outputs it produces (Schengen 90/180 status, per-country tax-residency risk, optional tax-cost projection). It explicitly distinguishes itself from check_schengen / check_residency / check_tax_residency_risk by declaring it supersedes them, so an agent can disambiguate 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly frames this as the comprehensive replacement for three named sibling tools (all still available), which gives strong routing context. It stops short of saying when the narrower siblings are still the better choice, so a full 5 is not warranted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_banking_accessBanking access by country (Findex)ARead-onlyIdempotentInspect
Whether adults there can bank: the share of adults (15+) with an account at a bank, another financial institution or a mobile-money provider, from the World Bank's Global Findex — a triennial household survey, so the survey year travels with each figure — plus personal remittances received as a share of GDP. Given countries (two or more), side by side; without, the 41-country spine ranked by metric (account or remittancesReceived). Account ownership says whether adults CAN bank, not whether a newcomer can open an account — that depends on residency and documentation rules this tool does not cover. A missing figure is absent and dropped from rankings, never 0.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Ranking direction. Ignored when `countries` is given. | highest |
| limit | No | Return at most this many countries in a ranking. | |
| metric | No | Ranking metric. Ignored when `countries` is given. | account |
| countries | No | Comma-separated ISO alpha-2 codes, two or more (e.g. "GB,NG,IN"). Omit to get a ranking instead. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| rows | No | |
| metric | No | |
| caveats | No | |
| attribution | No |
TDQS
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), and the description adds real behavioral context on top: the data is triennial so the survey year travels with each figure, and a missing figure is absent and dropped from rankings, never 0. That last point directly prevents a misread of empty results as zero banking access.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with what is measured, then the usage modes and the caveats. The prose is dense and dash-heavy, but every sentence carries information (source, periodicity, missing-value handling, scope limit); nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema and annotations exist, so return-format and safety details need not be repeated. The description still supplies the interpretive boundaries an agent needs (survey year is attached, cannot answer account-opening eligibility, missing values are dropped), making it complete for this comparison tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 four parameters, including that `sort` and `metric` are ignored when `countries` is given. The description restates the metric options and the ranking default 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States precisely what is measured (share of adults 15+ with an account at a bank, other financial institution, or mobile-money provider, plus personal remittances as a share of GDP) and the source (World Bank Global Findex). It also draws the crucial boundary that account ownership means adults CAN bank, not that a newcomer can open an account, which is what a sibling like banking_access or check_residency would answer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly describes the two modes: give `countries` (two or more) for a side-by-side, omit it to get the 41-country spine ranked by `metric`. Clear context, but no sibling tool is named as an alternative (e.g. banking_access for a single country), so it stops just 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.
compare_business_entryDays and cost to register a company, and the new-company rate, by countryARead-onlyIdempotentInspect
How long and how much it takes to register a limited company: World Bank B-READY's calendar days and cost to complete company entry for a domestic and a foreign-owned company (cost in local currency with a USD conversion at the site's FX snapshot), whether paid-in minimum capital is required, whether sectors are closed to full private ownership, whether a national-employee quota applies, and whether registration is online with an e-signature, fees payable online and a unique business id assigned — plus the World Bank Entrepreneurship Database's new limited-liability companies per 1,000 working-age adults. B-READY is a rotating cohort: 22 of the 41 spine countries are in the 2025 edition, and a country outside it answers with the new-company rate alone and a caveat naming the gap; a country with neither is NO_DATA. country for one, countries to compare, neither ranks by metric (daysDomestic default; costDomesticUsd, daysForeign, costForeignUsd, density). Published rates and facts on the dates shown, for information only — not tax, legal or immigration advice; every response says so first.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Default lowest for days and cost, highest for density. | |
| limit | No | ||
| metric | No | daysDomestic | |
| country | No | One ISO alpha-2 code. | |
| countries | No | Comma-separated ISO alpha-2 codes, two or more. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| rows | No | |
| entry | No | |
| metric | No | |
| caveats | No | |
| activity | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (which already cover readOnly/idempotent/non-destructive). It discloses that B-READY is a rotating cohort (22 of 41 spine countries in the 2025 edition), that an out-of-cohort country returns the new-company rate alone with a caveat naming the gap, that a country with neither returns NO_DATA, and that every response leads with a not-advice disclaimer. This is exactly the behavioral context an agent cannot infer from 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded and every clause carries real information, but the body is one dense, run-on enumeration that is harder to scan than a broken-out list would be. Appropriate length overall, slightly overwrought in sentence structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 fully covers the tricky cases an agent must anticipate: cohort gaps, the single-rate fallback, NO_DATA, and the mandatory disclaimer. Combined with its parameter routing, an agent has everything needed to call and interpret it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 60%, and the description compensates meaningfully: it defines the country/countries/neither semantics, the default metric (daysDomestic) and the full metric enum, clarifying what each ranking means. It does not explain the `limit` parameter or the sort defaults (those live only in the schema), so it stops short of full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: it returns how long and how much it takes to register a limited company, enumerating the exact facts (calendar days, cost, paid-in minimum capital, ownership restrictions, employee quota, online/e-signature status, new-LLC density). The scope is unmistakable and no sibling tool covers company-registration entry, so the agent can pick it 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear invocation routing: '`country` for one, `countries` to compare, neither ranks by `metric`' with the metric enums listed. However it never states when to prefer this over adjacent siblings like compare_countries or country_dossier, and offers no explicit exclusions — usage is implied rather than guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_childcare_costNet childcare cost for a couple and a single parent, by countryARead-onlyIdempotentInspect
What full-time centre-based childcare costs a family after benefits and tax, from OECD's tax-benefit model (two children aged 2 and 3, no social assistance or rent supplement): a couple both earning 100% of the average wage and a single parent earning 67%, each as a share of household disposable income, of the average wage, and in local currency per year. OECD members only — 22 of the 41 spine countries at the vintage floor; the rest return NO_DATA naming the gap, never a modelled figure. country for one, countries to compare, neither ranks by household (couple default; singleParent) and unit (pctDisposableIncome default; pctAverageWage), cheapest first unless sort=highest. Published cost figures, for information only; every response says so first.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | lowest | |
| unit | No | pctDisposableIncome | |
| limit | No | Return at most this many countries. | |
| country | No | One ISO alpha-2 code. | |
| countries | No | Comma-separated ISO alpha-2 codes, two or more, for a side-by-side. | |
| household | No | couple |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| rows | No | |
| year | No | |
| couple | No | |
| caveats | No | |
| attribution | No | |
| singleParent | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only/idempotent annotations, it discloses the coverage gap (22 of 41 spine countries) and that missing countries return NO_DATA naming the gap rather than a modelled figure. It also flags that responses carry a 'for information only' disclaimer, which is non-obvious behavioral context an agent must relay.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded, with scope stated before caveats and parameter mechanics. The long parenthetical and run-on clauses make it heavier than necessary, though nearly every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-param tool with an output schema, the description covers scope, coverage limitations, default ranking behavior, and the informational disclaimer. Return-value description is correctly delegated to the output schema, leaving only minor parameter details unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema coverage at 50%, the description compensates by explaining the interaction the schema cannot: that omitting `country`/`countries` triggers a ranking, ordered cheapest first by `household` and `unit` with their defaults. It adds little on `limit`, but the enum parameters are well covered.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (net full-time centre-based childcare cost after benefits and tax, from the OECD tax-benefit model) with the exact household scenarios modelled. The scope is precise enough to separate it from siblings like compare_total_cost and compare_food_cost without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear routing for `country` (one) vs `countries` (side-by-side) vs neither (ranking), plus sort direction and the OECD-membership limitation. It never names a sibling alternative or an explicit when-not-to-use condition, 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.
compare_climateCompare climate normals and comfortable daysARead-onlyIdempotentInspect
Monthly climate normals from ERA5 reanalysis (2015-2024) via Open-Meteo: mean daily maximum and minimum temperature, average monthly rainfall, and a count of comfortable days. Pass city (slug) or country (alpha-2) for one place's twelve months — a country answers through a named representative city, because a country does not have one climate. Otherwise cities are ranked by comfortable days, for a single month (1-12) or across the year; the seasonal question is the one people actually have, and an annual total hides it. A comfortable day has a maximum between 18 and 27 C with under 1 mm of rain — a STATED PREFERENCE, not an objective measure: it is temperate-biased and scores hot destinations low on terms they did not agree to, so mean maximum and rainfall travel with every row for callers who want to rank on those instead. ERA5 is reanalysis rather than station observation, which makes it complete and comparable across countries.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | City slug (e.g. "lisbon"). Returns that city's twelve months. | |
| limit | No | Return at most this many cities. | |
| month | No | Rank a single month. Omit to rank on the whole year. | |
| country | No | ISO alpha-2. Returns the representative city's months, naming which city. | |
| minComfortDays | No | Filter: minimum comfortable days in the ranked window. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| city | No | |
| rows | No | |
| month | No | |
| updated | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only/idempotent/non-destructive profile, but the description adds genuinely non-obvious context: the ERA5 reanalysis source and 2015-2024 window, the reanalysis-vs-station caveat, and the crucial disclosure that 'comfortable days' is a stated temperate-biased preference rather than an objective measure. It does not describe pagination or the output shape, but the output schema exists, so that is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well front-loaded — source, metrics, then mode selection, then the caveat. It is on the long side and includes a couple of editorial asides ('the seasonal question is the one people actually have, and an annual total hides it'), but those asides carry routing value rather than padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With annotations carrying safety and an output schema present, the description only needs to supply source provenance, metric definitions, mode routing, and caveats — and it does all four. An agent has everything required to call this correctly and to interpret the ranking honestly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 real interpretive value beyond the schema: what `country` actually resolves to (a named representative city, since a country has no single climate), and that `minComfortDays` operates over the ranked window. Format details like the slug and alpha-2 forms are already in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (compare monthly climate normals) and enumerates exactly what is returned: mean daily max/min temperature, average monthly rainfall, and a comfortable-day count. It also distinguishes its two operating modes (single-place lookup vs. ranked comparison), which no sibling tool covers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the caller: pass `city` or `country` for one place's twelve months, otherwise cities are ranked. It also explains the `month` vs. year choice and justifies the seasonal default, so an agent knows which path to take without inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_connectivityCompare measured internet quality by countryARead-onlyIdempotentInspect
Measured connection quality per country from Cloudflare Radar: median download and upload (Mbps), median idle latency and jitter (ms), and a call-quality verdict derived from latency and jitter rather than bandwidth — a video call fails on latency and jitter long before it fails on throughput, which is why a download figure alone cannot answer “can I work from here”. Aggregated from real connections over a 28-day window, not crowdsourced or self-reported. Coverage is wider than the site's country pages (~200 locations), so this answers for places with no page here. A country Radar has too little data for is absent, never zero.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Metric to rank by. Bandwidth sorts high-to-low; latency and jitter sort low-to-high, because “better” runs in opposite directions. | download |
| limit | No | Return at most this many countries. | |
| maxLatency | No | Filter: maximum median idle latency, ms (e.g. 100). | |
| minDownload | No | Filter: minimum median download, Mbps (e.g. 50). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| rows | No | |
| sort | No | |
| updated | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description goes well beyond them: provenance (real connections, not crowdsourced or self-reported), time window (28-day aggregation), coverage breadth, and a crucial null-semantics rule — 'a country Radar has too little data for is absent, never zero'. That absence rule is exactly the kind of 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the resource and metric list, and every sentence carries information — the 28-day window, the coverage claim, and the absent-never-zero rule all earn their place. It is a dense single run-on paragraph rather than clearly segmented, which costs it the top mark.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 need not be explained; the description instead covers the things structured fields cannot — data provenance, aggregation window, coverage limits, and null handling. Required parameters are zero and defaults are schema-documented, so 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including the sort-direction caveat and filter examples, so the parameters are fully documented without the prose. The description adds conceptual framing (why the call-quality verdict exists) but no syntax, format, or interaction detail beyond what the schema already supplies — baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — measured connection quality per country — and enumerates the exact metrics returned (median download/upload Mbps, idle latency, jitter, call-quality verdict), with the data source named (Cloudflare Radar). No sibling in the compare_* family covers connectivity, so the agent can place it unambiguously.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear decision context — this is the tool that answers 'can I work from here', where latency/jitter matter more than bandwidth — and points out that coverage exceeds the site's country pages (~200 locations), implicitly routing users who find no country page. It does not, however, explicitly name an alternative or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_contractCompare contractor vs employee net take-homeARead-onlyIdempotentInspect
Compute gross-to-net parity between a self-employed contractor hourly rate and an employee (W2/EOR) hourly rate, accounting for self-employment/income tax and self-paid health insurance, and return the break-even contractor rate. Uses transparent effective-rate tax presets per country, all overridable. Estimates only — not tax advice.
| Name | Required | Description | Default |
|---|---|---|---|
| hours | No | Hours per week (default 40). | |
| ctRate | No | Override contractor effective tax rate, percent (e.g. 32). | |
| health | No | Annual self-paid health insurance (USD); defaults to the country preset. | |
| country | No | Country code for tax presets. | US |
| empRate | No | Override employee effective tax rate, percent (e.g. 24). | |
| taxMode | No | 'brackets' uses progressive 2025 schedules (US and GB only; falls back to flat elsewhere — response echoes the mode). | |
| expenses | No | Annual business expenses (USD, default 0). | |
| employeeRate | Yes | Employee/W2/EOR hourly rate (USD). | |
| employeeWeeks | No | Employee paid weeks (default 52). | |
| contractorRate | Yes | Self-employed hourly rate (USD). | |
| contractorWeeks | No | Contractor paid/billable weeks (default 48). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| employee | No | |
| contractor | No | |
| breakevenRate | No | |
| netDifference | No | |
| contractorProfitable | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive). The description adds meaningful behavior beyond that: country tax presets are transparent effective rates and all overridable, and brackets mode falls back to flat outside US/GB. The 'estimates only — not tax advice' caveat is also useful, though response shape is left to the output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly packed sentences that front-load the calculation, then the methodology and the override/fallback caveat, ending with the disclaimer. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists, return values needn't be explained, and the description still names the key output (break-even rate). It covers presets, override behavior, and the brackets fallback. Slightly incomplete on how hours/weeks affect results, but strong overall for an 11-param tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are already well documented, making 3 the baseline. The description adds the notion that presets are overridable and mentions tax-mode fallback, but does not clarify individual parameter interactions (e.g., weeks/hours effect on the break-even calculation) beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource: computes gross-to-net parity between a contractor hourly rate and an employee W2/EOR rate, and returns the break-even contractor rate. This clearly distinguishes it from sibling tax tools like compare_effective_tax or compare_tax_burden.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys the scenario (comparing contractor vs employee take-home) but never explicitly says when to pick this over alternatives such as compare_effective_tax, required_rate, or estimate_employer_cost. Usage is implied by the scenario rather than stated with exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_countriesCompare two countries' cost of livingBRead-onlyIdempotentInspect
Side-by-side comparison of two countries: US-relative price levels across every dataset (World Bank, IMF, OECD, Penn World Table, consumption basket), the consensus ratio, percent difference, and $100k salary equivalence in both directions.
| Name | Required | Description | Default |
|---|---|---|---|
| a | Yes | First ISO 3166-1 alpha-2 country code (case-insensitive). | |
| b | Yes | Second ISO 3166-1 alpha-2 country code (must differ from a). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| ratioAtoB | No | |
| salary100k | No | |
| pctDifference | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, idempotentHint=true, destructiveHint=false, openWorldHint=false), so the bar is lower. The description adds that comparisons are US-relative and span multiple datasets with a consensus ratio, plus a bidirectional salary equivalence, which is genuinely useful context beyond the structured fields, but it does not disclose anything about determinism, latency, or data freshness.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence that front-loads the core action and then lists distinct outputs, with no filler. It is somewhat run-on, but every clause carries information an agent can use.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a 2-parameter schema at full coverage, rich annotations, and an existing output schema, the description is largely complete; the output enumeration is arguably redundant but harmless. The only real gap is routing guidance versus the many compare_* siblings, which is not addressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 both 'a' and 'b' as ISO 3166-1 alpha-2 codes with the differing requirement. The description adds no meaning beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource (side-by-side comparison of two countries) and enumerates the concrete outputs: US-relative price levels across named datasets, consensus ratio, percent difference, and salary equivalence. It implicitly distinguishes itself from narrower siblings like compare_food_cost or compare_housing by being the comprehensive cost-of-living comparison, though it never names an alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance and no reference to any sibling tool. An agent must infer from the output enumeration that this is the broad cost-of-living comparison rather than a slice like compare_inflation or compare_total_cost. No prerequisites or exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_country_riskCompare country risk (INFORM, EC JRC)ARead-onlyIdempotentInspect
INFORM Risk from the European Commission's Joint Research Centre: a 0-10 composite where HIGHER IS WORSE, plus the three dimensions behind it — hazard (exposure to earthquakes, floods, cyclones, drought, conflict), vulnerability (how exposed the population is) and copingCapacity (whether institutions and infrastructure could respond). The last is usually the one that matters when choosing where to live: two countries can face the same earthquake and have completely different outcomes. Safest-first by default. Covers 191 countries, far wider than this site's country pages. A country INFORM does not score is ABSENT, never zero — zero is the safest possible value and would rank an unassessed country first. Deliberately not folded into any other ranking here: risk flags, it never silently reweights a cost or livability score.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Dimension to sort by. maxRisk always filters on the composite. | risk |
| limit | No | Return at most this many countries. | |
| country | No | ISO alpha-2 for a single country's scores. | |
| maxRisk | No | Keep only countries at or below this composite score. | |
| descending | No | True lists the most dangerous first. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| rows | No | |
| entry | No | |
| release | No | |
| updated | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish safe read-only behavior, and the description adds meaningful traits beyond them: the default sort order (safest-first), the ABSENT-not-zero semantics that would otherwise silently misrank unassessed countries, and the guarantee that it never reweights cost or livability scores. These are exactly the behavioral details annotations can't express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the definition and scale before any editorial, and every clause is relevant. It runs a bit long, and the earthquake/copingCapacity aside is more persuasion than specification, but nothing is truly wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 annotations cover the safety profile. The description still fills key gaps — scale direction, absence handling, coverage breadth, and its isolation from other rankings — leaving only explicit alternative-tool routing unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already carries parameter meaning; baseline 3 applies. The description reinforces a few semantics — that copingCapacity is the decision-relevant dimension and that unsorted output is safest-first — but adds little parameter syntax or format detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names the exact data source (INFORM, EC JRC), states the resource (composite risk plus hazard/vulnerability/copingCapacity dimensions), the scale direction (0-10, higher is worse), and the coverage scope (191 countries). It also distinguishes itself from other rankings with 'Deliberately not folded into any other ranking here,' so an agent can tell it apart from compare_safety_stats or compare_climate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies a use case ('when choosing where to live') and leads with a safest-first default, but never names a specific alternative tool or states when NOT to use it. An agent gets a general sense of fit but no explicit routing rule to a sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_effective_taxEffective corporate tax rate beside the statutory rate, by countryARead-onlyIdempotentInspect
What a company's investment is actually taxed at: OECD's forward-looking effective average tax rate (EATR), effective marginal rate (EMTR) and cost of capital for a composite investment under fixed interest and inflation, beside the statutory combined corporate rate from the Rules hub, with the gap in points — what allowances and incentives are worth. country for one, countries for a side-by-side, neither ranks by metric (eatr default; emtr, costOfCapital, gap), lowest first unless sort=highest. 39 of the 41 spine countries are modelled; the Philippines and the UAE keep their statutory rate with a caveat and never a borrowed effective rate. A property of the tax system, not any company's bill. Published rates and facts on the dates shown, for information only — not tax, legal or immigration advice; every response says so first.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | lowest | |
| limit | No | Return at most this many countries. | |
| metric | No | Ranking metric when neither `country` nor `countries` is given. | eatr |
| country | No | One ISO alpha-2 code. | |
| countries | No | Comma-separated ISO alpha-2 codes, two or more, for a side-by-side. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| rows | No | |
| gapPct | No | |
| metric | No | |
| caveats | No | |
| effective | No | |
| attribution | No | |
| statutoryCombinedPct | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent annotations: discloses that 39 of 41 countries are modelled, that the Philippines and UAE keep only a statutory rate with a caveat and never a borrowed effective rate, and that every response leads with a disclaimer. This is exactly the kind of coverage/caveat 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded, leading with what the tool computes and the gap. Every sentence carries information, though the disclaimer and 41-country caveat sentences make it heavier than strictly needed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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. Combined with annotation safety profile and the disclosed country coverage caveats, an agent has everything required to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Adds meaning beyond the 80%-covered schema: `metric` selects the ranking metric with eatr as default, `sort=highest` overrides the lowest-first default, and the country/countries/neither interaction defines when each param applies. Marginal gains only, since the schema already documents most parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: forward-looking effective average/marginal tax rate and cost of capital beside the statutory rate, with the gap. It clearly distinguishes itself from siblings like compare_tax_rates, compare_tax_burden and withholding_tax by naming the OECD EATR/EMTR methodology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the three usage modes explicitly: `country` for one, `countries` for a side-by-side, neither for a ranked list, plus metric and sort defaults. It does not name alternative sibling tools, but the routing within the tool is fully specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_egovUN E-Government Development Index and its components, by countryARead-onlyIdempotentInspect
How much of government can be done online: the UN E-Government Development Index (0–1) and its three components — Online Service Index, Telecommunication Infrastructure Index, Human Capital Index — for all 41 spine countries, read from the UN E-Government Knowledgebase's country pages because no data file is published. The index measures what government provides online and the infrastructure and skills to use it, not whether a newcomer can use it (most services need a national id or residence first). The survey is biennial and the caveat names its year. country, countries, or a ranking by index (egdi default; osi, tii, hci), highest first unless sort=lowest. Published figures, for information only; every response says so first.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | highest | |
| index | No | egdi | |
| limit | No | Return at most this many countries. | |
| country | No | One ISO alpha-2 code. | |
| countries | No | Comma-separated ISO alpha-2 codes, two or more, for a side-by-side. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| hci | No | |
| osi | No | |
| tii | No | |
| egdi | No | |
| rows | No | |
| year | No | |
| index | No | |
| caveats | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/non-open-world, and the description adds substantial context beyond them: the data is scraped from Knowledgebase country pages because no data file is published, the survey is biennial and the caveat names its year, it measures provision/infrastructure/skills rather than newcomer usability, and every response leads with a 'for information only' disclaimer. That is exactly the extra 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with what the index measures, then scope, caveat, and parameter behavior in a dense but well-ordered passage. It is on the long side for a single paragraph, but nearly every clause adds distinct value; no obvious filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 still covers scope (41 countries), data provenance, survey cadence, semantic caveats, and parameter modes. 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 60%, and the description compensates well: it disambiguates `country` vs `countries`, explains the `index` enum values (egdi default; osi, tii, hci) and the `sort` default/override. Only `limit` is left unaddressed in prose, though its schema description already covers it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (UN E-Government Development Index, 0–1) with its three named components and the reading scope (all 41 spine countries). An agent can distinguish this instantly from siblings like compare_countries or compare_connectivity, which handle different datasets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the three usage modes clearly: single `country`, side-by-side `countries`, or a ranking by `index`, with default ordering (highest first) and the `sort=lowest` override. It does not, however, explicitly steer against any sibling or state exclusions such as when a broader country-comparison tool would be preferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_food_costMeasured cost of a healthy diet, by country, and how far modelled grocery prices are from itARead-onlyIdempotentInspect
What eating a healthy diet costs per person per day, MEASURED: the World Bank's Food Prices for Nutrition series (the cheapest locally available foods that meet a healthy-diet standard, from International Comparison Program retail prices), 165 of the 186 spine countries. Returns the cost in local currency (dailyLocal) and USD (dailyUsd, monthlyUsd), the share of people who cannot afford it (unaffordable.pct, on its own year), the diet's split across six food groups as percentage shares for the single year published, and how this site's MODELLED grocery prices compare: vsUsMeasured and vsUsModelled are each a multiple of the US, and modelError = modelled ÷ measured (below 1, the model understates food there). A ranking also returns modelErrorSummary for the whole site. Where the local figure does not convert consistently at the site's exchange rate (a parallel market, a recent devaluation, a currency change) the dollar figure and the comparison are withheld and a caveat says why; a country with no survey is NO_DATA, never zero. It is a least-cost diet, not what a typical or expat household spends, and it feeds no total. country for one, countries to compare, neither ranks by metric (dailyUsd default, or unaffordablePct), cheapest first unless sort=highest. Published cost figures, for information only; every response says so first.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | lowest | |
| limit | No | Maximum rows in a ranking. | |
| metric | No | dailyUsd | |
| country | No | One ISO alpha-2 code. | |
| countries | No | Comma-separated ISO alpha-2 codes, two or more, for a side-by-side. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| rows | No | |
| caveats | No | |
| dailyUsd | No | |
| excluded | No | |
| dailyLocal | No | |
| modelError | No | |
| attribution | No | |
| modelErrorSummary | No |
TDQS
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), and the description adds substantial context beyond them: dollar figures/comparisons are withheld when local currency does not convert consistently, NO_DATA is never zero, responses always lead with a disclaimer, and it feeds no total. These are real behavioral traits an agent cannot infer 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with the noun phrase defining the tool, but the body is a dense, run-on paragraph laden with parentheticals. Much of it earns its place, yet the measured/modelled comparison and the trailing disclaimer sentence are restated across several clauses, costing readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex measured-vs-modelled cost tool, the description covers source, coverage, units, the modelError comparison, withholding caveats, NO_DATA semantics, and the scope limitation (least-cost diet, not typical household spend). With an output schema present, the extra field detail is redundant but not harmful, and nothing needed 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 60% schema coverage, the description usefully explains semantics the schema omits: `country` means one, `countries` means two-or-more, neither `country` nor `countries` triggers a ranking, and `metric` selects dailyUsd (default) or unaffordablePct. It adds meaning over the enum/default fields, though it leaves `limit` and `sort` largely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb+resource+scope: the World Bank's Food Prices for Nutrition measured cost of a healthy diet per person per day, naming the data source, coverage (165 of 186 spine countries), and explicitly labeling it 'measured' as opposed to the site's 'modelled' grocery prices. This separates it from siblings like compare_total_cost and estimate_micro_costs, which are not diet-cost tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the mode-selecting parameters explicitly: `country` for one, `countries` for a side-by-side, and neither ranks unless you pass `metric`, with `sort=highest` reversing the default cheapest-first ordering. It also flags the 'for information only' caveat context. It does not, however, route the agent to any named sibling alternative, so it stops 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.
compare_health_capacityDoctors, nurses and hospital beds per 10,000, by countryARead-onlyIdempotentInspect
How much health system there is per person: medical doctors and nursing and midwifery personnel per 10,000 (WHO Global Health Observatory) and hospital beds per 10,000 (WHO, or OECD where newer — the row names its source), beside the UHC service-coverage index. Density is not access: it says how much exists, not whether a visitor can use it or what it costs. Newest observation at the site's vintage floor; 36 of the 41 spine countries carry doctors and nurses, 31 beds; an older figure is absent, never served as current. country for one, countries to compare, neither ranks by metric (doctors default; nurses, beds), highest first unless sort=lowest. Published figures, for information only; every response says so first.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | highest | |
| limit | No | Return at most this many countries. | |
| metric | No | doctors | |
| country | No | One ISO alpha-2 code. | |
| countries | No | Comma-separated ISO alpha-2 codes, two or more, for a side-by-side. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| rows | No | |
| metric | No | |
| caveats | No | |
| uhcIndex | No | |
| bedsPer10k | No | |
| attribution | No | |
| nursesPer10k | No | |
| doctorsPer10k | No |
TDQS
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), so the bar is lower. The description adds real value beyond that: vintage/coverage figures (36/41 for doctors-nurses, 31 for beds), source attribution per row, the rule that older figures are omitted rather than served as current, default sort direction, and a disclaimer that every response carries. That is unusually rich behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but well front-loaded — the core capability opens the sentence and caveats follow. Em-dash heavy and packed, but each clause carries distinct information (sources, caveat, coverage, param behavior, disclaimer) rather than padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return format need not be explained, and the description doesn't waste space on it. It covers sourcing, coverage limitations, sorting, and the informational-only caveat — enough for an agent to call this correctly. Minor gap: the `limit` parameter's interaction with default sort is left to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 60% schema coverage, the description compensates meaningfully: it clarifies that `metric` does not rank (only doctors by default; nurses and beds selectable), that `sort` defaults to highest and `sort=lowest` flips it, and that `country`/`countries` map to single vs side-by-side. It leaves `limit` to the schema, but the enum-bearing parameters are well explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It names a specific resource (doctors, nurses, beds per 10,000), the data sources (WHO GHO, OECD), and the companion metric (UHC service-coverage index). This is clearly distinguishable from siblings like compare_healthcare or health_prep because it frames itself as density rather than access. An agent knows exactly what this returns 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a strong limitation cue ('Density is not access... not whether a visitor can use it or what it costs'), which implicitly points to a different tool for access/cost questions. It also explains when to use `country` vs `countries`. But it never names an alternative sibling to route to, so the when-not guidance stops short of explicit redirection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_healthcareCompare Healthcare Costs & ExposureARead-onlyIdempotentInspect
Healthcare cost and financial exposure across 41 countries: out-of-pocket spend per person per year (US$), out-of-pocket as a share of all health spending, total health spend per capita (PPP international $), government funding share, physicians per 1,000 and dentists per 10,000. Figures are MEASURED from World Bank and WHO Global Health Observatory series, never derived from a price index: scaling healthcare by a country's general price level overstates costs abroad by 1.2x-5.4x, because health prices do not track the price level (the US is an outlier and several countries deliberately price healthcare below their own economies). Share and burden are separate facts and both are returned - the US pays only ~11% out of pocket, a low share, but the highest absolute amount. Dental is reported as ACCESS (dentist density), not price: no free citable source publishes procedure prices. National averages, not a quote for any individual's care. Not medical, insurance or financial advice.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Metric to rank by. 'outOfPocket' = out-of-pocket spend per person per year (default, the figure a person actually pays); 'spend' = total health spend per capita; 'exposure' = out-of-pocket as a share of health spending; 'doctors' = physicians per 1,000 (ranked best-first); 'dentists' = dentists per 10,000 (best-first). | outOfPocket |
| country | No | Optional ISO 3166-1 alpha-2 country code (case-insensitive). Echoes that country's row and its rank under the active sort. | |
| maxOutOfPocketPct | No | Optional filter: keep only countries where households pay at most this percentage of health spending directly. | |
| minPhysiciansPer1000 | No | Optional filter: keep only countries with at least this many physicians per 1,000 people. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| rows | No | Countries under the active sort, best first. |
| focus | No | The requested country's row, when `country` was given. |
| updated | No | ISO date the underlying data was last refreshed. |
| excluded | No | Countries removed by filters or missing the sorted metric. |
| attribution | No | Sources, a quotable citation and a permalink. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already confirming a safe read-only, idempotent, non-destructive call, the description still adds substantial behavioral context beyond them: data provenance (World Bank/WHO measured series, never price-index derived), the explicit warning that shares and absolute burden are separate facts, the decision to report dental as access rather than price, and the national-average/not-advice disclaimer. This is exactly the kind of limitation disclosure that prevents misuse.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening sentence is front-loaded with the tool's core output and scope, and the content is dense rather than padded. It runs long for an MCP description and includes illustrative asides (the 1.2x-5.4x overstatement figure, the US ~11% example) that justify methodology more than they guide invocation, but nothing is purely redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only comparison tool with an output schema and full annotation coverage, the description supplies everything an agent needs: metric definitions, units, country scope, data source, interpretation caveats, and what the tool deliberately does not do. Return-value explanation is correctly left to the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and each parameter (sort enum, country code, the two numeric filters) is fully documented in the schema, so the baseline of 3 applies. The description's metric list loosely corresponds to the sort enum but adds no syntax, format, or unit detail beyond what the schema already gives.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource (healthcare cost and financial exposure) and enumerates the exact metrics returned (out-of-pocket spend, share of spending, total spend per capita PPP, government share, physician/dentist density) plus a clear scope of 41 countries. It is unambiguous about what the tool produces, but it never distinguishes itself from the closely related sibling compare_health_capacity, which likely also covers physician density.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer it should use this to compare healthcare cost/burden across countries, and the description usefully excludes some interpretations (not a price index comparison, not an individual quote, not advice). However, there is no explicit when-to-use/when-not statement and no named alternative (e.g. compare_health_capacity for capacity-only questions), so routing relies on inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_housingCompare Housing Costs & AffordabilityARead-onlyIdempotentInspect
Housing cost and affordability across countries, built for remote workers. Returns monthly rent plus TWO ratios that together answer the real question: rent as a share of the LOCAL median wage (are locals priced out?) and as a share of YOUR remote income (can you afford it?). The gap between them - arbitrageGap, in percentage points - is the single number saying whether a place is cheap FOR YOU; pass remoteIncome to get it. Also returns price-to-income and price-to-rent as a percentage of each country's OWN long-run average (OECD), and mortgage rates (ECB, euro area only; absent elsewhere rather than estimated). IMPORTANT: those affordability percentages compare a country with its own history, NOT with other countries - 127 for Spain means 27% less affordable than Spain's norm, not 27% dearer than Germany. Every rent carries rentBasis: 'measured' where a real Eurostat city figure exists (Spain, Portugal, Switzerland only) or 'modelled' from the site's price basket, which understates housing by up to ~40% where housing has decoupled from the general price level. National averages; not financial advice.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | 'affordability' = rent as a share of your remote income, lowest first (falls back to raw rent when no income given); 'rent' = monthly rent; 'localBurden' = rent as a share of the local median wage; 'priceToIncome' = price-to-income vs long-run average. | affordability |
| flatM2 | No | Flat size in m² used to convert measured per-m² rents. Default 70; echoed back so the assumption is visible. | |
| country | No | Optional ISO 3166-1 alpha-2 code; echoes that country's row and rank. | |
| remoteIncome | No | Your monthly income in USD, earned remotely. Enables rentPctOfYourIncome and arbitrageGap; omit for the local-only view. | |
| maxRentPctOfIncome | No | Optional filter: keep only countries where rent is at most this percentage of your remote income. Requires remoteIncome. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| rows | No | |
| focus | No | |
| updated | No | |
| excluded | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent annotations: discloses data provenance (Eurostat, OECD, ECB), that euro-area-only mortgage rates are simply absent rather than estimated, that 'modelled' rent understates housing by up to ~40%, that percentages are country-relative not cross-country, and a 'not financial advice' disclaimer. This is exactly the kind of 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: the core value proposition and the gap metric come first, with caveats (OECD interpretation, rentBasis, modelled understatement) following. Each sentence adds interpretive value, though the block is long enough that a reader must work to parse it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter, zero-required, output-schema-backed tool, this is complete: it covers what is returned, how the key derived metric is produced, the data sources, and the interpretation traps. Nothing an agent needs to call or interpret it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 real meaning: it explains what `remoteIncome` unlocks (`rentPctOfYourIncome`, `arbitrageGap`) and clarifies that the affordability ratios are self-referential. It doesn't restate every field, which is appropriate given the schema already covers them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('housing cost and affordability across countries') and carves out a niche against siblings like compare_food_cost and compare_total_cost by naming the exact question it answers (local burden vs. remote-income affordability and the `arbitrageGap`). An agent can distinguish it 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear conditional usage guidance for the key parameter ('pass `remoteIncome` to get it'), distinguishing the local-only view from the personal-affordability view. It never explicitly names an alternative sibling tool or a when-not-to-use condition, so it stops 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.
compare_inflationInflation, interest and real rates by countryARead-onlyIdempotentInspect
What money earns or loses in real terms. Given countries (two or more ISO alpha-2 codes), returns side by side: consumer-price inflation (World Bank, latest annual, plus the IMF's monthly year-on-year figure where available), the central-bank policy rate (BIS, newest month; the ECB's single rate for euro-area members, flagged viaEuroArea), deposit and lending rates (World Bank, where published), and the real rates the engine computes from them by the exact Fisher relation — only when the nominal rate and the inflation figure are within a year of each other. Without countries, ranks the 41-country spine by one metric. A country missing a metric lacks the key and is dropped from a ranking, never scored 0. Real rates are ex post (last year's inflation), not expectations; a projection at the latest rate is flat, not a forecast.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Ranking direction. Ignored when `countries` is given. | highest |
| limit | No | Return at most this many countries in a ranking. | |
| metric | No | Ranking metric. Ignored when `countries` is given. | inflation |
| countries | No | Comma-separated ISO alpha-2 codes, two or more (e.g. "GB,DE,TR"). Omit to get a ranking instead. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| rows | No | |
| metric | No | |
| caveats | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/closed-world, and the description adds substantial beyond-annotation context: data sources (World Bank, IMF, BIS, ECB viaEuroArea flag), the Fisher-relation constraint requiring nominal and inflation within a year, the ex-post (not expectation) nature of real rates, and the flat-not-forecast projection caveat.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with a plain-language framing sentence, then dense, information-bearing detail on sources, computation rules and caveats. Long but nearly every clause carries meaning, so no serious waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 isn't needed. The description nevertheless covers both invocation modes, source hierarchy, the computation guard, and the drop/ranking semantics — everything an agent needs to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 the ranking universe ('41-country spine') and the important drop policy ('missing a metric lacks the key and is dropped from a ranking, never scored 0'), but the core parameter semantics (codes, ignored params) largely restate the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('real rates... returns side by side: consumer-price inflation, policy rate, deposit and lending rates') and is unmistakable against siblings like compare_tax_rates or calculate_ppp. An agent knows exactly what this returns 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly describes the two modes: with `countries` (two or more) it returns side-by-side comparison; omitting `countries` ranks the 41-country spine by one `metric`. It also states that `sort`/`metric` are ignored in comparison mode. No sibling alternative is named, keeping it 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.
compare_occupation_payMeasured pay by occupation (ILO), and the gender gap in eachARead-onlyIdempotentInspect
MEASURED gross monthly earnings of employees by ISCO-08 major occupation group, from ILOSTAT — median and mean, in USD, PPP dollars and local currency, for 35 countries (a median is published for most of them). This is the site's only measured wage series; calculate_wage_bands is MODELLED, and the two are not interchangeable. Each row also carries the female-vs-male pay gap for that occupation (positive means women earn less; negative values are real and are kept) and where the occupation's median sits on the country's modelled national wage ladder. Employees only — excludes the self-employed and informal workers, which is why these diverge most from GNI-derived estimates in countries with large informal sectors. Before tax. The ten ISCO-08 major groups are broad families of work, not job titles: one group covers a surgeon and a junior developer alike. Countries with no ILO data return NO_DATA rather than a modelled substitute.
| Name | Required | Description | Default |
|---|---|---|---|
| country | Yes | ISO 3166-1 alpha-2 country code (case-insensitive). | |
| occupation | No | Narrow the response to one ISCO-08 major group. Omit for the whole table. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| rows | No | |
| year | No | ILO reference year — one year across every occupation in the country. |
| basis | No | Always 'measured' on success. |
| country | No | |
| modelRatio | No | measured / modelled for the country. Above 1: the model understates local pay. |
| measuredMedianMonthlyUsd | No | |
| modelledMedianMonthlyUsd | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only/idempotent safety profile, but the description adds real behavioral context beyond them: employees-only scope excluding self-employed and informal workers, pre-tax basis, the sign convention for the gender gap (negative values kept), and the NO_DATA fallback. This is unusually rich disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense and front-loaded: the core purpose, the sibling disambiguation, and the coverage caveats lead. It is longer than strictly necessary and could trim the informal-sector explanation, but nearly every sentence carries distinct decision-relevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 still supplies scope, metric units, caveats, and fallback behavior. 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the enum is self-documenting, so the baseline would be 3. The description goes further by warning that the ten ISCO-08 groups are broad families, not job titles ('one group covers a surgeon and a junior developer alike'), which meaningfully shapes how an agent interprets the occupation argument.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: measured gross monthly earnings of employees by ISCO-08 major group from ILOSTAT, with metric variants and country coverage. It explicitly distinguishes itself from calculate_wage_bands as the 'only measured wage series', so an agent can separate it from siblings without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the adjacent tool (calculate_wage_bands) and the exact condition that separates them ('MODELLED, and the two are not interchangeable'), and states that countries without ILO data return NO_DATA rather than a substitute. Use vs. alternatives is fully specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_pension_systemsState pension systems: retirement ages, replacement rates, years in retirement, by countryARead-onlyIdempotentInspect
What the state pension system looks like there, from OECD Pensions at a Glance (members and G20 partners, 33 of the 41 spine countries). Give country for one: normal retirement age now and for a 22-year-old entering today, by sex; net and gross replacement rates for a full-career average earner at 50/100/200% of the average wage under mandatory schemes; expected years after leaving work; the share of pensioners below half of median income; the average tax rate on an average pension; the old-age to working-age ratio and public pension spending; plus World Bank life expectancy and the 65+ share for all 41 — and WBL's statutory retirement age beside them, which stands alone for the eight countries OECD does not cover (no replacement rate is ever borrowed). Give countries (two or more) for a side-by-side, or neither for the spine ranked by metric. Projection rows (2060+) are excluded. A country missing a metric lacks the key and is dropped from a ranking, never scored 0. Published rules and modelled figures on the dates shown, for information only — entitlements depend on a person's record and consulates decide; every response says so first.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Ranking direction. Ignored otherwise. | highest |
| limit | No | Return at most this many countries in a ranking. | |
| metric | No | Ranking metric when neither `country` nor `countries` is given. | netReplacement100 |
| country | No | One ISO alpha-2 code for the full profile (e.g. "DE"). | |
| countries | No | Comma-separated ISO alpha-2 codes, two or more, for a side-by-side. Ignored when `country` is given. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| rows | No | |
| metric | No | |
| caveats | No | |
| attribution | No | |
| replacement | No | |
| retirementAge | No | |
| statutoryRetirementAge | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only annotations, it discloses data provenance (OECD, World Bank, WBL), country coverage, projection exclusion, missing-metric handling, and that every response carries a disclaimer. These are substantial behavioral details an agent would not get from annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a dense single paragraph that lists many returned metrics already covered by the output schema, and it opens with an ambiguous "there" before giving the primary country/countries instruction. It is informative but not tightly front-loaded or appropriately trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity, output schema, and annotations, the description covers coverage limits, ranking behavior, missing data, projection exclusions, and the required disclaimer. An agent has enough context to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains each parameter. The description mostly repeats the country/countries/metric selection logic and adds little parameter-specific meaning for `sort` or `limit`, making 3 the appropriate baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as state pension system indicators by country and lists the specific metrics available. It does not explicitly distinguish itself from nearby siblings such as pension_abroad or retire_on_budget, so it falls 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit parameter-mode guidance: use `country` for one profile, `countries` for a side-by-side, or neither for a ranking by `metric`. It does not name alternative tools or state when not to use this one, so it lacks full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_public_holidaysShared working days and public holidays by countryARead-onlyIdempotentInspect
Two questions in one. Given countries (two or more), returns the working days those places genuinely SHARE in a year — weekdays on which nobody is on a public holiday — which is the number a distributed team actually plans against and the half of the question timezone-overlap tools never answer: a London/Tokyo team loses roughly three working weeks a year to non-overlapping holidays. Without countries, ranks countries by nationwide public holidays. Weekend holidays are excluded (they cost nobody a working day) and regional holidays are counted separately from national ones. Covers 204 countries, but NOT India, Thailand, Malaysia, the UAE or Saudi Arabia — those return NO_DATA rather than an empty calendar, because “no data” and “no holidays” are opposite claims.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Ranking direction. Ignored when `countries` is given. | most |
| year | No | Calendar year. Defaults to the first year in the dataset. | |
| limit | No | Return at most this many countries in a ranking. | |
| countries | No | Comma-separated ISO alpha-2 codes, two or more (e.g. "GB,JP"). Omit to get a ranking instead of an overlap. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| rows | No | |
| year | No | |
| lostDays | No | |
| weekdays | No | |
| countries | No | |
| lostDates | No | |
| sharedWorkingDays | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safe-read profile (readOnly, idempotent, non-destructive), and the description still adds substantial behavior: 204-country coverage with named exclusions, NO_DATA distinct from an empty calendar, weekend holidays excluded, and regional counted separately from national. This is exactly the kind of context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with 'Two questions in one' and organized by mode, but padded with persuasive framing ('the number a distributed team actually plans against', the London/Tokyo anecdote) that adds flavor more than invocation guidance. Still readable and mostly earning its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 covers the remaining gaps: both modes, coverage limits, edge-case semantics (NO_DATA vs empty), and holiday-counting rules. 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.
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 beyond the schema by requiring 'two or more' codes for the overlap mode and by explaining the NO_DATA outcome for unsupported country codes — a parameter-value behavior the schema does not state.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific dual-mode verb+resource: shared working days across given countries, or a ranked table of public holidays when countries is omitted. An agent can immediately distinguish this from sibling tools like compare_working_time or find_meeting_slot because the description frames it as the holiday-overlap half that timezone tools miss.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear when-to-use conditions for both modes (with countries = overlap; without = ranking) and contrasts the tool against timezone-overlap tools. It does not name a specific sibling tool to use instead, so the routing guidance is contextual rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_safety_statsHomicide rate, PM2.5 and disaster risk by countryARead-onlyIdempotentInspect
Measured danger once there. Given countries (two or more ISO alpha-2 codes), returns side by side: intentional homicides per 100,000 (UNODC via World Bank WDI) and mean annual PM2.5 exposure in µg/m³ (WDI), each with its observation year, and the INFORM disaster-risk score and band composed for context. Without countries, ranks the 41-country spine by one metric (homicide default, pm25), lowest first. Only observations at or after the newest WDI vintage are held; a country whose newest figure is older lacks the key and is dropped from the ranking, never scored 0 — the UK's newest homicide observation predates the floor, so it has no homicide figure here. Homicide counts intentional killings only, not petty crime or road deaths; PM2.5 is a national population-weighted mean. Official sources on the dates shown, for information only — conditions change; check the source before travelling. Every response says so first.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Ranking direction. Ignored when `countries` is given. | lowest |
| limit | No | Return at most this many countries in a ranking. | |
| metric | No | Ranking metric. Ignored when `countries` is given. | homicide |
| countries | No | Comma-separated ISO alpha-2 codes, two or more (e.g. "DE,BR,ZA"). Omit to get a ranking instead. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| rows | No | |
| metric | No | |
| caveats | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/openWorld=false, and the description goes well beyond them: the vintage floor rule, that a stale country is dropped rather than scored 0, the concrete UK example, and what each metric actually measures ('intentional killings only, not petty crime or road deaths'; population-weighted PM2.5). It even discloses that the disclaimer leads every response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The two operational modes are front-loaded and each sentence carries information (sources, floor rule, example, metric definitions). It is dense and slightly overstuffed with the closing disclaimer/liability sentence, which is a mild cost against an otherwise efficient structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema, annotations covering the safety profile, and 100% schema coverage, the description fills every remaining gap an agent needs: when countries are dropped, what the metrics mean, and how the two modes behave. Nothing required 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema carries the parameter syntax (baseline 3). The description still adds real meaning beyond it: the ranking is over the '41-country spine', default direction is lowest-first, and it clarifies the two-mode split between `countries` and `metric`/`sort`/`limit`.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (returns side by side / ranks) with concrete resources: intentional homicides per 100,000, PM2.5 exposure, and INFORM disaster-risk score and band. The framing 'Measured danger once there' plus the named data sources distinguish it from siblings like compare_country_risk or compare_climate 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly branches usage: pass `countries` (two or more ISO alpha-2 codes) for a side-by-side comparison, omit it to get a ranking by one metric. That is clear context for both modes, but no sibling alternative is ever named (e.g. compare_country_risk), so the 'vs alternatives' half 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.
compare_tax_burdenHours on tax compliance, VAT refund weeks and the rate firms report paying, by countryARead-onlyIdempotentInspect
How much work paying tax is, from World Bank B-READY's Taxation topic (firm surveys in the largest business city): median hours spent on tax compliance a year, the share of firms filing and paying electronically, weeks to a final audit report and to a VAT refund, the share citing a too-long refund process, the share of social-security taxes in labour cost, and the effective income-based rate firms REPORT paying — which is neither the statutory rate (Rules hub) nor OECD's modelled effective rate (Business hub's tax tab), and the caveat keeps the three apart. 22 of the 41 spine countries; outside the cohort is NO_DATA. country, countries, or a ranking by metric (complianceHours default; vatRefundWeeks, auditWeeks, reportedEffectiveRatePct), lowest first unless sort=highest. Published rates and facts, for information only — not tax or legal advice; every response says so first.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | lowest | |
| limit | No | Return at most this many countries. | |
| metric | No | complianceHours | |
| country | No | One ISO alpha-2 code. | |
| countries | No | Comma-separated ISO alpha-2 codes, two or more, for a side-by-side. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| rows | No | |
| metric | No | |
| caveats | No | |
| attribution | No | |
| vatRefundWeeks | No | |
| complianceHours | No | |
| reportedEffectiveRatePct | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, non-destructive, idempotent, closed-world), and the description adds genuinely new behaviour: coverage is 22 of the 41 spine countries, anything outside that cohort returns NO_DATA, and every response leads with a 'not tax or legal advice' disclaimer. That coverage-limit and disclaimer disclosure is exactly the kind of trait 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is long and written as a single dense run-on, but it is well front-loaded — the metrics list and the sibling-disambiguation caveat lead, with the coverage and disclaimer qualifiers trailing. Nearly every clause adds decision-relevant information, though the metric enumeration could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-param, read-only comparison tool with an output schema, the description covers purpose, metric vocabulary, sort direction, coverage limits (22 of 41, NO_DATA outside), and the mandatory disclaimer — nothing an agent needs to call it correctly is missing. Return-value formatting is correctly left to the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 60%, so the description usefully compensates by naming the `metric` enum values and its default, explaining `sort` direction semantics ('lowest first unless sort=highest'), and clarifying that `country` takes one code while `countries` is for a side-by-side. Only `limit` is left entirely to the schema, and metric-specific meanings are spelled out rather than left implicit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It names a specific resource (World Bank B-READY Taxation firm-survey data) and enumerates exactly what it reports: compliance hours, e-filing share, audit/VAT-refund weeks, refund-process complaints, social-security share of labour cost, and the reported effective rate. It goes further than the title by distinguishing the reported rate from the statutory rate and from OECD's modelled effective rate, which separates it cleanly from siblings like compare_tax_rates and compare_effective_tax.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'which is neither the statutory rate ... nor OECD's modelled effective rate ... the caveat keeps the three apart' passage gives clear disambiguation guidance for choosing among the tax siblings, and the NO_DATA note sets scope. However, it names the alternatives descriptively (Rules hub, Business hub) rather than by tool name, so an agent must map them itself; there is no explicit when-not-to-use statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_tax_ratesStatutory corporate and top income-tax rates by countryARead-onlyIdempotentInspect
Statutory tax schedules from the OECD, compared or ranked. Given countries (two or more ISO alpha-2 codes), returns side by side the corporate income-tax rate (combined central plus average sub-national, central only, and a small-business rate where one exists; OECD Corporate Tax Statistics, all 41 spine countries) and, for OECD members, the top personal income-tax rate with the earnings threshold at which it starts as a multiple of the average wage, plus the marginal rate with employee social contributions at that point (OECD Tax Database, 26 of the spine). Without countries, ranks the spine by one metric. A country OECD's PIT flow does not cover has no personal block and is dropped from a PIT ranking, never scored 0. Rates are statutory, not effective: incentives, surtaxes and special regimes are outside the data, and this does not replace the blended take-home profiles behind compare_contract. Statutory figures for information only — not legal or tax advice; every response says so first.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Ranking direction. Ignored when `countries` is given. | highest |
| limit | No | Return at most this many countries in a ranking. | |
| metric | No | Ranking metric. Ignored when `countries` is given. | corporateCombined |
| countries | No | Comma-separated ISO alpha-2 codes, two or more (e.g. "DE,IE,TH"). Omit to get a ranking instead. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| rows | No | |
| metric | No | |
| caveats | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this read-only/idempotent, and the description goes well beyond them: it discloses that OECD-uncovered countries have no `personal` block, are dropped from PIT rankings and are never scored 0, that figures are statutory not effective, and that a disclaimer is prepended to every response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense paragraph that leads with the core purpose and then layers scope, fallbacks and caveats. Nearly every clause carries information, though the closing disclaimer sentence is somewhat expendable for tool-selection purposes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only multi-metric comparison tool with a full schema and an output schema, the description covers the invocation branch, the data limits, edge-case country handling and caveats. 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.
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 real meaning: it expands what the `metric` options actually measure (combined vs. central vs. small-business corporate rate; PIT top, threshold as a multiple of average wage, marginal rate including employee social contributions) and clarifies `sort`/`metric` are ignored when `countries` is given.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — statutory corporate and top personal income-tax rates compared or ranked by country — and names the source datasets and country scope. An agent can tell it apart from compare_effective_tax and compare_tax_burden 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly branches on the presence of `countries` (side-by-side comparison vs. ranking) and routes the agent away from alternatives by stating this is not the effective/blended take-home data behind `compare_contract`. It also names the exclusion cases (non-OECD-PIT countries).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_total_costTotal Cost of Living vs Your IncomeARead-onlyIdempotentInspect
What a month actually costs in each of 41 countries on a stated income, and what is left over. Sums four lines that are kept from overlapping: rent (measured Eurostat city rents, HUD Fair Market Rents, or the price basket where neither covers a country), the everyday basket EXCLUDING rent (the basket normally contains rent — roughly half of it — so adding a separate housing figure to the full basket would overstate a total by ~60%), out-of-pocket healthcare, and income tax plus employee social contributions on that income. VAT is already inside the basket prices (purchasing-power data derives from surveyed purchaser prices) and is therefore never added. Tax assumes you become tax-resident and are taxed locally, single filer, no deductions; special regimes such as Portugal's IFICI are reported separately where they would be cheaper. Estimates for comparison — not a quote and not tax advice.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Ranking. 'remaining' = most left over first; 'share' = smallest share of your income. | total |
| income | Yes | Monthly income in USD. Required — the tool is a subtraction. | |
| country | No | ISO 3166-1 alpha-2; echoes that country's row and rank as `focus`. | |
| maxPctOfIncome | No | Keep only countries whose total is at or below this share of income (%). |
TDQS
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 goes well beyond them: it discloses the four summed lines, why rent is excluded from the basket (double-counting caveat), that VAT is already embedded and never added, and the tax model assumptions (tax-resident, single filer, no deductions, special regimes like IFICI reported separately). This is exactly the extra behavioral context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then method. The prose is dense and largely earns its place through the double-counting and tax-assumption caveats, though a few clauses (e.g., the VAT parenthetical) are verbose enough to slow scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With four parameters, no output schema, and a comparative calculation, the description supplies enough methodological grounding to call it safely. It stops short of describing the returned row/ranking structure, which is the one remaining gap given there is no output schema to cover it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so sort, income, country, and maxPctOfIncome are fully documented in the schema itself (including the 'remaining' vs 'share' enum semantics). The description adds no parameter-level syntax or constraints beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('what a month actually costs in each of 41 countries on a stated income, and what is left over') with clear scope. It is immediately distinguishable from siblings like compare_housing, compare_food_cost, or compare_tax_burden, which each cover only one of the four lines this tool sums.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'Estimates for comparison — not a quote and not tax advice' and by the methodological framing, but no explicit when-to-use/when-not guidance or named alternatives are given. An agent can infer intent but must guess whether compare_effective_tax or compare_tax_burden is the better pick for tax-only questions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_trade_customsDays to clear customs and cost to comply with trade rules, by countryARead-onlyIdempotentInspect
How long goods take to clear the border and what compliance costs, from World Bank B-READY's International Trade topic (firm-survey averages in the largest business city): days for exported and imported goods to clear all border agencies, the typical cost of complying with export and import requirements as a share of goods value, and the share of firms exporting by parcel. B-READY is a rotating cohort — 22 of the 41 spine countries in the 2025 edition — and a country outside it is NO_DATA, never a borrowed figure. country, countries, or a ranking by metric (importDays default; exportDays, importCostPct, exportCostPct), lowest first unless sort=highest. Published rates and facts, for information only — not tax, legal or customs advice; every response says so first.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | lowest | |
| limit | No | Return at most this many countries. | |
| metric | No | importDays | |
| country | No | One ISO alpha-2 code. | |
| countries | No | Comma-separated ISO alpha-2 codes, two or more, for a side-by-side. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| rows | No | |
| metric | No | |
| caveats | No | |
| exportDays | No | |
| importDays | No | |
| attribution | No | |
| exportCostPct | No | |
| importCostPct | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/closed-world, so the safety profile is covered. The description adds genuinely useful behavioral context beyond that: B-READY is a rotating cohort (22 of 41 spine countries in 2025), out-of-cohort countries return NO_DATA rather than a borrowed figure, and every response leads with a not-advice disclaimer.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded — the core purpose and data source come first, then coverage caveat, then query modes, then disclaimer. Every sentence carries information, though the single long paragraph could be trimmed slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists so return format needn't be restated, and the description covers the data-coverage limits, ranking behavior, and disclaimer caveat. Combined with the annotations, an agent has what it needs; only minor implicit points (e.g., behavior of `limit`) remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 60%, and the description compensates well: it enumerates the metric options, states the default (importDays), and explains the ordering semantics of `sort` (lowest first, `highest` to reverse). It also clarifies that `countries` is for a side-by-side; only `limit` is left to its own schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (compare customs clearance days and compliance costs by country) and pins the exact source (World Bank B-READY International Trade topic) plus the four metric names. An agent can tell this apart from generic siblings like compare_countries 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear invocation patterns: fetch one country via `country`, a side-by-side via `countries`, or a ranked list by `metric` (default importDays, ascending unless `sort=highest`). It stops short of naming which sibling to use instead (e.g., compare_countries), so it is clear context without explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_vatVAT and GST rates by country, with the authority page each was read fromARead-onlyIdempotentInspect
Standard and reduced VAT/GST rates for the 41-country spine, hand-curated from each national tax authority's published page and served with that page's URL and the date it was checked, so a figure can be verified rather than trusted. Given countries (two or more ISO alpha-2 codes), returns each country's tax kind and name, standard rate, reduced rates where the authority lists them, registration threshold where known, and its source; an entry read from a secondary source because the authority's page could not be fetched is marked confidence: "secondary". Without countries, ranks standard rates lowest first. Countries with no single national rate — the US (state sales taxes), Brazil (state and federal taxes in transition to a dual VAT) and Malaysia (sales and service tax) — are described by kind, excluded from the ranking and named in excluded, never given 0%. Reviewed at least yearly; not a live feed. Statutory figures for information only — not legal or tax advice; every response says so first.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Ranking direction. Ignored when `countries` is given. | lowest |
| limit | No | Return at most this many countries in a ranking. | |
| countries | No | Comma-separated ISO alpha-2 codes, two or more (e.g. "GB,US,DE"). Omit to get a ranking instead. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| rows | No | |
| caveats | No | |
| excluded | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already confirm this is a read-only, idempotent, non-destructive, closed-world operation. The description adds substantial behavioral context beyond that: hand-curated provenance with source URL and checked date, a `confidence: "secondary"` marker, yearly review rather than live feed, and an explicit legal-information disclaimer.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but front-loads the core purpose and packs in relevant caveats for a tax-data tool: confidence marking, exclusions, review cadence, and disclaimer. Most sentences earn their place, though the volume of caveats makes it less tight than a maximal score would require.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and annotations cover safety, the description still fills the important contextual gaps: how ranking differs from country lookup, how excluded countries are handled, how secondary sources are flagged, and how often data is refreshed. An agent has enough information to invoke and interpret the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the description largely restates the schema's own semantics — comma-separated ISO alpha-2 codes, two or more, omit for ranking, and sort is ignored when countries are supplied. It ties parameters to output behavior well, but does not add much syntax or meaning beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (compare/rank) and resource (standard and reduced VAT/GST rates by country), with the 41-country spine and source provenance made explicit. It is clear what the tool does, but it does not distinguish itself from nearby siblings such as compare_tax_rates or compare_tax_burden, so it falls 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly describes the two usage modes: pass `countries` to get per-country rates, or omit it to rank standard rates. It also explains how countries without a single national rate are excluded and named rather than assigned a 0%. However, it does not explicitly state when to choose this tool over sibling alternatives, so a 5 is not warranted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_working_timeWorking hours and paid parental leave, by countryARead-onlyIdempotentInspect
Two questions in one. Given countries (two or more ISO alpha-2 codes), returns side by side: mean weekly hours actually worked per employed person (ILOSTAT, newest year from 2023), average annual hours actually worked (OECD, members only), and the paid leave the law gives mothers and fathers in calendar days with who pays (World Bank Women, Business and the Law 2026). Without countries, ranks the 41-country spine by one metric — weeklyHours, annualHours, maternityDays or paternityDays; sort=fewest inverts. A country missing a metric lacks the key, and is dropped from a ranking rather than scored zero. OECD's annual-hours series is NOT comparable across countries, by OECD's own statement — the wording travels with every response that carries the figure. Weekly hours average full- and part-time workers together. Leave is what the law provides, not take-up; a legal score below 1 marks a partial provision. Statutory minimum ANNUAL leave is deliberately absent: no citable structured source exists.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Ranking direction. Ignored when `countries` is given. | most |
| limit | No | Return at most this many countries in a ranking. | |
| metric | No | Ranking metric. Ignored when `countries` is given. | weeklyHours |
| countries | No | Comma-separated ISO alpha-2 codes, two or more (e.g. "DE,US,TH"). Omit to get a ranking instead. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| rows | No | |
| metric | No | |
| caveats | No | |
| attribution | No |
TDQS
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), so the description goes further with genuinely useful behavioral context: data sources and vintage (ILOSTAT 2023+, OECD members only, World Bank WBL 2026), the OECD non-comparability caveat, drop-from-ranking semantics, legal-score-below-1 meaning, and an explicit statement about a deliberately absent metric.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded, leading with the two-mode framing before details. Length is justified by the surface area, though the closing sentence about absent statutory annual leave is a nice-to-know caveat rather than an invocation-critical fact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return formatting need not be described, and the description covers both invocation modes, edge cases, and data caveats. Required-parameter count is zero, so the optional-mode switching is fully explained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 earns above that by explaining what each metric represents, that `sort=fewest` inverts, and that `sort`/`metric` are ignored when `countries` is given, adding meaning beyond the enum labels.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific dual-mode verb+resource: side-by-side comparison of weekly hours, annual hours, and paid parental leave for named countries, or a ranked list without them. An agent can distinguish this from near siblings like compare_public_holidays or employment_rules 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly splits the two call modes: pass `countries` for a side-by-side, omit it to rank the 41-country spine by a named metric with `sort` inverting direction. It also states defaults implicitly (metric weeklyHours) and the exclusion behavior (a country missing a metric is dropped, not scored zero), leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
country_dossierOne country, every hub: the headline figuresARead-onlyIdempotentInspect
The three to six headline figures each hub owns for one country, in one call: price level vs the US and datasets covering it (compare); monthly essentials, health out-of-pocket spending and — with income — what is left after costs (costs); modelled median and minimum wage, ILOSTAT measured median, pension replacement rate (earn); safety and healthcare-access scores, rule of law, disaster risk, comfortable days, tax-residency threshold, passport rank, nomad-visa programmes (move); public holidays, latency and download speed, employer contribution loading, weekly hours, paid maternity leave (work); inflation, policy rate, banked adults, remittance corridors surveyed (money); combined corporate tax rate, top income-tax rate and where it starts, standard VAT rate (absent for the US — state sales taxes are not a 0% VAT), the Women, Business and the Law index and retirement ages for men and women (rules); FCDO and US State Department advice levels, the yellow-fever certificate position, homicide rate and PM2.5 exposure with their years (safety); retirement ages for men and women (OECD, else WBL), the net replacement rate, life expectancy and the kind of retiree visa (retire). Effective average corporate tax rate, standard withholding on dividends, days to register a company (absent outside the B-READY cohort) and the kind of founder visa (business). Since 5 Sep 2026 the sections also carry doctors per 10,000 (safety), the couple's net childcare cost as a share of income (costs), days for imports to clear customs and hours on tax compliance (business), the E-Government index (work), and the foreign-ownership band for property and the kind of student visa (move) — each absent where its source does not cover the country. Every figure carries the id of the source that produced it, tools names the MCP tool to call for detail per section, and sources lists only what was actually included. A section or figure the site has no data for is ABSENT, never null — Thailand has no OECD employer rate and no holiday calendar, so its work section lacks those keys. About 5-8 KB. Built for agents that would otherwise call a dozen tools to answer "tell me about moving to Portugal". From 13 Sep 2026 rules also carries minAnnualLeaveDays and noticeEmployerMinWeeks (tool employment_rules) and safety carries drivesOn and bacLimitPct (tool driving_rules), each absent where the register sets none.
| Name | Required | Description | Default |
|---|---|---|---|
| income | No | Gross monthly income in USD. Optional; unlocks the total-cost figures. | |
| country | Yes | ISO alpha-2 code (e.g. "PT"). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| tools | No | |
| country | No | |
| sources | No | |
| updated | No | |
| sections | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it discloses crucial behavioral traits: absent data is omitted rather than null, every figure carries a source id, `tools` names the per-section detail tool, and `sources` lists only included material. It also states output size, date-based additions, and concrete absence examples. There is no contradiction with the read-only/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.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with a useful summary, but then becomes an extremely dense run-on enumeration of sections, fields, and date-specific additions. Much of that return-value detail is already available through the output schema, so the description is longer than necessary and harder to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's breadth, the description is complete: it covers what is returned, how absences work, optional income effects, provenance, and the post-2026 additions. With an output schema present, all remaining gaps are fully addressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented in the schema. The description reinforces that `income` unlocks total-cost figures but adds little syntax or format meaning beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a precise resource and scope: the three-to-six headline figures each hub owns for one country, returned in a single call. It enumerates every topic section covered, making it unmistakable as an aggregate overview tool distinct from single-topic siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear use case — agents that would otherwise call a dozen tools to answer broad questions like 'tell me about moving to Portugal' — and implies that per-section detail should be fetched through the MCP tools named in the `tools` field. It does not explicitly name when to prefer specific comparison siblings, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
driving_rulesRoad rules before you drive — side, speed limits, alcohol limit, equipment, IDPARead-onlyIdempotentInspect
What a visitor needs before driving in each of the 41 spine countries: which side of the road, the national default urban, rural and motorway speed limits in the unit signed there (speedUnit km/h or mph, never converted), the blood-alcohol limit for ordinary drivers in g/100 ml (bacNote for novice and professional limits; 0 is a real zero-tolerance rule), equipment the law requires carried from a fixed vocabulary, and whether an International Driving Permit is needed (idpRequired, from GOV.UK's per-country table for a UK photocard licence; absent where that table is silent) — a hand-curated register with the authority's page and check date per row, added 13 Sep 2026; secondary-sourced entries are marked confidence: "secondary". A limit not set nationally is ABSENT, never zero (Germany's motorways, US and Canadian limits). country for one entry, countries for a side-by-side; without either, ranks by metric (speedMotorway default, speedUrban, speedRural, bacLimitPct), highest first unless sort=lowest, optionally filtered by drivesOn and idpRequired; mph limits are ordered by their km/h equivalent for the sort only. For information only; conditions change — every response says so first.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Highest first (default) or lowest first. | |
| limit | No | Return at most this many countries. | |
| metric | No | Ranking metric when neither country nor countries is given. | |
| country | No | One ISO alpha-2 code. | |
| drivesOn | No | Restrict the ranking to one side of the road. | |
| countries | No | Comma-separated ISO alpha-2 codes, two or more, for a side-by-side. | |
| idpRequired | No | Restrict the ranking by whether an International Driving Permit is needed. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| rows | No | |
| source | No | |
| caveats | No | |
| drivesOn | No | |
| excluded | No | |
| checkedOn | No | |
| speedUnit | No | |
| speedRural | No | |
| speedUrban | No | |
| attribution | No | |
| bacLimitPct | No | |
| idpRequired | No | |
| speedMotorway | No | |
| requiredEquipment | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/closed-world, and the description adds substantial behavior on top: provenance (GOV.UK per-country table, authority page + check date, `confidence: "secondary"`), the critical absent-vs-zero rule, that mph limits sort by km/h equivalent, and that every response carries a disclaimer. This is more disclosure than the annotations could carry alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with what a visitor gets, but the entire definition is a single dense paragraph of roughly 180 words packed with semicolons and parentheticals, which is hard to scan for mode selection. Everything is arguably load-bearing, yet the wall-of-text form hurts retrieval and reading.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 needn't be re-explained; the description instead covers scope (41 countries), data provenance, staleness caveat, and the absent-vs-zero edge case. 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.
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 real meaning: `speedUnit` is the unit signed locally and never converted, `bacNote` holds novice/professional limits while 0 is a genuine zero-tolerance rule, `idpRequired` reflects a UK-photocard GOV.UK table and is absent where silent, and ranking/sort semantics for mph values. It stops short of 5 only because some schema-documented params (e.g. `limit`) get no extra color.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (driving rules) and enumerates exactly what it returns: side of road, urban/rural/motorway speed limits, BAC limit, required equipment, IDP — for a named set of 41 countries. This is unmistakably distinct from siblings like travel_advice or legal_profile.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Spells out the three invocation modes clearly: `country` for one entry, `countries` for a side-by-side, and neither for a ranked list with `metric`, `sort`, and optional `drivesOn`/`idpRequired` filters. It never names an alternative sibling tool or a when-not-to-use condition, so it stops 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.
employment_rulesStatutory employment floors — annual leave, notice, probation, weekly hoursARead-onlyIdempotentInspect
The minimums a job's law sets in each of the 41 spine countries: paid annual leave in days with its basis (working or calendar, never converted), the minimum notice an employer and an employee must give in weeks (noticeNote where it rises with tenure), the probation ceiling in months and the ordinary weekly-hours ceiling — a hand-curated register with the labour authority's page and check date per row, added 13 Sep 2026; an entry read from secondary reporting because the official page could not be fetched is marked confidence: "secondary". A fact the law does not set is ABSENT, never zero (the US sets no paid leave, notice or hours ceiling); federal countries carry the federal floor. country for one entry, countries for a side-by-side; without either, ranks by metric (minAnnualLeaveDays default, noticeEmployerMinWeeks, probationMaxMonths, maxWeeklyHours), most first unless sort=fewest, with the countries that set no figure in excluded. Statutory floors only — contracts and collective agreements usually give more. For information only — not legal advice; every response says so first.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Most first (default) or fewest first. | |
| limit | No | Return at most this many countries. | |
| metric | No | Ranking metric when neither country nor countries is given. | |
| country | No | One ISO alpha-2 code. | |
| countries | No | Comma-separated ISO alpha-2 codes, two or more, for a side-by-side. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| rows | No | |
| basis | No | |
| source | No | |
| caveats | No | |
| excluded | No | |
| checkedOn | No | |
| attribution | No | |
| maxWeeklyHours | No | |
| minAnnualLeaveDays | No | |
| probationMaxMonths | No | |
| noticeEmployeeMinWeeks | No | |
| noticeEmployerMinWeeks | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only/idempotent, but the description adds substantial extra context: hand-curated provenance with authority page and check date, the `confidence: "secondary"` marker for unfetchable official pages, the ABSENT-never-zero convention, federal-floor handling, and the mandatory not-legal-advice preamble in every response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded and almost every clause carries decision-relevant information. It is a single long paragraph, which slightly hurts scannability, but there is little genuine filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-param, output-schema-backed reference tool, the description covers selection modes, defaults, absence semantics, provenance and confidence, and disclaimers. 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so baseline is 3, but the description adds real meaning the schema does not: singular vs plural country semantics, that annual leave days are never converted from their `basis`, that `noticeNote` rises with tenure, and how `excluded` is populated for countries with no figure.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (statutory employment floors across 41 countries) and enumerates the exact figures returned: annual leave with `basis`, employer/employee notice weeks, probation ceiling, weekly-hours ceiling. This clearly separates it from siblings like compare_working_time, compare_public_holidays and compare_contract.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the three invocation modes precisely — `country` for one entry, `countries` for a side-by-side, neither for a metric ranking with `sort` and `excluded` — plus the default metric. It also notes the scope limit ('Statutory floors only — contracts and collective agreements usually give more'), which effectively excludes contract-level questions, though it does not name a sibling to redirect to.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
estimate_employer_costEmployer cost of a hire, by countryARead-onlyIdempotentInspect
What a hire actually costs the employer: the gross wage plus the employer's own social security contributions at the rate OECD Taxing Wages publishes (single earner, no children, 100% of the average wage), applied as a flat rate — the figure employer-of-record services quote for a fee. Pass gross (annual USD) for your own figure; without it the wage is the pay-range midpoint for the occupation and seniority, and basis says whether that wage is measured (ILOSTAT) or modelled. Employee-side rates and OECD's tax wedge are returned for context and never applied. Without country, ranks the spine by employer contribution rate. Coverage is the 25 spine countries OECD measures; the other sixteen return NO_DATA, never a 0% rate (New Zealand's 0% is real: it has no employer contributions). Every response carries caveats — contribution ceilings, excluded schemes — and it is not payroll or legal advice.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Ranking direction. Ignored when `country` is given. | highest |
| gross | No | Gross annual wage in USD. When omitted, the pay-range midpoint is used. | |
| limit | No | Return at most this many countries in a ranking. | |
| country | No | ISO alpha-2 code (e.g. "DE"). Omit for a ranking. | |
| seniority | No | Seniority for the default wage (default `mid`). Ignored when `gross` is given. | |
| occupation | No | ISCO-08 major group id for the default wage (default `total`). Ignored when `gross` is given. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| oecd | No | |
| rows | No | |
| wage | No | |
| caveats | No | |
| country | No | |
| employee | No | |
| employer | No | |
| taxWedge | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond annotations: flat-rate application, basis measured vs modelled, employee-side rates returned but never applied, NO_DATA instead of 0% for uncovered countries, New Zealand's real 0%, caveats about ceilings/excluded schemes, and a not-payroll/legal-advice disclaimer. This is rich, non-contradictory disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded single paragraph; every sentence carries operational information (formula, defaults, coverage, caveats) with no filler. It could be split for readability but nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 6 optional parameters, output schema, and rich annotations, the description completes the picture: it explains the default wage logic, ranking behavior, coverage limits, NO_DATA semantics, and the contextual figures returned. Nothing an agent needs to call or interpret the tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already defines all six parameters including defaults and enum values. The description largely restates defaults (gross optional, midpoint fallback) and mentions `basis` (an output field) rather than adding new syntax or constraints, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (employer cost of a hire) and the exact formula (gross wage plus employer social security at the OECD rate), and distinguishes the figure from employee-side rates and tax wedge. However, it does not name or route against any sibling tool such as compare_total_cost, so sibling differentiation is implicit 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context (employer-of-record fee quoting) and parameter-conditioned behavior: pass gross for your own figure, omit country to rank, omit gross to use the pay-range midpoint. But it never states when to prefer this tool over a sibling like compare_tax_burden or employment_rules, nor any when-not condition beyond coverage limits.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
estimate_micro_costsEstimate everyday prices in two countries (Pint & Property Index)ARead-onlyIdempotentInspect
Estimates local prices for a 32-item everyday basket (rent, pint of beer, groceries, transport, gym, …) in two countries, derived as usPrice × pppIndex^elasticity — non-tradables like rent swing harder across borders than world-priced goods like petrol (Balassa-Samuelson-style model). Returns per-item prices in USD and local currency, category subtotals, and a single-person monthly budget rollup. Model estimates, not price quotes.
| Name | Required | Description | Default |
|---|---|---|---|
| base | Yes | ISO 3166-1 alpha-2 country code to compare FROM (case-insensitive). | |
| source | No | Optional dataset override. Defaults to the consumption basket (worldbank-cons) when it covers both countries, else consensus; the response echoes the source used. | |
| target | Yes | ISO 3166-1 alpha-2 country code to compare TO (must differ from base). | |
| baseCity | No | Optional city slug for the base side (sub-national cost adjustment, e.g. 'london'). Enables intra-country city comparisons like London vs Hull. | |
| targetCity | No | Optional city slug for the target side (e.g. 'hull'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| items | No | |
| source | No | |
| monthlyBudget | No | |
| categoryTotals | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive behavior, but the description adds meaningful context: the estimation formula (usPrice × pppIndex^elasticity), the Balassa-Samuelson rationale for non-tradables, and the critical caveat that these are 'model estimates, not price quotes.' It does not cover data recency or accuracy limitations, but the core behavioral traits are well disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the purpose and efficiently packs the formula, return summary, and caveat into a compact paragraph. It is dense but has no filler; the return summary is somewhat redundant given the output schema, but it still aids quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With annotations covering safety, a rich input schema, and an output schema, the description appropriately focuses on methodology and the 'model estimate' caveat. It is nearly complete for correct invocation, though it omits any when-to-use guidance relative to siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameter meaning is already fully documented. The description adds no parameter-specific details beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Estimates') and resource ('local prices for a 32-item everyday basket') in two countries, making the scope clear. It distinguishes itself from generic cost tools by naming the basket and the Pint & Property Index, but it does not explicitly contrast with siblings like compare_food_cost or compare_total_cost.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance or alternatives are provided. The description explains the model and output but never says when an agent should choose this tool over siblings such as compare_food_cost or calculate_ppp.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_country_fitWhich country fits me — ranked by your own weightsARead-onlyIdempotentInspect
Ranks countries by a fit score that blends the livability composite (internet speed, safety, healthcare access, air quality, English — measured, each with its own source year) with how far a monthly budget in USD goes against modelled essentials, using 0–10 weights per dimension (cost, internet, safety, healthcare, air, english; default 5 each). Region, budget and visa are FILTERS, never weights: region (a World Bank region name), withinBudget (default true; false keeps countries the budget does not cover), needsVisa (an eligible digital nomad visa on the budget). Each row carries the fit, quality and cost scores, modelled essentials, budget ratio and the nomad visa matched. A ranking of published figures against the weights given, not a recommendation; every response says so first.
| Name | Required | Description | Default |
|---|---|---|---|
| air | No | Weight 0–10 for air (default 5). | |
| cost | No | Weight 0–10 for cost (default 5). | |
| limit | No | Maximum rows (default 10). | |
| budget | No | Monthly budget in USD. | |
| region | No | Keep only countries in this World Bank region. | |
| safety | No | Weight 0–10 for safety (default 5). | |
| english | No | Weight 0–10 for english (default 5). | |
| internet | No | Weight 0–10 for internet (default 5). | |
| needsVisa | No | Keep only countries with a digital nomad visa the budget meets. | |
| healthcare | No | Weight 0–10 for healthcare (default 5). | |
| withinBudget | No | Keep only countries whose modelled essentials fit inside the budget. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| rows | No | |
| inputs | No | |
| caveats | No | |
| excluded | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds real value beyond that: measured indicators carry their own source years, the output rows include fit/quality/cost scores and a budget ratio, and every response opens with a non-recommendation disclaimer.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core ranking behaviour, then filters, then output shape; every clause carries information. It is dense enough that some of the weight defaults restate schema descriptions, costing a little efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter tool with full schema descriptions, an output schema and complete annotations, nothing material is missing — weighting model, filter semantics, output contents and the disclaimer behaviour are all covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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. The description still earns more by framing the weight-versus-filter distinction conceptually and clarifying that withinBudget=false is an inversion (not a no-op) and that requirements are evaluated against the budget — nuance the per-parameter strings only partly convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (ranks countries by a blended fit score) and pins down exactly which inputs are weights versus filters, which separates it from siblings like rank_livability, compare_countries and find_nomad_visas. An agent can tell what this tool returns 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear invocation context — weights default to 5 each, region/budget/visa are FILTERS, withinBudget=false keeps over-budget countries, needsVisa requires an eligible nomad visa the budget meets. It stops short of naming which sibling to use instead, so the routing guidance is implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_fire_locationsFind where a portfolio can fund early retirementARead-onlyIdempotentInspect
Geo-arbitrage FIRE analysis: given a portfolio and safe withdrawal rate, returns every country where the passive income sustains a lean ($32k US-equivalent/yr), comfortable ($55k), upper ($90k), or luxury ($150k) lifestyle at local purchasing-power prices — plus FIRE numbers per tier, nomad-visa income-floor eligibility, local-currency income, an SWR sensitivity band, (with savings/coast params) years until each country unlocks, and — where covered — a statePension overlay with the OECD net pension replacement rate (safety net from pension age; not subtracted from the FIRE numbers). Estimates only — not financial advice.
| Name | Required | Description | Default |
|---|---|---|---|
| swr | No | Safe withdrawal rate as fraction (0.04) or percent (4). Default 0.04. | |
| coast | No | Set to 1 for Coast-FIRE mode (project growth with zero further savings). | |
| return | No | Expected real annual return, fraction (0.05) or percent (5). Default 0.05. | |
| source | No | consensus | |
| savings | No | Monthly savings (USD) — enables the years-to-FIRE planner. | |
| portfolio | Yes | Total investable portfolio (USD). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| rows | No | |
| sensitivity | No | |
| annualIncome | No | |
| monthlyIncome | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior. The description adds substantial behavioral context beyond that: the returned country tiers, FIRE numbers per tier, visa income-floor eligibility, local-currency income, SWR sensitivity, years-to-unlock behavior with savings/coast, and the important caveat that the statePension overlay is not subtracted from FIRE numbers. It also clearly labels the output as estimates and not financial advice.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one long, dense sentence, but it is front-loaded with the core analysis and then enumerates output details. The parentheticals and nested clauses are justified by the tool's complexity, though the single-sentence structure is slightly heavy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 enumerate every return field, but it still explains the output shape, tier logic, overlay semantics, and estimates disclaimer. Parameter coverage is adequate for most inputs, and annotations cover the safety profile. It is nearly complete, with only minor gaps such as source/return guidance left to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high at 83%, so the structured schema already carries most parameter meaning. The description adds useful context for savings/coast ('years until each country unlocks') and references portfolio and SWR, but it does not explain source or return, leaving those to the schema. This fits the baseline 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific analysis and output: given a portfolio and SWR, it returns every country where passive income sustains defined lifestyle tiers. It is clearly a geo-arbitrage FIRE computation tool, but it does not explicitly contrast itself with adjacent siblings such as retire_on_budget, calculate_runway, or find_retirement_visas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the input framing ('given a portfolio and safe withdrawal rate') and the outputs described, so an agent can infer it is for FIRE location analysis. However, there is no explicit when-to-use guidance, no exclusions, and no named alternatives among the many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_founder_visasFounder, start-up and investor visas, matched to available fundsARead-onlyIdempotentInspect
Which of the 41 spine countries would let a founder in, and on what terms — a hand-curated register of founder/start-up routes, investor routes and kind: "none" entries, each with its one published money figure and what it is for (minFunds.basis: an investment to make, subsistence funds to hold, or funding raised from investors), whether an endorsing body must approve the project, duration, renewability, a path-to-residency flag, the official page it was read from and the check date; an entry read from secondary reporting because the official site could not be fetched is marked confidence: "secondary". Give funds with optional currency for a match: routes the funds reach, near misses within 25%, routes needing money raised from investors rather than held, routes with no published figure, exclusions with the reason, and the countries with no route. Or country for one entry, countries for a side-by-side. Thresholds are compared in USD at the site's FX snapshot; endorsement and business-plan tests are not modelled, and programmes pause and reprice. Published rates and facts on the dates shown, for information only — not tax, legal or immigration advice; every response says so first.
| Name | Required | Description | Default |
|---|---|---|---|
| funds | No | Funds available to commit, in `currency`. | |
| country | No | One ISO alpha-2 code for a single entry. | |
| currency | No | ISO 4217 code of `funds` (e.g. "GBP"). | USD |
| countries | No | Comma-separated ISO alpha-2 codes, two or more, for a side-by-side. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| kind | No | |
| none | No | |
| rows | No | |
| caveats | No | |
| qualify | No | |
| nearMiss | No | |
| attribution | No | |
| fundingRaised | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite annotations already covering the safety profile (readOnly, idempotent, non-destructive), the description adds substantial context: USD-normalized FX snapshot comparisons, a 25% near-miss band, exclusions-with-reasons, `confidence: "secondary"` provenance marking, an unmodeled endorsement/business-plan caveat, reprice/pause volatility, and a mandatory disclaimer prefix in every response. This is well beyond what the annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and the query modes are front-loaded ahead of the data-model detail, and the closing disclaimer is appropriately last. The prose is extremely dense — a long colon-and-semicolon chain — but nearly every clause carries actionable matching or provenance information rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, openWorld=false lookup with an output schema present, the description still explains the returned match categories, provenance flags and the legal-advice disclaimer, so an agent can both call it and interpret it correctly. Nothing material is left unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 genuinely enriches the parameters: it explains what a `funds` match returns (in-reach routes, near misses, no-figure routes, investor-raised vs held money, exclusions), what `country` and `countries` each do, and that `currency` is ISO 4217 relative to `funds`. It adds matching semantics the schema cannot express.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource+scope: matching founders/investors to the 41 spine countries' visa routes. It immediately distinguishes itself from the sibling visa tools (find_nomad_visas, find_retirement_visas, find_student_visas) by naming founder/start-up and investor routes explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It lays out the three invocation modes clearly — `funds` (plus optional `currency`) for a budget match, `country` for a single entry, `countries` for a side-by-side — so an agent knows which parameter drives which behavior. It never states when not to use it or points to a sibling alternative, so it stops short of explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_meeting_slotScore team timezone friction + find the meeting windowARead-onlyIdempotentInspect
Given a set of cities/timezones and each participant's local working hours, find the longest UTC window where everyone is simultaneously within their working day (DST-accurate), AND score the team's overall timezone friction. Returns the overlap in UTC and in each participant's local time (or null with the best partial coverage), plus a friction block: a 0–100 score, grade (Effortless/Manageable/Strained/Broken), daily shared hours, coverage, and the loneWolf — the member whose removal would free the most team overlap. Useful for scheduling and for hiring/team-composition decisions.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | Default working-window end, minutes from local midnight (default 1080 = 18:00). | |
| date | No | Reference date (ISO YYYY-MM-DD) for DST. Defaults to today (UTC). | |
| hours | No | Optional per-zone overrides aligned to `zones`, e.g. '540-1080;420-720'. | |
| start | No | Default working-window start, minutes from local midnight (default 540 = 09:00). | |
| zones | Yes | IANA timezone identifiers, e.g. 'Europe/London'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| overlap | No | |
| friction | No | |
| referenceDate | No | |
| bestPartialCount | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description adds genuinely useful behavior beyond that: DST accuracy, the null-with-best-partial-coverage fallback, and the friction grading semantics (0-100, grade bands, loneWolf).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first sentence, and the second sentence enumerates the return structure. It is dense but every clause carries information; the return-value enumeration is somewhat redundant given an output schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a rich output schema and full annotation coverage, the description supplies the DST and friction-scoring context an agent needs to call it correctly. The only real omission is sibling differentiation against plan_team_calendar.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter (zones, start, end, hours, date) is already documented in the schema. The description adds nothing about parameter syntax or formats beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource with dual scope: finding the longest DST-accurate UTC overlap window and scoring team timezone friction. It is highly specific, but it never names or distinguishes itself from the sibling plan_team_calendar, which an agent could easily confuse it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives usage context ('useful for scheduling and for hiring/team-composition decisions'), which implies when to reach for it, but offers no explicit when-not guidance and does not route the agent to or away from alternatives like plan_team_calendar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_nomad_visasMatch income to digital nomad visasARead-onlyIdempotentInspect
Digital-nomad visa Income Matcher: given a monthly remote income (any currency) and household size, computes each program's real income threshold (base plus its published per-dependent uplift) and returns the programs you qualify for plus the near misses just out of reach — with duration, renewability, tax notes and official source URLs. Curated summaries — verify with the official source before applying.
| Name | Required | Description | Default |
|---|---|---|---|
| income | No | Your gross monthly income (in `currency`, default USD). | |
| children | No | Number of dependent children (each adds the program's child uplift). | |
| currency | No | ISO currency code for `income` (e.g. EUR, GBP, INR). Defaults to USD. | |
| partners | No | 1 if bringing a partner (raises each program's threshold by its partner uplift). | |
| renewable | No | Set to 1 to require renewable programs. | |
| residency | No | Set to 1 to require a path to permanent residency. | |
| minDuration | No | Minimum program duration in months. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| total | No | |
| matches | No | Programs you qualify for; each carries requiredUsd (household threshold) and shortfallUsd (≤0). |
| updated | No | |
| household | No | |
| incomeUsd | No | Your income converted to USD, used for matching. |
| nearMisses | No | Programs within ~$1,000/mo of qualifying, closest first. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld=false, so safety is covered. The description adds genuine behavioral context: it returns both qualifying programs and 'near misses just out of reach', and it flags the data as curated summaries requiring verification. Return-field detail (duration, tax notes, URLs) overlaps with the output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose in the first clause, then supporting detail, then a short verification caveat. It is dense but each clause adds information; the enumeration of returned fields is the only mildly padding element given the output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and annotations covering the safety profile, the description only needs to convey mechanism and trust caveats, which it does. Minor gaps remain: no mention that all parameters are optional/defaulted behavior, though the schema covers this.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 adds light semantic linkage (children add the child uplift, partners raise the threshold by the partner uplift, income may be in any currency), but does not clarify the duration/renewable/residency filters beyond the schema's own text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (match/compute) and resource (digital-nomad visa income thresholds) and explains the mechanism: base threshold plus published per-dependent uplift, returning qualifiers and near misses. It is clearly distinguishable from siblings like find_retirement_visas, find_student_visas and find_founder_visas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The trigger condition is explicit ('given a monthly remote income and household size'), and the closing caveat tells the agent to verify against official sources before applying. It does not, however, state when to prefer this over the sibling visa finders or note any input preconditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_retirement_visasRetirement and passive-income visas, matched to a monthly incomeARead-onlyIdempotentInspect
Which of the 41 spine countries would let a retiree in, and on what terms — a hand-curated register of retiree, passive-income and deposit routes (kind), each with minimum age, monthly income or deposit threshold in its own currency, duration, renewability, a path-to-residency flag, the official page it was read from and the check date; an entry read from secondary reporting because the official site could not be fetched is marked confidence: "secondary", and countries with no route are kind: "none" with a line saying why. Give income (monthly) with optional currency, age and savings for a match: routes the income reaches, near misses within 25%, deposit routes (judged only when savings is given — a pension says nothing about a fixed deposit), routes with no published figure, exclusions with the reason, and the countries with no route. Or country for one entry, countries for a side-by-side. Thresholds are compared in USD at the site's FX snapshot; dependants raise them. Published rules and modelled figures on the dates shown, for information only — entitlements depend on a person's record and consulates decide; every response says so first.
| Name | Required | Description | Default |
|---|---|---|---|
| age | No | Applicant age; routes with a higher minimum are excluded. | |
| income | No | Monthly income to match, in `currency`. | |
| country | No | One ISO alpha-2 code for a single entry. | |
| savings | No | Lump sum available, in `currency`; unlocks deposit routes. | |
| currency | No | ISO 4217 code of `income` and `savings` (e.g. "GBP"). | USD |
| countries | No | Comma-separated ISO alpha-2 codes, two or more, for a side-by-side. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| kind | No | |
| none | No | |
| rows | No | |
| caveats | No | |
| qualify | No | |
| nearMiss | No | |
| attribution | No | |
| depositRoutes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover safety (readOnly, idempotent, non-destructive, closed-world); the description adds rich, non-obvious behavior: provenance with check dates, a `confidence: "secondary"` flag for sources read from secondary reporting, `kind: "none"` for countries with no route, USD-at-FX-snapshot comparison, dependants raising thresholds, and a standing disclaimer. This is exactly the 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The content is front-loaded and essentially every clause carries information, but it is delivered as one enormous semicolon-chained sentence that is hard to parse for an agent or human. It would scan far better broken into 3-4 sentences separating data model, matching modes, and caveats.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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, yet the description still enumerates the response categories (matches, near misses within 25%, deposit routes, no-figure routes, exclusions with reason, no-route countries), which is more than enough for a 6-param, zero-required read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 genuine semantics: income is judged against deposit routes only when savings is supplied ('a pension says nothing about a fixed deposit'), currency is compared in USD at the site's FX snapshot, and age excludes routes with higher minimums. It does not document the upper age bound or country vs countries precedence beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Which of the 41 spine countries would let a retiree in, and on what terms') plus the exact scope (retiree, passive-income and deposit routes) and the fields each entry carries. It is clearly separable from siblings like find_nomad_visas, find_student_visas and find_founder_visas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit invocation modes: pass income (+currency/age/savings) for a match, country for one entry, countries for a side-by-side. It also scopes which routes are judged under which inputs ('deposit routes judged only when savings is given'). It stops short of naming alternative sibling tools for adjacent needs (e.g. nomad vs retirement routes), so not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_student_visasStudent visas matched to the funds a student can showARead-onlyIdempotentInspect
Student-visa routes for the 41 spine countries — a hand-curated register of the funds a student must show (amount, currency, per month or year), the work hours allowed in term, the post-study stay in months, a path-to-residency flag, the official page it was read from and the check date; secondary-sourced entries are marked, and countries with no route are kind: "none". No tuition figures: no citable structured source exists. Give funds with optional currency and per (year default; month) for a match: routes the funds reach, near misses within 25%, routes with no published figure, exclusions with the reason, and the countries with no route. Or country for one entry, countries for a side-by-side. Funds are compared per year in USD at the site's FX snapshot; figures move each academic year. Published rules for information only — not immigration advice; every response says so first.
| Name | Required | Description | Default |
|---|---|---|---|
| per | No | year | |
| funds | No | Living funds the student can show, in `currency`, for `per`. | |
| country | No | One ISO alpha-2 code. | |
| currency | No | USD | |
| countries | No | Comma-separated ISO alpha-2 codes, two or more, for a side-by-side. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| kind | No | |
| none | No | |
| rows | No | |
| caveats | No | |
| qualify | No | |
| nearMiss | No | |
| attribution | No | |
| unpublished | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/closed-world, but the description adds real behavioral context beyond them: near-miss tolerance (within 25%), how funds are normalized (per year in USD at the site's FX snapshot), that secondary-sourced entries are flagged, that missing routes surface as `kind: "none"`, and that every response leads with a not-immigration-advice disclaimer.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the resource and scope, then usage modes, then caveats — a sensible order. It is dense, semicolon-heavy prose, and a few clauses (e.g., the tuition note, the FX-snapshot remark) could be trimmed, but nothing is redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 need not be specified, yet the description still enumerates the response categories (reached routes, near misses, no-published-figure routes, exclusions with reasons, no-route countries). Combined with the FX-normalization and disclaimer notes, an agent has everything needed to call and interpret it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 60% (currency has no schema description, per only has an enum/default), and the description compensates: it fixes `per` semantics (year default, month), clarifies funds are in the given currency for that period, and defines `countries` as two-or-more ISO alpha-2 codes for side-by-side comparison. This adds meaning the schema alone does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource and scope ('student-visa routes for the 41 spine countries') and enumerates the fields carried per entry (funds amount/currency/period, work hours, post-study months, residency flag, source page, check date). This clearly distinguishes it from siblings such as find_nomad_visas, find_retirement_visas and find_founder_visas, which cover other visa classes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit invocation modes: `funds` (+currency, +per) for matching, `country` for one entry, `countries` for a side-by-side, and states the default period. It does not explicitly route against the sibling visa tools, so an agent must infer the visa-class boundary from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
health_prepVaccines, yellow-fever certificate and malaria, by countryARead-onlyIdempotentInspect
What to sort out with a travel clinic, as facts from TravelHealthPro (NaTHNaC, the UK's national travel-health centre) with the source page linked per row: the yellow-fever certificate position (required for all arrivals, required when arriving from a risk country, or none), whether the country itself carries yellow-fever risk, the vaccine names recommended for most UK travellers and for some, and whether malaria guidance exists — plus the health-risk names the FCDO lists. Give country for one country or countries (two or more) for a side-by-side. Facts only, never NaTHNaC's prose; the reasoning is at the linked page. These are recommendations for UK travellers and depend on itinerary and medical history — a clinic decides for a person. The UK itself is NO_DATA (no FCDO page, so no link), never an empty list. Official sources on the dates shown, for information only — conditions change; check the source before travelling. Every response says so first.
| Name | Required | Description | Default |
|---|---|---|---|
| country | No | One ISO alpha-2 code (e.g. "BR"). | |
| countries | No | Comma-separated ISO alpha-2 codes, two or more. Ignored when `country` is given. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| rows | No | |
| caveats | No | |
| malaria | No | |
| attribution | No | |
| vaccinesMost | No | |
| vaccinesSome | No | |
| yellowFeverCertificate | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the annotations: facts-only output with NaTHNaC prose excluded, the UK-is-NO_DATA-not-empty-list edge case, the per-row source link, the disclaimer that is prepended to every response, and the data-as-of-dates caveat. The annotations only cover safety/idempotency, so this fills a real gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and return contents are front-loaded, and the sentences are dense but mostly load-bearing. The trailing disclaimer/caveat sentences are somewhat hedged, but they encode real behavioral requirements rather than padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return structure need not be described, and the description still covers edge cases (UK NO_DATA), scope (UK travellers), and caveats. An agent has everything needed to select and call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already states the ISO alpha-2 format and the precedence rule ('Ignored when `country` is given'). The description adds the side-by-side framing but little 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource with unusual precision: what the tool returns (yellow-fever certificate position, country yellow-fever risk, recommended vaccine names, malaria guidance, FCDO health-risk names) and the source (TravelHealthPro/NaTHNaC). An agent can distinguish this from travel_advice or compare_healthcare without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly routes the two invocation modes ('Give `country` for one country or `countries` (two or more) for a side-by-side') and scopes the audience ('recommendations for UK travellers... a clinic decides for a person'). It does not explicitly name a sibling alternative or state when NOT to use it, 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.
legal_profileWomen, Business and the Law: what the statute says, by countryARead-onlyIdempotentInspect
The World Bank's Women, Business and the Law reading of each country's statute (2026 edition, 41 spine countries). Give country for one country: the Legal Frameworks index (0-100), eight topic scores (mobility, workplace, pay, marriage, parenthood, entrepreneurship, assets, pension), the coded answers grouped by topic — can a woman choose where to live, travel abroad, get a job the same way as a man, is equal pay for work of equal value mandated, can she obtain a divorce and head a household, own and inherit equally, open a business and access credit without discrimination — and the full, partial and mandatory retirement ages for men and women. Give countries (two or more) for the index, topics and ages side by side, or neither for the spine ranked by metric (index, a topic, retirementAgeMen, retirementAgeWomen). A partial answer keeps WBL's fraction as {partial} rather than rounding to yes or no; a true says the provision exists in law, not that it is enforced. Statutory figures for information only — not legal or tax advice; every response says so first.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Ranking direction. Ignored when `countries` is given. | highest |
| limit | No | Return at most this many countries in a ranking. | |
| metric | No | Ranking metric when neither `country` nor `countries` is given. | index |
| country | No | One ISO alpha-2 code for the full profile (e.g. "SA"). | |
| countries | No | Comma-separated ISO alpha-2 codes, two or more, for a side-by-side comparison. Ignored when `country` is given. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| law | No | |
| rows | No | |
| index | No | |
| topics | No | |
| caveats | No | |
| edition | No | |
| retirement | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, idempotent, non-destructive behavior, but the description adds substantial context beyond them: partial answers are returned as `{partial}` rather than rounded, 'true says the provision exists in law, not that it is enforced', and statutory figures are for information only with a disclaimer fronted in every response. These are meaningful behavioral 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is front-loaded with what the tool is before moving to modes and caveats, and every clause carries substantive information about outputs, edge cases or disclaimers. The single long paragraph is dense and could be better structured with line breaks, but it contains little waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter tool with an output schema, the description is complete: it covers all three invocation modes, partial-answer semantics, the enforcement caveat, the advice disclaimer, and the dataset edition. Nothing an agent needs to select or call the tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 goes further by mapping each parameter mode to its output: `country` yields the index, eight topic scores, coded answers and retirement ages; `countries` yields side-by-side comparison; neither yields the spine ranked by `metric`. It also clarifies when `sort` and `limit` are ignored, adding value beyond the enum descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific dataset and resource: 'The World Bank's Women, Business and the Law reading of each country's statute (2026 edition, 41 spine countries).' It names the precise outputs (Legal Frameworks index, eight topic scores, coded answers, retirement ages), which distinguishes it clearly from the many sibling comparison tools that cover different domains.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly lays out three invocation modes: 'Give `country` for one country', 'Give `countries` (two or more) for the index, topics and ages side by side', and 'neither for the spine ranked by `metric`.' This is clear when-to-use guidance for each mode, though it does not name alternative sibling tools or state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_datasetsEvery dataset on the site, and when it last changedARead-onlyIdempotentInspect
The registry of every dataset behind the site's figures — price levels, wages, housing, healthcare, holidays, working time, inflation, remittance prices, and the rest. Each carries updated, the date it was last REBUILT (a fetcher ran, or a person reviewed it), and — where the dataset knows it — vintage, what the figures themselves describe: a year, an edition, a quarter, or the source's own publication date. THE TWO ARE DIFFERENT AND OFTEN YEARS APART: exchange rates rebuilt in 2026 are 2025 annual averages, and city rents rebuilt in 2026 are from 2023. Judge how current a figure is by vintage and fall back to updated only where vintage is absent, which means the dataset has none of its own — a curated register's vintage is the day a person read the authority's page. Also says whether it is FETCHED by a script or REVIEWED by a person, the page it appears on, and the refresh script. With since (YYYY-MM-DD), changed lists only the datasets rebuilt strictly after that date, so an agent that cached a figure can decide what to re-fetch instead of re-fetching everything. Pure: since comes from the caller. Carries no figures and therefore no attribution block; each dataset's provenance travels with the tool that serves it.
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | Return only datasets changed strictly after this date (YYYY-MM-DD). Omit for all. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| count | No | |
| since | No | |
| newest | No | |
| changed | No | |
| datasets | No | |
| changedCount | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, not destructive), and the description adds substantial extra context: the distinction between `updated` (rebuild time) and `vintage` (what the figures describe), with concrete examples showing they can be years apart. It also discloses fetched-vs-reviewed provenance, that no figures or attribution block are returned, and that the tool is pure with `since` supplied by the caller.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the resource definition and then the updated/vintage semantics, which is the right order. It is dense and occasionally repetitive (the capitalized 'THE TWO ARE DIFFERENT' plus two examples restates the same point), but nearly every sentence carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and annotations covering safety, the description only needs to explain the non-obvious semantics — and it does: vintage vs updated, sourcing mode, scope, and the meaning of `since`. 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already states the strict-after semantics, so the baseline is 3. The description goes beyond by framing the parameter's purpose (cache invalidation / targeted re-fetch) and emphasizing the strict inequality, adding decision-relevant meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a concrete resource ('the registry of every dataset behind the site's figures') and enumerates the domain it covers, immediately distinguishing it from the sibling tools that serve figures rather than metadata about them. An agent can tell this is the inventory tool, not a data-serving tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States a clear usage scenario: an agent that cached a figure can pass `since` to decide what to re-fetch rather than re-fetching everything. It also gives guidance on judging currency (prefer `vintage`, fall back to `updated`). It does not name a sibling alternative or explicit when-not-to-use, so it stops short of 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
localize_salaryLocalize a salary for fair pay across bordersARead-onlyIdempotentInspect
Convert a base salary from a home country into a cost-of-living-fair local equivalent: S_local = S_base × (I_target / I_home), where I is a US-relative price level. Omit target to receive a localized salary matrix across every country in the source — useful for pricing one offer across many markets. Returns USD purchasing-power equivalents, not currency-converted amounts.
| Name | Required | Description | Default |
|---|---|---|---|
| base | Yes | Base annual salary in the home country (USD-denominated). | |
| home | Yes | ISO 3166-1 alpha-2 home country code the base salary is expressed in (case-insensitive). | |
| source | No | PPP dataset to draw figures from. Defaults to 'consensus' if omitted. | consensus |
| target | No | Optional ISO 3166-1 alpha-2 target country code. Omit to localize across all countries in the source. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| home | No | |
| input | No | |
| source | No | |
| results | No |
TDQS
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), so the bar is lower. The description adds genuinely useful behavior beyond that: it discloses that results are USD purchasing-power equivalents rather than currency-converted amounts, and explains the matrix behavior when target is omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core action and formula, then the omit-target behavior, then the output-disambiguation caveat. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and annotations cover safety, so return values and side effects need not be spelled out. Parameters are fully documented in the schema and enriched by the formula. Nothing an agent needs in order 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.
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 goes further by embedding the parameters in the formula S_local = S_base × (I_target / I_home), which conveys the relational meaning of base, home and target that the schema alone does not express.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a precise verb+resource+scope ('Convert a base salary from a home country into a cost-of-living-fair local equivalent') and even supplies the exact formula, which strongly signals what the tool is. It does not explicitly name or contrast with a sibling such as calculate_ppp or compare_occupation_pay, so it falls just short of the top tier.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for one mode ('Omit target to receive a localized salary matrix... useful for pricing one offer across many markets'), which is more than implied. However, it never says when NOT to use it or how it differs from closely related siblings like calculate_ppp, leaving the 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.
passport_powerPassport visa-free access score and global rankARead-onlyIdempotentInspect
Passport Power: for a given country's passport, returns the visa-free-access score (visa-free + visa-on-arrival + eTA destinations), global rank and percentile among all ~199 passports, and the full destination breakdown by access type with names resolved. Omit country for the ranked league table. Reference data from the open imorte/passport-index-data (public domain) — confirm entry rules with the destination authority before travel.
| Name | Required | Description | Default |
|---|---|---|---|
| country | No | Passport country alpha-2 code (e.g. US, GB, SG). Omit for the full league table. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| passport | No | |
| resolved | No | |
| percentile | No | |
| totalPassports | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false, and destructiveHint=false, so the safety profile is covered. The description adds valuable context beyond that: the score composition (visa-free + visa-on-arrival + eTA), the comparison universe (~199 passports), name resolution in the breakdown, the public-domain data source, and a caveat to confirm entry rules with the destination authority.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core capability, then the omit-country mode, then provenance and a travel-safety caveat. Dense but every clause carries information; the long opening sentence is the only mild structural weakness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value detail is unnecessary. Combined with full annotation coverage and a 100% documented single parameter, the description supplies everything an agent needs: scope, the aggregate mode, score composition, data provenance, and a usage caveat.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage and only one optional parameter, the schema already documents the alpha-2 code format and the omit-for-league-table behavior. The description restates the same semantics (e.g., 'Omit country for the ranked league table') without adding format or edge-case 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (a country's passport) and concrete outputs: visa-free-access score, global rank, percentile, and a destination breakdown by access type. This is distinguishable from siblings like travel_advice or find_nomad_visas, which address different questions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit conditional usage rule: 'Omit country for the ranked league table,' which tells the agent how to get the aggregate view versus a single-country lookup. It does not name alternatives or exclusions, but the tool's scope is narrow enough that this is clear context rather than missing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pension_abroadWhat a pension is worth abroad, and how fast it erodesARead-onlyIdempotentInspect
A fixed pension paid from one country and spent in another, after the exchange rate, the destination's price level and the destination's inflation. Converts amount in currency at the site's FX snapshot, re-prices it at the destination through the PPP engine (the same price-level comparison as calculate_ppp), and projects it flat at the destination's latest annual inflation for years (1-40, default 10), returning what it is worth there today and after the period, in USD and local currency, with the share of purchasing power lost. Without amount, the origin's typical state pension is used — OECD's net replacement rate for an average earner on the modelled median wage — and basis says so; 33 origins have a rate, the rest need amount. Holds the pension and the exchange rate fixed and says so; many state pensions are uprated, and some are frozen for expatriates in particular countries. Not financial advice.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Country it will be spent in, ISO alpha-2 (e.g. "PT"). | |
| from | Yes | Country the pension is paid from, ISO alpha-2 (e.g. "GB"). | |
| years | No | Years to project (whole number, default 10). | |
| amount | No | Monthly pension in `currency`. Omit for the origin's typical state pension. | |
| currency | No | ISO 4217 code of `amount` (default USD). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| to | No | |
| from | No | |
| years | No | |
| caveats | No | |
| pension | No | |
| erosionPct | No | |
| attribution | No | |
| inflationPct | No | |
| worthTodayUsd | No | |
| worthTodayLocal | No | |
| worthAfterYearsUsd | No | |
| worthAfterYearsLocal | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower. Beyond that, the description discloses the fixed-pension/fixed-FX modelling assumption, warns that many state pensions are uprated and some are frozen for expatriates, and disclaims financial advice — useful limits an agent otherwise couldn't infer.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core definition well, but the block is dense and long for a 5-parameter tool, with several modelling caveats packed into the middle sentences rather than separated. Informative yet heavier than needed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 spelled out, yet the description also covers output shape (USD and local, share of purchasing power lost). Combined with defaults, origin coverage and caveats, an agent has enough to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (baseline 3), but the description adds real meaning: `amount` falls back to an OECD net replacement rate available for only 33 origins, `years` is bounded 1-40 default 10, and `basis` reports which path was used. That goes beyond the schema's field-level text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+scope: a pension paid from one country and spent in another, converted at FX, re-priced via the PPP engine and projected at destination inflation. It explicitly distinguishes itself from calculate_ppp by name and from compare_pension_systems by scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for the optional-parameter path: without `amount`, the origin's typical state pension (OECD net replacement rate) is used, 33 origins have a rate and the rest require `amount`. It doesn't explicitly state when to prefer this over siblings like compare_pension_systems or retire_on_budget, but 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.
plan_team_calendarTeam calendar: shared working days and hours across countriesARead-onlyIdempotentInspect
When a distributed team can actually all work. Joins the two halves no free tool puts together: the weekdays on which NOBODY is on a public holiday (the engine behind compare_public_holidays) and the daily working-hour overlap across the members' time zones (the engine behind find_meeting_slot), evaluated on 15 January and 15 July so daylight-saving asymmetry is visible, and multiplied into conservative shared working hours per year. Members are ISO alpha-2 country codes; each country is placed in the time zone of its representative city, and countries spanning several zones (US, CA, BR, MX, AU, ID) are flagged multiZone — append @IANA/Zone to override (e.g. US@America/Chicago). Covers the 41-country spine EXCEPT India, Thailand, Malaysia, the UAE and Saudi Arabia, which have no published holiday calendar and return NO_DATA naming them rather than a calendar with no holidays. Working-hour windows are a stated assumption (09:00-18:00 local unless given), not a measurement; annual leave is not modelled.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | Default local working-window end, minutes from midnight (default 1080 = 18:00). | |
| year | No | Calendar year for the holiday calendar. Defaults to the first year in the dataset. | |
| hours | No | Per-member `start-end` overrides, semicolon-separated and aligned with `members`; leave a slot empty to keep the default (e.g. "540-1080;;420-720"). | |
| start | No | Default local working-window start for every member, minutes from midnight (default 540 = 09:00). | |
| members | Yes | Comma-separated ISO alpha-2 codes, two or more, each optionally `CC@IANA/Zone` (e.g. "GB,JP,US@America/Chicago"). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| days | No | |
| year | No | |
| hours | No | |
| caveats | No | |
| members | No | |
| attribution | No | |
| sharedWorkingHoursPerYear | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only/idempotent/non-destructive, and the description adds substantial behavior beyond them: evaluation on 15 Jan and 15 Jul to expose DST asymmetry, multiZone flagging for US/CA/BR/MX/AU/ID, the @IANA/Zone override syntax, the NO_DATA sentinel instead of an empty calendar, and the explicit admission that working hours are an assumption and annual leave is unmodeled.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The scoping and coverage facts are front-loaded well, but the opening ('the two halves no free tool puts together') is rhetorical filler and the single sprawling sentence bundles overriding, coverage exclusions and assumptions together. Much earns its place, yet trimming would improve scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 detail is not required, yet the description still explains the NO_DATA sentinel and the multiZone flag. Combined with the stated default working window and leave-modeling caveat, an agent has what it needs; only explicit sibling routing is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents members, start, end, hours and year including the CC@IANA/Zone form. The description reinforces the override syntax and default-window assumption, but adds no parameter detail the schema lacks — baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific composite purpose: joins the no-holiday weekday calculation (behind compare_public_holidays) with time-zone working-hour overlap (behind find_meeting_slot), multiplied into shared annual hours. It explicitly positions itself against two named siblings so an agent can tell it apart without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names the two sibling engines it subsumes and states hard coverage limits (41-country spine minus India, Thailand, Malaysia, UAE, Saudi Arabia, which return NO_DATA). What is missing is an explicit 'prefer this over compare_public_holidays when...' routing rule, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
property_rulesCan a foreigner buy a home there — ownership band, restrictions, transfer taxARead-onlyIdempotentInspect
Whether a foreigner may buy residential property in each of the 41 spine countries: an ownership band (free, restricted, leasehold-only, prohibited), the main restrictions in a sentence, whether land itself may be owned, and the headline transfer tax a buyer pays with a note on surcharges and fees — a hand-curated register with the official page and check date per row; an entry read from secondary reporting because the official page could not be fetched is marked confidence: "secondary". country for one entry, countries for a side-by-side; without either, all 41 ranked free-first then by transfer tax, optionally within one band. Rules change by decree and by region (Canada's ban runs to 2027, Australia's established-home ban to March 2027, Saudi Arabia's new law from January 2026). Published rules for information only — not legal advice; every response says so first.
| Name | Required | Description | Default |
|---|---|---|---|
| band | No | Restrict the ranking to one ownership band. | |
| limit | No | Return at most this many countries. | |
| country | No | One ISO alpha-2 code. | |
| countries | No | Comma-separated ISO alpha-2 codes, two or more, for a side-by-side. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| rows | No | |
| source | No | |
| caveats | No | |
| checkedOn | No | |
| attribution | No | |
| restrictions | No | |
| transferTaxPct | No | |
| foreignOwnership | No |
TDQS
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 context beyond them: hand-curated provenance with official page and check date, a `confidence: "secondary"` marker for unverified rows, the ranking order, time-bounded rule caveats (Canada 2027, Australia March 2027, Saudi Arabia Jan 2026), and a mandatory not-legal-advice preamble. This is rich disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense paragraph, but front-loaded with the core output list before caveats. The em-dash chains make it somewhat run-on; splitting the provenance/disclaimer tail from the mode-selection content would improve scanability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 prose, and the description still supplies mode selection, ranking logic, provenance semantics, and temporal caveats. 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.
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 exceeds it by defining the default ordering when no selector is passed, stating that `band` restricts the ranking, and clarifying that `countries` requires two or more for a side-by-side.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource (whether a foreigner may buy residential property) and enumerates exactly what each row returns: ownership band, restrictions, land ownership, transfer tax, plus provenance. The band vocabulary is spelled out (`free`, `restricted`, `leasehold-only`, `prohibited`), so an agent can distinguish it from siblings like compare_housing or country_dossier.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly maps parameter combinations to behavior: `country` for one entry, `countries` for a side-by-side, neither for all 41 ranked free-first then by transfer tax, optionally narrowed by `band`. It does not name a sibling alternative it should be preferred over, which is the only gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rank_livabilityRank countries by quality of life vs costARead-onlyIdempotentInspect
Quality-of-Life vs Cost matrix: ranks 41 countries by a user-weighted composite of livability metrics (median broadband Mbps, safety, healthcare, air quality, English usability — curated country-level data replacing the discontinued Teleport API) against the monthly cost of single-person essentials at local purchasing-power prices. Returns per-country composite and value scores, lifestyle label for your budget (comfortable → like royalty), nomad-visa eligibility, and days-to-tax-residency. Curated estimates — verify locally.
| Name | Required | Description | Default |
|---|---|---|---|
| budget | No | Monthly budget (USD) — drives lifestyle labels and visa eligibility. | |
| weights | No | Five comma-separated 0–10 weights: internet,safety,healthcare,air,english (default 5,5,5,5,5). | |
| maxBudget | No | Filter: keep countries whose monthly essentials cost ≤ this (USD). | |
| minSafety | No | Filter: minimum safety score, 0–100. | |
| minInternet | No | Filter: minimum median broadband, Mbps (e.g. 80). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| rows | No | |
| excluded | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=false, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context beyond annotations: it names the curated data source, notes it replaces the discontinued Teleport API, and warns 'Curated estimates — verify locally.'
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly packed sentences: the first states the purpose and data, the second lists returns, and the third gives a caveat. The purpose is front-loaded and every sentence earns its place despite the density.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists and annotations cover safety, the description supplies enough context: data source, ranking method, filters, returns, and an estimate caveat. It could be slightly more explicit about parameter interactions (e.g., budget vs maxBudget), but not enough to be a major gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 in the schema. The description names the five weighted livability metrics (internet, safety, healthcare, air, English), which helps map the 'weights' string parameter, but adds little syntax or interaction detail beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('ranks') and resource ('41 countries') and explains the unique composite: user-weighted livability metrics against monthly essentials cost. It distinguishes itself from generic compare_* siblings by describing a weighted ranking with composite and value scores, lifestyle labels, visa eligibility, and tax-residency days.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through the 'Quality-of-Life vs Cost matrix' framing and filter semantics, but it never explicitly says when to use this tool versus siblings like compare_countries, find_country_fit, or retire_on_budget. No exclusions or alternative-routing guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remittance_costCost of sending money home, by corridorARead-onlyIdempotentInspect
What it costs to send money from one country to another, from the World Bank's Remittance Prices Worldwide survey (newest quarter, CC BY 4.0): the mean total cost — fee plus exchange-rate margin — of sending USD 200 and USD 500 across the providers surveyed on that corridor, the cheapest provider found, and how many were surveyed. With amount (USD), a quote at the nearer of the two surveyed bands (below USD 350 uses the 200 figures), and the response says which. Give from AND to for one corridor; only one of them for a ranking of surveyed corridors out of a sender or into a receiver, cheapest first. The survey covers ~350 high-volume corridors (~46 sending countries, ~96 receiving); a pair it does not survey returns NO_DATA, never a figure borrowed from a neighbour. Your own quote will differ by provider, payment method and day.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Receiving country, ISO alpha-2 (e.g. "IN"). | |
| from | No | Sending country, ISO alpha-2 (e.g. "GB"). | |
| sort | No | Ranking direction when only one of `from`/`to` is given. | lowest |
| limit | No | Return at most this many corridors in a ranking. | |
| amount | No | Amount to send, USD. Optional; without it the corridor's survey figures are returned unquoted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| rows | No | |
| quote | No | |
| period | No | |
| caveats | No | |
| corridor | No | |
| providers | No | |
| attribution | No | |
| avgCost200Pct | No | |
| avgCost500Pct | No | |
| cheapestCost200Pct | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive, closed-world behavior, and the description adds real behavioral context: NO_DATA rather than a borrowed neighbour figure for unsurveyed corridors, coverage scale (~350 corridors, ~46 sending, ~96 receiving), data vintage (newest quarter), and the honest caveat that the caller's own quote will vary by provider, method and day.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense paragraph, front-loaded with what the tool returns before the usage rules. Every sentence carries load (source, metric, modes, NO_DATA, caveat), though the length pushes it toward reference-text density rather than quick scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 further explanation, and annotations cover the safety profile. The description still supplies the coverage limits, NO_DATA guarantee, banding logic and freshness caveat, leaving an agent nothing material missing before calling it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 lacks: how `amount` selects the nearer surveyed band and that the response reports which, and how the presence/absence of `from`/`to` switches between corridor lookup and ranking. This meaningfully enriches all five parameters rather than repeating them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb-and-resource (the cost of sending money from one country to another) and pins the scope exactly: World Bank RPW survey, newest quarter, mean total cost of USD 200/500, cheapest provider, count surveyed. An agent knows precisely what data this returns and on which corridors, which is well beyond a restatement of the name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly defines the two invocation modes: both `from` and `to` for one corridor, only one for a cheapest-first ranking, plus the `amount` banding rule (below USD 350 uses the 200 figures). It also states the when-not case (unsurveyed pairs return NO_DATA). It does not name a sibling alternative, so it stops just 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.
required_rateCompute the required freelance hourly rateARead-onlyIdempotentInspect
Given a desired annual net income, compute the freelance hourly and day rate required after taxes, self-paid health insurance, weeks off, and billable utilization. Uses the same per-country effective-rate presets as compare_contract; all overridable. Estimates only — not tax advice.
| Name | Required | Description | Default |
|---|---|---|---|
| hours | No | Hours per week (default 40). | |
| health | No | Annual self-paid health insurance (USD); defaults to the country preset. | |
| country | No | US | |
| taxRate | No | Override effective tax rate, percent (e.g. 32). | |
| expenses | No | Annual business expenses (USD, default 0). | |
| weeksOff | No | Unpaid weeks off per year (default 4). | |
| desiredNet | Yes | Desired annual net take-home (USD). | |
| utilization | No | Billable share of working hours, 0–1 (default 0.75). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| dayRate | No | |
| hourlyRate | No | |
| billableHours | No | |
| requiredGross | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive). The description adds genuine context beyond them: the estimate is after taxes, health insurance, weeks off, and utilization, that presets are shared with compare_contract, that all inputs are overridable, and the 'not tax advice' caveat.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the core purpose, then the preset relationship, then the disclaimer. No filler; each sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 annotations carry the safety profile. The description covers purpose, preset sourcing, and the estimate disclaimer, leaving it essentially complete for an 8-param calculation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high (88%), setting a baseline of 3, but the description adds meaning by mapping the computation to the parameter categories (taxes, health, weeks off, utilization) and explicitly stating that the country presets are 'all overridable', which tells the agent every default can be replaced.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('compute the freelance hourly and day rate') and clarifies the driving input ('given a desired annual net income'). It cross-references the sibling compare_contract by noting it shares the same per-country presets, giving reasonable differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the tool is for freelancers who want to back into a rate from a target net income. There is no explicit when-to-use vs when-not, no mention of alternatives, and no prerequisites beyond the input scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
retire_on_budgetHow far a monthly pension goes, country by countryARead-onlyIdempotentInspect
Does a fixed monthly pension cover a month of local essentials. Given amount and currency (default GBP 1,500), returns every spine country ranked by coverage — the pension in USD divided by the country's MODELLED monthly essentials (the site's price basket scaled by the PPP price level, checked against real series and wrong both ways) — with the essentials figure, healthcare out-of-pocket per person per month (World Bank / WHO), life expectancy (World Bank) and the kind of retiree visa the country offers beside each row. Coverage is an ordering, not a budget; the pension is taken as fixed at the site's FX snapshot. Different from pension_abroad, which re-prices a pension against the origin's price level to say what it is worth relative to home. Published rules and modelled figures on the dates shown, for information only — entitlements depend on a person's record and consulates decide; every response says so first.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Return at most this many countries. | |
| amount | No | Monthly pension, in `currency`. | |
| currency | No | ISO 4217 code of `amount`. | GBP |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| rows | No | |
| caveats | No | |
| pension | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description goes far beyond them: it discloses the ranking methodology, the modelled/published data sources (PPP basket, World Bank/WHO), that coverage is an ordering not a budget, that FX is fixed at the site's snapshot, and that the response leads with a disclaimer. Auth, provenance and limits are all surfaced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, but the body is a single dense sentence studded with parentheticals and editorial asides ('wrong both ways', 'checked against real series') that inflate length. It is information-rich but not tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return structure need not be spelled out, yet the description still names the returned fields (essentials figure, out-of-pocket healthcare, life expectancy, retiree visa kind) and the caveats. Complete enough for a complex modelling tool, with only the `limit` behaviour left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the description reinforces `amount`/`currency` defaults, but it never mentions the `limit` parameter — and its claim to return 'every spine country' sits somewhat awkwardly against a limit parameter. Baseline 3 applies when the schema already carries parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific computation on a specific resource: given a monthly pension, return spine countries ranked by how far it covers modelled local essentials. It explicitly contrasts itself with `pension_abroad`, so an agent can separate the two 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the alternative (`pension_abroad`) and the condition that selects it — that tool re-prices against the origin's price level, this one ranks abroad coverage. It gives clear context but no explicit when-not-to-use or prerequisite beyond the disclaimer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
select_regionSelect the lowest-latency cloud host regionARead-onlyIdempotentInspect
Given a user-population breakdown, find the cloud host region that minimizes population-weighted round-trip latency (argmin_j Σ_i P_i × L_ij), and compute the optimal multi-region split (each user region routed to its nearest host). Latency is estimated from great-circle distance via a fibre-propagation model, not measured.
| Name | Required | Description | Default |
|---|---|---|---|
| hosts | No | Optional comma-separated host region ids to restrict candidates (e.g. 'us-east-1,eu-west-2'). | |
| users | Yes | Comma-separated region:percent pairs (percentages auto-normalize), e.g. 'US-East:40,UK:30,Germany:30'. Region ids: US-East, US-West, Canada, Brazil, UK, Germany, France, Spain, Nigeria, South-Africa, UAE, India, Singapore, China, Japan, Australia. | |
| provider | No | Optional cloud provider filter, applied before the hosts whitelist. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| best | No | |
| split | No | |
| ranking | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare read-only, idempotent, non-destructive, and closed-world behavior, so the safety profile is covered. The description adds important caveat context beyond annotations: latency is estimated from a great-circle distance fibre-propagation model, not measured.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is front-loaded with the core optimization objective, followed by one concise caveat sentence. The formula earns its place by specifying the exact weighted-latency criterion, and there is no redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value details need not be described. With full parameter descriptions, safety annotations, and the estimation-model caveat, the description is complete for an agent to call and interpret this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including descriptions for 'hosts', 'users', and 'provider'. The description references population-weighted inputs but does not add syntax, format, or provider-filtering details beyond what the schema already provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it finds the cloud host region minimizing population-weighted latency and computes an optimal multi-region split. The title and description make the cloud-host latency scope clear, distinguishing it from the country-data siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The opening phrase 'Given a user-population breakdown' clearly establishes the input scenario in which this tool applies. It does not name explicit exclusions or alternatives, but no sibling appears to cover the same cloud-latency optimization use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
travel_adviceUK and US government travel advice, by countryARead-onlyIdempotentInspect
What two governments say about going. Give country (ISO alpha-2) for one country: the UK FCDO's level (none, all-but-essential to parts, all-but-essential, all travel to parts, all travel) with its latest change and date, the FCDO's passport-validity and visa sentences for British citizens and the health risks it lists, and the US State Department's advisory level (1 exercise normal precautions to 4 do not travel) with its headline. Give countries (two or more) for the levels side by side, or neither for the 41-country spine ranked least-restricted first by FCDO level then US level (sort=highest inverts). The two governments grade differently and often disagree; neither is rescored. The FCDO publishes nothing for the UK and the State Department nothing for the US, so those blocks are absent with a caveat, never a made-up level, and a country with neither is excluded from the ranking. Official sources on the dates shown, for information only — conditions change; check the source before travelling. Every response says so first.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Ranking direction when neither `country` nor `countries` is given: lowest = least restricted first. | lowest |
| limit | No | Return at most this many countries in a ranking. | |
| country | No | One ISO alpha-2 code for the full advice (e.g. "TH"). | |
| countries | No | Comma-separated ISO alpha-2 codes, two or more, for a side-by-side. Ignored when `country` is given. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| us | No | |
| fcdo | No | |
| rows | No | |
| caveats | No | |
| excluded | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent safety, and the description adds substantial behavioral context beyond them: the exact FCDO and US advisory level scales, absence of FCDO data for the UK and State data for the US with a caveat rather than a fabricated level, exclusion of doubly-unknown countries from rankings, and the mandatory disclaimer prefixed to every response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-line purpose, then the mode rules, then caveats and disclaimer. Dense but each clause carries operational information; the disclaimer sentence is slightly verbose but is arguably required context for this dataset.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 shapes, and it instead covers sourcing, grading differences between governments, missing-data behavior, and the informational-use disclaimer. Nothing an agent needs to call or interpret this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 real meaning: it explains that `sort=highest` inverts the default ranking, that `countries` is ignored when `country` is present, and the ISO alpha-2 expectation for `country`. Only `limit` is left to the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('What two governments say about going') and names both sources (UK FCDO, US State Department) and the exact artifacts returned per country. An agent can tell this apart from siblings like compare_country_risk or health_prep without inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly maps the three invocation modes: `country` for one country's full advice, `countries` (two or more) for a side-by-side, and neither for the 41-country spine ranking with `sort` direction. The precedence rule ('`countries` ignored when `country` is given') is stated, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
withholding_taxWithholding tax on payments abroad, standard and treaty rate per corridorARead-onlyIdempotentInspect
What a company in from keeps back when it pays dividends, interest, royalties or technical fees to a recipient in to: OECD's standard withholding rates for the payer's country and, for the pair, the treaty rate where OECD publishes one, with the saving in points per income type. Direction is the payer's, never reversed; from equal to to is rejected. A pair with no published treaty rate reports the standard rate and says so — that is not the same as no treaty existing, and the treaty figure is the maximum the treaty allows (a residence certificate is usually needed). Without from, ranks all 41 by standard rate on type (dividends default). Standard rates for 41 of 41; treaty rates for about 1,300 payer–recipient pairs within the spine (the Philippines never appears as a payer). Published rates and facts on the dates shown, for information only — not tax, legal or immigration advice; every response says so first.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | ISO alpha-2 code of the recipient's country; unlocks the treaty rate. | |
| from | No | ISO alpha-2 code of the paying company's country. | |
| sort | No | lowest | |
| type | No | Income type to rank by when `from` is not given. | dividends |
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| to | No | |
| rows | No | |
| lines | No | |
| treaty | No | |
| caveats | No | |
| standard | No | |
| attribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent annotations: direction is the payer's and never reversed, `from`==`to` is rejected, a missing treaty rate reports the standard rate and says so rather than implying no treaty exists, the treaty figure is a maximum, and a residence certificate is usually needed. Coverage stats (41/41 standard, ~1,300 pairs, Philippines never a payer) add real operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense paragraph that front-loads the core operation and semantics before the coverage figures and disclaimer. It is long and packed, but nearly every sentence carries distinct information; only the trailing coverage detail feels marginally heavy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema, five parameters, and read-only annotations, the description covers mode selection, edge cases (from==to, missing treaty), defaults, and the mandatory disclaimer. An agent has everything needed to call it correctly and interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 60%; the description adds meaning to `to` (unlocks the treaty rate), `from`, and `type` (ranked by when `from` is absent), plus the direction/default behavior. `sort` and `limit` are left to the schema, so it is not fully compensating.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: withholding tax on dividends/interest/royalties/technical fees, returning OECD standard and treaty rates per corridor. It is clearly differentiated from siblings like compare_tax_rates and compare_vat by naming the exact resource and direction semantics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the two operating modes explicitly: with `from` it computes the payer-country rate; without `from` it ranks all 41 countries by standard rate on `type` (dividends default). It does not name a sibling alternative or when-not-to-use, so it stops 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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
62 tool updates
- Changed
arrival_cost1 field changed- added
Input schema / examplesAdded value: +[ + { + "destination": "GB", + "passport": "US" + } +]
- Added
banking_access - Changed
build_pay_range1 field changed- added
Input schema / examplesAdded value: +[ + { + "country": "DE", + "occupation": "professionals", + "seniority": "senior" + } +]
- Changed
calculate_ppp1 field changed- added
Input schema / examplesAdded value: +[ + { + "income": 100000, + "target": "TH" + } +]
- Changed
calculate_runway1 field changed- added
Input schema / examplesAdded value: +[ + { + "burn": 3000, + "currency": "GBP", + "fixed": 800, + "home": "GB", + "savings": 20000, + "targets": "TH:chiang-mai,GE" + } +]
- Changed
calculate_wage_bands1 field changed- added
Input schema / examplesAdded value: +[ + { + "country": "PL", + "percentile": 90 + } +]
- Changed
check_residency1 field changed- added
Input schema / examplesAdded value: +[ + { + "stays": [ + { + "country": "PT", + "entry": "2026-01-10", + "exit": "2026-04-02" + } + ] + } +]
- Changed
check_schengen1 field changed- added
Input schema / examplesAdded value: +[ + { + "trips": [ + { + "entry": "2025-01-01", + "exit": "2025-03-01" + } + ] + } +]
- Changed
check_tax_residency_risk1 field changed- added
Input schema / examplesAdded value: +[ + { + "country": "ES", + "days": 120, + "income": 80000 + } +]
- Changed
check_travel_residency1 field changed- added
Input schema / examplesAdded value: +[ + { + "income": 120000, + "stays": [ + { + "country": "ES", + "entry": "2026-01-10", + "exit": "2026-07-28" + } + ] + } +]
- Changed
compare_banking_access1 field changed- added
Input schema / examplesAdded value: +[ + { + "countries": "GB,NG,IN" + } +]
- Changed
compare_business_entry1 field changed- added
Input schema / examplesAdded value: +[ + { + "country": "PT" + } +]
- Changed
compare_childcare_cost1 field changed- added
Input schema / examplesAdded value: +[ + { + "country": "GB" + } +]
- Changed
compare_climate1 field changed- added
Input schema / examplesAdded value: +[ + { + "limit": 15, + "month": 1 + } +]
- Changed
compare_connectivity1 field changed- added
Input schema / examplesAdded value: +[ + { + "maxLatency": 100, + "sort": "latency" + } +]
- Changed
compare_contract1 field changed- added
Input schema / examplesAdded value: +[ + { + "contractorRate": 100, + "country": "US", + "employeeRate": 70 + } +]
- Changed
compare_countries1 field changed- added
Input schema / examplesAdded value: +[ + { + "a": "DE", + "b": "TH" + } +]
- Changed
compare_country_risk1 field changed- added
Input schema / examplesAdded value: +[ + { + "limit": 20, + "maxRisk": 3 + } +]
- Changed
compare_effective_tax1 field changed- added
Input schema / examplesAdded value: +[ + { + "country": "DE" + } +]
- Changed
compare_egov1 field changed- added
Input schema / examplesAdded value: +[ + { + "country": "KR" + } +]
- Added
compare_food_cost - Changed
compare_health_capacity1 field changed- added
Input schema / examplesAdded value: +[ + { + "country": "DE" + } +]
- Changed
compare_healthcare1 field changed- added
Input schema / examplesAdded value: +[ + { + "country": "TH", + "sort": "outOfPocket" + } +]
- Changed
compare_housing1 field changed- added
Input schema / examplesAdded value: +[ + { + "remoteIncome": 6000, + "sort": "affordability" + } +]
- Changed
compare_inflation1 field changed- added
Input schema / examplesAdded value: +[ + { + "countries": "GB,DE,TR" + } +]
- Changed
compare_occupation_pay1 field changed- added
Input schema / examplesAdded value: +[ + { + "country": "GB", + "occupation": "professionals" + } +]
- Changed
compare_pension_systems1 field changed- added
Input schema / examplesAdded value: +[ + { + "country": "DE" + } +]
- Changed
compare_public_holidays1 field changed- added
Input schema / examplesAdded value: +[ + { + "countries": "GB,JP" + } +]
- Changed
compare_safety_stats1 field changed- added
Input schema / examplesAdded value: +[ + { + "countries": "DE,BR,ZA" + } +]
- Changed
compare_tax_burden1 field changed- added
Input schema / examplesAdded value: +[ + { + "country": "PT" + } +]
- Changed
compare_tax_rates1 field changed- added
Input schema / examplesAdded value: +[ + { + "countries": "DE,IE,TH" + } +]
- Changed
compare_total_cost1 field changed- added
Input schema / examplesAdded value: +[ + { + "income": 6000, + "sort": "remaining" + } +]
- Changed
compare_trade_customs1 field changed- added
Input schema / examplesAdded value: +[ + { + "country": "PT" + } +]
- Changed
compare_vat1 field changed- added
Input schema / examplesAdded value: +[ + { + "countries": "GB,US,DE" + } +]
- Changed
compare_working_time1 field changed- added
Input schema / examplesAdded value: +[ + { + "countries": "DE,US,TH" + } +]
- Changed
country_dossier1 field changed- added
Input schema / examplesAdded value: +[ + { + "country": "PT", + "income": 5000 + } +]
- Added
driving_rules - Added
employment_rules - Changed
estimate_employer_cost1 field changed- added
Input schema / examplesAdded value: +[ + { + "country": "DE", + "gross": 60000 + } +]
- Changed
estimate_micro_costs1 field changed- added
Input schema / examplesAdded value: +[ + { + "base": "GB", + "target": "TH" + } +]
- Added
find_country_fit - Changed
find_fire_locations1 field changed- added
Input schema / examplesAdded value: +[ + { + "portfolio": 400000, + "swr": 0.04 + } +]
- Changed
find_founder_visas1 field changed- added
Input schema / examplesAdded value: +[ + { + "currency": "GBP", + "funds": 50000 + } +]
- Changed
find_meeting_slot1 field changed- added
Input schema / examplesAdded value: +[ + { + "zones": [ + "Europe/London", + "America/New_York", + "Australia/Sydney" + ] + } +]
- Changed
find_nomad_visas1 field changed- added
Input schema / examplesAdded value: +[ + { + "children": 1, + "currency": "EUR", + "income": 4000, + "partners": 1 + } +]
- Changed
find_retirement_visas1 field changed- added
Input schema / examplesAdded value: +[ + { + "age": 62, + "currency": "GBP", + "income": 1500 + } +]
- Changed
find_student_visas1 field changed- added
Input schema / examplesAdded value: +[ + { + "currency": "GBP", + "funds": 20000 + } +]
- Changed
health_prep1 field changed- added
Input schema / examplesAdded value: +[ + { + "country": "BR" + } +]
- Changed
legal_profile1 field changed- added
Input schema / examplesAdded value: +[ + { + "country": "SA" + } +]
- Changed
list_datasets1 field changed- added
Input schema / examplesAdded value: +[ + { + "since": "2026-09-01" + } +]
- Changed
localize_salary1 field changed- added
Input schema / examplesAdded value: +[ + { + "base": 150000, + "home": "US", + "source": "consensus", + "target": "ES" + } +]
- Changed
passport_power1 field changed- added
Input schema / examplesAdded value: +[ + { + "country": "SG" + } +]
- Changed
pension_abroad1 field changed- added
Input schema / examplesAdded value: +[ + { + "amount": 1000, + "currency": "GBP", + "from": "GB", + "to": "PT", + "years": 10 + } +]
- Changed
plan_team_calendar1 field changed- added
Input schema / examplesAdded value: +[ + { + "members": "GB,DE,US" + } +]
- Changed
property_rules1 field changed- added
Input schema / examplesAdded value: +[ + { + "country": "TH" + } +]
- Changed
rank_livability1 field changed- added
Input schema / examplesAdded value: +[ + { + "maxBudget": 3000, + "minInternet": 80 + } +]
- Changed
remittance_cost1 field changed- added
Input schema / examplesAdded value: +[ + { + "amount": 500, + "from": "GB", + "to": "IN" + } +]
- Changed
required_rate1 field changed- added
Input schema / examplesAdded value: +[ + { + "country": "US", + "desiredNet": 100000, + "utilization": 0.7, + "weeksOff": 6 + } +]
- Changed
retire_on_budget1 field changed- added
Input schema / examplesAdded value: +[ + { + "amount": 1500, + "currency": "GBP" + } +]
- Changed
select_region1 field changed- added
Input schema / examplesAdded value: +[ + { + "users": "US-East:40,UK:30,Germany:30" + } +]
- Changed
travel_advice1 field changed- added
Input schema / examplesAdded value: +[ + { + "country": "TH" + } +]
- Changed
withholding_tax1 field changed- added
Input schema / examplesAdded value: +[ + { + "from": "TH", + "to": "GB" + } +]
7 tool updates
- Added
compare_childcare_cost - Added
compare_egov - Added
compare_health_capacity - Added
compare_tax_burden - Added
compare_trade_customs - Added
find_student_visas - Added
property_rules
4 tool updates
- Added
compare_business_entry - Added
compare_effective_tax - Added
find_founder_visas - Added
withholding_tax
3 tool updates
- Added
compare_pension_systems - Added
find_retirement_visas - Added
retire_on_budget
3 tool updates
- Added
compare_safety_stats - Added
health_prep - Added
travel_advice
3 tool updates
- Added
compare_tax_rates - Added
compare_vat - Added
legal_profile
6 tool updates
- Added
compare_banking_access - Added
compare_inflation - Added
country_dossier - Added
list_datasets - Added
pension_abroad - Added
remittance_cost
3 tool updates
- Added
compare_working_time - Added
estimate_employer_cost - Added
plan_team_calendar
2 tool updates
- Added
build_pay_range - Added
compare_occupation_pay
26 tool updates
- First observed
arrival_cost - First observed
calculate_ppp - First observed
calculate_runway - First observed
calculate_wage_bands - First observed
check_residency - First observed
check_schengen - First observed
check_tax_residency_risk - First observed
check_travel_residency - First observed
compare_climate - First observed
compare_connectivity - First observed
compare_contract - First observed
compare_countries - First observed
compare_country_risk - First observed
compare_healthcare - First observed
compare_housing - First observed
compare_public_holidays - First observed
compare_total_cost - First observed
estimate_micro_costs - First observed
find_fire_locations - First observed
find_meeting_slot - First observed
find_nomad_visas - First observed
localize_salary - First observed
passport_power - First observed
rank_livability - First observed
required_rate - First observed
select_region
Related MCP Connectors
Ranks 197 countries for remote workers: tax, cost of living, climate, safety, visas, internet
Find the best cities to live and work remotely: cost of living, internet, safety, weather and more.
Cost-of-living & quality-of-life comparison: take-home pay, equivalent salary, safety-net deltas.
Travel-compliance intelligence and curated booking for digital nomads and long-stay travellers.
Related MCP Servers
- AlicenseAqualityDmaintenanceCost-of-living and quality-of-life comparison across ~165 cities: take-home pay, the equivalent salary you'd need, and the safety-net deltas (childcare, healthcare, vacation, parental leave).69 npm2MIT
- AlicenseNot gradedqualityBmaintenanceEnables geographic parity analysis with 26 read-only tools covering purchasing power, salary localization, cost of living, nomad visas, tax residency, FIRE planning, and relocation costs.MIT

Departi MCP Serverofficial
AlicenseAqualityCmaintenanceTravel compliance and trip planning for digital nomads — visa requirements, tax residency analysis, Schengen 90/180-day tracking, and curated accommodation, transport, and experience search across 189 European destinations.7MIT- AlicenseNot gradedqualityCmaintenanceEnables read-only lookup and comparison of sourced, dated migration data — 39 countries and 27,000+ cities, visa and residence routes, passport entry rules, cost of living, salaries, crime, air quality and climate. Every fact returned includes its value, unit, geographic grain, observation date, source and grade, with unknown values left explicit rather than estimated.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.