Skip to main content
Glama
dk-tax
by mikaelbdj

danish-tax-mcp

MCP server for Danish personal income tax. It has the yearly rates and thresholds, each with the official source it came from, calculators for income tax, the skattekort, share income and property tax, and lookups in SKAT's positivliste and Den juridiske vejledning.

The results are estimates for planning. What you actually owe is set by your årsopgørelse from Skattestyrelsen.

Install

You need uv. For Claude Code:

claude mcp add dk-tax -- uvx danish-tax-mcp

Other MCP clients can run the same command over stdio. To pin a version, use uvx danish-tax-mcp@0.4.1.

Related MCP server: Dutch Tax Income Calculator MCP

Tools

Tool

list_figures(year)

The figure keys for a year, with name and unit

get_figures(year, keys)

Values with source, date checked and status

get_kommune(year, kommune)

Kommuneskat, kirkeskat, skatteloftsnedslag and grundskyld

estimate_salary_tax(...)

Income tax for an unmarried employee, with take-home pay and marginal rate

estimate_couple_tax(...)

Income tax for a married couple living together at year end, with what moves between the spouses (personfradrag, kapitalindkomst, underskud)

estimate_payslip(...)

Trækprocent and månedsfradrag from a forskudsopgørelse, monthly payout, share vests and expected restskat, with an optional spouse (2026 onwards)

estimate_property_tax(...)

Ejendomsværdiskat and grundskyld for an owner-occupied home, including the years it is bought and sold, with the cap on grundskyld increases (2026 onwards). Enter the valuation for the year before the income year: the 2026 tax uses the 2025 ejendomsværdi and grundværdi

estimate_share_income_tax(...)

Skat af aktieindkomst (27 % and 42 %) for one person or a married couple, with withheld udbytteskat, losses on listed and unlisted shares, and amounts carried forward

estimate_lager_gains(year, funds)

The year's taxable gain or loss on ETFs and other investeringsselskaber (lagerbeskatning), split into aktieindkomst and kapitalindkomst

lookup_abis(query, year)

Whether a fund is on SKAT's list of aktiebaserede investeringsselskaber for a year, read live from skat.dk

get_jv_section(section)

The current text of a section of Den juridiske vejledning, read live from info.skat.dk

The two lookups fetch public pages from skat.dk and info.skat.dk and cache them in ~/.cache/dk-tax. Your query is matched locally and is not sent anywhere.

Example questions:

  • Hvad er topskattegrænsen i 2027?

  • How much tax do I pay on 900.000 kr. in Aarhus?

  • What happens to my trækprocent if I put my bonus and RSUs in the forskudsopgørelse?

  • Hvad bliver ejendomsværdiskatten på en lejlighed vurderet til 4 mio. kr. i Aarhus?

  • How much tax do I pay if I sell shares with a gain of 120.000 kr.?

  • My spouse is on unpaid parental leave. How much of their personfradrag can I use?

  • Is IE00B4L5Y983 on the positivliste, and how is it taxed?

  • My ETF was worth 200.000 kr. on 1 January and 230.000 kr. on 31 December, and I bought for 20.000 kr. What is taxed?

  • How much interest do I pay on restskat if I pay it in May?

Coverage

Income years 2025 to 2027, and all 98 kommuner. 2023 is included only because the official worked example is from that year. Foreign withholding tax on dividends and business income are not covered yet.

Testing

The salary calculator reproduces svmn.dk's worked example for 2023 to the øre, and the skatteloft reduction matches svmn.dk's table for every kommune in 2025 to 2027. The skattekort formulas reproduce SKAT's examples. Where the law doesn't settle something (mostly rounding), the assumption is written down in the module docstring in calc/. The aktieindkomst split is checked against the 2026 examples in Den juridiske vejledning (C.E.3.2.4.1.2).

uv run pytest
uv run dk-tax     # start the server

Data

One YAML file per year in src/dk_tax/figures/:

bundskat:
  name: Bundskatteprocent     # term used in the source
  value: 12.01                # as printed: 12.01 means 12,01 %
  unit: percent               # percent or DKK
  source: https://svmn.dk/...
  verified: 2026-11-01
  status: verified            # verified, secondary, unverified or proposed
  note: PSL § 6.

Keys are the Danish terms with æ, ø, å written as ae, oe, aa. They follow the law of each year, so 2025 has the old 15 % topskat and no mellemskat.

New figures come out every autumn. CONTRIBUTING.md describes how to add a year.

License

MIT

Available Tools

5 tools
estimate_payslipA

Predict the skattekort (trækprocent, månedsfradrag) and what is actually paid out in a normal month and in the bonus month, plus the year-end restskat, from 2026 onwards.

