Skip to main content
Glama

Mirabello Immigration Intelligence

Compare Programmes

compare_programmes
Read-onlyIdempotent

Compare programmes side by side. Pass a + b (two programme ids) for the canonical versioned comparison artefact from the Mirabello Investment Migration Index: rank, composite, the dimension scores, per-dimension deltas, per-metric leads (a|b|tie) and the human compare page URL where one exists. Or pass ids (2-4) for the classic multi-column comparison of cost, processing, mobility, family inclusion, tax, path to citizenship. Use this, not several single-programme lookups, whenever the user wants two or more programmes compared; ids or names ("Portugal golden visa") both work.

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": "compare_programmes"
  }
}

Input Schema

NameRequiredDescriptionDefault
aNoprogramme id (use with b) for the canonical two-programme artefact
bNoprogramme id (use with a)
idsNo2-4 programme ids for the classic comparison

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
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "description": "Mirabello response envelope. Tool-specific fields vary; the provenance/disclaimer envelope is always present.",
      +  "properties": {
      +    "book_a_consultation": {
      +      "description": "URL to book a Mirabello consultation.",
      +      "type": "string"
      +    },
      +    "data_updated": {
      +      "description": "Date the underlying dataset was last updated.",
      +      "type": "string"
      +    },
      +    "disclaimer": {
      +      "description": "Information, not legal/tax/financial/immigration advice; figures indicative.",
      +      "type": "string"
      +    },
      +    "error": {
      +      "description": "Present only when the request could not be fulfilled.",
      +      "type": "string"
      +    },
      +    "provider": {
      +      "description": "Always \"Mirabello Consultancy\".",
      +      "type": "string"
      +    },
      +    "source": {
      +      "description": "Attribution for the data.",
      +      "type": "string"
      +    },
      +    "terms": {
      +      "description": "Acceptable-use and information-not-advice terms.",
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
  4. Changed4 schema fields changed
    • addedInput schema / properties / a
      Added value: +{
      +  "description": "programme id (use with b) for the canonical two-programme artefact",
      +  "type": "string"
      +}
    • addedInput schema / properties / b
      Added value: +{
      +  "description": "programme id (use with a)",
      +  "type": "string"
      +}
    • addedInput schema / properties / ids / description
      Added value: +"2-4 programme ids for the classic comparison"
    • removedInput schema / required
      Removed value: -[
      -  "ids"
      -]
  5. First observed

TDQS

A4.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered. The description adds useful conduct detail — that both ids and names work and what each mode returns — but since an output schema exists, the enumerated return fields are largely duplication rather than new behavioural context.

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

Conciseness4/5

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

Front-loaded with purpose and scoped by mode in successive sentences, with no filler. It is dense and slightly long due to field enumeration, but every clause carries routing or input information.

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

Completeness5/5

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

Given two mutually exclusive input modes, name-vs-id flexibility, and an output schema that handles return values, the description covers everything needed to select and invoke the tool correctly. No material ambiguity remains.

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% (baseline 3), and the description earns above that by explaining the relationship between parameters: a+b pairs select the canonical artefact while ids (2-4) selects the classic comparison, and that either ids or names are acceptable. This resolves ambiguity the schema alone leaves open (e.g., mutually exclusive modes).

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?

Opens with a specific verb+resource ('Compare programmes side by side') and then distinguishes two distinct modes: canonical a+b artefact versus classic 2-4 id multi-column comparison, enumerating the exact fields each returns. An agent can differentiate this from get_programme or list_programmes immediately.

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 states 'Use this, not several single-programme lookups, whenever the user wants two or more programmes compared,' naming the alternative behaviour to avoid. It also clarifies that names as well as ids are accepted, removing a likely usage failure mode.

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.