Skip to main content
Glama

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
Repository
summerstateofmind/cityparity
GitHub Stars
1
Server Listing
cityparity

Glama MCP Gateway

Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.

MCP client
Glama
MCP server

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.

100% free. Your data is private.
Tool DescriptionsA

Average 4.6/5 across 6 of 6 tools scored.

Server CoherenceA
Disambiguation5/5

Each tool serves a distinct purpose: listing cities, summarizing one city, comparing two, ranking many, looking up tax regimes, and batch safety nets. Descriptions explicitly guide when to use each, eliminating ambiguity.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case (e.g., compare_cities, get_city_summary). The verbs are appropriate for the action, and there is no mixing of conventions.

Tool Count5/5

With 6 tools, the count is well-scoped for a cost-of-living comparison server. It covers essential operations without being too few or too many, fitting the typical 3-15 range.

Completeness4/5

The tool set covers discovery, summary, comparison, ranking, tax regimes, and safety nets. A minor gap is the lack of a detailed single-city cost breakdown (only headline costs in get_city_summary), but overall it's fairly complete.

Available Tools

6 tools
compare_citiesCompare two cities for a householdA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
livingNoHousing and spending assumptions. Omit to use defaults: rent, 2 bedrooms, typical spending.
advancedNoOptional fine-tuning: retirement contribution, age bracket, trips home, transit mode, and inbound tax regime. Omit to use defaults.
householdNoFamily structure: working-age partner and dependent children. Omit for a single person with no kids.
source_cityYesCity slug for the user's current city. Use list_cities to discover valid slugs (e.g. 'nyc', 'seattle', 'tokyo').
target_cityYesCity slug for the destination city.
gross_salaryYesUser's annual gross salary in the SOURCE city's local currency (e.g. USD for Seattle, NOK for Oslo).
score_weightsNoOverride the composite-score weights. Defaults: financial 30, healthcare 20, vacation 15, childcare 15, safety_net 20.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaYes
sourceYes
targetYes
equivalenceYes
quality_scoreYes
non_cash_deltasYes
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and the description reinforces this with 'Read-only, no side effects.' It adds context beyond annotations by specifying the return format ('a text summary plus structured JSON') and clarifying the RSU treatment (source-only). This is valuable behavioral insight at no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences that each earn their place: the first lists the core purpose and outputs, the second gives usage guidance with sibling tools, and the third covers safety, return type, and an important RSU limitation. It is front-loaded and free of fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (nested params, output schema present), the description covers all essential context: what it does, when to use it versus siblings, read-only safe behavior, return format, and an edge-case caveat about RSU income. The rich schema and annotations handle parameter and return details, so the description is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already explains each parameter thoroughly. The description adds one useful note: 'RSU income is NOT a parameter,' which clarifies a likely point of confusion. Since the schema carries the param semantics, baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Compare two cities for one household' and enumerates concrete outputs (take-home pay, cost breakdown, equivalent target salary, lifestyle deltas, quality score). It explicitly distinguishes this tool from get_city_summary and rank_cities, making the purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit usage guidance: '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.' This clearly states when to use and names the alternatives. The RSU caveat also sets expectations about what the tool does not handle.

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 profileA
Read-onlyIdempotent
Inspect

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. On parental leave, quote safety_net.parental_leave_summary rather than building your own sentence: some countries (Ireland, Australia, the UK, Czechia, part of Sweden) pay a flat weekly cash sum instead of a share of salary, so parental_leave_paid_pct is 0 or partial for them and stating it alone would wrongly call their leave unpaid. Read-only, no side effects; returns a text summary plus structured JSON.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityYesCity slug. Use list_cities to discover valid slugs.

Output Schema

