cityparity

cityparity MCP server

Cost-of-living and quality-of-life tools that AI agents can call. Built on the Model Context Protocol (spec 2025-06-18). Hosted at mcp.cityparity.com. Free, no API key, rate-limited at the edge.

Six tools

Install

Claude Code

Direct HTTP, no bridge needed:

claude mcp add --transport http cityparity https://mcp.cityparity.com/mcp

Codex CLI

Add to ~/.codex/config.yaml:

mcpServers:
  cityparity:
    url: https://mcp.cityparity.com/mcp

Claude Desktop

If your Claude Desktop build supports HTTP MCP (most recent versions), use the direct URL. Otherwise install the bridge:

{
  "mcpServers": {
    "cityparity": {
      "url": "https://mcp.cityparity.com/mcp"
    }
  }
}

Edit at ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows). Restart Claude Desktop.

For older Claude Desktop builds that only do stdio:

{
  "mcpServers": {
    "cityparity": {
      "command": "npx",
      "args": ["-y", "cityparity-mcp"]
    }
  }
}

ChatGPT Desktop

Open ChatGPT Desktop → Settings → Connections → Add MCP Server, or add directly to the config file:

{
  "mcpServers": {
    "cityparity": {
      "url": "https://mcp.cityparity.com/mcp"
    }
  }
}

Config file: ~/Library/Application Support/OpenAI/ChatGPT/mcp.json (macOS) or %APPDATA%\OpenAI\ChatGPT\mcp.json (Windows). Restart ChatGPT Desktop.

Cursor

Settings → MCP → "Add New MCP Server":

{
  "name": "cityparity",
  "url": "https://mcp.cityparity.com/mcp"
}

Direct HTTP / OpenAPI

If you don't want MCP at all, the same engine is at https://mcp.cityparity.com/api/v1/*. OpenAPI 3.0 spec: /openapi.json.

Example conversations

"Should I take this Oslo offer?"

The agent calls compare_cities with your Seattle salary, partner situation, kids, and the Oslo target. The tool returns the equivalent Oslo salary you'd need, plus lifestyle deltas (vacation, parental leave, universal healthcare) and a quality score on both sides. The agent composes a recommendation grounded in real numbers.

"What are the best cities for a tech worker family of four in Europe?"

The agent calls rank_cities with { filter: { region: 'europe' }, scenario: { kids_ages: [3, 7], has_partner: true, partner_gross_salary_usd: 50000 } }. The tool runs the scenario uniformly across every European city in the dataset, ranks by composite score, returns the top 10.

"Tell me about parental leave in Germany."

The agent calls get_safety_net with { cities: ['berlin', 'munich', 'frankfurt'] }. Returns parental leave weeks + paid percentage, universal healthcare flag, vacation days, and a safety-net score. No salary scenario needed for this question.

"Am I eligible for Italy impatriati?"

The agent calls get_inbound_tax_regime with { city: 'milan' }. Returns the regime mechanic (50% IRPEF reduction, 5 years, €600k cap) plus a conservative eligibility hint. The tool always includes a "consult a tax professional" disclaimer.

Methodology

The full methodology, how taxes, costs, childcare subsidies, and safety-net scoring work, is on the homepage.

One detail worth surfacing here: RSU income is not an input. Treated as source-only because grants typically don't follow you across employers. If you'll keep your current US employer remotely, treat the result as directional.

Smoke test

Verify the endpoint is reachable:

curl https://mcp.cityparity.com/

curl -X POST https://mcp.cityparity.com/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "MCP-Protocol-Version: 2025-06-18" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Status, contact, and feedback