cityparity — Cost-of-Living & Quality-of-Life Comparison
Server Details
Cost-of-living & quality-of-life comparison: take-home pay, equivalent salary, safety-net deltas.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
Glama MCP Gateway
Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.
Full call logging
Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.
Tool access control
Enable or disable individual tools per connector, so you decide what your agents can and cannot do.
Managed credentials
Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.
Usage analytics
See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.
Tool Definition Quality
Average 4.7/5 across 6 of 6 tools scored.
Each tool has a distinct purpose: compare_cities for head-to-head, get_city_summary for single city profile, get_inbound_tax_regime for special tax regimes, get_safety_net for batch safety net, list_cities for listing available cities, and rank_cities for ranking. No overlap.
All tool names follow a consistent verb_noun snake_case pattern (e.g., compare_cities, get_city_summary, list_cities). No mixing of styles or abbreviations.
6 tools is appropriate for the domain of cost-of-living and quality-of-life comparisons. Each tool covers a specific need without being too many or too few.
The set covers single city, head-to-head, ranking, listing, special tax regimes, and batch safety net. Minor gap: no direct multi-city cost comparison beyond ranking, but the composite score in rank_cities partially addresses this.
Available Tools
6 toolscompare_citiesCompare two cities for a householdARead-onlyIdempotentInspect
Compare two cities for one household: take-home pay, full cost breakdown, the equivalent target salary needed to match source net cash, non-cash lifestyle deltas (vacation, parental leave, healthcare), and a 0-100 quality score on five weighted dimensions. Use this for a head-to-head between two named cities; for a single city call get_city_summary, and to rank many cities call rank_cities. Read-only, no side effects; returns a text summary plus structured JSON. RSU income is NOT a parameter; RSU is treated as source-only because grants typically do not follow you across employers.
| Name | Required | Description | Default |
|---|---|---|---|
| living | No | Housing and spending assumptions. Omit to use defaults: rent, 2 bedrooms, typical spending. | |
| advanced | No | Optional fine-tuning: retirement contribution, age bracket, trips home, transit mode, and inbound tax regime. Omit to use defaults. | |
| household | No | Family structure: working-age partner and dependent children. Omit for a single person with no kids. | |
| source_city | Yes | City slug for the user's current city. Use list_cities to discover valid slugs (e.g. 'nyc', 'seattle', 'tokyo'). | |
| target_city | Yes | City slug for the destination city. | |
| gross_salary | Yes | User's annual gross salary in the SOURCE city's local currency (e.g. USD for Seattle, NOK for Oslo). | |
| score_weights | No | Override the composite-score weights. Defaults: financial 30, healthcare 20, vacation 15, childcare 15, safety_net 20. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | |
| source | Yes | |
| target | Yes | |
| equivalence | Yes | |
| quality_score | Yes | |
| non_cash_deltas | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states 'Read-only, no side effects; returns a text summary plus structured JSON,' which aligns with annotations (readOnlyHint=true, idempotentHint=true, destructiveHint=false). It adds context on output format and the RSU treatment, going beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (two paragraphs) with front-loaded purpose and usage guidance. Every sentence adds value, and there is no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (nested objects, many parameters), the description provides a high-level overview, usage guidance, and return format. The existing output schema covers return values, so this is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds meaningful context beyond schema by explaining the overall comparison logic and the RSU omission, though it does not detail every parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it compares two cities for a household, including detailed financial and lifestyle factors. It distinguishes from siblings by explicitly naming alternative tools: get_city_summary for a single city and rank_cities for multiple cities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool (head-to-head comparison) and when to use alternatives (single city: get_city_summary, ranking: rank_cities). It also notes that RSU income is not a parameter, providing clear usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_city_summaryGet a one-city profileARead-onlyIdempotentInspect
Concise profile of one city: currency, tax shape (bracket count + top rate + payroll/national insurance), headline costs (rent / groceries / transit / childcare), safety-net values (parental leave, vacation, universal healthcare), and data freshness. Lighter than compare_cities; use when the user is asking about one place rather than a comparison. Read-only, no side effects; returns a text summary plus structured JSON.
| Name | Required | Description | Default |
|---|---|---|---|
| city | Yes | City slug. Use list_cities to discover valid slugs. |
Output Schema
| Name | Required | Description |
|---|---|---|
| tax | Yes | |
| name | Yes | |
| slug | Yes | |
| country | Yes | |
| currency | Yes | |
| safety_net | Yes | |
| cost_snapshot | Yes | |
| govt_benefits | Yes | |
| data_year_range | Yes | |
| methodology_url | Yes | |
| compensation_index | Yes | |
| inbound_tax_regime | Yes | |
| data_last_updated_field | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
States 'Read-only, no side effects', aligning with annotations (readOnlyHint, destructiveHint false, idempotentHint true). Also mentions return format: 'text summary plus structured JSON', adding beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first lists contents concisely, second gives usage guidance and behavior. Every sentence adds value, no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given output schema exists (not shown), no need to detail return values. Covers purpose, usage, behavior, and context adequately for a single-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers the sole 'city' parameter with a description and usage hint (list_cities). Description does not add further semantics beyond schema, so baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it provides a 'concise profile of one city' with specific data categories. Distinguishes from sibling 'compare_cities' by noting it is 'lighter' and for single-city queries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'use when the user is asking about one place rather than a comparison' and contrasts with 'compare_cities', giving clear when-to-use and alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_inbound_tax_regimeLook up inbound-worker tax regime for a cityARead-onlyIdempotentInspect
Look up a city's inbound-worker tax regime, the special reduced-tax schemes for relocating workers that general cost-of-living tools do not surface. Returns null when the country has no modeled regime (most cities). Modeled regimes: Italy impatriati (Milan, Rome), Portugal IFICI (Lisbon, Porto), Belgium expat (Brussels), Poland B2B ryczałt (Warsaw, Kraków), Greece inbound (Athens). Each entry includes the mechanic (reduction percentage or flat rate), duration, income cap if any, and a conservative eligibility hint. Read-only, no side effects; returns a text summary plus structured JSON.
| Name | Required | Description | Default |
|---|---|---|---|
| city | Yes | City slug. Use list_cities to discover valid slugs. Most cities return regime=null because their country has no special inbound-worker tax regime. |
Output Schema
| Name | Required | Description |
|---|---|---|
| city | Yes | |
| slug | Yes | |
| regime | Yes | |
| country | Yes | |
| disclaimer | No | |
| methodology_url | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint and idempotentHint, but the description adds 'no side effects' and details the return format (text summary plus structured JSON with mechanic, duration, etc.), going beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, well-structured, and front-loaded with the core purpose. Every sentence provides essential information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the single parameter, excellent annotations, and mention of output schema, the description fully covers what the tool does, its inputs, outputs, and behavior. No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single required parameter 'city'. The description adds crucial context: city slug required, use list_cities for valid slugs, and that most cities return null. This significantly aids correct usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool looks up a city's inbound-worker tax regime, a specialized function not covered by general cost-of-living tools. It distinguishes itself from sibling tools like compare_cities or get_city_summary by focusing on this niche.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use (for special reduced-tax schemes) and explicitly notes that most cities return null. It lists modeled regimes but does not explicitly state alternatives or when not to use, though context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_safety_netLook up family safety net for several citiesARead-onlyIdempotentInspect
Batch lookup of safety-net values — parental leave weeks + paid percentage, universal healthcare flag, vacation days, public holidays — for 1 to 20 cities at once, plus each city's safety_net dimension score (0-100) for relative strength. This is the only tool that accepts many cities in one call: use it to line several places up on family / leave / healthcare benefits. For one city's full profile (tax shape + costs + safety net together) call get_city_summary instead; for a two-city head-to-head that includes cost-of-living use compare_cities. Read-only, no side effects; returns a text summary plus structured JSON.
| Name | Required | Description | Default |
|---|---|---|---|
| cities | Yes | Array of city slugs (1-20). Use list_cities to discover valid slugs. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cities | Yes | |
| not_found | No | |
| methodology_url | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the description adds value by explicitly stating 'Read-only, no side effects' and describing the return format (text summary plus structured JSON). This provides additional behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no redundant information. It front-loads the core action ('Batch lookup of safety-net values') and efficiently covers purpose, usage guidelines, and behavioral traits.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (not shown but mentioned), the description sufficiently explains the tool's capabilities, including what fields are returned and the output format. It also covers usage context and alternatives, making it complete for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage for the single parameter 'cities', already describing it as an array of city slugs (1-20) and referencing list_cities. The description repeats this information without adding new meaning, so it provides marginal additional value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it performs a batch lookup of safety-net values for multiple cities, lists the specific fields (parental leave weeks, paid percentage, universal healthcare flag, vacation days, public holidays, dimension score), and distinguishes itself from siblings by noting it's the only tool that accepts many cities in one call.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides when to use this tool versus alternatives: use get_city_summary for one city's full profile, use compare_cities for a two-city head-to-head with cost-of-living. It also mentions using list_cities to discover valid slugs as a prerequisite.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_citiesList supported cities by countryARead-onlyIdempotentInspect
List all city slugs supported by cityparity, grouped by country. Call this first to discover valid slugs before any other tool; the optional country filter narrows to one country. Read-only, no side effects; returns a text summary plus structured JSON.
| Name | Required | Description | Default |
|---|---|---|---|
| country | No | Optional case-insensitive country filter. Use the canonical name as stored in city_data.country (e.g. "Norway", "USA", "United Kingdom"). If omitted, returns all countries. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| groups | Yes | |
| country_count | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false. The description adds that it returns a text summary plus structured JSON, which provides useful behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no redundant words. The first sentence states purpose, the second provides usage guidance and behavioral info. Perfectly concise and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with one optional param and output schema, the description covers purpose, usage, safety, return format, and relationship to siblings. No gaps identified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 the phrase 'narrows to one country' which reinforces the country filter's effect, but this is a minor addition over the schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists city slugs grouped by country, using a specific verb and resource. It distinguishes from siblings by positioning itself as the first call to discover valid slugs before other tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises to call this first to discover valid slugs before any other tool, and mentions the optional country filter. This gives clear context on when and how to use it, differentiating from siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rank_citiesRank cities by composite quality scoreARead-onlyIdempotentInspect
Rank supported cities by composite quality-of-life score across five weighted dimensions (financial, healthcare, vacation, childcare, safety_net). Returns top N (default 10), with filters for country, countries, region (europe/asia/north_america/south_america/oceania), has_universal_healthcare, include_cities, and exclude_cities. Use this to shortlist across many cities; for a head-to-head between two named cities use compare_cities. The same scenario is applied to every city so scores are directly comparable (default: single person, 2BR rent, $100k USD-equivalent gross). Read-only, no side effects; returns a text summary plus structured JSON.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results to return. Default 10. | |
| filter | No | Restrict which cities are ranked, by country, region, universal-healthcare flag, or explicit include/exclude slug lists. Omit to rank all supported cities. | |
| weights | No | Override the composite-score weights. Defaults: financial 30, healthcare 20, vacation 15, childcare 15, safety_net 20. | |
| scenario | No | Override the default ranking scenario. The same scenario is applied to every city so scores are comparable. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ranked | Yes | |
| skipped | Yes | |
| weights | Yes | |
| considered | Yes | |
| scenario_used | Yes | |
| methodology_url | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint. Description adds 'Read-only, no side effects; returns a text summary plus structured JSON.' This confirms behavior and output format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise with front-loaded purpose. Every sentence adds value: purpose, filters, usage guidance, scenario comparability, and read-only nature. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters (some nested), no required params, full schema coverage, and presence of output schema, the description covers purpose, usage, behavior, and parameters sufficiently. It addresses the tool's complexity well.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the description doesn't add much beyond the schema. It summarizes filters and defaults but does not provide new parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it ranks cities by a composite quality-of-life score across five weighted dimensions, with filters and defaults. It distinguishes from sibling tool 'compare_cities' by stating use for shortlisting vs head-to-head.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use this to shortlist across many cities; for a head-to-head between two named cities use compare_cities.' This provides clear guidance on when to use and when to use an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Claim this connector by publishing a /.well-known/glama.json file on your server's domain with the following structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"maintainers": [{ "email": "your-email@example.com" }]
}The email address must match the email associated with your Glama account. Once published, Glama will automatically detect and verify the file within a few minutes.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!