Geo-Parity
REMOTE · GEO-PARITY.COM · SCANNED SEP 21
Cost of living, fair global pay, healthcare costs, nomad visas and tax residency. Free, no key.
Available components
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 Security83
- 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 is configured correctly; the domain's records validate against the full chain to the root. View diagnostics → Pass
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability85
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 18248 tokens (~276/item across 66 items; 62 tools + 4 resources), over budget; trim descriptions and params. See how to fix → Fail
- Tools include usage examples.Pass
Stability & Change Management87
- Stability observed for 26 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage98
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 92% of tool parameters carry a description.Partial
- Structured output schemas are declared (98% of tools); any adoption earns full credit.Pass
Tool Safety75
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- 0 of 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "compare_occupation_pay" implies "pay" and declares readOnlyHint instead, contradicting what its own name says it does. See how to fix → Fail
- An AI judge read all 64 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
How do I install the Geo-Parity MCP server?
Geo-Parity is a hosted endpoint at https://geo-parity.com/api/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 · geo-parity.com
claude mcp add --transport http com-geo-parity-geo-parity 'https://geo-parity.com/api/mcp'
{
"mcpServers": {
"com-geo-parity-geo-parity": {
"url": "https://geo-parity.com/api/mcp"
}
}
} {
"servers": {
"com-geo-parity-geo-parity": {
"type": "http",
"url": "https://geo-parity.com/api/mcp"
}
}
} [mcp_servers.com-geo-parity-geo-parity] url = "https://geo-parity.com/api/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"com-geo-parity-geo-parity": {
"type": "remote",
"url": "https://geo-parity.com/api/mcp",
"enabled": true
}
}
} openclaw mcp add com-geo-parity-geo-parity --url 'https://geo-parity.com/api/mcp' --transport streamable-http
mcp_servers:
com-geo-parity-geo-parity:
url: "https://geo-parity.com/api/mcp" {
"McpServers": {
"com-geo-parity-geo-parity": {
"Transport": "http",
"Url": "https://geo-parity.com/api/mcp"
}
}
} assistant mcp add com-geo-parity-geo-parity -t streamable-http -u 'https://geo-parity.com/api/mcp'
{
"mcpServers": {
"com-geo-parity-geo-parity": {
"type": "http",
"url": "https://geo-parity.com/api/mcp"
}
}
} The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.
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.
- 21 Sept 26 +1
- Tool “list_datasets” rewrote its description, which is the text the model reads security
- Tool “passport_power” rewrote its description, which is the text the model reads security
- 20 Sept 26 0
- New tool “find_country_fit” functional
- 19 Sept 26 +2
- Schema quality: fail → pass ▲ functional
- New tool “compare_food_cost” functional
- 18 Sept 26 +1
- New tool “banking_access” functional
- 15 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 63 to 67. That category is still filling its 30-day observation window: 19 days of observed history at the previous scan, 20 at this one. The score rises as the window fills, whether or not the server changes.
- 14 Sept 26 0
- Tool “country_dossier” rewrote its description, which is the text the model reads security
- New tool “driving_rules” functional
- New tool “employment_rules” functional
- 13 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 57 to 60. That category is still filling its 30-day observation window: 17 days of observed history at the previous scan, 18 at this one. The score rises as the window fills, whether or not the server changes.
- 11 Sept 26 +3
- The server now declares the “prompts” capability functional
- The server now declares the “resources” capability functional
- First check of Schema quality: 100 functional
- New prompt “fair_local_salary” functional
- New prompt “price_level_provenance” functional
- New prompt “relocation_brief” functional
- New prompt “remote_work_setup” functional
- New prompt “retire_on_budget” functional
- New resource “countries” functional
- New resource “datasets” functional
- New resource “exchange-regimes” functional
- New resource “methodology-price-levels” functional
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 21 Sept 2026 · Probed https://geo-parity.com/api/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=geo-parity.com | CN=WE1,O=Google Trust Services,C=US | 15 Sept 2026 | 14 Dec 2026 | ECDSA 256 | ECDSA-SHA256 | f5100aa329172f900ed6cd15c6a6291d |
| SANs: geo-parity.com, *.geo-parity.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 secure
Validation of geo-parity.com. — Secure
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| com. | present | 19718 | 13 | Verified |
| geo-parity.com. | present | 2371 | 13 | Verified |
| geo-parity.com. | Verified address RRset verified with the apex keys |
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; preload |
| content-security-policy | default-src 'none'; frame-ancestors 'none' |
| x-content-type-options | nosniff |
| referrer-policy | strict-origin-when-cross-origin |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://geo-parity.com/api/mcp | Verified | 200 | |
| http (plaintext) | http://geo-parity.com/api/mcp | HTTPS enforced | 301 | https://geo-parity.com/api/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 →
driving_rules Road rules before you drive — side, speed limits, alcohol limit, equipment, IDP ~410
What a visitor needs before driving in each of the 41 spine countries: which side of the road, the national default urban, rural and motorway speed limits in the unit signed there (`speedUnit` km/h or mph, never converted), the blood-alcohol limit for ordinary drivers in g/100 ml (`bacNote` for novice and professional limits; 0 is a real zero-tolerance rule), equipment the law requires carried from a fixed vocabulary, and whether an International Driving Permit is needed (`idpRequired`, from GOV.UK's per-country table for a UK photocard licence; absent where that table is silent) — a hand-curated register with the authority's page and check date per row, added 13 Sep 2026; secondary-sourced entries are marked `confidence: "secondary"`. A limit not set nationally is ABSENT, never zero (Germany's motorways, US and Canadian limits). `country` for one entry, `countries` for a side-by-side; without either, ranks by `metric` (`speedMotorway` default, `speedUrban`, `speedRural`, `bacLimitPct`), highest first unless `sort=lowest`, optionally filtered by `drivesOn` and `idpRequired`; mph limits are ordered by their km/h equivalent for the sort only. For information only; conditions change — every response says so first.
| Name | Type | Req | Description |
|---|---|---|---|
| countries | string | – | Comma-separated ISO alpha-2 codes, two or more, for a side-by-side. |
| country | string | – | One ISO alpha-2 code. |
| drivesOn | string | – | Restrict the ranking to one side of the road. |
| idpRequired | string | – | Restrict the ranking by whether an International Driving Permit is needed. |
| limit | number | – | Return at most this many countries. |
| metric | string | – | Ranking metric when neither country nor countries is given. |
| sort | string | – | Highest first (default) or lowest first. |
| Name | Type | Req | Description |
|---|---|---|---|
| attribution | object | – | – |
| bacLimitPct | number | – | – |
| caveats | array | – | – |
| checkedOn | string | – | – |
| drivesOn | string | – | – |
| excluded | array | – | – |
| idpRequired | boolean | – | – |
| ok | boolean | – | – |
| requiredEquipment | array | – | – |
| rows | array | – | – |
| source | string | – | – |
| speedMotorway | number | – | – |
| speedRural | number | – | – |
| speedUnit | string | – | – |
| speedUrban | number | – | – |
{"country":"FR"} employment_rules Statutory employment floors — annual leave, notice, probation, weekly hours ~341
The minimums a job's law sets in each of the 41 spine countries: paid annual leave in days with its `basis` (`working` or `calendar`, never converted), the minimum notice an employer and an employee must give in weeks (`noticeNote` where it rises with tenure), the probation ceiling in months and the ordinary weekly-hours ceiling — a hand-curated register with the labour authority's page and check date per row, added 13 Sep 2026; an entry read from secondary reporting because the official page could not be fetched is marked `confidence: "secondary"`. A fact the law does not set is ABSENT, never zero (the US sets no paid leave, notice or hours ceiling); federal countries carry the federal floor. `country` for one entry, `countries` for a side-by-side; without either, ranks by `metric` (`minAnnualLeaveDays` default, `noticeEmployerMinWeeks`, `probationMaxMonths`, `maxWeeklyHours`), most first unless `sort=fewest`, with the countries that set no figure in `excluded`. Statutory floors only — contracts and collective agreements usually give more. For information only — not legal advice; every response says so first.
| Name | Type | Req | Description |
|---|---|---|---|
| countries | string | – | Comma-separated ISO alpha-2 codes, two or more, for a side-by-side. |
| country | string | – | One ISO alpha-2 code. |
| limit | number | – | Return at most this many countries. |
| metric | string | – | Ranking metric when neither country nor countries is given. |
| sort | string | – | Most first (default) or fewest first. |
| Name | Type | Req | Description |
|---|---|---|---|
| attribution | object | – | – |
| basis | string | – | – |
| caveats | array | – | – |
| checkedOn | string | – | – |
| excluded | array | – | – |
| maxWeeklyHours | number | – | – |
| minAnnualLeaveDays | number | – | – |
| noticeEmployeeMinWeeks | number | – | – |
| noticeEmployerMinWeeks | number | – | – |
| ok | boolean | – | – |
| probationMaxMonths | number | – | – |
| rows | array | – | – |
| source | string | – | – |
{"country":"DE"} estimate_employer_cost Employer cost of a hire, by country ~348
What a hire actually costs the employer: the gross wage plus the employer's own social security contributions at the rate OECD Taxing Wages publishes (single earner, no children, 100% of the average wage), applied as a flat rate — the figure employer-of-record services quote for a fee. Pass `gross` (annual USD) for your own figure; without it the wage is the pay-range midpoint for the `occupation` and `seniority`, and `basis` says whether that wage is measured (ILOSTAT) or modelled. Employee-side rates and OECD's tax wedge are returned for context and never applied. Without `country`, ranks the spine by employer contribution rate. Coverage is the 25 spine countries OECD measures; the other sixteen return NO_DATA, never a 0% rate (New Zealand's 0% is real: it has no employer contributions). Every response carries caveats — contribution ceilings, excluded schemes — and it is not payroll or legal advice.
| Name | Type | Req | Description |
|---|---|---|---|
| country | string | – | ISO alpha-2 code (e.g. "DE"). Omit for a ranking. |
| gross | number | – | Gross annual wage in USD. When omitted, the pay-range midpoint is used. |
| limit | number | – | Return at most this many countries in a ranking. |
| occupation | string | – | ISCO-08 major group id for the default wage (default `total`). Ignored when `gross` is given. |
| seniority | string | – | Seniority for the default wage (default `mid`). Ignored when `gross` is given. |
| sort | string | – | Ranking direction. Ignored when `country` is given. |
| Name | Type | Req | Description |
|---|---|---|---|
| attribution | object | – | – |
| caveats | array | – | – |
| country | object | – | – |
| employee | object | – | – |
| employer | object | – | – |
| oecd | object | – | – |
| ok | boolean | – | – |
| rows | array | – | – |
| taxWedge | number | – | – |
| wage | object | – | – |
{"country":"DE","gross":60000} estimate_micro_costs Estimate everyday prices in two countries (Pint & Property Index) ~254
Estimates local prices for a 32-item everyday basket (rent, pint of beer, groceries, transport, gym, …) in two countries, derived as usPrice × pppIndex^elasticity — non-tradables like rent swing harder across borders than world-priced goods like petrol (Balassa-Samuelson-style model). Returns per-item prices in USD and local currency, category subtotals, and a single-person monthly budget rollup. Model estimates, not price quotes.
| Name | Type | Req | Description |
|---|---|---|---|
| base | string | yes | ISO 3166-1 alpha-2 country code to compare FROM (case-insensitive). |
| baseCity | string | – | Optional city slug for the base side (sub-national cost adjustment, e.g. 'london'). Enables intra-country city comparisons like London vs Hull. |
| source | string | – | Optional dataset override. Defaults to the consumption basket (worldbank-cons) when it covers both countries, else consensus; the response echoes the source used. |
| target | string | yes | ISO 3166-1 alpha-2 country code to compare TO (must differ from base). |
| targetCity | string | – | Optional city slug for the target side (e.g. 'hull'). |
| Name | Type | Req | Description |
|---|---|---|---|
| categoryTotals | array | – | – |
| items | array | – | – |
| monthlyBudget | object | – | – |
| ok | boolean | – | – |
| source | object | – | – |
{"base":"GB","target":"TH"} find_country_fit Which country fits me — ranked by your own weights ~376
Ranks countries by a fit score that blends the livability composite (internet speed, safety, healthcare access, air quality, English — measured, each with its own source year) with how far a monthly budget in USD goes against modelled essentials, using 0–10 weights per dimension (`cost`, `internet`, `safety`, `healthcare`, `air`, `english`; default 5 each). Region, budget and visa are FILTERS, never weights: `region` (a World Bank region name), `withinBudget` (default true; false keeps countries the budget does not cover), `needsVisa` (an eligible digital nomad visa on the budget). Each row carries the fit, quality and cost scores, modelled essentials, budget ratio and the nomad visa matched. A ranking of published figures against the weights given, not a recommendation; every response says so first.
| Name | Type | Req | Description |
|---|---|---|---|
| air | number | – | Weight 0–10 for air (default 5). |
| budget | number | – | Monthly budget in USD. |
| cost | number | – | Weight 0–10 for cost (default 5). |
| english | number | – | Weight 0–10 for english (default 5). |
| healthcare | number | – | Weight 0–10 for healthcare (default 5). |
| internet | number | – | Weight 0–10 for internet (default 5). |
| limit | number | – | Maximum rows (default 10). |
| needsVisa | boolean | – | Keep only countries with a digital nomad visa the budget meets. |
| region | string | – | Keep only countries in this World Bank region. |
| safety | number | – | Weight 0–10 for safety (default 5). |
| withinBudget | boolean | – | Keep only countries whose modelled essentials fit inside the budget. |
| Name | Type | Req | Description |
|---|---|---|---|
| attribution | object | – | – |
| caveats | array | – | – |
| excluded | object | – | – |
| inputs | object | – | – |
| ok | boolean | – | – |
| rows | array | – | – |
{"budget":2500,"cost":6,"healthcare":8,"safety":9} find_fire_locations Find where a portfolio can fund early retirement ~267
Geo-arbitrage FIRE analysis: given a portfolio and safe withdrawal rate, returns every country where the passive income sustains a lean ($32k US-equivalent/yr), comfortable ($55k), upper ($90k), or luxury ($150k) lifestyle at local purchasing-power prices — plus FIRE numbers per tier, nomad-visa income-floor eligibility, local-currency income, an SWR sensitivity band, (with savings/coast params) years until each country unlocks, and — where covered — a `statePension` overlay with the OECD net pension replacement rate (safety net from pension age; not subtracted from the FIRE numbers). Estimates only — not financial advice.
| Name | Type | Req | Description |
|---|---|---|---|
| coast | string | – | Set to 1 for Coast-FIRE mode (project growth with zero further savings). |
| portfolio | number | yes | Total investable portfolio (USD). |
| return | number | – | Expected real annual return, fraction (0.05) or percent (5). Default 0.05. |
| savings | number | – | Monthly savings (USD) — enables the years-to-FIRE planner. |
| source | string | – | – |
| swr | number | – | Safe withdrawal rate as fraction (0.04) or percent (4). Default 0.04. |
| Name | Type | Req | Description |
|---|---|---|---|
| annualIncome | number | – | – |
| monthlyIncome | number | – | – |
| ok | boolean | – | – |
| rows | array | – | – |
| sensitivity | array | – | – |
{"portfolio":400000,"swr":0.04} find_founder_visas Founder, start-up and investor visas, matched to available funds ~350
Which of the 41 spine countries would let a founder in, and on what terms — a hand-curated register of founder/start-up routes, investor routes and `kind: "none"` entries, each with its one published money figure and what it is for (`minFunds.basis`: an investment to make, subsistence funds to hold, or funding raised from investors), whether an endorsing body must approve the project, duration, renewability, a path-to-residency flag, the official page it was read from and the check date; an entry read from secondary reporting because the official site could not be fetched is marked `confidence: "secondary"`. Give `funds` with optional `currency` for a match: routes the funds reach, near misses within 25%, routes needing money raised from investors rather than held, routes with no published figure, exclusions with the reason, and the countries with no route. Or `country` for one entry, `countries` for a side-by-side. Thresholds are compared in USD at the site's FX snapshot; endorsement and business-plan tests are not modelled, and programmes pause and reprice. Published rates and facts on the dates shown, for information only — not tax, legal or immigration advice; every response says so first.
| Name | Type | Req | Description |
|---|---|---|---|
| countries | string | – | Comma-separated ISO alpha-2 codes, two or more, for a side-by-side. |
| country | string | – | One ISO alpha-2 code for a single entry. |
| currency | string | – | ISO 4217 code of `funds` (e.g. "GBP"). |
| funds | number | – | Funds available to commit, in `currency`. |
| Name | Type | Req | Description |
|---|---|---|---|
| attribution | object | – | – |
| caveats | array | – | – |
| fundingRaised | array | – | – |
| kind | string | – | – |
| nearMiss | array | – | – |
| none | array | – | – |
| ok | boolean | – | – |
| qualify | array | – | – |
| rows | array | – | – |
{"currency":"GBP","funds":50000} find_meeting_slot Score team timezone friction + find the meeting window ~259
Given a set of cities/timezones and each participant's local working hours, find the longest UTC window where everyone is simultaneously within their working day (DST-accurate), AND score the team's overall timezone friction. Returns the overlap in UTC and in each participant's local time (or null with the best partial coverage), plus a `friction` block: a 0–100 score, grade (Effortless/Manageable/Strained/Broken), daily shared hours, coverage, and the `loneWolf` — the member whose removal would free the most team overlap. Useful for scheduling and for hiring/team-composition decisions.
| Name | Type | Req | Description |
|---|---|---|---|
| date | string | – | Reference date (ISO YYYY-MM-DD) for DST. Defaults to today (UTC). |
| end | number | – | Default working-window end, minutes from local midnight (default 1080 = 18:00). |
| hours | string | – | Optional per-zone overrides aligned to `zones`, e.g. '540-1080;420-720'. |
| start | number | – | Default working-window start, minutes from local midnight (default 540 = 09:00). |
| zones | array | yes | IANA timezone identifiers, e.g. 'Europe/London'. |
| Name | Type | Req | Description |
|---|---|---|---|
| bestPartialCount | number | – | – |
| friction | object | – | – |
| ok | boolean | – | – |
| overlap | object|null | – | – |
| referenceDate | string | – | – |
{"zones":["Europe/London","America/New_York","Australia/Sydney"]} find_nomad_visas Match income to digital nomad visas ~222
Digital-nomad visa Income Matcher: given a monthly remote income (any currency) and household size, computes each program's real income threshold (base plus its published per-dependent uplift) and returns the programs you qualify for plus the near misses just out of reach — with duration, renewability, tax notes and official source URLs. Curated summaries — verify with the official source before applying.
| Name | Type | Req | Description |
|---|---|---|---|
| children | number | – | Number of dependent children (each adds the program's child uplift). |
| currency | string | – | ISO currency code for `income` (e.g. EUR, GBP, INR). Defaults to USD. |
| income | number | – | Your gross monthly income (in `currency`, default USD). |
| minDuration | number | – | Minimum program duration in months. |
| partners | number | – | 1 if bringing a partner (raises each program's threshold by its partner uplift). |
| renewable | string | – | Set to 1 to require renewable programs. |
| residency | string | – | Set to 1 to require a path to permanent residency. |
| Name | Type | Req | Description |
|---|---|---|---|
| household | object | – | – |
| incomeUsd | number | – | Your income converted to USD, used for matching. |
| matches | array | – | Programs you qualify for; each carries requiredUsd (household threshold) and shortfallUsd (≤0). |
| nearMisses | array | – | Programs within ~$1,000/mo of qualifying, closest first. |
| ok | boolean | – | – |
| total | number | – | – |
| updated | string | – | – |
{"children":1,"currency":"EUR","income":4000,"partners":1} find_retirement_visas Retirement and passive-income visas, matched to a monthly income ~391
Which of the 41 spine countries would let a retiree in, and on what terms — a hand-curated register of retiree, passive-income and deposit routes (kind), each with minimum age, monthly income or deposit threshold in its own currency, duration, renewability, a path-to-residency flag, the official page it was read from and the check date; an entry read from secondary reporting because the official site could not be fetched is marked `confidence: "secondary"`, and countries with no route are `kind: "none"` with a line saying why. Give `income` (monthly) with optional `currency`, `age` and `savings` for a match: routes the income reaches, near misses within 25%, deposit routes (judged only when `savings` is given — a pension says nothing about a fixed deposit), routes with no published figure, exclusions with the reason, and the countries with no route. Or `country` for one entry, `countries` for a side-by-side. Thresholds are compared in USD at the site's FX snapshot; dependants raise them. Published rules and modelled figures on the dates shown, for information only — entitlements depend on a person's record and consulates decide; every response says so first.
| Name | Type | Req | Description |
|---|---|---|---|
| age | number | – | Applicant age; routes with a higher minimum are excluded. |
| countries | string | – | Comma-separated ISO alpha-2 codes, two or more, for a side-by-side. |
| country | string | – | One ISO alpha-2 code for a single entry. |
| currency | string | – | ISO 4217 code of `income` and `savings` (e.g. "GBP"). |
| income | number | – | Monthly income to match, in `currency`. |
| savings | number | – | Lump sum available, in `currency`; unlocks deposit routes. |
| Name | Type | Req | Description |
|---|---|---|---|
| attribution | object | – | – |
| caveats | array | – | – |
| depositRoutes | array | – | – |
| kind | string | – | – |
| nearMiss | array | – | – |
| none | array | – | – |
| ok | boolean | – | – |
| qualify | array | – | – |
| rows | array | – | – |
{"age":62,"currency":"GBP","income":1500} find_student_visas Student visas matched to the funds a student can show ~286
Student-visa routes for the 41 spine countries — a hand-curated register of the funds a student must show (amount, currency, per month or year), the work hours allowed in term, the post-study stay in months, a path-to-residency flag, the official page it was read from and the check date; secondary-sourced entries are marked, and countries with no route are `kind: "none"`. No tuition figures: no citable structured source exists. Give `funds` with optional `currency` and `per` (year default; month) for a match: routes the funds reach, near misses within 25%, routes with no published figure, exclusions with the reason, and the countries with no route. Or `country` for one entry, `countries` for a side-by-side. Funds are compared per year in USD at the site's FX snapshot; figures move each academic year. Published rules for information only — not immigration advice; every response says so first.
| Name | Type | Req | Description |
|---|---|---|---|
| countries | string | – | Comma-separated ISO alpha-2 codes, two or more, for a side-by-side. |
| country | string | – | One ISO alpha-2 code. |
| currency | string | – | – |
| funds | number | – | Living funds the student can show, in `currency`, for `per`. |
| per | string | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| attribution | object | – | – |
| caveats | array | – | – |
| kind | string | – | – |
| nearMiss | array | – | – |
| none | array | – | – |
| ok | boolean | – | – |
| qualify | array | – | – |
| rows | array | – | – |
| unpublished | array | – | – |
{"currency":"GBP","funds":20000} health_prep Vaccines, yellow-fever certificate and malaria, by country ~264
What to sort out with a travel clinic, as facts from TravelHealthPro (NaTHNaC, the UK's national travel-health centre) with the source page linked per row: the yellow-fever certificate position (required for all arrivals, required when arriving from a risk country, or none), whether the country itself carries yellow-fever risk, the vaccine names recommended for most UK travellers and for some, and whether malaria guidance exists — plus the health-risk names the FCDO lists. Give `country` for one country or `countries` (two or more) for a side-by-side. Facts only, never NaTHNaC's prose; the reasoning is at the linked page. These are recommendations for UK travellers and depend on itinerary and medical history — a clinic decides for a person. The UK itself is NO_DATA (no FCDO page, so no link), never an empty list. Official sources on the dates shown, for information only — conditions change; check the source before travelling. Every response says so first.
| Name | Type | Req | Description |
|---|---|---|---|
| countries | string | – | Comma-separated ISO alpha-2 codes, two or more. Ignored when `country` is given. |
| country | string | – | One ISO alpha-2 code (e.g. "BR"). |
| Name | Type | Req | Description |
|---|---|---|---|
| attribution | object | – | – |
| caveats | array | – | – |
| malaria | boolean | – | – |
| ok | boolean | – | – |
| rows | array | – | – |
| vaccinesMost | array | – | – |
| vaccinesSome | array | – | – |
| yellowFeverCertificate | string | – | – |
{"country":"BR"} legal_profile Women, Business and the Law: what the statute says, by country ~364
The World Bank's Women, Business and the Law reading of each country's statute (2026 edition, 41 spine countries). Give `country` for one country: the Legal Frameworks index (0-100), eight topic scores (mobility, workplace, pay, marriage, parenthood, entrepreneurship, assets, pension), the coded answers grouped by topic — can a woman choose where to live, travel abroad, get a job the same way as a man, is equal pay for work of equal value mandated, can she obtain a divorce and head a household, own and inherit equally, open a business and access credit without discrimination — and the full, partial and mandatory retirement ages for men and women. Give `countries` (two or more) for the index, topics and ages side by side, or neither for the spine ranked by `metric` (`index`, a topic, `retirementAgeMen`, `retirementAgeWomen`). A partial answer keeps WBL's fraction as `{partial}` rather than rounding to yes or no; a true says the provision exists in law, not that it is enforced. Statutory figures for information only — not legal or tax advice; every response says so first.
| Name | Type | Req | Description |
|---|---|---|---|
| countries | string | – | Comma-separated ISO alpha-2 codes, two or more, for a side-by-side comparison. Ignored when `country` is given. |
| country | string | – | One ISO alpha-2 code for the full profile (e.g. "SA"). |
| limit | number | – | Return at most this many countries in a ranking. |
| metric | string | – | Ranking metric when neither `country` nor `countries` is given. |
| sort | string | – | Ranking direction. Ignored when `countries` is given. |
| Name | Type | Req | Description |
|---|---|---|---|
| attribution | object | – | – |
| caveats | array | – | – |
| edition | number | – | – |
| index | number | – | – |
| law | object | – | – |
| ok | boolean | – | – |
| retirement | object | – | – |
| rows | array | – | – |
| topics | object | – | – |
{"country":"SA"} list_datasets Every dataset on the site, and when it last changed ~322
The registry of every dataset behind the site's figures — price levels, wages, housing, healthcare, holidays, working time, inflation, remittance prices, and the rest. Each carries `updated`, the date it was last REBUILT (a fetcher ran, or a person reviewed it), and — where the dataset knows it — `vintage`, what the figures themselves describe: a year, an edition, a quarter, or the source's own publication date. THE TWO ARE DIFFERENT AND OFTEN YEARS APART: exchange rates rebuilt in 2026 are 2025 annual averages, and city rents rebuilt in 2026 are from 2023. Judge how current a figure is by `vintage` and fall back to `updated` only where `vintage` is absent, which means the dataset has none of its own — a curated register's vintage is the day a person read the authority's page. Also says whether it is FETCHED by a script or REVIEWED by a person, the page it appears on, and the refresh script. With `since` (YYYY-MM-DD), `changed` lists only the datasets rebuilt strictly after that date, so an agent that cached a figure can decide what to re-fetch instead of re-fetching everything. Pure: `since` comes from the caller. Carries no figures and therefore no attribution block; each dataset's provenance travels with the tool that serves it.
| Name | Type | Req | Description |
|---|---|---|---|
| since | string | – | Return only datasets changed strictly after this date (YYYY-MM-DD). Omit for all. |
| Name | Type | Req | Description |
|---|---|---|---|
| changed | array | – | – |
| changedCount | number | – | – |
| count | number | – | – |
| datasets | array | – | – |
| newest | string|null | – | – |
| ok | boolean | – | – |
| since | string|null | – | – |
{"since":"2026-09-01"} localize_salary Localize a salary for fair pay across borders ~190
Convert a base salary from a home country into a cost-of-living-fair local equivalent: S_local = S_base × (I_target / I_home), where I is a US-relative price level. Omit `target` to receive a localized salary matrix across every country in the source — useful for pricing one offer across many markets. Returns USD purchasing-power equivalents, not currency-converted amounts.
| Name | Type | Req | Description |
|---|---|---|---|
| base | number | yes | Base annual salary in the home country (USD-denominated). |
| home | string | yes | ISO 3166-1 alpha-2 home country code the base salary is expressed in (case-insensitive). |
| source | string | – | PPP dataset to draw figures from. Defaults to 'consensus' if omitted. |
| target | string | – | Optional ISO 3166-1 alpha-2 target country code. Omit to localize across all countries in the source. |
| Name | Type | Req | Description |
|---|---|---|---|
| home | object | – | – |
| input | object | – | – |
| ok | boolean | – | – |
| results | array | – | – |
| source | object | – | – |
{"base":150000,"home":"US","source":"consensus","target":"ES"} passport_power Passport visa-free access score and global rank ~123
Passport Power: for a given country's passport, returns the visa-free-access score (visa-free + visa-on-arrival + eTA destinations), global rank and percentile among all ~199 passports, and the full destination breakdown by access type with names resolved. Omit country for the ranked league table. Reference data from the open imorte/passport-index-data (public domain) — confirm entry rules with the destination authority before travel.
| Name | Type | Req | Description |
|---|---|---|---|
| country | string | – | Passport country alpha-2 code (e.g. US, GB, SG). Omit for the full league table. |
| Name | Type | Req | Description |
|---|---|---|---|
| ok | boolean | – | – |
| passport | object | – | – |
| percentile | number | – | – |
| resolved | object | – | – |
| totalPassports | number | – | – |
{"country":"SG"} pension_abroad What a pension is worth abroad, and how fast it erodes ~313
A fixed pension paid from one country and spent in another, after the exchange rate, the destination's price level and the destination's inflation. Converts `amount` in `currency` at the site's FX snapshot, re-prices it at the destination through the PPP engine (the same price-level comparison as calculate_ppp), and projects it flat at the destination's latest annual inflation for `years` (1-40, default 10), returning what it is worth there today and after the period, in USD and local currency, with the share of purchasing power lost. Without `amount`, the origin's typical state pension is used — OECD's net replacement rate for an average earner on the modelled median wage — and `basis` says so; 33 origins have a rate, the rest need `amount`. Holds the pension and the exchange rate fixed and says so; many state pensions are uprated, and some are frozen for expatriates in particular countries. Not financial advice.
| Name | Type | Req | Description |
|---|---|---|---|
| amount | number | – | Monthly pension in `currency`. Omit for the origin's typical state pension. |
| currency | string | – | ISO 4217 code of `amount` (default USD). |
| from | string | yes | Country the pension is paid from, ISO alpha-2 (e.g. "GB"). |
| to | string | yes | Country it will be spent in, ISO alpha-2 (e.g. "PT"). |
| years | number | – | Years to project (whole number, default 10). |
| Name | Type | Req | Description |
|---|---|---|---|
| attribution | object | – | – |
| caveats | array | – | – |
| erosionPct | number | – | – |
| from | object | – | – |
| inflationPct | number | – | – |
| ok | boolean | – | – |
| pension | object | – | – |
| to | object | – | – |
| worthAfterYearsLocal | number | – | – |
| worthAfterYearsUsd | number | – | – |
| worthTodayLocal | number | – | – |
| worthTodayUsd | number | – | – |
| years | number | – | – |
{"amount":1000,"currency":"GBP","from":"GB","to":"PT","years":10} plan_team_calendar Team calendar: shared working days and hours across countries ~401
When a distributed team can actually all work. Joins the two halves no free tool puts together: the weekdays on which NOBODY is on a public holiday (the engine behind compare_public_holidays) and the daily working-hour overlap across the members' time zones (the engine behind find_meeting_slot), evaluated on 15 January and 15 July so daylight-saving asymmetry is visible, and multiplied into conservative shared working hours per year. Members are ISO alpha-2 country codes; each country is placed in the time zone of its representative city, and countries spanning several zones (US, CA, BR, MX, AU, ID) are flagged `multiZone` — append `@IANA/Zone` to override (e.g. `US@America/Chicago`). Covers the 41-country spine EXCEPT India, Thailand, Malaysia, the UAE and Saudi Arabia, which have no published holiday calendar and return NO_DATA naming them rather than a calendar with no holidays. Working-hour windows are a stated assumption (09:00-18:00 local unless given), not a measurement; annual leave is not modelled.
| Name | Type | Req | Description |
|---|---|---|---|
| end | number | – | Default local working-window end, minutes from midnight (default 1080 = 18:00). |
| hours | string | – | Per-member `start-end` overrides, semicolon-separated and aligned with `members`; leave a slot empty to keep the default (e.g. "540-1080;;420-720"). |
| members | string | yes | Comma-separated ISO alpha-2 codes, two or more, each optionally `CC@IANA/Zone` (e.g. "GB,JP,US@America/Chicago"). |
| start | number | – | Default local working-window start for every member, minutes from midnight (default 540 = 09:00). |
| year | number | – | Calendar year for the holiday calendar. Defaults to the first year in the dataset. |
| Name | Type | Req | Description |
|---|---|---|---|
| attribution | object | – | – |
| caveats | array | – | – |
| days | object | – | – |
| hours | object | – | – |
| members | array | – | – |
| ok | boolean | – | – |
| sharedWorkingHoursPerYear | number | – | – |
| year | number | – | – |
{"members":"GB,DE,US"} property_rules Can a foreigner buy a home there — ownership band, restrictions, transfer tax ~269
Whether a foreigner may buy residential property in each of the 41 spine countries: an ownership band (`free`, `restricted`, `leasehold-only`, `prohibited`), the main restrictions in a sentence, whether land itself may be owned, and the headline transfer tax a buyer pays with a note on surcharges and fees — a hand-curated register with the official page and check date per row; an entry read from secondary reporting because the official page could not be fetched is marked `confidence: "secondary"`. `country` for one entry, `countries` for a side-by-side; without either, all 41 ranked free-first then by transfer tax, optionally within one `band`. Rules change by decree and by region (Canada's ban runs to 2027, Australia's established-home ban to March 2027, Saudi Arabia's new law from January 2026). Published rules for information only — not legal advice; every response says so first.
| Name | Type | Req | Description |
|---|---|---|---|
| band | string | – | Restrict the ranking to one ownership band. |
| countries | string | – | Comma-separated ISO alpha-2 codes, two or more, for a side-by-side. |
| country | string | – | One ISO alpha-2 code. |
| limit | number | – | Return at most this many countries. |
| Name | Type | Req | Description |
|---|---|---|---|
| attribution | object | – | – |
| caveats | array | – | – |
| checkedOn | string | – | – |
| foreignOwnership | string | – | – |
| ok | boolean | – | – |
| restrictions | string | – | – |
| rows | array | – | – |
| source | string | – | – |
| transferTaxPct | number | – | – |
{"country":"TH"} rank_livability Rank countries by quality of life vs cost ~227
Quality-of-Life vs Cost matrix: ranks 41 countries by a user-weighted composite of livability metrics (median broadband Mbps, safety, healthcare, air quality, English usability — curated country-level data replacing the discontinued Teleport API) against the monthly cost of single-person essentials at local purchasing-power prices. Returns per-country composite and value scores, lifestyle label for your budget (comfortable → like royalty), nomad-visa eligibility, and days-to-tax-residency. Curated estimates — verify locally.
| Name | Type | Req | Description |
|---|---|---|---|
| budget | number | – | Monthly budget (USD) — drives lifestyle labels and visa eligibility. |
| maxBudget | number | – | Filter: keep countries whose monthly essentials cost ≤ this (USD). |
| minInternet | number | – | Filter: minimum median broadband, Mbps (e.g. 80). |
| minSafety | number | – | Filter: minimum safety score, 0–100. |
| weights | string | – | Five comma-separated 0–10 weights: internet,safety,healthcare,air,english (default 5,5,5,5,5). |
| Name | Type | Req | Description |
|---|---|---|---|
| excluded | number | – | – |
| ok | boolean | – | – |
| rows | array | – | – |
{"maxBudget":3000,"minInternet":80} remittance_cost Cost of sending money home, by corridor ~302
What it costs to send money from one country to another, from the World Bank's Remittance Prices Worldwide survey (newest quarter, CC BY 4.0): the mean total cost — fee plus exchange-rate margin — of sending USD 200 and USD 500 across the providers surveyed on that corridor, the cheapest provider found, and how many were surveyed. With `amount` (USD), a quote at the nearer of the two surveyed bands (below USD 350 uses the 200 figures), and the response says which. Give `from` AND `to` for one corridor; only one of them for a ranking of surveyed corridors out of a sender or into a receiver, cheapest first. The survey covers ~350 high-volume corridors (~46 sending countries, ~96 receiving); a pair it does not survey returns NO_DATA, never a figure borrowed from a neighbour. Your own quote will differ by provider, payment method and day.
| Name | Type | Req | Description |
|---|---|---|---|
| amount | number | – | Amount to send, USD. Optional; without it the corridor's survey figures are returned unquoted. |
| from | string | – | Sending country, ISO alpha-2 (e.g. "GB"). |
| limit | number | – | Return at most this many corridors in a ranking. |
| sort | string | – | Ranking direction when only one of `from`/`to` is given. |
| to | string | – | Receiving country, ISO alpha-2 (e.g. "IN"). |
| Name | Type | Req | Description |
|---|---|---|---|
| attribution | object | – | – |
| avgCost200Pct | number | – | – |
| avgCost500Pct | number | – | – |
| caveats | array | – | – |
| cheapestCost200Pct | number | – | – |
| corridor | object | – | – |
| ok | boolean | – | – |
| period | string | – | – |
| providers | number | – | – |
| quote | object | – | – |
| rows | array | – | – |
{"amount":500,"from":"GB","to":"IN"} required_rate Compute the required freelance hourly rate ~196
Given a desired annual net income, compute the freelance hourly and day rate required after taxes, self-paid health insurance, weeks off, and billable utilization. Uses the same per-country effective-rate presets as compare_contract; all overridable. Estimates only — not tax advice.
| Name | Type | Req | Description |
|---|---|---|---|
| country | string | – | – |
| desiredNet | number | yes | Desired annual net take-home (USD). |
| expenses | number | – | Annual business expenses (USD, default 0). |
| health | number | – | Annual self-paid health insurance (USD); defaults to the country preset. |
| hours | number | – | Hours per week (default 40). |
| taxRate | number | – | Override effective tax rate, percent (e.g. 32). |
| utilization | number | – | Billable share of working hours, 0–1 (default 0.75). |
| weeksOff | number | – | Unpaid weeks off per year (default 4). |
| Name | Type | Req | Description |
|---|---|---|---|
| billableHours | number | – | – |
| dayRate | number | – | – |
| hourlyRate | number | – | – |
| ok | boolean | – | – |
| requiredGross | number | – | – |
{"country":"US","desiredNet":100000,"utilization":0.7,"weeksOff":6} retire_on_budget How far a monthly pension goes, country by country ~243
Does a fixed monthly pension cover a month of local essentials. Given `amount` and `currency` (default GBP 1,500), returns every spine country ranked by coverage — the pension in USD divided by the country's MODELLED monthly essentials (the site's price basket scaled by the PPP price level, checked against real series and wrong both ways) — with the essentials figure, healthcare out-of-pocket per person per month (World Bank / WHO), life expectancy (World Bank) and the kind of retiree visa the country offers beside each row. Coverage is an ordering, not a budget; the pension is taken as fixed at the site's FX snapshot. Different from `pension_abroad`, which re-prices a pension against the origin's price level to say what it is worth relative to home. Published rules and modelled figures on the dates shown, for information only — entitlements depend on a person's record and consulates decide; every response says so first.
| Name | Type | Req | Description |
|---|---|---|---|
| amount | number | – | Monthly pension, in `currency`. |
| currency | string | – | ISO 4217 code of `amount`. |
| limit | number | – | Return at most this many countries. |
| Name | Type | Req | Description |
|---|---|---|---|
| attribution | object | – | – |
| caveats | array | – | – |
| ok | boolean | – | – |
| pension | object | – | – |
| rows | array | – | – |
{"amount":1500,"currency":"GBP"} select_region Select the lowest-latency cloud host region ~200
Given a user-population breakdown, find the cloud host region that minimizes population-weighted round-trip latency (argmin_j Σ_i P_i × L_ij), and compute the optimal multi-region split (each user region routed to its nearest host). Latency is estimated from great-circle distance via a fibre-propagation model, not measured.
| Name | Type | Req | Description |
|---|---|---|---|
| hosts | string | – | Optional comma-separated host region ids to restrict candidates (e.g. 'us-east-1,eu-west-2'). |
| provider | string | – | Optional cloud provider filter, applied before the hosts whitelist. |
| users | string | yes | Comma-separated region:percent pairs (percentages auto-normalize), e.g. 'US-East:40,UK:30,Germany:30'. Region ids: US-East, US-West, Canada, Brazil, UK, Germany, France, Spain, Nigeria, South-Africa,… |
| Name | Type | Req | Description |
|---|---|---|---|
| best | object | – | – |
| ok | boolean | – | – |
| ranking | array | – | – |
| split | object | – | – |
{"users":"US-East:40,UK:30,Germany:30"} travel_advice UK and US government travel advice, by country ~339
What two governments say about going. Give `country` (ISO alpha-2) for one country: the UK FCDO's level (none, all-but-essential to parts, all-but-essential, all travel to parts, all travel) with its latest change and date, the FCDO's passport-validity and visa sentences for British citizens and the health risks it lists, and the US State Department's advisory level (1 exercise normal precautions to 4 do not travel) with its headline. Give `countries` (two or more) for the levels side by side, or neither for the 41-country spine ranked least-restricted first by FCDO level then US level (`sort=highest` inverts). The two governments grade differently and often disagree; neither is rescored. The FCDO publishes nothing for the UK and the State Department nothing for the US, so those blocks are absent with a caveat, never a made-up level, and a country with neither is excluded from the ranking. Official sources on the dates shown, for information only — conditions change; check the source before travelling. Every response says so first.
| Name | Type | Req | Description |
|---|---|---|---|
| countries | string | – | Comma-separated ISO alpha-2 codes, two or more, for a side-by-side. Ignored when `country` is given. |
| country | string | – | One ISO alpha-2 code for the full advice (e.g. "TH"). |
| limit | number | – | Return at most this many countries in a ranking. |
| sort | string | – | Ranking direction when neither `country` nor `countries` is given: lowest = least restricted first. |
| Name | Type | Req | Description |
|---|---|---|---|
| attribution | object | – | – |
| caveats | array | – | – |
| excluded | array | – | – |
| fcdo | object | – | – |
| ok | boolean | – | – |
| rows | array | – | – |
| us | object | – | – |
{"country":"TH"} withholding_tax Withholding tax on payments abroad, standard and treaty rate per corridor ~285
What a company in `from` keeps back when it pays dividends, interest, royalties or technical fees to a recipient in `to`: OECD's standard withholding rates for the payer's country and, for the pair, the treaty rate where OECD publishes one, with the saving in points per income type. Direction is the payer's, never reversed; `from` equal to `to` is rejected. A pair with no published treaty rate reports the standard rate and says so — that is not the same as no treaty existing, and the treaty figure is the maximum the treaty allows (a residence certificate is usually needed). Without `from`, ranks all 41 by standard rate on `type` (dividends default). Standard rates for 41 of 41; treaty rates for about 1,300 payer–recipient pairs within the spine (the Philippines never appears as a payer). Published rates and facts on the dates shown, for information only — not tax, legal or immigration advice; every response says so first.
| Name | Type | Req | Description |
|---|---|---|---|
| from | string | – | ISO alpha-2 code of the paying company's country. |
| limit | number | – | – |
| sort | string | – | – |
| to | string | – | ISO alpha-2 code of the recipient's country; unlocks the treaty rate. |
| type | string | – | Income type to rank by when `from` is not given. |
| Name | Type | Req | Description |
|---|---|---|---|
| attribution | object | – | – |
| caveats | array | – | – |
| lines | array | – | – |
| ok | boolean | – | – |
| rows | array | – | – |
| standard | object | – | – |
| to | object | – | – |
| treaty | object | – | – |
{"from":"TH","to":"GB"} What is the Geo-Parity MCP server?
Geo-Parity is an MCP server listed in the public MCP registry as com.geo-parity/geo-parity. Cost of living, fair global pay, healthcare costs, nomad visas and tax residency. Free, no key. This page covers its hosted endpoint (https://geo-parity.com/api/mcp).
Is the Geo-Parity MCP server safe to use?
Geo-Parity scores 87 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.
What tools does the Geo-Parity MCP server expose?
Geo-Parity exposes 62 tools: compare_total_cost, calculate_ppp, localize_salary, calculate_wage_bands, compare_occupation_pay, and 57 more. Their descriptions and schemas cost roughly 17,916 tokens of context every time the server is loaded.
Does the Geo-Parity MCP server require authentication?
No. We connected to Geo-Parity without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.
Is the Geo-Parity MCP server still maintained?
Geo-Parity is still listed as active in the MCP registry. We last reached this channel on 21 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.