Use this for questions about monthly take-home pay or what to enter in the
forskudsopgørelse. One scenario per call: the include_*_in_forskud flags say whether the
bonus and the shares are entered in the forskudsopgørelse; call twice to compare.
monthly_salary: DKK per month INCLUDING the employee's own pension share.
pension_*_pct: percent of monthly_salary (e.g. 4 and 8).
bonus: the year's total bonus in DKK, paid in bonus_payments equal parts (4 = quarterly). share_compensation: the year's RSU vest value in DKK.
  Shares are B-income: the employer withholds nothing, so if they are left out of the
  forskudsopgørelse the tax comes as restskat (year_end.restskat > 0); paying it
  voluntarily before 31 December avoids interest.
share_withholding: "none" = shares are B-income, nothing withheld (skat.dk's general rule);
  "traekprocent" = the employer keeps back shares to cover the tax at the skattekort's
  percentage (withhold-to-cover, common in private companies); "fixed" = at
  share_withholding_rate percent. Ask the employer which applies; see share_vest.
Cite the sources with the income year and flag any figure that is not 'verified'.
Assumptions are listed in dk_tax.calc.payslip. Not tax advice.
NameRequiredDescriptionDefault
yearYes
bonusNo
kommuneYes
atp_full_timeNo
bonus_paymentsNo
monthly_salaryYes
vests_per_yearNo
pension_own_pctNo
other_deductionsNo
bonus_has_pensionNo
folkekirke_memberYes
share_withholdingNonone
net_capital_incomeNo
share_compensationNo
pension_employer_pctNo
share_withholding_rateNo
include_bonus_in_forskudNo
include_shares_in_forskudNo
within_15_years_of_pensionNo

Output Schema

NameRequiredDescription
kommuneYes
payslipYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does substantial work: it explains that shares are B-income with nothing withheld, the resulting restskat and the 31 December voluntary-payment interest consequence, the three withholding models, that assumptions live in dk_tax.calc.payslip, and that it is not tax advice. It does not explicitly state that the call is side-effect-free (an estimate), though the verb and output framing imply it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and usage lead, then a compact semi-colon separated parameter glossary; dense but nearly every clause carries tax-domain information an agent could not infer. Minor waste: the pointer 'see share_vest' references a tool that is not among the listed siblings, which adds ambiguity rather than clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, so return values need not be described, and the assumptions pointer plus the 'cite sources with income year / flag unverified' instruction are valuable. Against 19 parameters and 0% schema coverage, however, roughly half the inputs remain opaque, and the relationship to estimate_salary_tax is never resolved.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 19 parameters, so the description must compensate. It does explain the highest-risk ones well (monthly_salary includes the employee's own pension share; pension_*_pct is a percentage of monthly_salary; bonus spread over bonus_payments; the share_withholding enum values), but leaves kommune, folkekirke_member, atp_full_time, other_deductions, bonus_has_pension, net_capital_income, vests_per_year, share_withholding_rate and within_15_years_of_pension entirely unexplained in both schema and prose.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and a well-defined output set: predicts skattekort (trækprocent, månedsfradrag), normal-month and bonus-month payout, and year-end restskat from 2026 onwards. That is far more specific than the name alone. It does not, however, distinguish itself from the sibling estimate_salary_tax, which an agent could plausibly confuse with this tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear use context ('questions about monthly take-home pay or what to enter in the forskudsopgørelse') and an operational rule: one scenario per call, call twice to compare when the include_*_in_forskud flags differ. Missing an explicit when-not / use-estimate_salary_tax-instead statement against the sibling tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

estimate_salary_taxA

Estimate a single (unmarried) employee's Danish income tax for one year, with the full breakdown.

Use this instead of doing tax arithmetic yourself. All amounts are yearly DKK, not percent.
gross_salary: total salary INCLUDING the employee's own pension share and EXCLUDING the
  employer's share; bonus and RSU vests count as salary. If the user gives pension as
  percentages of salary, convert them to kroner first.
pension_own / pension_employer: contributions to an employer-administered pension.
private_ratepension: what the person pays into a ratepension themselves.
atp_full_time: use the statutory full-time ATP amounts; set False and pass atp_own /
  atp_employer for part-time or other ATP.
other_deductions: other ligningsmæssige fradrag (befordring, union dues, ...).
The result includes til_udbetaling (take-home), effektiv_skatteprocent and marginalskat
(share of the next 1.000 kr. that goes to tax), and the source, verified date and status
of every figure used: cite them with the income year, and flag any figure that is not
'verified' (all_verified tells you at a glance). Not covered: married couples,
aktieindkomst, ejendomsværdiskat. Not tax advice.
NameRequiredDescriptionDefault
yearYes
atp_ownNo
kommuneYes
pension_ownNo
atp_employerNo
gross_salaryYes
atp_full_timeNo
other_deductionsNo
pension_employerNo
folkekirke_memberYes
net_capital_incomeNo
private_ratepensionNo
other_personal_incomeNo
within_15_years_of_pensionNo

Output Schema

NameRequiredDescription
taxYes
kommuneYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations supplied, the description carries the full burden and does substantial work: it discloses the key output fields (til_udbetaling, effektiv_skatteprocent, marginalskat), the provenance behavior (source, verified date, status per figure, all_verified), and a 'Not tax advice' caveat. It does not state whether the tool is a pure computation with no side effects, nor any rate-limit or auth expectations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in a single opening sentence, and the per-parameter bullets are terse and scannable rather than prose-heavy. The length is justified by 14 parameters, though the final sentence partially restates output fields that an output schema already covers.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 14-parameter, annotation-free estimation tool this is close to complete: input conventions, unit conventions, output highlights, provenance semantics and known limitations are all present. The remaining gap is that required kommune and several optional income/adjustment parameters are undefined, which for a domain-specific tax tool could lead to malformed calls.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate and it largely does: gross_salary gets a precise inclusion/exclusion rule (own pension share included, employer share excluded, bonus and RSU vests count), and pension_own, pension_employer, private_ratepension, atp_full_time, atp_own, atp_employer and other_deductions are all given meaning the bare titles lack. Three non-obvious parameters — net_capital_income, other_personal_income and within_15_years_of_pension — receive no explanation at all, and kommune is left undefined despite a get_kommune sibling.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Estimate a single (unmarried) employee's Danish income tax for one year, with the full breakdown.' Scope and the single/unmarried restriction are explicit, and the closing 'Not covered' line further bounds it. It does not name the obvious sibling (estimate_payslip) or explain how the two differ, so it stops short of full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use this instead of doing tax arithmetic yourself' plus 'All amounts are yearly DKK, not percent' and the percentage-to-kroner conversion instruction give clear operational context and prevent predictable input errors. Exclusions (married couples, aktieindkomst, ejendomsværdiskat) act as when-not guidance. What is missing is routing guidance toward get_kommune for the required kommune value or toward estimate_payslip.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_figuresA

Get Danish tax figures for an income year, each with source, verified date and status.

Values are exactly as printed in the source: percent as 12.01 (not 0.1201),
amounts in whole DKK. When answering, cite the source and the income year,
and say so if status is not 'verified'. Use list_figures to discover keys.
NameRequiredDescriptionDefault
keysYes
yearYes

Output Schema

NameRequiredDescription
yearYes
figuresYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations at all, the description carries the full disclosure burden, and it handles the highest-risk trait well: values are raw as printed (percent as 12.01, not 0.1201; amounts in whole DKK), which prevents unit-scaling errors that annotations would never have covered. It also discloses that each figure carries provenance and a verification status. It does not say what happens when a key is unknown or unavailable for the requested year, which is the main remaining behavioral gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short blocks, front-loaded with what the tool returns, then the value-format warning, then the discovery pointer. Every sentence earns its place: the scaling warning prevents a concrete error class, and the list_figures line prevents an invalid call. No restatement of the tool name or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 is not obligated to document return values, yet it adds the one thing the schema cannot convey: the raw scaling convention and the presence of source/verified/status metadata. For a two-parameter lookup tool this is close to sufficient. Missing only failure behavior for unknown keys or years.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must supply meaning for both parameters. It does partially: "income year" clarifies the intent of year, and the list_figures pointer tells the agent where the keys vocabulary comes from. It never states the year format (four-digit calendar year vs. income/tax year bounds) or what a key string looks like, so half the semantic burden still falls on the caller.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ("Get Danish tax figures for an income year") and immediately enumerates what comes back with each figure: source, verified date and status. That scope, plus the explicit pointer to list_figures for key discovery, lets an agent separate this retrieval tool from the sibling estimators without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a concrete prerequisite and alternative: "Use list_figures to discover keys," which tells the agent it cannot call this blind with arbitrary key strings. It also prescribes post-retrieval behavior (cite source and income year, flag non-'verified' status). It stops short of saying when to prefer get_figures over estimate_salary_tax or estimate_payslip, so the boundary with the estimation siblings is left implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_kommuneB

Get a municipality's kommuneskat, kirkeskat, skatteloftsnedslag and grundskyldspromille.

`kommune` is the municipality name, e.g. 'Aarhus' or 'Lyngby-Taarbæk'.
Percentages as printed (24.52 means 24,52 %). Kirkeskat applies only to
members of Folkekirken.
NameRequiredDescriptionDefault
yearYes
kommuneYes

Output Schema

NameRequiredDescription
yearYes
sourceYes
statusYes
kommuneYes
verifiedYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full burden. It usefully discloses that percentages are printed in Danish decimal convention (24.52 = 24,52 %) and that kirkeskat only applies to Folkekirken members, which is genuine domain behavior. It does not state that this is a read-only lookup, where the data comes from, or whether all years/municipalities are covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short paragraphs, front-loaded with the core purpose and followed by the two clarifications that matter most (percentage format, kirkeskat membership caveat). No filler, though the four untranslated Danish tax terms are listed without any gloss for an agent unfamiliar with them.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, and the domain caveats cover the trickiest interpretation issue. The notable gap is `year`: with two required parameters and no schema documentation, the description should say what years are valid and what happens for an unsupported year.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must explain both parameters. It does well for `kommune` by giving concrete examples ('Aarhus', 'Lyngby-Taarbæk'), including a hyphenated name. However, `year` is never mentioned at all — no format, no valid range, no indication of which years have data — leaving half the parameters undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and a precise set of resources (kommuneskat, kirkeskat, skatteloftsnedslag, grundskyldspromille), so an agent knows exactly what data is returned. It does not explicitly distinguish itself from siblings like estimate_salary_tax or get_figures, but the municipal-tax-rate scope is narrow enough to be unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: an agent can infer this is a per-municipality, per-year rate lookup. There is no statement of when to prefer it over estimate_salary_tax or estimate_payslip (e.g. 'use this to obtain rates that feed the estimators'), and no prerequisites or exclusions are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_figuresA

List the tax figure keys available for an income year, with name and unit.

Use this to find the right keys, then fetch values with get_figures.
Keys differ between years when the law changed (e.g. 2025 has the old 15 %
topskat; mellemskat and toptopskat start in 2026).
NameRequiredDescriptionDefault
yearYes

Output Schema

NameRequiredDescription
yearYes
figuresYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does disclose that this is a discovery/listing step returning keys with name and unit rather than values, plus the year-dependent variance in key sets. It omits safety/permission context and pagination or size behavior, which are minor for a small reference listing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core action and return content, then routing guidance, then the year-variance caveat. Nothing is redundant and no sentence could be dropped without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value documentation is not required, and the description covers purpose, alternative routing, and year sensitivity. The remaining gap is the semantics of the year argument (calendar vs. income year definition, valid bounds), which the empty schema leaves entirely to the description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% for the single required integer `year`, so the description must supply meaning. It clarifies that the parameter is an income year and that different years yield different keys, but gives no valid range, format, or out-of-range behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("List the tax figure keys available for an income year") plus what each entry contains (name and unit). The second sentence explicitly distinguishes it from the sibling get_figures, so an agent can separate the two without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit workflow: use this to find keys, then call get_figures to fetch values. It also warns that the valid key set varies by year with concrete examples (2025 topskat vs. 2026 mellemskat/toptopskat), which tells the agent when a cached key list is unsafe to reuse.

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.

  1. 5 tool updatesv0.4.1
    • First observedestimate_payslip
    • First observedestimate_salary_tax
    • First observedget_figures
    • First observedget_kommune
    • First observedlist_figures

TDQS

A3.9/5.0

Scored across 5 tools

Disambiguation4/5

The five tools have mostly distinct purposes: list_figures (key discovery) vs get_figures (value retrieval) form a clearly explained discover/fetch pair, and get_kommune targets a specific local-rate resource. The weakest boundary is between estimate_salary_tax (annual, single employee, full breakdown) and estimate_payslip (monthly skattekort/take-home, 2026+), which both answer 'what do I pay in tax' and could be confused for salary questions.

Naming Consistency5/5

All names are snake_case and follow a verb_noun pattern (list_figures, get_figures, get_kommune, estimate_salary_tax, estimate_payslip). Verbs are predictable by intent: list/get for lookups, estimate for calculations.

Tool Count5/5

Five tools is well-scoped for a domain-specific tax data server: one discovery tool, one lookup, one sub-resource lookup, and two calculation entry points. Nothing looks redundant or padding.

Completeness4/5

The lifecycle is covered end to end: discover figure keys, fetch values with provenance, get municipal rates, then compute annual and monthly outcomes. Gaps are real but acknowledged in descriptions (married couples, aktieindkomst, ejektivskat/ejendomsværdiskat are unsupported, and there is no way to list available years).

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Calculate income tax (UK/US brackets), EU VAT, UK corporation tax, and capital gains tax. Provides estimates only - not professional tax advice.
    2 npm
    22 PyPI
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables 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.
    -
  • A
    license
    A
    quality
    C
    maintenance
    Enables 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.
    13
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables deterministic salary and net/gross pay calculations for the German public sector and free salaries, following the official BMF tax computation plan, including allowances, family benefits, and tax/social contributions.
    4
    1
    MIT