ParametersJSON Schema
NameRequiredDescription
taxYes
nameYes
slugYes
countryYes
currencyYes
safety_netYes
cost_snapshotYes
govt_benefitsYes
data_year_rangeYes
methodology_urlYes
compensation_indexYes
inbound_tax_regimeYes
data_last_updated_fieldYes
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations (readOnlyHint, idempotentHint, destructiveHint), the description adds critical behavioral context: it explicitly says 'Read-only, no side effects' and discloses return format ('text summary plus structured JSON'). It also warns about parental leave data interpretation, providing a concrete behavioral caveat that prevents misuse.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence earns its place: purpose, content scope, usage guidance, and a critical data interpretation caveat. It is well-structured with a colon-led list and clear transitions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description doesn't need to enumerate return fields but still adds value by summarizing return types, noting data freshness, and providing a nuance about parental leave. This makes the tool self-contained for an agent to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers the sole parameter 'city' fully (100% coverage), including instruction to use list_cities for valid slugs. The description does not add additional parameter semantics beyond what schema already provides, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies a one-city profile with enumerated contents (currency, tax shape, costs, safety-net values, data freshness). It directly distinguishes from sibling tool compare_cities by stating 'lighter than compare_cities' and identifying the single-place use case.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use this tool ('when the user is asking about one place rather than a comparison') and names the alternative (compare_cities). The 'lighter than' phrasing further clarifies relative weight and scope.

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 cityA
Read-onlyIdempotent
Inspect

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 regime=null when the country has no modeled regime, which is most cities. Modeled across 13 regimes in Belgium, Denmark, Germany, Greece, Ireland, Italy, Netherlands, Norway, Poland, Portugal, Spain, Sweden and the UK. Roughly half grant an actual reduction (a reduction_pct or a flat_rate) and the rest are note-only: the regime exists but grants a relocating employee nothing, so reduction_pct and flat_rate are null and the take-home is computed on ordinary tax. Each entry returns the mechanic, duration, income cap if any, and a note stating the salary floor where one exists and which eligibility conditions we do not test. Read-only, no side effects; returns a text summary plus structured JSON.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityYesCity 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

ParametersJSON Schema
NameRequiredDescription
cityYes
slugYes
regimeYes
countryYes
disclaimerNo
methodology_urlYes
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses significant behavioral details beyond the annotations, including that regime=null for most cities, the distinction between actual reduction and note-only regimes, and that reduction_pct and flat_rate are null for note-only regimes. It also states the tool is read-only with no side effects, and explains the return format (text summary plus structured JSON). This exceeds what annotations alone provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but every sentence contributes essential information: the core purpose, null semantics, country coverage, regime types, and return content. It is front-loaded with the main action and progresses logically without redundancy, making it appropriately sized for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity, the description thoroughly covers edge cases and return values, explaining null behavior, note-only regimes, what fields are null, and what each entry contains. With an output schema present, the description still adds necessary context about the tool's limitations and eligibility conditions not tested, making it complete for correct selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for the single city parameter, so the baseline is 3. The description does not add additional semantics beyond the schema; it only reiterates that the tool looks up a city. The schema already provides the city slug hint and the reference to list_cities, so the description adds minimal parameter-level value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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, using the verb 'look up' and specifying the resource. It distinguishes from siblings by noting it surfaces special reduced-tax schemes that general cost-of-living tools do not, which differentiates it from get_city_summary or get_safety_net.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool: when you need a city's inbound-worker tax regime, especially the special reduced-tax schemes not covered by general cost-of-living tools. It also notes that most cities return null, implying this tool will often yield no data, but it does not explicitly name alternative sibling tools or state when not to use it.

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 citiesA
Read-onlyIdempotent
Inspect

Batch lookup of safety-net values for 1 to 20 cities at once: parental leave weeks + how it is paid, universal healthcare flag, vacation days, public holidays, 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. On parental leave, quote parental_leave_summary rather than composing your own line from parental_leave_paid_pct: Ireland, Australia, the UK, Czechia and part of Sweden pay a flat weekly cash sum instead of a share of salary, so their headline percentage is 0 or partial and reading it alone would wrongly call their leave unpaid; Germany pays a percentage up to a monthly cap (parental_leave_capped) and pays nothing at all above a household-income ceiling. Check parental_leave_basis (percentage / flat / capped / mixed / unpaid) before making any claim about pay. 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
citiesYesArray of city slugs (1-20). Use list_cities to discover valid slugs.

Output Schema

