estv-tax
Swiss Tax Calculator — MCP Server & Python API
MIT 라이선스에 따라 Aiyatullah Saiyed가 제공합니다.
두 가지 용도로 사용할 수 있는 스위스 세금 도구입니다. 애플리케이션에서는 Python API 클 라이언트로 사용하거나, Claude와 같은 AI 어시스턴트를 위한 MCP 서버로 실행할 수 있습니다. 공식 ESTV Swiss Federal Tax Calculator을 감싸며 API 키나 인증이 필요하지 않습니다.
수득세, 재산세, 일시울 자본, 상속/증여세, 법인세를 모든 스위스 지자체에 대한 과세 연도 2010–2026에 걸처 다룹니다.
기능
분류 | 도구 |
가우 세 |
|
지역 비고 |
|
세무 계획 |
|
다른 세금 |
|
참조 |
|
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 syncPython 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
메서드 | 설명 |
| 이름 또는 우편 번호로 지자체를 검색 |
| 항 내에 있는 지자체를 검색 |
| 가구에 대한 공제/예전 산 시트를 가져옵니다 |
| 내역 분단进入하는 완전한 세금 계산 |
| 미리 계산된 과세 소득 금범에서 세금을 계 산 |
| 여 러 지자체 간의 세금 비 |
| 여러 지자체에 걸천 일시울 자본 인출 세금 |
| 여러 지자체에 걸천 상속/증여세 |
| 여러 지자체에 걸천 법인세 |
| 원시 세율 구간 테이블 |
| 각 계산 장에서 지원하는 연도 범위 |
| 현재 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에 일요일 동안 저장됩니다. 환경 변들로 제어خ 하세요:
변수 | 효과 |
| 전혀 캐시 디벌블 |
| 사용자 지정 캐시 디렉터리 |
| 캐시 지속 시간(초) |
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-mcpMCP 클리아언트 카포그(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개 지자체를 대상으로 하며, 결과를 요약하여 확인하기 쉽게 합니다.교회세는
confession이none이 아닐 경우에만 부과됩니다.수치는 공식 ESTV 모델에서 가져온 것이며 단속적인 세금 판정이 아닙니다.
라이선스
MIT 라이선스 — LICENSE 참고.
Maintenance
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
- FlicenseBqualityDmaintenanceEnables 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.1114
- AlicenseBqualityDmaintenanceProvides 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.4561MIT
- AlicenseAqualityAmaintenanceProvides AI-native access to Swiss Federal Statistical Office datasets through 9 tools for querying education, population, and cross-cantonal comparisons without authentication.152MIT
- AlicenseBqualityCmaintenanceEnables AI assistants to answer tax compliance questions (VAT, sales tax, GST) and validate EU VAT numbers in real time via the VIES registry.212MIT
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.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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