cityparity: Cost-of-Living & Quality-of-Life Comparison
RemoteAbout cityparity: Cost-of-Living & Quality-of-Life Comparison
cityparity lets agents compare pay, living costs, and quality-of-life factors across cities, including safety-net benefits that salary and rent comparisons can miss. It supports relocation and compensation planning across roughly 165 cities in 69 countries.
Key features
- 01Two-city cost and pay comparison
- 02Equivalent target salary estimates
- 03City profiles and supported-city lookup
- 04Quality-score ranking with filters
- 05Safety-net and inbound tax details
Use cases
- 01Compare relocation options across cities
- 02Estimate a salary for a move abroad
- 03Rank cities by quality score and chosen weights
MCP support
The MCP server provides tools for city comparisons, city and safety-net data, rankings, and inbound tax regimes. It is hosted over Streamable HTTP; a stdio-to-HTTP bridge is available for clients without HTTP MCP support.
Configuration
Remote servers need no local install. Pick your client, then copy the config or install in one click.
https://mcp.cityparity.com/mcpclaude mcp add --transport http cityparity https://mcp.cityparity.com/mcp{"mcpServers":{"cityparity":{"type":"http","url":"https://mcp.cityparity.com/mcp"}}}Open in Cursor{"servers":{"cityparity":{"type":"http","url":"https://mcp.cityparity.com/mcp"}}}Open in VS Code{"mcpServers":{"cityparity":{"type":"http","url":"https://mcp.cityparity.com/mcp"}}}{"mcpServers":{"cityparity":{"serverUrl":"https://mcp.cityparity.com/mcp"}}}Run commands in a terminal; paste JSON into the client’s MCP config and restart. Servers that need sign-in will prompt on first connect.
Tools
6| Parameter | Type | Required | Description |
|---|---|---|---|
| source_city | string | Yes | City slug for the user's current city. Use list_cities to discover valid slugs (e.g. 'nyc', 'seattle', 'tokyo'). |
| target_city | string | Yes | City slug for the destination city. |
| gross_salary | number | Yes | User's annual gross salary in the SOURCE city's local currency (e.g. USD for Seattle, NOK for Oslo). |
| household | object | No | Family structure: working-age partner and dependent children. Omit for a single person with no kids. |
| household.has_partner | boolean | No | Whether the user has a working-age partner. Defaults to false. |
| household.partner_gross_salary | number | No | Partner's annual gross salary in the SOURCE city's currency. REQUIRED when has_partner=true. |
| household.partner_works_in_source | boolean | No | Whether the partner currently earns in the source city. REQUIRED when has_partner=true; cityparity does not default this because spouse-per-city working status materially changes the math (e.g. US childcare may exceed a second income, while Nordic subsidies make the second income viable). |
| household.partner_works_in_target | boolean | No | Whether the partner would earn in the target city after relocation. REQUIRED when has_partner=true. |
| household.kids_ages | array | No | Ages of dependent children, e.g. [3, 7]. Empty array or omitted if no kids. |
| living | object | No | Housing and spending assumptions. Omit to use defaults: rent, 2 bedrooms, typical spending. |
| living.housing_mode | enum | No | Whether the household rents or owns. Default rent.rent | own | own_outright |
| living.bedrooms | integer | No | Bedroom count for the household. Default 2. |
| living.lifestyle | enum | No | Spending multiplier on food and discretionary categories. Default typical (1.0×).frugal | typical | generous |
| advanced | object | No | Optional fine-tuning: retirement contribution, age bracket, trips home, transit mode, and inbound tax regime. Omit to use defaults. |
| advanced.retirement_contrib_pct | number | No | Percentage of gross diverted to retirement (pre-tax for US 401k). Default 6. |
| advanced.age_bracket | enum | No | Affects US healthcare premium multipliers. Default 25-34.18-24 | 25-34 | 35-44 | 45-54 | 55-64 |
| advanced.trips_home_per_year | integer | No | Round trips back to source country per year (target-only cost). Default 1. |
| advanced.source_transit_choice | enum | No | Default depends on city; e.g. Seattle defaults to 'car', Oslo defaults to 'transit'.car | transit |
| advanced.target_transit_choice | enum | No | Same as above for the target city.car | transit |
| advanced.apply_inbound_regime | boolean | No | Apply the destination country's special inbound-worker tax regime if available (Italy impatriati, Portugal IFICI, Belgium expat, Poland B2B ryczałt, Greece inbound). Default false. Applies only on the target side. |
| score_weights | object | No | Override the composite-score weights. Defaults: financial 30, healthcare 20, vacation 15, childcare 15, safety_net 20. |
| score_weights.financial | number | No | |
| score_weights.healthcare | number | No | |
| score_weights.vacation | number | No | |
| score_weights.childcare | number | No | |
| score_weights.safety_net | number | No |
Details
From the project READMEcityparity MCP server
Cost-of-living and quality-of-life comparison tools that AI agents can call. Point an agent at two cities and it returns take-home pay, a full cost breakdown, the equivalent salary you'd need in the target city, and the non-cash deltas people actually move for: vacation, parental leave, universal healthcare.
Hosted at https://mcp.cityparity.com/mcp. Free, no API key, rate-limited at the edge. Built on the Model Context Protocol (spec 2025-06-18, Streamable HTTP).
- Site: https://cityparity.com
- Install docs (every client): https://cityparity.com/mcp
- Machine-readable docs: https://mcp.cityparity.com/llms.txt
- OpenAPI (REST mirror): https://mcp.cityparity.com/openapi.json
What it covers
About 165 cities across 69 countries. Most calculators stop at salary and rent. cityparity prices the social safety net (childcare subsidies, parental leave, statutory vacation, universal healthcare), so "the lower-salary city actually pays more" stops being a hand-wave and becomes a number.
Tools
| Tool | What it does |
|---|---|
compare_cities | Full scenario comparison between two cities: take-home, cost breakdown, equivalent target salary, lifestyle deltas, quality score. |
list_cities | Discover supported city slugs, grouped by country. |
get_city_summary | One-city profile: tax shape, headline costs, safety-net values. |
rank_cities | Top N cities by composite quality score, with custom weights and region/country filters. |
get_safety_net | Parental leave, universal-healthcare flag, vacation, public holidays for 1 to 20 cities. |
get_inbound_tax_regime | Inbound-worker regimes: Italy impatriati, Portugal IFICI, Belgium expat, Poland B2B ryczałt, Greece inbound. |
City slugs are kebab-case (san-francisco, hong-kong). Call list_cities first if you're unsure.
Connect
Most modern clients speak Streamable HTTP and need no install. Just point them at the URL.
Claude Code
claude mcp add --transport http cityparity https://mcp.cityparity.com/mcp
Claude Desktop / ChatGPT Desktop
{
"mcpServers": {
"cityparity": {
"url": "https://mcp.cityparity.com/mcp"
}
}
}
Claude Desktop config lives at ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows). ChatGPT Desktop uses …/OpenAI/ChatGPT/mcp.json. Restart the app after editing.
Cursor
{
"name": "cityparity",
"url": "https://mcp.cityparity.com/mcp"
}
Codex CLI
mcpServers:
cityparity:
url: https://mcp.cityparity.com/mcp
Stdio-only clients (this package)
If your client can't do HTTP MCP yet, the npm package in this repo bridges stdio → HTTP:
{
"mcpServers": {
"cityparity": {
"command": "npx",
"args": ["-y", "cityparity-mcp"]
}
}
}
The bridge (this package)
cityparity-mcp is a ~150-line stdio→HTTP forwarder. It reads line-delimited JSON-RPC from stdin, POSTs each line to the MCP endpoint, and writes the responses back to stdout (streaming SSE line by line). That's the whole job: no data, no calc engine, no secrets. Read bin/cityparity-mcp.mjs if you want to verify.
npm install -g cityparity-mcp # or use npx, as above
| Env var | Default | Purpose |
|---|---|---|
CITYPARITY_MCP_URL | https://mcp.cityparity.com/mcp | Override the upstream endpoint (local dev) |
CITYPARITY_MCP_DEBUG | unset | Log request/response framing to stderr |
Run the tests (zero dependencies, Node ≥ 20):
npm test
Methodology
The full methodology (how taxes, costs, childcare subsidies, and safety-net scoring work) is on the homepage. One thing worth flagging: RSU income is not an input. Grants are treated as source-only because they usually don't follow you across employers. If you're keeping a US employer remotely, treat the result as directional in that direction.
Privacy
Queries reach mcp.cityparity.com and nothing else. No accounts, no client-side telemetry, nothing personally identifiable logged beyond standard HTTP server logs.
License
MIT. cityparity's underlying data and calculation engine are not part of this package. This repo is the public MCP surface plus the open-source stdio bridge.
Found a bug or want a city added? https://cityparity.com/contact/
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.