Skip to main content
Glama

Check tax-residency risk for remote work abroad

check_tax_residency_risk
Read-onlyIdempotent

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.

Input Schema

NameRequiredDescriptionDefault
daysYesDays of presence in the relevant counting period.
incomeYesGross annual income (USD) the residency cliff would expose.
arrivalNoOptional arrival date — adds leaveBy and residencyDate to the response.
countryYesISO 3166-1 alpha-2 country code (case-insensitive).

Output Schema

NameRequiredDescriptionDefault
okNo
riskNo
datesNo
projectionNo
daysRemainingNo
thresholdDaysNo
pctOfThresholdNo
schengenWarningNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / examples
      Added value: +[
      +  {
      +    "country": "ES",
      +    "days": 120,
      +    "income": 80000
      +  }
      +]
  2. First observed

TDQS

A3.6/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness4/5

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

An output schema exists, so return values need not be 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.

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description 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.

Purpose4/5

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.

Usage Guidelines3/5

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.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources