estv-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ESTV_MCP_NO_CACHE | No | Disable caching when set to 1 | |
| ESTV_MCP_CACHE_DIR | No | Override the cache directory (default ~/.cache/estv-mcp) | |
| ESTV_MCP_CACHE_TTL | No | Override cache TTL in seconds (default 604800 for one week) |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| find_locationA | Resolve a place name or postal code to an ESTV tax location id. Municipal tax multipliers differ inside a canton and sometimes inside a
postal code, so every calculation is anchored on a |
| list_deductionsA | Show the deduction/budget sheet ESTV derives for a household. Returns every line item with the value ESTV assumes by default. Lines
marked |
| calculate_taxA | Compute federal, cantonal, municipal and church tax for a household. Uses ESTV's detailed model: it derives social-insurance contributions and
standard deductions from the gross figures, so you only need income,
wealth and family situation. Call |
| calculate_tax_from_taxable_amountsA | Apply the tax scales to amounts already known to be taxable. Use this when the user reads figures off a tax assessment or return
( |
| compare_locationsA | Rank municipalities by total tax burden for one and the same household. Answers "where would I pay the least?". Scanning all of Switzerland covers
~2100 municipalities, so only the extremes plus summary statistics are
returned; narrow with |
| calculate_capital_payment_taxA | Tax on a lump-sum payout from pillar 2 or pillar 3a. Capital withdrawals are taxed separately from ordinary income at a reduced
rate, and the rate varies a lot between cantons. Pass a canton code,
'capitals' or 'switzerland' as |
| get_tax_yearsA | Report which tax years each ESTV calculator currently covers. |
| find_cheapest_nearbyA | Rank municipalities within a radius of a point by tax burden. The relocation question people actually ask: given that I have to stay within commuting distance of somewhere, where is the cheapest place to live? Pass the coordinates of the office or station and a radius. |
| plan_capital_withdrawalsA | Find the cheapest way to split a lump-sum withdrawal across tax years. Capital payouts are taxed on a steeply progressive separate scale, so
spreading a pension pot over several calendar years can save a large
amount. Splitting within one year saves nothing: all payouts received in
the same calendar year are added together before the rate is applied, and
this tool models that. Read the |
| deduction_valueA | Measure what a deduction is actually worth to this household. Sweeps a budget line (pillar 3a by default) and reports the tax saved at each level, plus the saving on each additional franc. Because rates are progressive the last franc of a deduction is worth more than the first, and the return flattens once a bracket boundary is crossed. |
| calculate_inheritance_taxA | Inheritance and gift tax, which is cantonal and varies enormously. Spouses and direct descendants are exempt in most cantons while unrelated
beneficiaries and unmarried partners can pay a quarter of the estate, so
the beneficiary relationship matters more than the amount. Omit
|
| calculate_company_taxA | Profit and capital tax for a company (GmbH, AG or similar). Pass a canton code, 'capitals' or 'switzerland' as |
| explain_tax_bracketsA | Show the statutory rate ladder and where an income sits in it. Explains the number rather than just producing it: which bracket the household is in, the marginal rate there, and how far the next threshold is. The cantonal figure is the simple tax (einfache Staatssteuer), which the canton and municipality then multiply by their own rates. The tax amount always comes from ESTV itself. The ladder is rebuilt from
the published scale, which a few cantons express as a formula rather than
a table; there the amount is still exact and |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 13 tools
Each tool targets a distinct tax calculation or query scenario. While `calculate_tax` and `calculate_tax_from_taxable_amounts` both compute tax, they differ in input types (gross vs taxable amounts). Similarly, `compare_locations` and `find_cheapest_nearby` both rank municipalities but one is global with optional filtering and the other is radius-based. Overall, descriptions clearly differentiate purposes, minimizing confusion.
All tool names follow a consistent verb_noun pattern using lowercase with underscores (e.g., `find_location`, `calculate_tax`, `explain_tax_brackets`). The verbs are action-oriented (find, list, calculate, compare, get, plan, explain) and the nouns describe the domain entity. No mixing of conventions, making the pattern predictable.
With 13 tools, the server covers the core Swiss tax calculation domain comprehensively without being bloated. Each tool serves a distinct purpose: location resolution, deduction listing, multiple tax computations (income, capital, inheritance, company), comparison utilities, planning, and bracket explanation. The count feels well-scoped for the complexity of the domain.
The tool set covers the full lifecycle of typical Swiss tax queries: resolving locations, understanding deductions, computing taxes from various inputs, comparing municipalities, optimizing capital withdrawals, and explaining brackets. Missing aspects like tax form filing or historical data are outside the server's stated purpose. The surface is complete for calculation and planning tasks.