kultranz
Server Details
US salary, tax and cost-of-living data from BLS, BEA, Census and IRS 2026 datasets, with a 50-state take-home-pay tax engine. Read-only, no auth required, no API key.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
TDQS
Scored across 5 tools
Each tool targets a distinct task: comparison, wage lookup, net-pay calculation, bracket reference, and metro listing. The only mild overlap is get_take_home_pay vs get_tax_brackets (both tax-related), but one computes a result while the other returns reference data, so an agent can distinguish them.
All five tools follow a clean snake_case verb_noun pattern (compare_cost_of_living, get_salary_percentiles, get_take_home_pay, get_tax_brackets, list_metros). No mixing of conventions.
Five tools is well-scoped for a focused personal-finance/relocation domain, with each tool earning its place. Nothing redundant or missing at the count level.
The surface covers the core lifecycle: resolve metros, compare cost of living, look up wages, and compute take-home pay and tax brackets. Minor gaps exist (e.g. no reverse 'what salary matches Y in X' beyond the compare tool, or rent/home-price lookup for arbitrary queries), but agents can work around these.
Available Tools
5 toolscompare_cost_of_livingCompare two US metrosARead-onlyIdempotentInspect
Compare the cost of living between two US metro areas and return the equivalent salary — the income needed in the second city to hold the same purchasing power. Uses BEA Regional Price Parities where the US average is 100. Answers 'is X more expensive than Y' and 'what salary do I need in Y to match X'. Call list_metros first if unsure of a city name.
| Name | Required | Description | Default |
|---|---|---|---|
| salary | No | Salary in USD to convert. Defaults to 100000. | |
| toCity | Yes | Destination metro exactly as listed, e.g. "San Francisco, CA" | |
| fromCity | Yes | Origin metro exactly as listed, e.g. "Austin, TX" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly/idempotent/non-destructive, so the bar is lower; the description nonetheless adds real substance by disclosing the data source (BEA Regional Price Parities, US average = 100) and the semantics of the returned equivalent salary. It does not cover precision, coverage limits, or failure behavior for unknown cities.
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?
Three sentences, front-loaded with the core purpose, then the methodology, then the prerequisite. Every sentence carries distinct information — no restating of the name or annotations.
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?
There is no output schema, so the description correctly takes on the return-value burden by naming the equivalent salary and its meaning, plus the data source and the ordering requirement. An agent has everything needed to call it correctly and interpret the result.
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 the baseline is 3, but the description goes beyond the schema by clarifying directionality: the salary is converted from the first city into the income needed in the second to hold the same purchasing power. That resolves which of fromCity/toCity is the origin versus the target, which the schema only implies.
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?
States a specific verb and resource — compare cost of living between two named US metros — and pins down the output concept (equivalent salary for equal purchasing power). This is clearly distinct from the sibling tools (get_tax_brackets, get_take_home_pay, get_salary_percentiles), none of which do pairwise metro comparison.
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?
Names the concrete questions it answers and routes the agent to list_metros as a prerequisite when a city name is uncertain — a real alternative-selection cue. It stops short of stating exclusions (e.g. non-US metros, unsupported cities), so it is strong context rather than a full when/when-not rule set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_salary_percentilesBLS wage percentiles by job and cityARead-onlyIdempotentInspect
Return real BLS Occupational Employment and Wage Statistics annual wages — 10th, 25th, median, 75th and 90th percentile — for an occupation, optionally narrowed to a metro or state, alongside the metro's cost-of-living index. Use this to answer 'what does a nurse earn in Chicago' or 'am I underpaid' with sourced figures rather than an estimate.
| Name | Required | Description | Default |
|---|---|---|---|
| job | No | Occupation, partial match, e.g. "nurse", "software developer" | |
| city | No | Optional metro, partial match, e.g. "Chicago" | |
| state | No | Optional two-letter state code |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the description's job is to add context beyond that — and it does, disclosing the authoritative data source (real BLS OEWS), the specific percentiles returned, and that a cost-of-living index accompanies the result. It still omits what happens on no-match or ambiguous occupation names, so it is not exhaustive.
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: the first front-loads the resource and returned fields, the second gives the use case. No filler, and the example phrasings make the intent immediately scannable.
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?
There is no output schema, so the description must convey returns — and it does, naming the percentile set and the COL index. For a zero-required-parameter lookup tool this is nearly sufficient; only edge-case behavior (no results, ambiguous job names) is left unspecified.
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 all three parameters (job, city, state) are already documented with partial-match and format hints. The description reinforces that city/state are optional narrowing filters, but adds no syntax or matching detail beyond the schema — the baseline 3 applies.
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?
States a precise verb+resource: returns BLS OEWS annual wage percentiles (10th/25th/median/75th/90th) for an occupation, optionally scoped to metro/state, plus the cost-of-living index. An agent can distinguish this from siblings like get_take_home_pay or compare_cost_of_living purely from the wording.
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?
Provides concrete use cases ('what does a nurse earn in Chicago', 'am I underpaid') and frames the value as sourced rather than estimated, which tells the agent when this is the right tool. It does not, however, explicitly exclude or route away from siblings such as get_take_home_pay (net pay) or compare_cost_of_living, so the boundary is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_take_home_payUS take-home payARead-onlyIdempotentInspect
Calculate net (take-home) pay from a gross US salary for 2026: federal income tax, Social Security to the annual wage base, Medicare including the additional Medicare surcharge, and state income tax for any of the 50 states or DC. Use this instead of estimating — state rules differ substantially and nine states levy no income tax. Free, no quota, no side effects.
| Name | Required | Description | Default |
|---|---|---|---|
| state | Yes | Two-letter US state code, e.g. CA, NY, TX, DC | |
| salary | Yes | Gross annual salary in USD, e.g. 120000 | |
| pretax401k | No | Optional annual pre-tax 401(k) contribution in USD | |
| filingStatus | No | single, or mfj for married filing jointly. Defaults to single. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world, so the safety profile is covered. The description adds real context beyond that: "Free, no quota, no side effects," plus the tax-modeling details (SS capped at the wage base, additional Medicare surcharge) that explain how the number is derived.
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 tight sentences, front-loaded with the core calculation and scope, followed by the differentiating rationale. No filler or 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?
Annotations carry the safety profile and the schema fully documents inputs, so the description's main remaining job is framing the computation, which it does. The one gap is that with no output schema, it doesn't hint at the return shape (e.g., a breakdown of deductions vs. a single net figure), leaving the agent to infer output structure.
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 schema already documents all four parameters including the enum for filingStatus. The description adds no parameter-level guidance (no mention of pretax401k or filing status), so the baseline 3 applies.
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?
States a specific verb (Calculate) and resource (net/take-home pay) with precise scope: gross US salary, tax year 2026, and the exact components (federal income tax, SS to wage base, Medicare surcharge, state income tax). This distinguishes it cleanly from siblings like get_tax_brackets and get_salary_percentiles, which do not compute net pay.
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?
Offers a directive ("Use this instead of estimating") and a rationale (state rules differ, nine states levy no income tax), which implies the usage context. However, it never explicitly names which sibling to use for a different need (e.g., get_tax_brackets for bracket detail or compare_cost_of_living for cross-state comparison), so routing is left partly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tax_brackets2026 federal and state tax bracketsARead-onlyIdempotentInspect
Return the 2026 IRS federal income tax brackets and standard deduction, and optionally one state's income tax rules (none, flat, or progressive with its own brackets). Use when asked what bracket someone is in or how a state taxes income.
| Name | Required | Description | Default |
|---|---|---|---|
| state | No | Optional two-letter state code to include alongside the federal brackets | |
| filingStatus | No | single, or mfj for married filing jointly. Defaults to single. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=false, so the safety profile is covered. The description usefully adds that at most one state is returned and that state rules may be none, flat, or progressive, but says nothing about caching, rate limits, or versioning of the figures.
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, zero filler, with the return content front-loaded before the usage sentence. Every clause carries information.
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 no-required-param lookup tool with annotations covering safety and no output schema, the description adequately explains both what is returned and when to reach for it. Nothing an agent needs to call it correctly is missing.
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 both parameters are already documented structurally. The description adds context for "state" (optional, single state, whose tax structure varies) but never mentions filingStatus, so it does not go beyond the schema baseline.
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?
States a specific verb and resource with clear scope: 2026 federal brackets plus standard deduction, and optionally one state's rules. The scope distinguishes it from siblings like get_take_home_pay, but no sibling is named explicitly, which the rubric reserves for a 5.
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?
"Use when asked what bracket someone is in or how a state taxes income" gives explicit triggering conditions. There is no when-not guidance and no alternative tool named, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_metrosSupported metros and their cost indicesARead-onlyIdempotentInspect
List all 50 supported US metro areas with their BEA Regional Price Parity index (US average = 100), median rent, median home value and median household income. Pass a city to return just that one. Use this to resolve exact city names before calling compare_cost_of_living.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | Optional single metro, e.g. "Albuquerque, NM" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description adds useful domain context beyond the annotations: the dataset is bounded at 50 metros, and the index scale is anchored (US average = 100). It does not mention response ordering or size limits, but nothing important is hidden.
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?
Three short sentences, front-loaded with what the tool returns, then how to filter, then when to use it. Every sentence earns its place with no repetition of the schema or title.
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?
Despite no output schema, the description enumerates the returned fields and the index scale, and it explains the tool's position in the workflow relative to compare_cost_of_living. An agent has everything needed to select and invoke it correctly.
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 the baseline is 3, but the description goes beyond it by explaining the two operating modes: no argument returns the full list of 50, and passing a city returns just that metro. That meaningfully clarifies the effect of the optional parameter for an agent deciding how to call it.
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?
States a specific verb (List) and resource (50 supported US metro areas) and enumerates exactly what each entry contains: RPP index, median rent, median home value, median household income. It is clearly distinguishable from siblings like compare_cost_of_living because it is a reference/lookup list, not a comparison.
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 prescribes the workflow: 'Use this to resolve exact city names before calling compare_cost_of_living.' It also states the alternative behavior when the optional city argument is supplied versus omitted, leaving no ambiguity about when to call it or how it feeds the next tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
- First observed
compare_cost_of_living - First observed
get_salary_percentiles - First observed
get_take_home_pay - First observed
get_tax_brackets - First observed
list_metros
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.1622 npm1MIT
- AlicenseCqualityBmaintenanceCompetitor Monitor AI - MCP server providing AI-powered tools and automation by MEOK AI Labs1114 npm40 PyPIMIT
- AlicenseAqualityCmaintenanceRevnuvo Company Intelligence tells AI agents what changed at a company, with evidence. It observes company websites, technologies, and DNS over time and returns timestamped, confidence-aware changes, signals, and monitoring.9MIT

industrylens-mcpofficial
AlicenseNot gradedqualityBmaintenanceBrowse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.