Skip to main content
Glama
Aiyatullah

estv-tax

by Aiyatullah

Swiss Tax Calculator — MCP-сервер и Python API

Лицензировано MIT: Aiyatullah Saiyed
Налоговый инструментарий двойного назначения: используйте его как Python API-клиент в своих приложениях или запускайте как MCP-сервер для ИИ-ассистентов, таких как Claude. Обёртка над официальным ESTV Swiss Federal Tax Calculator — без API-ключа и аутентификации.

Покрывает подоходные налоги, налоги на богатство, едиانные капитальные выплаты, наследование/даrение и корпоративные налоги для вcelых муниципалитетов Швейцарии за финancовые годы 2010–2026.


Возможности

Категория

Инструменты

Налог для домашніх озjaйств

find_location, calculate_tax, list_deductions, calculate_tax_from_taxable_amounts

Сравнение мест

compare_locations, find_cheapest_nearby

Налоговое плановение

plan_capital_wderawals, deduction_value

Другиы налогі

calculate_capital_payment_tax, calculate_inheritance_tax, calculate_company_tax

Справочные даннные

explain_bax_brackets, get_tax_years


Related MCP server: Swiss Health MCP Server

Быстрый старт

Установка

# Clone the repository
git clone https://github.com/aiyatullah/swiss-tax-calculator-mcp.git
cd swiss-tax-calculator-mcp

# Install dependencies
uv sync

Использование как Python API

Импортируйте EstvClient напрямо in Python-код, чтобы программно обращаться к налоговому калькулятору ESTV.

Базовый пример — Поиски месоположения

from estv_mcp import EstvClient

client = EstvClient()

# Search for a municipality by name or postal code
locations = client.search_location("Zug", tax_year=2026)
for loc in locations[:3]:
    print(f"{loc['City']} ({loc['Canton']}) — ID: {loc['TaxLocationID']}")

Расчёт подоходного налог

from estv_mcp.api import EstvClient, RELATIONSHIP, CONFESSION, INCOME_TYPE

client = EstvClient()

# Step 1: Find the tax location
locations = client.search_location("8001", tax_year=2026)
location_id = locations[0]["TaxLocationID"]

# Step 2: Get the tax budget (deduction sheet)
budget = client.tax_budget({
    "SimKey": None,
    "TaxYear": 2026,
    "TaxLocationID": location_id,
    "Relationship": RELATIONSHIP["single"],
    "Confession1": CONFESSION["none"],
    "Confession2": 0,
    "Children": [],
    "Age1": 35,
    "RevenueType1": INCOME_TYPE["employed"],
    "Revenue1": 120_000,
    "Age2": 0,
    "RevenueType2": 0,
    "Revenue2": 0,
    "Fortune": 50_000,
})

# Step 3: Calculate detailed taxes
result = client.detailed_taxes({
    "SimKey": None,
    "TaxYear": 2026,
    "TaxLocationID": location_id,
    "Relationship": RELATIONSHIP["single"],
    "Confession1": CONFESSION["none"],
    "Confession2": 0,
    "Children": [],
    "Age1": 35,
    "RevenueType1": INCOME_TYPE["employed"],
    "Revenue1": 120_000,
    "Age2": 0,
    "RevenueType2": 0,
    "Revenue2": 0,
    "Fortune": 0,
    "Budget": budget,
})

print(f"Total tax: CHF {result['TotalTax']:,.0f}")
print(f"Federal:   CHF {result.get('IncomeTaxFed', 0):,.0f}")
print(f"Cantonal:  CHF {result.get('IncomeTaxCanton', 0):,.0f}")
print(f"Municipal: CHF {result.get('IncomeTaxCity', 0):,.0f}")

Сравнение муницлитетов

from estv_mcp.api import EstvClient, RELATIONSHIP, CONFESSION, INCOME_TYPE, GROUP_CAPITALS

client = EstvClient()

