Obolus
Server Details
Read-only payroll calculations and multi-country tax comparisons for eight countries.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Score is being calculated.
Available Tools
2 toolsberechneObolus.berechne - Calculate payrollARead-onlyInspect
Calculate detailed payroll and net salary for one country and person. Use this for tax class, region, health insurance, pension, deductions, or other country-specific inputs. For the same gross salary across two or more countries, use taxcompare. Use semantic fields where available; legacy fields remain REST compatibility inputs. Monetary fields in the legacy request are minor units and period-specific.
| Name | Required | Description | Default |
|---|---|---|---|
| LZZ | No | Payroll period identifier for the calculation. Values: 1=year, 2=month, 3=week, 4=day. All salary and payroll monetary inputs must be for this period, not automatically annualized. | |
| age | No | Age in the selected tax year. If omitted, the calculation reports the standard age-35 assumption instead of silently hiding the default. | |
| tax | No | Preferred high-level tax assumptions for MCP calls. The adapter maps these to Steuerklasse, Kirche, and Kinderfreibetrag. | |
| Land | No | Country code for the calculation. | |
| Modus | No | Calculation mode. Use 1 for one person, 2 for two persons, and 3 for the German TaxSim capped real-splitting simulation. | |
| Faktor | No | Global factor for factor-based tax class handling. | |
| Stjahr | No | Tax year. | |
| country | No | Preferred high-level country code for MCP calls. For German payroll use DE. The adapter maps this to legacy Land. | |
| Currency | No | Display currency / calculation currency code. | |
| Personen | No | One or two payroll person records. Each person contains salary, tax class, region, insurance, child, and optional special-income inputs. | |
| location | No | Preferred high-level location input. For Germany, federal_state may be a state code such as BE or a full Obolus state name such as Berlin. | |
| tax_year | No | Preferred high-level tax year for MCP calls. The adapter maps this to legacy Stjahr. | |
| KinderFRB | No | Top-level child allowance, child count, dependent count, or child-credit factor for the calculation. DE uses allowance-style factors; AT/CH/US and other systems use country-specific child/dependent meanings where supported. | |
| KinderPVA | No | Total child count relevant for German long-term care insurance contribution logic. Leave 0 outside German care-insurance scenarios unless a country-specific child workflow explicitly requires it. | |
| Kindergeld | No | Child benefit amount in minor units for the selected calculation context. Leave 0 for standard payroll estimates unless explicitly modeling child benefit or a country-specific dependent benefit. | |
| gross_salary | No | Preferred high-level gross salary input. Amount is in major currency units, not cents. The adapter maps it to legacy Gehalt_ct minor units and LZZ. | |
| employee_type | No | Preferred high-level German employee type. Use standard_statutory_employee for the common statutory pension, unemployment, health, and care insurance case. | standard_statutory_employee |
| payroll_preset | No | Preferred high-level payroll preset. Use DE_STANDARD_EMPLOYEE_STATUTORY for a normal German employee with statutory pension, unemployment, health, and care insurance. | DE_STANDARD_EMPLOYEE_STATUTORY |
| social_security | No | Preferred high-level German social-security assumptions. Use enums instead of raw Obolus flags. The adapter maps statutory/exempt/private choices to the legacy payroll-engine fields. |
Output Schema
| Name | Required | Description |
|---|---|---|
| faktor | No | Tax factor used for German tax class IV factor workflows when applicable. |
| gesamt | No | Combined payroll result across all persons in the calculation. Uses the same country-specific output-code meanings as person1 and person2. |
| person1 | No | Payroll result for the first person. Interpret stable output codes with the original request Land and the output country-specific usage notes. |
| person2 | No | Payroll result for the second person. Values are zero or empty when the calculation mode uses only one person. Interpret stable output codes with the original request Land. |
| summary | Yes | Normalized major-unit amounts for gross income, net income, taxes, social contributions, and total deductions. Use this stable summary for display; raw payroll fields remain available for country-specific detail. |
| warnings | Yes | Non-blocking warnings about suspicious inputs, such as annual gross sent with monthly LZZ, scaled German Zusatzbeitrag values, or raw German insurance combinations that may be intentional for non-standard cases. |
| source_url | Yes | Canonical Obolus URL for the matching interactive calculator. |
| assumptions | Yes | Normalized user-facing assumptions used for the payroll calculation, including country, salary period, location, tax class, church tax, and German social-security choices. Use this to explain what the calculation assumed without exposing raw payroll-engine flags. |
| calculated_at | Yes | UTC timestamp when this response was assembled. |
| localized_cta | Yes | Localized call-to-action labels for opening the visual Obolus report link. |
| visual_report | Yes | Deep link to the interactive report or calculator view. |
| method_version | Yes | Calculation method or benchmark method version used for this response. |
| contract_version | Yes | Obolus public contract version used to shape this response. |
| orientation_note | Yes | Reminder that the result is an orientation estimate, not professional advice. |
| tax_data_version | Yes | Tax-data or backend-engine revision used for this response. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the 'Calculate' wording is consistent. The description adds beyond annotations by revealing that legacy fields are 'REST compatibility inputs' and warning that 'Monetary fields in the legacy request are minor units and period-specific,' which is important behavioral context for constructing requests.
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?
Five sentences with no filler: action and scope are front-loaded, sibling routing comes second, and the remaining sentences cover field families and unit conventions. Every sentence earns its place.
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?
The description is a good high-level orientation, but it says 'one country and person' while the schema supports up to two Personen records (maxItems 2, Modus 2). It also doesn't enumerate the recommended semantic fields, though the schema's own description does. For a tool with this complexity, those are notable completeness gaps despite the rich schema.
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 coverage is 100%, so the baseline is 3. The description adds cross-cutting semantics by distinguishing semantic vs. legacy fields ('Use semantic fields where available; legacy fields remain REST compatibility inputs') and by flagging minor-unit/period conventions, which is not fully captured by individual parameter descriptions.
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 opens with a specific verb and resource: 'Calculate detailed payroll and net salary for one country and person.' It also names the sibling differentiator by saying 'For the same gross salary across two or more countries, use taxcompare,' so an agent can distinguish this tool without opening the schema.
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?
It explicitly lists when to use the tool: 'Use this for tax class, region, health insurance, pension, deductions, or other country-specific inputs.' It also gives a clear exclusion rule by routing multi-country comparisons to taxcompare, leaving no ambiguity about the main alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
taxcompareObolus.taxcompare - Compare net incomeARead-onlyInspect
Compare annual gross, net pay, taxes, and employee social contributions across two or more supported countries. Use shared_gross for the same offer and local_median_gross for country-market benchmarks. Provide tax_year and at least two countries. Use berechne for detailed single-country payroll.
| Name | Required | Description | Default |
|---|---|---|---|
| age | No | Adult age in the selected tax year. | |
| period | No | Period for salary_ct. Use annual when salary_ct is the annual gross salary. Use monthly when salary_ct is one monthly gross salary; taxcompare annualizes it before comparing countries. annual_gross is always annual and ignores this field. | annual |
| regions | No | Country-keyed tax regions, for example CH: ZH. Omitted regions use country defaults, reported in calculation_profile. | |
| children | No | Number of children or dependents used as a broad comparison assumption. Country-specific child allowance and credit rules are simplified for comparability. | |
| currency | Yes | Input and output currency: EUR, USD, CHF, CAD, AUD, GBP, or lower-case equivalents. Results normalize currency codes to lower-case. Unlike berechne, taxcompare prefers salary_ct for salary input and returns major currency units. | |
| tax_year | Yes | Tax year, for example 2026. The same tax year is applied to every selected country. | |
| countries | Yes | List of country tax systems to compare. Use at least two countries for a comparison. Supported values: DE, AT, CH, US, UK, IE, CA, AU. | |
| salary_ct | No | Preferred salary input for MCP calls. Salary in minor units for the selected period, for example 5000000 for EUR 50,000. With period=annual this is annual salary; with period=monthly this is monthly salary and Obolus annualizes it for the comparison. Required for shared_gross mode unless annual_gross is provided as a legacy alias. | |
| gross_mode | No | Comparison basis. Use shared_gross for the same user-provided annual gross across all countries. Use local_median_gross for country-specific editorial median gross benchmarks. Defaults to shared_gross when omitted. | shared_gross |
| person_type | No | Broad household assumption for comparison. single maps to joint_assessment=false; married maps to joint_assessment=true unless joint_assessment is provided explicitly. For precise country-specific filing details, use berechne. | single |
| annual_gross | No | Backward-compatible annual gross salary alias in major currency units, not cents. Prefer salary_ct. Example: 50000 means 50,000 in the selected currency. Required for shared_gross mode only when salary_ct is not provided; optional and ignored when omitted for local_median_gross. | |
| joint_assessment | No | Broad joint filing / joint assessment assumption for comparable country-level estimates. For precise country-specific filing details, use berechne. |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes | Country-level comparison results with gross salary, net salary, income/payroll tax, social contributions, total deductions, and effective burden. |
| summary | Yes | Normalized annual major-unit amounts for every country result. Use key and country together to render stable comparison cards or tables. |
| tax_year | Yes | Tax year actually used for every country result. |
| warnings | Yes | Non-blocking warnings associated with this comparison. |
| source_url | Yes | Canonical Obolus TaxCompare URL for this result. |
| assumptions | Yes | Normalized comparison inputs used for the calculation, including age, tax year, countries, gross mode, salary, and household assumptions. |
| gross_inputs | Yes | Annual gross salary input used for each country, keyed by country code and expressed in the selected major currency. In shared_gross mode these values are usually identical; in local_median_gross mode they differ by country benchmark. |
| calculated_at | Yes | UTC timestamp when this response was assembled. |
| localized_cta | Yes | Localized labels for opening the visual TaxCompare report. |
| visual_report | Yes | Deep link to TaxCompare with the tool input, countries, year, and agent attribution prefilled. |
| method_version | Yes | Calculation method or benchmark method version used for this response. |
| ranking_by_net | Yes | Countries ranked by estimated annual net salary, highest net first. Use this for 'where do I keep more money' and 'rank by net income' answers. |
| comparison_basis | Yes | Basis used for the comparison: shared_gross for the same gross salary in each country, or local_median_gross for country-specific median benchmarks. |
| contract_version | Yes | Obolus public contract version used to shape this response. |
| orientation_note | Yes | Reminder that the result is an orientation estimate, not professional advice. |
| tax_data_version | Yes | Tax-data or backend-engine revision used for this response. |
| benchmark_sources | No | Country-level benchmark source metadata used in local_median_gross mode, keyed by country code. |
| benchmark_method_version | No | Editorial benchmark method version used when comparison_basis is local_median_gross. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds behavioral context by specifying what the comparison produces (gross, net pay, taxes, social contributions) and how the two gross_modes alter the comparison basis. Minor limitations like simplified assumptions live in the schema rather than the description, but with strong annotations the bar is partially met here.
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?
Four sentences, zero filler: purpose, mode selection, prerequisites, and sibling routing each earn their place. The core capability is front-loaded in sentence one, and the sibling reference is tucked into the final sentence.
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?
An output schema exists, so the description needn't explain return values. Given the tool's 12 parameters and nested regions object, the description appropriately covers selection (what it does), configuration (which mode), prerequisites (tax_year + two countries), and fallback routing (berechne). The one gap is that the description omits the 'estimates/simplified' nature of results, but this is captured in the schema's input description.
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%, including detailed explanations of gross_mode, period, salary_ct, and joint_assessment, so the baseline of 3 applies. The description's mode phrasing ('same offer' vs. 'country-market benchmarks') recasts schema content in simpler terms but adds no new parameter meaning beyond what the schema already delivers.
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?
Opens with a specific verb and resource: 'Compare annual gross, net pay, taxes, and employee social contributions across two or more supported countries.' The scope (multi-country comparison) and the sibling differentiation ('Use berechne for detailed single-country payroll') let an agent distinguish this from its sibling without opening schemas.
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?
Provides explicit mode-selection guidance: 'Use shared_gross for the same offer and local_median_gross for country-market benchmarks.' It also states prerequisites ('Provide tax_year and at least two countries') and names the alternative tool for single-country scenarios. Nothing is left to inference.
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.
2 tool updates
- First observed
berechne - First observed
taxcompare
Related MCP Connectors
European govt data, cited: rates, VAT, tax, wages, holidays, FX. 35 countries; Germany free.
N American govt data, cited to source: rates, VAT, tax, wages, holidays, FX. 10 countries; USA free.
Free public tax MCP: GST/VAT, income, company & capital-gains tax for 50+ countries, source-cited.
Read-only US tax reference for notices, deadlines, filing screens, and clearly labeled estimates.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables geographic parity analysis with 26 read-only tools covering purchasing power, salary localization, cost of living, nomad visas, tax residency, FIRE planning, and relocation costs.MIT
- AlicenseAqualityBmaintenanceProvides real tax calculations for US, Canada, Australia, and UK income, property, and dividend taxes using up-to-date local data with no API keys required.773 npmMIT
- -licenseNot gradedqualityNot gradedmaintenanceCalculates end-of-service gratuity/severance for multiple countries (AE, SA, QA, etc.) via a stateless JSON API and MCP tool.-
- AlicenseNot gradedqualityBmaintenanceEnables local-first HR payroll computation with statutory social insurance, housing fund, and cumulative IIT calculations, adaptable to arbitrary spreadsheet headers via import adapters and company profiles. Supports safe performance formula evaluation and keeps PII on-device.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.