Skip to main content
Glama
Aiyatullah

estv-tax

by Aiyatullah

Swiss Tax Calculator — MCP Server & Python API

MIT 라이선스에 따라 Aiyatullah Saiyed가 제공합니다.

두 가지 용도로 사용할 수 있는 스위스 세금 도구입니다. 애플리케이션에서는 Python API 클 라이언트로 사용하거나, Claude와 같은 AI 어시스턴트를 위한 MCP 서버로 실행할 수 있습니다. 공식 ESTV Swiss Federal Tax Calculator을 감싸며 API 키나 인증이 필요하지 않습니다.

수득세, 재산세, 일시울 자본, 상속/증여세, 법인세를 모든 스위스 지자체에 대한 과세 연도 2010–2026에 걸처 다룹니다.


기능

분류

도구

가우 세

find_location, calculate_tax, list_deductions, calculate_tax_from_tax_able_amounts

지역 비고

compare_locations, find_cheapest_nearby

세무 계획

plan_capital_withdrawals, deduction_value

다른 세금

calculate_capital_payment_tax, calculate_inheritance_tax, calculate_company_tax

참조

explain_tax_brakets, 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로 이용

Python 코드에서 EstvClient를 직접 가져와 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)

내역 분단进入하는 완전한 세금 계산

simple_taxes(payload)

미리 계산된 과세 소득 금범에서 세금을 계 산

many_simple_taxes(payload)

여 러 지자체 간의 세금 비

many_capital_taxes(payload)

여러 지자체에 걸천 일시울 자본 인출 세금

many_inheritance_taxes(payload)

여러 지자체에 걸천 상속/증여세

many_legal_entity_taxes(payload)

여러 지자체에 걸천 법인세

export_tax_scales(tax_year, tax_group_id)

원시 세율 구간 테이블

tax_year_range(calculator)

각 계산 장에서 지원하는 연도 범위

tax_version()

현재 ESTV 데이터 버전

열거형 참조

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에 일요일 동안 저장됩니다. 환경 변들로 제어خ 하세요:

변수

효과

ESTV_MCP_NO_CACHE=1

전혀 캐시 디벌블

ESTV_MCP_CACHE_DIR=/path

사용자 지정 캐시 디렉터리

ESTV_MCP_CACHE_TTL=3600

캐시 지속 시간(초)


MCP 서버로 이중

이 프로제트를 MCP 서버로 실행하면 AI 시스턴CH (Claude 등)가 모드 스위 세금 도구에 접근할 수 있습니다.

Claude 폐에 등록

# 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 클리아언트 카포그(JSON)

MP 호한 클라이언트의 경우, 카포그에 다음과 같이 추가하세요:

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

AI가 ক것을 카할 수 있는 지

CA 도움

    • "오늘CHF 150,000을 조해하고 싶은데, 요즘의 세금은 에나?"find_location + calculate_tax 호출

  • "자녀 둘인 부이 Z여기에 사는 그 라, Schwyz와 비교해량?"compare_tax 호출

  • "Zurich HBI에서 30km 이내 저렴한 지역은 도어?"find_cheapest_nearby 호출

  • "pillar 2 인출을 여러 주에 걸어 나는 것인 아니?"plan_capital_withdrawals 호출

  • "제네바에서 위부 형제에 대한 상속세 부과 얼마인지?"calculate_inheritance_tax 호출

  • "자본에 대한 Corporation"calculate_company_tax 호출


개벌

개발

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

기준 값

| tests/golden.json 은 세금 기준 연도에 대한 알려진 세금 수치를 고정합니다. 주간 CI가 라이브 API 때로 다시 확인하고, 변경사항을 감天합니다.

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

CI

Commitment & CI

모른 push에 Python 3.11/3.12/3.13에서 테스트를 실시하고, ESTV 데이터의 변화을 파악하기 위한 주간 일정도 실행됩니다.

중요 주소

  • 모든 금액은 CHF 연간 단위입니다.

  • income_type='employed'는 종시 근본 소득을 의미하며, 사회 보험료(AHV/IV/EO, ALV, NBU, BVG)는 자동으로 계산됩니다.

  • 공제 기본값은 list_deductions의 ID를 사용해 deductions={id: value}로 재정의할 수 있습니다 (예: pillar 3a의 PRAEMIEN3A, 저축 이자의 SCHULDZINSEN).

  • compare_locations(scope='switzerland')는 약 2,100개 지자체를 대상으로 하며, 결과를 요약하여 확인하기 쉽게 합니다.

  • 교회세는 confessionnone이 아닐 경우에만 부과됩니다.

  • 수치는 공식 ESTV 모델에서 가져온 것이며 단속적인 세금 판정이 아닙니다.

라이선스

MIT 라이선스 — LICENSE 참고.

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