ParametersJSON Schema
NameRequiredDescription
citiesYes
not_foundNo
score_basisNo
methodology_urlYes
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (read-only, idempotent, non-destructive), the description explicitly states 'Read-only, no side effects; returns a text summary plus structured JSON.' It also discloses a significant behavioral nuance: the parental leave percentage can be 0 or partial for flat-rate countries, and it instructs users to check 'parental_leave_basis' before making claims. This far exceeds annotation disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core function and data fields, then follows with usage differentiation, a critical caveat about parental leave pay, and tool alternatives. Every sentence carries necessary information; the length is justified by the data interpretation warning that prevents incorrect conclusions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has only one parameter and an output schema exists, the description fully satisfies contextual needs. It explains what data is returned (scope, score, text summary + JSON), when to use it, and how to avoid misinterpretation. No important aspect is left unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter 'cities' is fully described in the schema (array of city slugs, 1-20, use list_cities). With 100% schema coverage, the baseline is 3. The description indirectly adds context by listing what is looked up for each city, but it does not add new parameter-level detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb ('Batch lookup') and clearly states the resource ('safety-net values for 1 to 20 cities') and the exact data fields included. It also distinguishes itself from sibling tools by declaring it is 'the only tool that accepts many cities in one call,' so purpose and differentiation are fully covered.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance ('use it to line several places up on family / leave / healthcare benefits') and names direct alternatives with their specific purposes ('get_city_summary' for one-city full profile, 'compare_cities' for two-city head-to-head). It also tells users to discover valid slugs via 'list_cities'.

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 countryA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
countryNoOptional 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

ParametersJSON Schema
NameRequiredDescription
countYes
groupsYes
country_countYes
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint and destructiveHint. Description adds 'no side effects' and 'returns a text summary plus structured JSON', which adds value 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with front-loaded purpose and efficient additional guidance. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given low complexity, complete annotations, and existing output schema, the description covers purpose, usage order, safety, and return type sufficiently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 100% coverage with informative description for the country parameter. Description echoes the filter purpose but does not add new details beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states verb 'list', resource 'city slugs', and grouping 'by country'. It distinguishes itself from siblings by noting it should be called first to discover valid slugs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Call this first to discover valid slugs before any other tool' and explains the optional country filter. Provides clear context for when to use.

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 scoreA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return. Default 10.
filterNoRestrict which cities are ranked, by country, region, universal-healthcare flag, or explicit include/exclude slug lists. Omit to rank all supported cities.
weightsNoOverride the composite-score weights. Defaults: financial 30, healthcare 20, vacation 15, childcare 15, safety_net 20.
scenarioNoOverride the default ranking scenario. The same scenario is applied to every city so scores are comparable.

Output Schema

ParametersJSON Schema
NameRequiredDescription
rankedYes
skippedYes
weightsYes
consideredYes
scenario_usedYes
methodology_urlYes
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only and non-destructive. Description adds 'Read-only, no side effects' and states it returns a text summary plus structured JSON, providing full behavioral clarity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two well-structured sentences that front-load the core purpose, followed by use guidance and a note on output. Every sentence adds value with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers all relevant aspects: what the tool does, when to use it, behavioral guarantees, output format, and parameter roles. No gaps given the tool's complexity and presence of output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed descriptions for all parameters and nested properties. The description adds high-level context (five dimensions, default weights) but does not significantly extend what the schema already conveys.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states that it ranks cities by a composite quality-of-life score across five dimensions. Distinguishes from sibling tool compare_cities by specifying use case: shortlisting vs head-to-head comparison.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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' and contrasts with compare_cities for head-to-head. Also explains that the scenario is applied consistently for direct comparability.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Discussions

No comments yet. Be the first to start the discussion!

Related MCP Servers

  • F
    license
    -
    quality
    C
    maintenance
    Tax-aware retirement planning for Canada and the US. CPP/OAS and Social Security timing, RRSP/TFSA/401k/IRA projections, Monte Carlo simulation, withdrawal order optimization, and historical backtesting against 150 years of market data.
    Last updated
    2
  • A
    license
    -
    quality
    C
    maintenance
    Cost of living, CPI, PPP, and regional price data for 190+ countries. Semantic endpoints with natural language parameters. MCP server for AI agents.
    Last updated
    MIT
  • A
    license
    -
    quality
    C
    maintenance
    US + EU salary benchmarking, pay transparency compliance, and semantic endpoints. 1,400+ US occupations, 28 EU countries. MCP server for AI agents.
    Last updated
    MIT

View all MCP Servers

Try in Browser

Your Connectors

Sign in to create a connector for this server.