ImmigrationDB
REMOTE · IMMIGRATIONDB.COM
Read-only migration data: cities, visa routes, entry rules, costs, safety, climate, with sources.
Available components
Last scanned (18 hours ago)
Scores higher than 58% of remote servers
Reachable. Last reached 18 Oct 2026.
Category Maps and Location
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security80
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- No authorisation is required to call this server. Every tool declares its destructiveHint and none is destructive, so open access doesn't expose one. See how to fix → View diagnostics → Partial
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability41
- 0% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Fail
- AI-judged instruction clarity (good).Pass
- Tool/resource definitions use about 15375 tokens (~7/item across 2015 items; 15 tools + 2000 resources), lean.Pass
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management20
- Stability observed for 6 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage71
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 0% of tool parameters carry a description.Fail
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 15 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 16 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 18 Oct 26 +1
- This server's schema is too large to store in full, so we cannot compare its tools day to day functional
- 17 Oct 26 0
- This server's schema is too large to store in full, so we cannot compare its tools day to day functional
- 16 Oct 26 +1
- This server's schema is too large to store in full, so we cannot compare its tools day to day functional
- 15 Oct 26 0
- This server's schema is too large to store in full, so we cannot compare its tools day to day functional
- 14 Oct 26 +1
- This server's schema is too large to store in full, so we cannot compare its tools day to day functional
- 13 Oct 26 0
- Stability: unverified → 0.03 ▲ functional
- This server's schema is too large to store in full, so we cannot compare its tools day to day functional
- 12 Oct 26 65
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 18 Oct 2026 · Probed https://immigrationdb.com/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=immigrationdb.com | CN=WE1,O=Google Trust Services,C=US | 12 Sept 2026 | 11 Dec 2026 | ECDSA 256 | ECDSA-SHA256 | f0502aef981ba09713b8d067735d3fd7 |
| SANs: immigrationdb.com, *.immigrationdb.com | ||||||
| CN=WE1,O=Google Trust Services,C=US (CA) | CN=GTS Root R4,O=Google Trust Services LLC,C=US | 13 Dec 2023 | 20 Feb 2029 | ECDSA 256 | ECDSA-SHA384 | 7ff31977972c224a76155d13b6d685e3 |
| CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) | CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE | 15 Nov 2023 | 28 Jan 2028 | ECDSA 384 | SHA256-RSA | 7fe530bf331343bedd821610493d8a1b |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of immigrationdb.com. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| com. | present | 19718 | 13 | Verified |
| immigrationdb.com. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
| Header | Value |
|---|---|
| strict-transport-security | max-age=63072000; includeSubDomains |
| content-security-policy | default-src 'self'; img-src 'self' data:; style-src 'self' 'unsafe-inline'; script-src 'self'; font-src 'self' data:; connect-src 'self'; frame-ancestors 'none'; base-uri 'self'; form-action 'self' https://formsubmit.co; |
| x-content-type-options | nosniff |
| x-frame-options | DENY |
| referrer-policy | strict-origin-when-cross-origin |
| permissions-policy | geolocation=(), microphone=(), camera=(), payment=(), usb=() |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://immigrationdb.com/mcp | Verified | 200 | |
| http (plaintext) | http://immigrationdb.com/mcp | HTTPS enforced | 301 | https://immigrationdb.com/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
compare_cities Compare cities ~107
Arguments: cities (required), metric_ids (required). Compare canonical public cities on compatible metric definitions with provenance for every cell. Example: {"cities":[{"country":"de","slug":"berlin"},{"country":"de","slug":"munich"}],"metric_ids":["population_total"]} Boundary: Incompatible units, periods, definitions or grains are omitted with reasons; no implicit currency, period or geography conversion occurs.
| Name | Type | Req | Description |
|---|---|---|---|
| cities | array | yes | – |
| metric_ids | array | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| canonical_origin | string | yes | – |
| citations | object | yes | – |
| generated_at | string | yes | – |
| resource_links | array | yes | – |
| schema_version | string | yes | – |
| snapshot_id | string | yes | – |
| status | string | yes | – |
No examples provided.
get_city Get city ~135
Arguments: country (required), slug (required). Get one admitted city with canonical URL, claim-level facts and source metadata. Required arguments are exactly `country` (ISO 3166-1 alpha-2) and `slug` (the canonical city slug, e.g. "berlin" — not the display name). Example: {"country":"de","slug":"berlin"} Boundary: Returns the backwards-compatible full city record by default; use get_city_fact for one metric.
| Name | Type | Req | Description |
|---|---|---|---|
| country | string | yes | – |
| detail | string | – | – |
| metric_ids | array | – | – |
| slug | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| canonical_origin | string | yes | – |
| citations | object | yes | – |
| generated_at | string | yes | – |
| resource_links | array | yes | – |
| schema_version | string | yes | – |
| snapshot_id | string | yes | – |
| status | string | yes | – |
No examples provided.
get_city_fact Get city fact ~143
Arguments: country (required), slug (required), metric_id (required). Return exactly one public city fact with value, unit, geographic grain, dates, source and snapshot provenance. Required arguments are exactly `country` (ISO 3166-1 alpha-2), `slug` (canonical city slug, not the display name) and `metric_id`. Example: {"country":"de","slug":"berlin","metric_id":"population_total"} Boundary: Returns not_available or ambiguous_metric_version instead of guessing across units, periods, definitions or geographic grains.
| Name | Type | Req | Description |
|---|---|---|---|
| country | string | yes | – |
| metric_id | string | yes | – |
| slug | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| canonical_origin | string | yes | – |
| citations | object | yes | – |
| generated_at | string | yes | – |
| resource_links | array | yes | – |
| schema_version | string | yes | – |
| snapshot_id | string | yes | – |
| status | string | yes | – |
No examples provided.
get_country Get country ~88
Arguments: cc (required). Get one admitted country page record and official visa-route handoffs. It takes exactly one argument: `cc`, the ISO 3166-1 alpha-2 country code (e.g. "de") — not `country`. Example: {"cc":"de"} Boundary: Only public country records and their published handoffs are returned.
| Name | Type | Req | Description |
|---|---|---|---|
| cc | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| canonical_origin | string | yes | – |
| citations | object | yes | – |
| generated_at | string | yes | – |
| resource_links | array | yes | – |
| schema_version | string | yes | – |
| snapshot_id | string | yes | – |
| status | string | yes | – |
No examples provided.
get_entry_rule Get entry rule ~72
Arguments: passport (required), destination. Get one passport entry rule using the canonical legal/entry URI identity. Example: {"passport":"lv","destination":"us"} Boundary: A missing answer is returned explicitly and is never replaced with an assumption.
| Name | Type | Req | Description |
|---|---|---|---|
| destination | string | – | – |
| passport | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| canonical_origin | string | yes | – |
| citations | object | yes | – |
| generated_at | string | yes | – |
| resource_links | array | yes | – |
| schema_version | string | yes | – |
| snapshot_id | string | yes | – |
| status | string | yes | – |
No examples provided.
get_legal_route Get legal route ~80
Arguments: destination (required), route_id (required). Get one admitted legal-route record with its official source. Example: {"destination":"de","route_id":"highly-skilled"} Boundary: Missing or incomplete route fields remain explicit; the response does not infer a legal outcome.
| Name | Type | Req | Description |
|---|---|---|---|
| destination | string | yes | – |
| route_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| canonical_origin | string | yes | – |
| citations | object | yes | – |
| generated_at | string | yes | – |
| resource_links | array | yes | – |
| schema_version | string | yes | – |
| snapshot_id | string | yes | – |
| status | string | yes | – |
No examples provided.
get_report Get report ~73
Arguments: report_id (required). Get one public report envelope with canonical and machine-resource URLs. Example: {"report_id":"warmest-published-cities-across-current-coverage"} Boundary: The report response is bounded by the published report contract and does not expose review-only rows.
| Name | Type | Req | Description |
|---|---|---|---|
| report_id | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| canonical_origin | string | yes | – |
| citations | object | yes | – |
| generated_at | string | yes | – |
| resource_links | array | yes | – |
| schema_version | string | yes | – |
| snapshot_id | string | yes | – |
| status | string | yes | – |
No examples provided.
list_blocks List blocks ~74
Arguments: limit, cursor. List stable reviewed metric blocks with observed metric, fact and country coverage. Example: {"limit":20} Boundary: Block order and IDs are deterministic; coverage counts describe the current public snapshot only.
| Name | Type | Req | Description |
|---|---|---|---|
| country | string | – | – |
| cursor | string | – | – |
| limit | integer | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| canonical_origin | string | yes | – |
| citations | object | yes | – |
| generated_at | string | yes | – |
| resource_links | array | yes | – |
| schema_version | string | yes | – |
| snapshot_id | string | yes | – |
| status | string | yes | – |
No examples provided.
list_metrics List metrics ~125
Arguments: country, block, query, comparison_eligible, limit, cursor. List reviewed metric definitions and observed public snapshot coverage with bounded filters and pagination. Example: {"query":"population","country":"de","limit":20} Boundary: Descriptions and units come from the reviewed registry; missing ontology is reported as a contract gap, not generated from a label.
| Name | Type | Req | Description |
|---|---|---|---|
| block | string | – | – |
| comparison_eligible | boolean | – | – |
| country | string | – | – |
| cursor | string | – | – |
| limit | integer | – | – |
| query | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| canonical_origin | string | yes | – |
| citations | object | yes | – |
| generated_at | string | yes | – |
| resource_links | array | yes | – |
| schema_version | string | yes | – |
| snapshot_id | string | yes | – |
| status | string | yes | – |
No examples provided.
list_reports List reports ~78
Arguments: category, limit, cursor. List public ImmigrationDB reports by optional category with bounded cursor pagination. Example: {"category":"Population","limit":20} Boundary: Lists published reports only; report rows retain their own source and method metadata.
| Name | Type | Req | Description |
|---|---|---|---|
| category | string | – | – |
| cursor | string | – | – |
| limit | integer | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| canonical_origin | string | yes | – |
| citations | object | yes | – |
| generated_at | string | yes | – |
| resource_links | array | yes | – |
| schema_version | string | yes | – |
| snapshot_id | string | yes | – |
| status | string | yes | – |
No examples provided.
resolve_city Resolve city ~85
Arguments: query (required), limit. Resolve a natural-language city query to bounded ranked public candidates without silently selecting an ambiguous country. Example: {"query":"Berlin, Germany","limit":5} Boundary: A bare or ambiguous city name returns candidates and ambiguity; it must not auto-select a non-exact country.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | – |
| query | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| canonical_origin | string | yes | – |
| citations | object | yes | – |
| generated_at | string | yes | – |
| resource_links | array | yes | – |
| schema_version | string | yes | – |
| snapshot_id | string | yes | – |
| status | string | yes | – |
No examples provided.
search_destinations Search destinations ~86
Arguments: query (required), limit, cursor. Search admitted ImmigrationDB country and city identities with bounded cursor pagination. Example: {"query":"Berlin, Germany","limit":5} Boundary: Returns ranked public identities; it does not guess a missing country or expose data-only records.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | – |
| limit | integer | – | – |
| query | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| canonical_origin | string | yes | – |
| citations | object | yes | – |
| generated_at | string | yes | – |
| resource_links | array | yes | – |
| schema_version | string | yes | – |
| snapshot_id | string | yes | – |
| status | string | yes | – |
No examples provided.
search_entry_rules Search entry rules ~104
Arguments: passport, destination, purpose, limit, cursor. Search passport entry rules from the admitted snapshot; unknown and unavailable decisions remain explicit. Example: {"passport":"lv","destination":"us","limit":20} Boundary: Only accepted public entry answers are returned; verify the responsible authority before travel.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | – |
| destination | string | – | – |
| limit | integer | – | – |
| passport | string | – | – |
| purpose | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| canonical_origin | string | yes | – |
| citations | object | yes | – |
| generated_at | string | yes | – |
| resource_links | array | yes | – |
| schema_version | string | yes | – |
| snapshot_id | string | yes | – |
| status | string | yes | – |
No examples provided.
search_facts Search facts ~216
Arguments: countries, filters, sort_metric, sort_order, limit, cursor, diagnostic. Run bounded deterministic numeric filters over eligible public city facts with explicit counts and provenance. Example: {"countries":["de"],"filters":[{"metric_id":"population_total","op":">","value":100000}],"sort_metric":"population_total","sort_order":"desc","limit":20} Boundary: Filters are ANDed, results are capped and tie-broken by canonical entity ID; wrong-grain or non-comparable facts are excluded unless diagnostic mode is explicit.
| Name | Type | Req | Description |
|---|---|---|---|
| countries | array | – | – |
| country | string | – | – |
| cursor | string | – | – |
| diagnostic | boolean | – | – |
| diagnostic_view | boolean | – | – |
| direction | string | – | – |
| filters | array | – | – |
| limit | integer | – | – |
| metric_filters | array | – | – |
| sort | object | – | – |
| sort_direction | string | – | – |
| sort_metric | string | – | – |
| sort_order | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| canonical_origin | string | yes | – |
| citations | object | yes | – |
| generated_at | string | yes | – |
| resource_links | array | yes | – |
| schema_version | string | yes | – |
| snapshot_id | string | yes | – |
| status | string | yes | – |
No examples provided.
search_visa_routes Search visa routes ~99
Arguments: destination (required), purpose, limit, cursor. Search admitted destination visa and residence routes without inventing missing eligibility data. Example: {"destination":"de","purpose":"work","limit":20} Boundary: Returns sourced route families; it is reference information, not legal advice or an eligibility decision.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | – |
| destination | string | yes | – |
| limit | integer | – | – |
| purpose | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| canonical_origin | string | yes | – |
| citations | object | yes | – |
| generated_at | string | yes | – |
| resource_links | array | yes | – |
| schema_version | string | yes | – |
| snapshot_id | string | yes | – |
| status | string | yes | – |
No examples provided.
How do I install the ImmigrationDB MCP server?
ImmigrationDB is a hosted endpoint at https://immigrationdb.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · immigrationdb.com
claude mcp add --transport http streltcoff-immigrationdb 'https://immigrationdb.com/mcp'
What is the ImmigrationDB MCP server?
ImmigrationDB is an MCP server listed in the public MCP registry as io.github.streltcoff/immigrationdb. Read-only migration data: cities, visa routes, entry rules, costs, safety, climate, with sources. This page covers its hosted endpoint (https://immigrationdb.com/mcp).
Is the ImmigrationDB MCP server safe to use?
ImmigrationDB scores 68 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
Does the ImmigrationDB MCP server require authentication?
No. We connected to ImmigrationDB without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.
Is the ImmigrationDB MCP server still maintained?
ImmigrationDB is still listed as active in the MCP registry. We last reached this channel on 18 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.