ÖD-Gehaltsrechner & Brutto-Netto MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ÖD-Gehaltsrechner & Brutto-Netto MCP ServerBerechne das Nettogehalt für TVöD E13 Stufe 3 in München"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ÖD-Gehaltsrechner & Brutto-Netto MCP Server (Model Context Protocol)
Offizieller Open-Source MCP-Server zur deterministischen Gehalts- und Besoldungsberechnung im deutschen Öffentlichen Dienst sowie universeller Brutto-Netto-Rechner für freie Gehälter nach dem offiziellen Programmablaufplan (PAP) des Bundesfinanzministeriums (BMF).
Kompatibel mit Google Antigravity, Claude Desktop, Cursor IDE, Windsurf und autonomen KI-Agenten.
🛠 Enthaltene Tools
get_public_sector_options: Übersicht aller Dienstherren (Bund + 16 Länder) und Tarifverträge (TVöD, TV-L etc.) mit Besoldungs- und Entgeltgruppen.get_salary_and_zulagen_options: Discovery – Liefert Stufen mit Grundgehalt sowie alle wählbaren Stellenzulagen (Polizei, Justiz etc.), Amtszulagen und Familienzuschlags-Regeln für eine Gruppe.calculate_agent_salary: Vollständige ÖD-Berechnung & BMF-PAP – Exaktes Brutto, Netto und jährliche Sonderzahlung mit ausgewählten Zulagen und bundeslandspezifischem Familienzuschlag (Ortsklasse, Mietenstufe) sowie steuerlichen Details nach BMF-PAP.calculate_standard_salary: Direktberechnung & Universeller Brutto-Netto-Rechner – Schnelle Gehaltsauskunft aus Kerndaten (Besoldung & Tarif) sowie freie Bruttobeträge (employment_type='sonstige'mitbrutto_gehalt). Berechnet Lohnsteuer, Solidaritätszuschlag, Kirchensteuer und alle Sozialabgaben (GKV, PKV, RV, AV, PV) exakt nach dem aktuellen BMF-Programmablaufplan (PAP).
Related MCP server: salaxy-mcp
⚡ Installation & Einrichtung
1. Remote MCP (Cloud SSE & Streamable HTTP – Empfohlen)
Keine lokale Python-Installation nötig! Verbinden Sie Claude Desktop, Cursor oder Ihren KI-Agenten direkt mit dem cloud-gehosteten Server:
Server URL:
https://infos-oeffentlicher-dienst.de/mcp/sse(oder Streamable HTTP:https://infos-oeffentlicher-dienst.de/mcp)
Konfiguration (Claude Desktop / Cursor Remote SSE):
{
"mcpServers": {
"brutto-netto-gehaltsrechner": {
"type": "sse",
"url": "https://infos-oeffentlicher-dienst.de/mcp/sse"
}
}
}💡 Sofort startklar (kein API-Key nötig): Sie können den Server sofort ohne API-Key nutzen (ein kostenloses Basiskontingent von 30 Anfragen/Monat ist standardmäßig aktiv). Wenn Sie höhere monatliche Limits benötigen, können Sie optional einen persönlichen Key anhängen:
https://infos-oeffentlicher-dienst.de/mcp/sse?apiKey=IHR_API_KEY.
2. Installation via Smithery (1-Click)
npx @smithery/cli install kio-dunker/brutto-netto-gehaltsrechner --client claudeOder im Web-Interface von Smithery.ai:
Server ID:
kio-dunker/brutto-netto-gehaltsrechnerMCP Server URL:
https://infos-oeffentlicher-dienst.de/mcp/sse
3. Google Antigravity Einrichtung
Tragen Sie den Server in Ihre Antigravity MCP-Konfiguration ein (~/.gemini/config/mcp_config.json):
{
"mcpServers": {
"brutto-netto-gehaltsrechner": {
"command": "python",
"args": ["/Pfad/zu/oed-gehaltsrechner-mcp/server.py"],
"env": {
"PYTHONIOENCODING": "utf-8"
}
}
}
}4. Claude Desktop Einrichtung (Stdio)
Fügen Sie folgenden Block in Ihre claude_desktop_config.json ein:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"brutto-netto-gehaltsrechner": {
"command": "python",
"args": ["/Pfad/zu/oed-gehaltsrechner-mcp/server.py"]
}
}
}API-Key (optional): Der Server funktioniert sofort ohne API-Key (30 Abfragen/Monat). Einen optionalen persönlichen Key für höhere Kontingente können Sie unter infos-oeffentlicher-dienst.de/api oder infos-oeffentlicher-dienst.de/mcp erstellen und in
env:{"OED_INFOPORTAL_API_KEY": "sk_live_..."}hinterlegen.
5. Cursor IDE Einrichtung
Erstellen Sie in Ihrem Projekt die Datei .cursor/mcp.json (unterstützt direkt Remote SSE):
{
"mcpServers": {
"brutto-netto-gehaltsrechner": {
"type": "sse",
"url": "https://infos-oeffentlicher-dienst.de/mcp/sse"
}
}
}6. Kilo Code Einrichtung
Tragen Sie den Server in Ihre Kilo Code Konfiguration ein (z. B. kilo.jsonc oder Kilo MCP Settings):
{
"mcpServers": {
"brutto-netto-gehaltsrechner": {
"type": "sse",
"url": "https://infos-oeffentlicher-dienst.de/mcp/sse"
}
}
}🔑 Authentifizierung & API-Key (Optional)
Der Server ist sofort und ohne Registrierung nutzbar (ein kostenloses Kontingent von 30 Aufrufen/Monat ist standardmäßig aktiv).
Wenn Sie ein höheres monatliches Kontingent oder garantierte Verfügbarkeit benötigen, können Sie unter infos-oeffentlicher-dienst.de/api oder infos-oeffentlicher-dienst.de/mcp einen persönlichen API-Key generieren.
A. Remote MCP (Cloud SSE) – 2 Möglichkeiten:
1. Universell via Query-Parameter (Funktioniert in 100% aller MCP-Clients):
{
"mcpServers": {
"brutto-netto-gehaltsrechner": {
"type": "sse",
"url": "https://infos-oeffentlicher-dienst.de/mcp/sse?apiKey=DEIN_API_KEY"
}
}
}2. Via HTTP-Header (z. B. in Cursor, Kilo Code, Windsurf):
{
"mcpServers": {
"brutto-netto-gehaltsrechner": {
"type": "sse",
"url": "https://infos-oeffentlicher-dienst.de/mcp/sse",
"headers": {
"Authorization": "Bearer DEIN_API_KEY"
}
}
}
}B. Lokaler Stdio-Modus (server.py):
Hinterlegen Sie den Key als Umgebungsvariable OED_INFOPORTAL_API_KEY:
{
"mcpServers": {
"brutto-netto-gehaltsrechner": {
"command": "python",
"args": ["/Pfad/zu/server.py"],
"env": {
"OED_INFOPORTAL_API_KEY": "DEIN_API_KEY"
}
}
}
}💬 Beispiel-Prompts für Chat & Agenten
Sobald der Server aktiv ist, versteht Ihre KI natürliche Fragen und liefert centgenaue Ergebnisse:
Beamtenbesoldung & Familie:
„Was verdiene ich als Grundschullehrer A13 Stufe 4 in Bayern netto, wenn ich verheiratet bin und 2 Kinder habe?“Tarifvertrag TVöD:
„Berechne das TVöD-VKA Entgelt für Gruppe E11 Stufe 3 im Jahr 2026 bei Vollzeit mit VBL.“Zulagen & Dienstherren:
„Welche Stellenzulagen gibt es für einen Polizeikommissar A9 beim Bund?“Freier Brutto-Netto-Rechner (PAP BMF):
„Berechne mein Nettogehalt bei 4.500 € Brutto als Angestellter in Steuerklasse 1 in NRW.“
🧪 Lokaler Test
Der MCP-Server benötigt keine externen pip-Pakete (nur Python 3.9+ Standardbibliothek).
Testen über die Kommandozeile (Stdio JSON-RPC):
python server.py🌐 Verzeichnisse & Registries
Smithery: smithery.ai/server/kio-dunker/brutto-netto-gehaltsrechner
OpenAPI: infos-oeffentlicher-dienst.de/openapi.json (für Toolhouse, Composio, LangChain)
Web-Dokumentation & Playground: infos-oeffentlicher-dienst.de/mcp
📄 Lizenz
MIT License – siehe LICENSE.
Available Tools
4 toolscalculate_agent_salaryARead-onlyIdempotent
VOLLSTÄNDIGE ÖD-BERECHNUNG & BMF-PAP: Berechnet das exakte Brutto, Netto und die jährliche Sonderzahlung inklusive ausgewählter Zulagen-IDs und bundeslandspezifischem Familienzuschlag. Die Netto-Ermittlung (Lohnsteuer, Solidaritätszuschlag, Kirchensteuer und Sozialabgaben) erfolgt exakt nach dem aktuellen Programmablaufplan (PAP) des Bundesfinanzministeriums (BMF).
| Name | Required | Description | Default |
|---|---|---|---|
| stufe | Yes | Erfahrungsstufe / Dienstaltersstufe (z. B. '1', '2', '3', '4', '5', '6'). Standard: '3'. | |
| gruppe | Yes | Besoldungs- oder Entgeltgruppe (z. B. 'A9', 'A13', 'B2' für Beamte oder 'E11', 'E9b', 'S12', 'P8', 'Ä1' für Tarif). Standard: 'A9'. | |
| kinder | No | Anzahl kindergeldberechtigter Kinder für den Familienzuschlag (z. B. 0, 1, 2). Befreit zugleich vom PV-Zuschlag für Kinderlose. | |
| gkvZusatz | No | Kassenindividueller GKV-Zusatzbeitrag in Prozent (z. B. 2.9 für Bundesdurchschnitt 2026, Standard: 2.9). | |
| bundesland | No | Bundesland des Wohnorts für Kirchensteuersatz (8% in BY/BW vs. 9% in übrigen Ländern) und PV-Sachsenregelung (z. B. 'bayern', 'by', 'nrw'). Standard: 'bayern'. | |
| dienstherr | No | Dienstherr / Bundesland bei Beamten (z. B. 'bund', 'bayern' bzw. 'by', 'nordrhein-westfalen' bzw. 'nrw'). Erforderlich wenn employmentType='beamte'. | |
| ortsklasse | No | Bayern Ortsklasse ('i' bis 'vii') für den regionalen Orts- und Familienzuschlag. Standard: 'i'. | |
| period_key | No | Optionaler Gültigkeitszeitraum / Tarifrunde (z. B. '20260501_'). Standard: aktuellste Tabelle. | |
| pkvBeitrag | No | Monatlicher PKV-Gesamtbeitrag zur privaten Kranken- und Pflegeversicherung in Euro (Standard: 0.0). | |
| steuerjahr | No | Steuerjahr für den BMF-Programmablaufplan (Standard: 2026). | |
| steuervier | No | Faktor bei Steuerklasse IV mit Faktorverfahren (z. B. 0.955, Standard: 1.0). | |
| geburtsjahr | No | Geburtsjahr des Beschäftigten für Altersentlastung und PV-Zuschlag für Kinderlose ab 23 Jahren (Standard: 1992). | |
| mietenstufe | No | NRW Mietenstufe ('i' bis 'vii') für den regionalen Ergänzungszuschlag. Standard: 'i'. | |
| kinderpflege | No | Anzahl Kinder unter 25 Jahren für gesetzliche PV-Staffelung ab dem 2. Kind: 0 (0-1 Kind), 1 (2 Kinder), 2 (3 Kinder), 3 (4 Kinder), 4 (5+ Kinder). Standard: 0. | |
| steuerklasse | Yes | Lohnsteuerklasse (1 bis 6). Standard: 1. | |
| tarifvertrag | No | Tarifvertrag bei Tarifbeschäftigten oder Ärzten (z. B. 'tvoed-vka', 'tvoed-bund', 'tv-l', 'tv-aerzte-vka'). Erforderlich wenn employmentType='tarif' oder 'aerzte'. | |
| familienstand | No | Familienstand für den beamtenrechtlichen Familienzuschlag Stufe 1 ('ledig' oder 'verheiratet'). Standard: 'ledig'. | |
| insuranceType | Yes | Krankenversicherungsart: 'pkvOhne' (Private Krankenversicherung ohne Beihilfe/AG-Zuschuss – typisch für Beamte), 'pkvMit' (PKV mit AG-Zuschuss), 'gkv' (Gesetzliche Krankenversicherung – typisch bei Tarif), 'gkvMitBeihilfe' (Pauschale Beihilfe). Standard: 'pkvOhne'. | |
| kirchensteuer | No | Kirchensteuerpflichtig (true für ja, false für nein). Standard: false. | |
| employmentType | Yes | Art des Beschäftigungsverhältnisses: 'beamte' für Besoldung, 'tarif' für Tarifverträge (z. B. TVöD, TV-L), 'aerzte' für Ärztetarife. Standard: 'beamte'. | |
| sonstigeZulagen | No | Sonstige individuelle, steuerpflichtige Monatszulage in Euro (Standard: 0.0). | |
| zusatzversorgung | No | Betriebliche Zusatzversorgung im Öffentlichen Dienst: 'nein' (Beamte/keine), 'vbl' (VBL West/klassisch), 'vbl-ost' (VBL Ost). Standard: 'nein'. | |
| kinderfreibetraege | No | Zahl der Kinderfreibeträge auf der elektronischen Lohnsteuerkarte (z. B. 0.0, 0.5, 1.0, 1.5, 2.0). Standard: 0.0. | |
| rentenversicherung | No | Gesetzliche Rentenversicherung: 'nein' (Beamte/befreit) oder 'gRV' (gesetzlich rentenversichert). Standard: 'nein'. | |
| employmentPercentage | No | Beschäftigungsumfang in Prozent bei Teilzeit (z. B. 100.0 für Vollzeit, 80.0, 50.0). Standard: 100.0. | |
| selected_zulage_keys | No | Liste ausgewählter Zulagen-IDs aus get_salary_and_zulagen_options (z. B. Amtszulage, Stellenzulage). | |
| pkvZuschussArbeitgeber | No | Monatlicher Arbeitgeberzuschuss zur privaten KV/PV in Euro (Standard: 0.0). | |
| arbeitslosenversicherung | No | Gesetzliche Arbeitslosenversicherung: 'nein' (Beamte/befreit) oder 'gAV' (gesetzlich versichert). Standard: 'nein'. | |
| profiGesamtprivBasisKvPv | No | Basisabsicherungsbeitrag der PKV nach Bürgerentlastungsgesetz in Euro (steuermindernder Vorsorgeaufwand, Standard: 0.0). |
Output Schema
| Name | Required | Description |
|---|---|---|
| jahr | No | Jährliche Gehaltsdaten inklusive Jahressonderzahlung |
| monat | No | Monatliche Gehalts- und Abzugsdaten |
| zulagen_berechnet | No | Liste der berechneten Zulagen und Zuschläge |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds meaningful behavioral context beyond annotations by disclosing the exact BMF PAP methodology, the components included (Lohnsteuer, Solidaritätszuschlag, Kirchensteuer, Sozialabgaben), and the inclusion of selected allowances and state-specific family allowance. No contradiction with annotations.
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?
The description is compact: a front-loaded purpose line and one detailed sentence on methodology. Every sentence adds meaningful information, and the structure suits a tool with 29 parameters without becoming bloated.
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 complex calculation tool, the description covers the core purpose, method, tax components, allowances, and special payments, while the output schema handles return-value details and annotations cover safety. The only notable gap is the lack of explicit guidance on when to choose this over calculate_standard_salary.
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 29 parameters. The description adds only general context about selected Zulagen-IDs and the state-specific Familienzuschlag, but does not enrich individual parameter semantics beyond what the schema provides. Baseline 3 is appropriate.
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?
The description states a specific verb and resource: 'Berechnet das exakte Brutto, Netto und die jährliche Sonderzahlung inklusive ausgewählter Zulagen-IDs und bundeslandspezifischem Familienzuschlag.' It clearly distinguishes itself from the sibling option-retrieval tools and from a standard salary calculator by emphasizing complete ÖD-Berechnung and BMF-PAP-based net calculation.
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?
The description gives a clear context: use for complete German public-service salary calculation with allowances and exact tax/social deductions according to the BMF PAP. However, it does not explicitly contrast this tool with calculate_standard_salary or state when not to use it, leaving some differentiation to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_standard_salaryBRead-onlyIdempotent
DIREKTBERECHNUNG & BRUTTO-NETTO-RECHNER: Berechnet Grundgehalt, Brutto, Netto und Sonderzahlung aus Kerndaten. Unterstützt sowohl Tarif & Besoldung ('beamte', 'tarif', 'aerzte') als auch freie Bruttobeträge ('sonstige' mit 'bruttoGehalt') mit exakter Lohnsteuer- und Sozialversicherungsberechnung nach aktuellem Programmablaufplan (PAP) des Bundesfinanzministeriums (BMF).
| Name | Required | Description | Default |
|---|---|---|---|
| stufe | No | Erfahrungsstufe (z. B. '3'). | |
| gruppe | No | Besoldungs- oder Entgeltgruppe (z. B. 'A9', 'E11'). | |
| kinder | No | Gibt an, ob Kinder vorhanden sind: 'ja' oder 'nein' (befreit vom PV-Zuschlag für Kinderlose). Standard: 'nein'. | |
| gkvZusatz | No | Kassenindividueller GKV-Zusatzbeitrag in Prozent (z. B. 2.9 für Bundesdurchschnitt 2026, Standard: 2.9). | |
| bundesland | No | Bundesland des Wohnorts für Kirchensteuersatz und PV Sachsen (z. B. 'bayern', 'by', 'nrw'). Standard: 'bayern'. | |
| dienstherr | No | Dienstherr / Bundesland bei Beamten (z. B. 'bund', 'bayern' bzw. 'by', 'nordrhein-westfalen' bzw. 'nrw'). | |
| period_key | No | Optionaler Gültigkeitszeitraum / Tarifrunde. | |
| pkvBeitrag | No | Monatlicher PKV-Gesamtbeitrag in Euro (Standard: 0.0). | |
| steuerjahr | No | Steuerjahr für den BMF-Programmablaufplan (Standard: 2026). | |
| steuervier | No | Faktor bei Steuerklasse IV mit Faktorverfahren (z. B. 0.955, Standard: 1.0). | |
| geburtsjahr | No | Geburtsjahr des Beschäftigten für Altersentlastung und PV-Zuschlag (Standard: 1992). | |
| bruttoGehalt | No | Fester monatlicher oder jährlicher Bruttobetrag in Euro (nur erforderlich bei employmentType='sonstige'). | |
| kinderpflege | No | Anzahl Kinder unter 25 Jahren für gesetzliche PV-Staffelung ab dem 2. Kind: 0 (0-1 Kind), 1 (2 Kinder), 2 (3 Kinder), 3 (4 Kinder), 4 (5+ Kinder). Standard: 0. | |
| steuerklasse | Yes | Lohnsteuerklasse (1 bis 6). Standard: 1. | |
| tarifvertrag | No | Tarifvertrag bei Tarifbeschäftigten oder Ärzten (z. B. 'tvoed-vka', 'tv-l'). | |
| insuranceType | Yes | Krankenversicherungsart: 'pkvOhne' (Private Krankenversicherung), 'pkvMit' (PKV mit AG-Zuschuss), 'gkv' (Gesetzliche Krankenversicherung), 'gkvMitBeihilfe' (Pauschale Beihilfe). Standard: 'pkvOhne'. | |
| kirchensteuer | No | Kirchensteuerpflichtig (true für ja, false für nein). Standard: false. | |
| employmentType | Yes | 'beamte', 'tarif', 'aerzte' oder 'sonstige' (für freie Gehaltseingabe/Brutto-Netto-Rechner). Standard: 'beamte'. | |
| zeitraumGehalt | No | Zeitraum für bruttoGehalt: 'monat' oder 'jahr' (Standard: 'monat'). | |
| sonstigeZulagen | No | Sonstige individuelle, steuerpflichtige Monatszulage in Euro (Standard: 0.0). | |
| zusatzversorgung | No | Betriebliche Zusatzversorgung im Öffentlichen Dienst: 'nein' (Beamte/keine), 'vbl' (VBL West/klassisch), 'vbl-ost' (VBL Ost). Standard: 'nein'. | |
| kinderfreibetraege | No | Zahl der Kinderfreibeträge auf der Lohnsteuerkarte (z. B. 0.0, 0.5, 1.0, 1.5, 2.0). Standard: 0.0. | |
| rentenversicherung | No | Gesetzliche Rentenversicherung: 'nein' (Beamte/befreit) oder 'gRV' (gesetzlich versichert). Standard: 'nein'. | |
| employmentPercentage | No | Beschäftigungsumfang in Prozent bei Teilzeit (z. B. 100.0, 80.0, 50.0). Standard: 100.0. | |
| pkvZuschussArbeitgeber | No | Monatlicher Arbeitgeberzuschuss zur privaten KV/PV in Euro (Standard: 0.0). | |
| arbeitslosenversicherung | No | Gesetzliche Arbeitslosenversicherung: 'nein' (Beamte/befreit) oder 'gAV' (gesetzlich versichert). Standard: 'nein'. | |
| profiGesamtprivBasisKvPv | No | Basisabsicherungsbeitrag der PKV nach Bürgerentlastungsgesetz in Euro (Standard: 0.0). |
Output Schema
| Name | Required | Description |
|---|---|---|
| jahr | No | Jährliche Gehaltsdaten |
| monat | No | Monatliche Gehalts- und Abzugsdaten |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=true, idempotentHint=true, and no destructive action. The description adds context about using the BMF's Programmablaufplan and supports precise tax/social insurance calculations, which is useful. However, it does not disclose important behaviors like requiring specific inputs for certain employment types, potential errors for invalid combinations, or that 'sonstige' requires bruttoGehalt, though the schema does indicate that. No contradiction found.
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?
The description is two sentences, but it is dense with technical jargon and German acronyms, which may hinder quick comprehension. It front-loads the main purpose but is not as concise as it could be, given the complexity of the tool. It is not overly long, but it could be restructured for clarity.
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?
Given the tool's high complexity (27 params, 9 enums, multiple employment types), the description covers the core modes and mentions exact tax/social insurance calculations, but it omits guidance on how parameters interact (e.g., needed fields for each employment type) and potential validation rules. The output schema exists, so return values are presumably covered. The description is reasonably complete but could add more usage context.
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?
The schema provides 100% coverage for all 27 parameters, with detailed descriptions for each. The description adds minimal param guidance: it clarifies that 'sonstige' uses 'bruttoGehalt' and that the calculation is based on current PAP, but does not explain all parameters. Since coverage is full, the baseline is 3 and the description adds modest value.
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?
The description clearly states it calculates base salary, gross, net, and special payments from core data, distinguishing between tariff/Beamte and 'sonstige' modes. However, the German acronyms (DIREKTBERECHNUNG & BRUTTO-NETTO-RECHNER) may be confusing, and the purpose is not explicitly differentiated from sibling tools like calculate_agent_salary.
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?
The description implies it supports multiple employment types and covers both gross-net calculation and tariff/Beamte modes, but it does not explicitly state when to use this tool over calculate_agent_salary or get_public_sector_options. No exclusion criteria or explicit alternatives are given, so the agent must infer usage from the tool name and siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_public_sector_optionsARead-onlyIdempotent
Liefert eine Übersicht aller Dienstherren (Bund & 16 Bundesländer) und Tarifverträge (TVöD, TV-L, etc.) mit den verfügbaren Besoldungsgruppen.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| perioden | No | Verfügbare Gültigkeitszeiträume und Tarifrunden |
| dienstherren | No | Liste aller Dienstherren für Beamte (Bund und alle 16 Bundesländer) |
| tarifvertraege | No | Liste aller Tarifverträge im Öffentlichen Dienst (z. B. TVöD VKA, TV-L) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds the scope of what is returned but does not disclose additional behavioral traits such as ordering, caching, or response size. With annotations present, this is adequate but not rich.
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?
The description is one focused sentence, front-loaded with the action ('Liefert eine Übersicht') and followed by the precise objects covered. 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?
For a parameterless, read-only options-retrieval tool with an output schema, the description is complete. It tells the agent exactly what domain data is covered, while the output schema covers return structure and annotations cover safety.
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?
The tool has zero parameters and 100% schema coverage, so there is nothing for the description to compensate for. According to the baseline for no-parameter tools, a 4 is appropriate.
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?
The description uses a specific verb ('Liefert eine Übersicht') and names the exact resource: all Dienstherren (Bund & 16 Bundesländer), collective agreements (TVöD, TV-L, etc.), and available Besoldungsgruppen. This clearly distinguishes it from the calculator siblings, which focus on salary computation rather than option listing.
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?
The description gives clear context: this tool returns an overview of public-sector employers, tariff agreements, and salary groups. It does not explicitly name exclusions or alternatives, but the content makes its role as an options/metadata lookup self-evident compared to the calculate_* siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_salary_and_zulagen_optionsARead-onlyIdempotent
DISCOVERY: Liefert für einen Dienstherrn oder Tarifvertrag und eine Gruppe alle Stufen mit Grundgehalt sowie alle wählbaren Stellenzulagen (Polizei, Justiz etc.), Amtszulagen und Familienzuschlags-Regeln.
| Name | Required | Description | Default |
|---|---|---|---|
| gruppe | Yes | Besoldungs- oder Entgeltgruppe (z. B. 'A9', 'A13', 'E11', 'B2'). | |
| dienstherr | No | Dienstherr / Bundesland (z. B. 'bayern' bzw. 'by', 'bund', 'nordrhein-westfalen' bzw. 'nrw') – erforderlich wenn employmentType='beamte'. | |
| period_key | No | Optionaler Gültigkeitszeitraum / Tarifrunde (z. B. '20260501_'). Standard: aktuellste Tabelle. | |
| tarifvertrag | No | Tarifvertrag (z. B. 'tvoed-vka', 'tv-l') – erforderlich wenn employmentType='tarif'. | |
| employmentType | Yes | Art des Beschäftigungsverhältnisses: 'beamte' für Besoldung oder 'tarif' für Tarifverträge. |
Output Schema
| Name | Required | Description |
|---|---|---|
| gruppe | No | Besoldungs- oder Entgeltgruppe |
| stufen | No | Tabellen-Grundgehälter je Erfahrungsstufe |
| stellenzulagen | No | Wählbare Stellenzulagen und Amtszulagen mit Betrag und ID |
| familienzuschlag | No | Regeln und Beträge für Ehe- und Kinderbestandteile des Familienzuschlags |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so no safety warnings are needed. The description adds that the result includes all steps with Grundgehalt and all selectable allowances/family allowance rules, which is useful context beyond the annotations, but it does not disclose additional behavioral caveats.
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?
One concise, front-loaded sentence with a clear 'DISCOVERY:' label and a comprehensive list of returned data. It is appropriately sized, though the long list of result categories could be structured slightly more readably without losing 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?
Given the output schema, full parameter descriptions, and strong annotations, the description is sufficient for an agent to understand the tool's purpose and inputs. It captures the core return categories and implies the conditional employmentType/dienstherr/tarifvertrag requirements without needing to restate them.
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 every parameter is already documented. The description only restates the core inputs (Dienstherr/Tarifvertrag, Gruppe) without adding new syntax, formatting, or conditional-dependency details beyond what the schema provides.
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?
The description uses the verb 'Liefert' and specifies a concrete resource: salary steps with basic salary, selectable position allowances, office allowances, and family allowance rules for a Dienstherr/Tarifvertrag and a group. It clearly indicates a discovery/lookup role rather than a calculation tool, though it does not explicitly differentiate itself from the calculate_* siblings.
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?
The 'DISCOVERY:' prefix and the scope ('für einen Dienstherrn oder Tarifvertrag und eine Gruppe') imply this tool is for retrieving salary-table and allowance options. However, it does not explicitly state when to prefer this tool over calculate_agent_salary or calculate_standard_salary, nor does it give exclusions, so the guidance is implied rather than explicit.
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.
4 tool updates
v1.0.0- First observed
calculate_agent_salary - First observed
calculate_standard_salary - First observed
get_public_sector_options - First observed
get_salary_and_zulagen_options
TDQS
Scored across 4 tools
The two discovery tools are clearly separated as overview vs. detailed options, but calculate_agent_salary and calculate_standard_salary overlap significantly: both provide full gross/net calculations and both appear to cover Beamte/Tarif cases. The descriptions offer some hints (allowance IDs vs. core data), but the boundary is still easy to misread.
All tools follow a consistent lowercase snake_case verb_noun style: get_* for discovery and calculate_* for computation. There are no mixed naming conventions or verb variations.
Four tools is an appropriate size for a focused salary calculator: two discovery steps and two calculation paths. Each tool has a concrete role in the workflow, and the set does not feel padded or incomplete.
The domain is well covered: users can discover employers/tariffs/groups and allowances, then calculate salary with either preselected options or core data. The main shortcoming is redundancy between the two calculation tools rather than a missing operation, and the standard calculator already subsumes much of the agent-specific path.
Maintenance
Related MCP Connectors
Free German workforce calculators (bridge days, net working time, staffing/PeBeM) - no auth needed.
Read-only payroll calculations and multi-country tax comparisons for eight countries.
Verified German HR data with legal source: minimum wage, social security, holidays, notice periods
XRechnung and ZUGFeRD e-invoicing (EN 16931): create, validate, check Leitweg-IDs, German VAT.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables 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.1114Apache 2.0
- FlicenseNot gradedqualityDmaintenanceExposes Finnish payroll (palkanlaskenta) API as MCP tools for calculating salaries, retrieving income types, and fetching mock employee data.-
- FlicenseNot gradedqualityBmaintenanceEnables Dutch income tax calculations: converts gross to net salary, net to gross, compares multiple salary scenarios, and provides tax bracket data for supported years. Every result includes a detailed breakdown and a thetax.nl permalink.-
- AlicenseAqualityCmaintenanceEnables AI assistants to calculate Swiss income, wealth, inheritance, capital payment, and corporate taxes for any municipality, compare tax burdens, and find cheapest locations without an API key.13MIT