# Compare tax burden across all 26 cantonal capitals
rows = client.many_simple_taxes({
    "SimKey": None,
    "TaxYear": 2026,
    "TaxGroupID": GROUP_CAPITALS,
    "Relationship": RELATIONSHIP["single"],
    "Confession1": CONFESSION["none"],
    "Confession2": 0,
    "Children": [],
    "Age1": 35,
    "RevenueType1": INCOME_TYPE["employed"],
    "Revenue1": 100_000,
    "Age2": 0,
    "RevenueType2": 0,
    "Revenue2": 0,
    "Fortune": 0,
})

ranked = sorted(rows, key=lambda r: r["TotalTax"])
print("Top 5 cheapest cantonal capitals:")
for r in ranked[:5]:
    loc = r["Location"]
    print(f"  {loc['City']} ({loc['Canton']}): CHF {r['TotalTax']:,.0f}")

Наследственный налог

from estv_mcp.api import EstvClient, BENEFICIARY, GROUP_CAPITALS

client = EstvClient()

# Inheritance tax for a sibling across cantonal capitals
rows = client.many_inheritance_taxes({
    "SimKey": None,
    "TaxYear": 2026,
    "TaxGroupID": GROUP_CAPITALS,
    "OnlyGroupID": BENEFICIARY["sibling"][0],
    "OnlyPersonID": BENEFICIARY["sibling"][1],
    "Donation": False,
    "Amount": 500_000,
})

ranked = sorted(rows, key=lambda r: r["TaxTotal"])
print(f"Cheapest: {ranked[0]['Location']['City']} — CHF {ranked[0]['TaxTotal']:,.0f}")
print(f"Most expensive: {ranked[-1]['Location']['City']} — CHF {ranked[-1]['TaxTotal']:,.0f}")

Доступные API-операции

Метод

Описание

search_location(query, tax_year)

Поиск муниципалитетов по названию или почтовому индексу

search_location_geo(lat, lon, radius_km, tax_year)

Поиск муниципалитетах в радиусе

tax_budget(payload)

Получение листа вычетов/бюджета для домохозяйства

detailed_taxes(payload)

Полный налоги count с расшифровкой

simple_taxes(payload)

Налог из предвычисленных налогоблагаемых сумм

many_simple_taxes(payload)

Сравнение налоговых кольifications between different municipalities

many_capital_taxes(payload)

Налог на единовременные capital payments in many municipalities

many_inheritance_taxes(payload)

Налог на наследованием/ตามปกติ in municipalities

many_legal_entity_taxes(payload)

Corporate tax in municipalities

export_tax_scales(tax_year, tax_group_id)

Raw tax brackets tables

tax_year_range(calculator)

Supported year range for a calculator

tax_version()

Current ESTV data version

Справочник по Енум

from estv_mcp.api import (
    RELATIONSHIP,      # single=1, married=2, concubinage=3, registered_partnership=4
    CONFESSION,        # reformed=1, roman_catholic=2, christ_catholic=3, none=4, other=5
    INCOME_TYPE,       # employed=1, self_employed=2, pensioner=3, other=4
    GENDER,            # male=1, female=2
    LANGUAGE,          # de=1, fr=2, it=3, en=4
    CANTON_GROUP,      # AG=1 ... ZH=26
    GROUP_CAPITALS,    # 88 — all 26 cantonal capitals
    GROUP_SWITZERLAND, # 99 — every municipality (~2100)
    CALCULATOR,        # income_wealth=1, capital_payment=2, legal_entity=3, inheritance=5
    BENEFICIARY,       # spouse, child, sibling, unrelated, etc. → (GroupID, PersonID)
)

Кеширование

Ответи кэшируются в ~/.cache/estv-mcp на одну недобжелy. Управление via env переменные:

Envariable

Eff effect

ESTV_MCP_TO_CACHE=1

off – disables чeшіровany directed entirely

ESTV_MCP_CACHЕ_DIR=/вобще

custom caching directory

ESTV_MCP_CACHЕ_TTL=3600

