Skip to main content
Glama

Mirabello Immigration Intelligence

Fastest Route to Citizenship by Nationality

find_fastest_citizenship
Read-onlyIdempotent

Naturalisation periods and NATIONALITY-BASED FAST TRACKS, verified against the enacted statute. Pass nationality (ISO-3166 alpha-2 of the passport held) to rank covered jurisdictions by how soon THAT nationality may apply for citizenship — e.g. an Ibero-American national reaches Spanish citizenship in 2 years instead of 10 (Codigo Civil art. 22.1), a CPLP national reaches Portuguese citizenship in 7 instead of 10 (Lei 37/81 art. 6 as amended by Lei Organica 1/2026). Pass cc instead for one jurisdiction in full, including the ordinary baseline, who gets NO reduction, and any transitional regime. Periods are qualifying residence before an application may be made and exclude processing time. Coverage is narrow by design — a jurisdiction appears only once its statute has been read in full, so absence means unverified, never that no fast track exists. NOT for buying a passport: for citizenship by investment (the fastest second passport for a budget) use the programme listing or recommendation tools.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "find_fastest_citizenship"
  }
}

Input Schema

NameRequiredDescriptionDefault
ccNoISO-3166 alpha-2 of the destination jurisdiction, e.g. ES, PT, NZ, AU
blocNoLimit the ranking to one bloc, e.g. EU for "fastest EU passport". One call returns every covered member ranked, with presence and requirements, plus the members not yet covered.
nationalityNoISO-3166 alpha-2 of the passport held, e.g. BR, AR, WS, NZ

Output Schema

NameRequiredDescriptionDefault
errorNo
termsNo
sourceNo
book_urlNo
providerNo
disclaimerNo
data_updatedNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed8 schema fields changed
    • changedOutput schema / description
      Previous value: -"Mirabello response envelope. Tool-specific fields vary; the provenance/disclaimer envelope is always present."New value: +"Mirabello envelope; tool fields vary; error only on failure."
    • removedOutput schema / properties / book_url / description
      Removed value: -"Link to request a consultation with a Mirabello specialist, for a personal case."
    • removedOutput schema / properties / data_updated / description
      Removed value: -"Date the underlying dataset was last updated."
    • removedOutput schema / properties / disclaimer / description
      Removed value: -"Information, not legal/tax/financial/immigration advice; figures indicative."
    • removedOutput schema / properties / error / description
      Removed value: -"Present only when the request could not be fulfilled."
    • removedOutput schema / properties / provider / description
      Removed value: -"Always \"Mirabello Consultancy\"."
    • removedOutput schema / properties / source / description
      Removed value: -"Attribution for the data, when it is not Mirabello Consultancy itself."
    • removedOutput schema / properties / terms / description
      Removed value: -"Acceptable-use and information-not-advice terms."
  2. Changed3 schema fields changed
    • removedOutput schema / properties / book_a_consultation
      Removed value: -{
      -  "description": "URL to book a Mirabello consultation.",
      -  "type": "string"
      -}
    • addedOutput schema / properties / book_url
      Added value: +{
      +  "description": "Link to request a consultation with a Mirabello specialist, for a personal case.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / source / description
      Previous value: -"Attribution for the data."New value: +"Attribution for the data, when it is not Mirabello Consultancy itself."
  3. Changed1 schema field changed
    • addedInput schema / properties / bloc
      Added value: +{
      +  "description": "Limit the ranking to one bloc, e.g. EU for \"fastest EU passport\". One call returns every covered member ranked, with presence and requirements, plus the members not yet covered.",
      +  "enum": [
      +    "EU",
      +    "EEA",
      +    "FREE_MOVEMENT"
      +  ],
      +  "type": "string"
      +}
  4. Added

TDQS

A4.4/5.0
Behavior3/5

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

Annotations already declare read-only, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds genuinely useful behavioral context: periods are qualifying residence excluding processing time, and coverage is narrow-by-design so absence means unverified rather than non-existent. What it does not do is go beyond that to describe response shape, but the output schema exists to carry that.

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

Conciseness4/5

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

The scope statement and mode selection come first, and the two statutory examples do real illustrative work rather than padding. It is dense and long, with a couple of clauses that could be trimmed, but nothing is wasted or buried.

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

Completeness5/5

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

For a research-lookup tool with full annotations and an output schema, the description supplies the non-obvious caveats an agent needs: narrow verified-only coverage, absence-means-unverified, and processing time excluded from the stated periods. Nothing required for correct invocation is missing.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description earns above baseline by explaining what each mode yields: nationality produces a cross-jurisdiction ranking, cc produces the ordinary baseline, who gets no reduction, and any transitional regime. It also disambiguates nationality as the passport held rather than a target country.

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

Purpose5/5

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

States a specific verb (rank covered jurisdictions by how soon a given nationality may apply) and resource (naturalisation fast tracks keyed to nationality), with worked examples citing statute articles. It is clearly distinguishable from sibling tools like find_pathways or the citizenship-by-investment programme tools.

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

Usage Guidelines5/5

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

Explicitly prescribes two modes (nationality for ranking across jurisdictions, cc for one jurisdiction in full) and names the exclusion: 'NOT for buying a passport: for citizenship by investment ... use the programme listing or recommendation tools.' Alternatives are pointed at directly.

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.