Skip to main content
Glama

Query Knowledge Graph

query_graph
Read-only

RELATIONAL query over the investment-migration KNOWLEDGE GRAPH (programme entities · countries · blocs · investment thresholds · authorities · legal sources). Two modes: (1) pass id to get a single entity + its neighbours (e.g. id:"programme:dominica-cbi" or "country:GR" or "bloc:EU"); (2) pass filters to find PROGRAMMES matching constraints — type (CBI|RBI), cc, status (e.g. operational), leads_to (citizenship|residence), bloc (EU|GCC|CARICOM), max_investment_usd / min_investment_usd (FX-normalised, best-effort) — each returned with its country, options, authority and official legal source. Answers queries the flat tools cannot, e.g. "open CBI programmes leading to citizenship under $200k with their governing source". Investment figures are best-effort USD; cite the programme official_source for the authoritative amount. Information, not advice.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
ccNoISO 3166-1 alpha-2 country code, uppercase (e.g. "PT" Portugal, "AE" United Arab Emirates, "KN" St Kitts and Nevis).
idNoentity id for neighbours mode (programme:<id> | country:<CC> | bloc:<NAME> | authority:<slug> | source:<host>)
blocNoPolitical/economic bloc filter (e.g. "EU", "Schengen", "CARICOM", "GCC").
typeNoCBI or RBI
limitNoMaximum number of items to return. Responses can be large; use this to keep the answer small.
statusNoProgramme status filter: "operational" (accepting applications), "emerging" (new but operating), "announced" (legislated or proclaimed but NOT in force — no applications), "closed", "paused".
leads_toNoDesired outcome: "citizenship" (a passport) or "residence" (a permit).
max_investment_usdNoUpper bound on the headline minimum investment, in USD.
min_investment_usdNoLower bound on the headline minimum investment, in USD.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
errorNoPresent only when the request could not be fulfilled.
termsNoAcceptable-use and information-not-advice terms.
sourceNoAttribution for the data, when it is not Mirabello Consultancy itself.
book_urlNoLink to request a consultation with a Mirabello specialist, for a personal case.
providerNoAlways "Mirabello Consultancy".
disclaimerNoInformation, not legal/tax/financial/immigration advice; figures indicative.
data_updatedNoDate the underlying dataset was last updated.

Schema Changelog

Changes observed during successful MCP inspections.

  1. 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."
  2. Changed14 schema fields changed
    • addedInput schema / properties / bloc / description
      Added value: +"Political/economic bloc filter (e.g. \"EU\", \"Schengen\", \"CARICOM\", \"GCC\")."
    • addedInput schema / properties / bloc / examples
      Added value: +[
      +  "Schengen"
      +]
    • addedInput schema / properties / cc / description
      Added value: +"ISO 3166-1 alpha-2 country code, uppercase (e.g. \"PT\" Portugal, \"AE\" United Arab Emirates, \"KN\" St Kitts and Nevis)."
    • addedInput schema / properties / cc / examples
      Added value: +[
      +  "PT",
      +  "AE"
      +]
    • addedInput schema / properties / leads_to / description
      Added value: +"Desired outcome: \"citizenship\" (a passport) or \"residence\" (a permit)."
    • addedInput schema / properties / leads_to / examples
      Added value: +[
      +  "citizenship"
      +]
    • addedInput schema / properties / limit / description
      Added value: +"Maximum number of items to return. Responses can be large; use this to keep the answer small."
    • addedInput schema / properties / limit / examples
      Added value: +[
      +  10
      +]
    • addedInput schema / properties / max_investment_usd / description
      Added value: +"Upper bound on the headline minimum investment, in USD."
    • addedInput schema / properties / max_investment_usd / examples
      Added value: +[
      +  500000
      +]
    • addedInput schema / properties / min_investment_usd / description
      Added value: +"Lower bound on the headline minimum investment, in USD."
    • addedInput schema / properties / min_investment_usd / examples
      Added value: +[
      +  100000
      +]
    • addedInput schema / properties / status / description
      Added value: +"Programme status filter: \"operational\" (accepting applications), \"emerging\" (new but operating), \"announced\" (legislated or proclaimed but NOT in force — no applications), \"closed\", \"paused\"."
    • addedInput schema / properties / status / examples
      Added value: +[
      +  "operational"
      +]
  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. Added

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly=true, destructive=false, openWorld=false, so the safety profile is covered. The description adds genuinely useful context beyond that: investment figures are FX-normalised best-effort, the official_source should be cited for authoritative amounts, large responses warrant the limit param, and it is 'information, not advice'.

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

Conciseness4/5

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

It is a dense single paragraph but front-loads the resource and the two modes before the filter list, so the critical routing information comes first. The filter enumeration and caveats are long but each earns its place.

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

Completeness5/5

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

With an output schema present, return values need not be described. The description covers both modes, the filter vocabulary, the FX caveat and citation guidance, so an agent has everything needed to invoke it correctly.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds real value on top by explaining the mode structure (id vs filter parameters) and grouping the filters by intent, which the flat schema does not convey.

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

Purpose5/5

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

The description names a specific verb (relational query) and resource (investment-migration knowledge graph) and enumerates its exact entity types. It explicitly positions itself against the 'flat tools' siblings, so an agent can tell when this relational query differs from list_programmes or get_programme.

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

Usage Guidelines4/5

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

It clearly separates the two usage modes (pass id for neighbours vs pass filters to find programmes) and gives a concrete example query that this tool answers but flat tools cannot. It stops short of naming specific sibling tools as the alternative, relying on the generic 'flat tools' phrase.

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.