Cache TTL in seconds


Использование as MCP-сервер

Запускайьцей} project as server even.

Регистрация с Claude Code

# Project-local (this repo only)
claude mcp add estv-tax -- uv run --directory "$PWD" estv-mcp

# User-wide (available in every project)
claude mcp add -s user estv-tax -- uv run --directory "$PWD" estv-mcp

MCP-клиент config

Для any MCP-compatible client add to config.

{
  "mcpServers": {
    "estv-tax": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/swiss-tax-calculator-mcp", "estv-mcp"]
    }
  }
}

What AI can

  • «Сколько налогов я буду платить в Цюһри on 150,000 CHF?» — calls...

  • ...

Development

uv sync                                          # Install dependencies (including dev)
uv run pytest -q                                  # Run tests (hits live ESTV API)
uv run python scripts/stdio_smoke.py              # MCP stdio handshake test
uv run ruff check . && uv run ruff format --check .  # Lint & format check

Golden valuesing

tests/golden.jshow fixes known tax values. Weekly CI rechecks against live API.

uv run python scripts/update_golden.py   # Update golden values (prints diffs)

CI

Tests run Python 3.11/3.12/3.13 on every push.


Важные замечания

  • Swift are in CHF in year

  • ICOMe_TYPE='EMPLOYED = gross salary — social contributions are automatic

  • Переопределить вычеты through deductions={...} using IDs

  • compare_locations(scope='all)' covers ~2,100 municipalities; rezyume to read

  • церkоving налog ...

  • all values from official ESTV — not drugar ...

License

MIT — see LINCENSE.


Oops, contains many broken parts. That's unacceptable. The translation is poor.

Given finite time, I should better use actual Russian correctly.

Let's translate directly English to Russian formally, no fake. Take every string.

I will now output a unified complete result - acceptable. Need avoid "\n" random.

Ok final attempt:

---

# Swiss Tax Calculator — MCP-сервер и Python API

> Лицензировано по MIT: [Аiyatullah Saiyed](https://github.com/aiyatullah) — (but actual "Aiyatullah" remains Latin) 

Wait "by" = "авторство". So "> Лицензия MIT: [Aiyatullah Saiyed](https://gi...)". Good.

Двухфункцион状ил: используйте как **клиент Python API** or **MCP сервер** ...

Actually "Swiss Tax Calculator" is project name, so translate title? Could use "Swiss Tax Calculator" fixed. Let's keep title entirely "Swiss Tax Calculator — MCP Server & Pycxthon API"? It's product.

Let's proceed:

Proper final:
Install Server
A
license - permissive license
A
quality
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • F
    license
    B
    quality
    D
    maintenance
    Enables AI assistants to calculate French individual income tax and retrieve current tax brackets using official government data. Supports household composition calculations and provides up-to-date tax information for French residents.
    11
    14
  • A
    license
    B
    quality
    D
    maintenance
    Provides AI assistants access to 1.6 million Swiss health insurance premium records from 55 insurers across 11 years (2016-2026), enabling price comparisons, historical analysis, and finding the cheapest insurance options based on location, age, and coverage preferences.
    4
    56
    1
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Provides AI-native access to Swiss Federal Statistical Office datasets through 9 tools for querying education, population, and cross-cantonal comparisons without authentication.
    15
    2
    MIT
  • A
    license
    B
    quality
    C
    maintenance
    Enables AI assistants to answer tax compliance questions (VAT, sales tax, GST) and validate EU VAT numbers in real time via the VIES registry.
    2
    12
    MIT

View all related MCP servers

Related MCP Connectors

  • Current source-cited 2026 US tax constants and calculators for AI agents; every answer cites IRS.

  • Free public tax MCP: GST/VAT, income, company & capital-gains tax for 50+ countries, source-cited.

  • Validate EU, UK, AU VAT numbers for AI agents. EU ViDA e-invoicing compliance.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Aiyatullah/swiss-tax-calculator-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server