Skip to main content
Glama

Server Details

Danish vehicle registration tax (registreringsafgift) calculator and DMR registration statistics

If you are the author of this connector, you can claim ownership with GitHub, an HTTP challenge, or a DNS record. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP
URL

Available Tools

6 tools
calculate_registreringsafgiftAInspect

Calculate DANISH vehicle registration tax (registreringsafgift) for a new or used personbil, varebil or motorcykel under registreringsafgiftsloven. Same engine and validation as bildata.io's public calculator. Amounts in DKK; an estimate, not an official Motorstyrelsen valuation. REQUIRED PAIRS: condition="new" needs bruttovaerdi; condition="used" needs handelspris AND nypris (nypris is the used vehicle's own original price when new, not the new-vehicle price field). ALWAYS send co2 for a petrol, diesel or hybrid PERSONBIL or VAREBIL: an omitted co2 counts as 0 g/km, i.e. battery-electric, and makes the tax far too low with no error raised — zero on an ordinary car, and still only a fraction of the real figure on an expensive one. On motorcykel co2 does not select the drivetrain at all - isElectric does. Send every number as a JSON number (300000, not "300000"), use enum values exactly as listed, and OMIT an optional field you do not know rather than sending null.

ParametersJSON Schema
NameRequiredDescriptionDefault
co2NoWLTP CO2 in g/km. PERSONBIL and VAREBIL: send it for any fuel-burning vehicle - an omitted value and an explicit 0 are BOTH read as battery-electric (EV phase-in and EV bundfradrag), which makes the tax far too low. Use 0 only for a pure EV. MOTORCYKEL: co2 does not select the drivetrain here; isElectric does, and a motorcykel sent with co2=0 and no isElectric is priced as fuel-burning.
aabenNoVarebil only: open cargo bed (ladvogn)
avgKmNoUsed: average odometer km of the comparable adverts. Part of the actualKm/avgKm/vehicleAgeYears set — a partial send is silently ignored.
nyprisNoUsed vehicles: REQUIRED when condition="used". The SAME vehicle's original price as new in DKK, incl. all taxes. Unused when condition="new" — for a new vehicle use bruttovaerdi.
actualKmNoUsed: actual odometer km. The km regulation is skipped entirely unless actualKm, avgKm, vehicleAgeYears AND handelspris are all present.
conditionYesnew = first registration of a new vehicle; used = import/revaluation of a used vehicle
elForbrugNoElectric consumption in Wh/km. Send WITH elRaekkevidde — the battery deduction is (elForbrug/1000) * elRaekkevidde, so either one alone is a no-op.
isElectricNoMOTORCYKEL: the EV switch for that vehicle type. For personbil and varebil the drivetrain comes from co2 (0 or absent = electric), so this flag does not change the tax — but DO send it for a battery-electric personbil or varebil: it is read as your declaration that the missing co2 is deliberate, and suppresses the warning that the answer looks too low.
targetYearNoRules year to calculate under (default: current). A year with no published table silently falls back to the current rates; the answer's rules_year says which table actually applied.
totalvaegtNoVarebil only: total weight in kg
handelsprisNoUsed vehicles: REQUIRED when condition="used". Current Danish trade price in DKK, incl. registration tax. Unused when condition="new".
vehicleTypeYesVehicle category under Danish law
bruttovaerdiNoNew vehicles: REQUIRED when condition="new" (unused when condition="used"). Taxable value in DKK, i.e. price incl. VAT and margin BEFORE registration tax. NOT the advertised Danish showroom price, which already contains the tax being calculated.
elRaekkeviddeNoElectric range in km (WLTP). Send WITH elForbrug — either one alone is a no-op.
condition_standNoUsed: maintenance condition (vedligeholdelsesstand)
vehicleAgeYearsNoUsed: vehicle age in years since first registration. Also used on its own for the under-6-months rule, so send it even when you cannot supply the km set. The km regulation additionally needs actualKm, avgKm and handelspris — that part is skipped unless all are present.
allDealerListingsNoUsed: true only if EVERY comparable advert is a dealer listing (enables annoncefradrag + leveringsomkostninger)

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations, the description carries the full behavioral burden and does so thoroughly. It discloses that omitted co2 silently reads as battery-electric and produces an implausibly low tax with no error, that motorcykel co2 does not select drivetrain, and that the result is an estimate, not an official Motorstyrelsen valuation.

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?

The description is dense but every sentence earns its place, with critical requirements front-loaded and clearly labeled via REQUIRED PAIRS and ALWAYS. Uppercase callouts and short clauses make the long text scannable without waste.

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

Completeness5/5

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

Given 17 parameters, conditional dependencies, and no annotations or output schema, the description is remarkably complete for safe invocation. It covers all significant cross-field requirements and silent failure modes; the expected result is clear from the tool name and the statement that amounts are in DKK.

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

Parameters5/5

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

Even though schema coverage is 100%, the description adds cross-parameter semantics that the schema does not: required condition/price pairs, the meaning of nypris as the used vehicle's own original new price, the severe co2 pitfall, and the rule to send numbers as JSON numbers and omit unknown fields rather than sending null.

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 clearly states a specific action and resource: calculate Danish registration tax for personbil, varebil, or motorcykel under registreringsafgiftsloven. It does not explicitly name or contrast sibling tools like forecast_registreringsafgift, but the scope is precise enough that an agent can distinguish it from rate-lookup and market-stat tools.

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?

The description gives strong operational guidance: required pairs for new vs. used, mandatory co2 for fuel-burning personbiler/varebiler, motorcykel drivetrain selection, JSON number formatting, and omitting unknown optional fields. It does not explicitly state when to prefer forecast_registreringsafgift or other siblings, so it misses the when-not-to-use alternative.

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

forecast_registreringsafgiftAInspect

Project DANISH registration tax for a NEW vehicle across rules-years 2026–2029 (the EV/plug-in phase-in schedule changes the tax each year). Returns per-year results and deltas vs 2026. Amounts in DKK. Estimates, not official valuations. NEW vehicles only, and always the whole 2026-2029 span: for a USED import, or for a single year, use calculate_registreringsafgift instead. Send every number as a JSON number (300000, not "300000").

ParametersJSON Schema
NameRequiredDescriptionDefault
co2NoWLTP CO2 in g/km. PERSONBIL and VAREBIL: send it for any fuel-burning vehicle - an omitted value and an explicit 0 are BOTH read as battery-electric (EV phase-in and EV bundfradrag), which makes the tax far too low. Use 0 only for a pure EV. MOTORCYKEL behaves differently on THIS tool: an explicit co2=0 counts as electric, but an OMITTED co2 does NOT - the bike is priced as fuel-burning and the tax comes out far too HIGH. Declare an electric motorcykel with isElectric=true.
aabenNoVarebil only: open cargo bed (ladvogn)
nyprisYesPrice as new in DKK (taxable value)
isElectricNoMOTORCYKEL: the EV switch for that vehicle type, and on this tool the only reliable way to declare one - leave it unset with co2 omitted and the bike is priced as fuel-burning. For personbil and varebil the drivetrain comes from co2 (0 or absent = electric), so this flag does not change the tax.
totalvaegtNoVarebil only: total weight in kg
vehicleTypeYesVehicle category under Danish law
electricRangeNoElectric range km
batteryCapacityNoBattery kWh (used with electricRange to derive Wh/km)
electricConsumptionNoElectric consumption Wh/km (overrides battery/range derivation)

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 behavioral burden. It discloses that results are per-year with deltas vs 2026, amounts are in DKK, outputs are estimates rather than official valuations, and that the tool always returns the full span. This is strong, though it could go further on response structure or edge-case behavior.

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?

Every sentence earns its place: purpose, reason for multi-year scope, return shape, currency, estimate caveat, usage exclusion, and serialization requirement. Information is front-loaded and nothing is redundant.

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 complex 9-parameter tool with no output schema, the description covers the essential operational context: scope, return content, currency, estimate status, and when to use a sibling. It could be slightly more specific about the exact shape of the returned per-year results/deltas, but it is otherwise complete enough to call correctly.

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 100%, so the schema already documents each parameter in detail, including type-specific caveats. The tool description adds the cross-cutting instruction that numbers must be sent as JSON numbers, but it does not add per-parameter meaning beyond the schema.

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 states a specific operation ('Project DANISH registration tax') on a specific resource ('a NEW vehicle') with a clear time scope (2026–2029). It also explicitly distinguishes itself from the sibling calculate_registreringsafgift by naming when that alternative applies.

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?

The description provides explicit when-to-use guidance: NEW vehicles and the whole 2026–2029 span. It also names the exact alternative for excluded cases: 'for a USED import, or for a single year, use calculate_registreringsafgift instead.' This leaves no ambiguity.

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

get_afgift_ratesAInspect

Machine-readable Danish vehicle registration tax rates 2026–2029: skalaknæk (brackets), CO2 tiers, bundfradrag and EV/plug-in phase-in (indfasning) percentages per year. Identical to GET https://bildata.io/api/afgift-prognose/rates. 2027–2029 rates are provisional.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral disclosure burden. It usefully discloses machine-readability, the 2026–2029 range, and that 2027–2029 rates are provisional. However, it does not describe the response format, update cadence, or any access considerations, though the operation is clearly a simple read.

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?

Two dense sentences with no filler. The core content is front-loaded, the API equivalence is a useful single clause, and the provisional-data caveat is included without extra wording.

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 zero-parameter, read-only rates endpoint, the description is nearly complete: it identifies the data domain, years, categories, and provisional status. The absence of an output schema means the description could have specified the exact return shape, but 'machine-readable' plus the field list is adequate for correct invocation.

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?

There are zero parameters and the input schema is empty, so the baseline is 4. The description adds meaningful context by describing the payload of returned data (brackets, tiers, percentages) even though no parameters need explanation.

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 resource ('Danish vehicle registration tax rates'), defines the scope ('2026–2029'), and enumerates the contained data categories (brackets, CO2 tiers, bundfradrag, EV phase-in). This clearly differentiates it from calculation, forecasting, and market/model stats siblings.

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?

The intended use is implied through the resource type: it is the raw rates dataset, as opposed to calculate_registreringsafgift or forecast_registreringsafgift. However, the description never explicitly says 'use this when you need raw rates' or names alternatives, so the agent must infer usage from context.

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

get_market_statsAInspect

Danish new-vehicle registration statistics from bildata.io (weekly DMR data). Dimensions: fuel_type, brands (top 20), evs, imports (top imported makes), monthly_totals (last 12 months incl. leasing series), country_of_origin. kind=all covers every vehicle type; kind=Personbil passenger cars only. as_of is the data cutoff of the underlying extract — a month whose as_of is before month-end is PARTIAL. Market-level ONLY: the brands dimension is the top 20 brands and there is no per-model breakdown here — for a named MODEL use get_model_stats. It is NOT a way to get a brand total for a brand outside the top 20: a brand-only query there returns that brand's individual model rows (default 5, max 10, truncation disclosed in note) and defaults to kind=Personbil where this tool defaults to kind=all, so summing them does not reproduce a brand total from here.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoDefault: all
dimensionYesWhich slice to return; exactly one per call

TDQS

A5/5.0
Behavior5/5

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

With no annotations, the description carries full behavioral burden and meets it: it discloses weekly DMR data source, as_of cutoff semantics with PARTIAL months, top-20 brand limitation, no per-model breakdown, and default kind=all. It also surfaces truncation behavior in the sibling tool, preventing misinterpretation. No annotation contradiction.

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?

Dense but well-organized; the core purpose is front-loaded, and each subsequent sentence adds a necessary caveat or usage rule. No filler or repetition.

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

Completeness5/5

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

For a two-parameter stats tool with no annotations or output schema, the description covers data source, parameter semantics, defaults, partial-data behavior, and boundary conditions with sibling tools. An agent has everything needed to select and invoke it correctly.

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

Parameters5/5

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

Although schema coverage is 100%, the description adds real meaning: kind=all vs Personbil is defined, and each dimension enum value receives context (e.g., brands top 20, monthly_totals last 12 months incl. leasing). It goes well beyond the schema's 'Which slice to return.'

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 concrete resource: Danish new-vehicle registration statistics from bildata.io, and lists the available dimensions. It also explicitly distinguishes itself from get_model_stats by noting this is market-level only, so an agent can select it correctly among siblings.

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?

Provides explicit routing guidance: 'for a named MODEL use get_model_stats' and warns it is NOT a way to get a brand total outside top 20, explaining the sibling's default and truncation behavior. This gives both when-to-use and when-not-to-use guidance.

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

get_model_statsAInspect

Look up Danish registration numbers for a SPECIFIC car model by name — e.g. "Tesla Model Y", "VW ID.4", "Skoda Enyaq". Covers every model since 2018. Use this when the question names a model or brand; get_top_models only covers the top sellers of one month, and get_market_stats only the top 20 brands. A model still selling returns period figures (this month, this year, last year, market share) plus all-time totals. A model with no registration in the last ~3 years returns ONLY lifetime totals and its first/last registration date — the period figures do not exist for it and are listed in unavailableFields; their absence is missing data, NOT zero sales. Spelling is forgiving (ID.4 = ID 4 = id4, Citroen = Citroën) and the response states which row it matched and how, so verify name before quoting the numbers.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoDefault: Personbil (passenger cars)
limitNoMax matches to return, default 5
queryYesModel or brand name, e.g. "Tesla Model Y" or "Toyota"
groupedNoDefault true: trims collapsed into canonical models (Enyaq 85 -> Skoda Enyaq), matching bildata.io/stats. false returns raw registry variants.

TDQS

A4.9/5.0
Behavior5/5

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

Although no annotations are provided, the description thoroughly discloses behavior: it differentiates active vs. inactive models, explains that absent period figures are missing data 'NOT zero sales', states that results appear in unavailableFields, and warns that spelling is forgiving and the response indicates how it matched. It even instructs the agent to verify the name field before quoting numbers. This is exceptional transparency for a tool with zero annotations.

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?

Every sentence earns its place: purpose and scope first, then routing guidance, then return behavior for both active and inactive models, then matching/verification caveats. It is long but information-dense with no repetition or filler. The critical edge-case semantics are clearly front-loaded near the relevant behavior.

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

Completeness5/5

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

With no output schema and no annotations, the description carries the full burden and succeeds. It explains what figures are returned for active models, what an inactive model returns, how missing data is represented, and how matching works. It gives an agent enough to select, invoke, and interpret the tool's response correctly, including a caution to verify the matched name.

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 100%, so the baseline is 3. The description adds meaningful value beyond the schema by explaining query semantics: examples of valid queries, forgiving spelling normalization ('ID.4 = ID 4 = id4'), and the need to verify the returned name. It does not elaborate on kind, limit, or grouped, but the schema already covers those fully.

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: 'Look up Danish registration numbers for a SPECIFIC car model by name'. It gives concrete examples and explicit scope ('Covers every model since 2018'), and distinguishes itself from get_top_models and get_market_stats. An agent can immediately tell what this tool does and how it differs from siblings.

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?

Explicitly says when to use it: 'Use this when the question names a model or brand'. It also states alternatives and why they are not suitable: get_top_models covers only top sellers of one month and get_market_stats only top 20 brands. No ambiguity about routing.

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

get_top_modelsAInspect

Top-selling car models (and variants) in Denmark for a given month, from bildata.io's top-50 statistics (passenger cars, monthly, 12-month rolling window). Default: latest month, top 10. as_of is the data cutoff — if it is before month-end, the month is PARTIAL, not complete. A RANKING, bounded by the 12-month window. A model outside that month's top 50 is absent here — look that one up by name with get_model_stats. A month OLDER than the window cannot be answered by any tool on this server: get_model_stats reports fixed periods relative to today (this month, this year, last year, all-time), never an arbitrary past month.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoRows per list, default 10, max 50
monthNoYYYY-MM; default latest available

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations, the description carries full burden and meets it: it discloses partial-month cutoff semantics, 12-month rolling-window bounds, ranking nature, and absence behavior. It also notes rolloff behavior for older months across all tools, which is valuable operational context.

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?

The description is dense and front-loaded with its core purpose in the first sentence, and every sentence contributes. It is a bit longer than necessary and repeats the 12-month-window idea, so it narrowly misses a 5.

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

Completeness5/5

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

For a two-parameter list tool with no annotations and no output schema, the description covers source, scope, ranking, window bounds, partial-month behavior, default behavior, and cross-tool routing. Nothing critical is missing for correct invocation.

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 coverage is 100%, so baseline is 3; the description adds meaning by explaining that the month is a data cutoff with partial-month consequences and by confirming default limit/top-10 behavior. It slightly confuses by using the term 'as_of' for the 'month' parameter, which is the only notable gap.

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 uses a specific verb and resource: 'Top-selling car models (and variants) in Denmark for a given month' from bildata.io's monthly top-50 passenger-car statistics. It also names the sibling it is not, saying a model outside the top 50 must be handled by get_model_stats, so an agent can disambiguate immediately.

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?

It explicitly states default usage ('Default: latest month, top 10'), gives an alternative for out-of-top-50 lookups ('look that one up by name with get_model_stats'), and rules out arbitrary past months ('A month OLDER than the window cannot be answered by any tool on this server'). This is explicit when-to-use and when-not-to-use guidance.

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. Dates show when Glama detected each change.

  1. 3 tool updates
    • Changedcalculate_registreringsafgift1 field changed
      • changedInput schema / properties / co2 / description
        Previous value: -"WLTP CO2 in g/km. Send it for ANY fuel-burning vehicle: an omitted value and an explicit 0 are BOTH read as battery-electric (EV phase-in and EV bundfradrag), which makes the tax far too low. Use 0 only for a pure EV."New value: +"WLTP CO2 in g/km. PERSONBIL and VAREBIL: send it for any fuel-burning vehicle - an omitted value and an explicit 0 are BOTH read as battery-electric (EV phase-in and EV bundfradrag), which makes the tax far too low. Use 0 only for a pure EV. MOTORCYKEL: co2 does not select the drivetrain here; isElectric does, and a motorcykel sent with co2=0 and no isElectric is priced as fuel-burning."
    • Changedforecast_registreringsafgift5 fields changed
      • addedInput schema / properties / aaben / description
        Added value: +"Varebil only: open cargo bed (ladvogn)"
      • changedInput schema / properties / co2 / description
        Previous value: -"WLTP CO2 g/km (0 for EVs)"New value: +"WLTP CO2 in g/km. PERSONBIL and VAREBIL: send it for any fuel-burning vehicle - an omitted value and an explicit 0 are BOTH read as battery-electric (EV phase-in and EV bundfradrag), which makes the tax far too low. Use 0 only for a pure EV. MOTORCYKEL behaves differently on THIS tool: an explicit co2=0 counts as electric, but an OMITTED co2 does NOT - the bike is priced as fuel-burning and the tax comes out far too HIGH. Declare an electric motorcykel with isElectric=true."
      • addedInput schema / properties / isElectric / description
        Added value: +"MOTORCYKEL: the EV switch for that vehicle type, and on this tool the only reliable way to declare one - leave it unset with co2 omitted and the bike is priced as fuel-burning. For personbil and varebil the drivetrain comes from co2 (0 or absent = electric), so this flag does not change the tax."
      • addedInput schema / properties / totalvaegt / description
        Added value: +"Varebil only: total weight in kg"
      • addedInput schema / properties / vehicleType / description
        Added value: +"Vehicle category under Danish law"
    • Changedget_market_stats1 field changed
      • addedInput schema / properties / dimension / description
        Added value: +"Which slice to return; exactly one per call"
  2. 6 tool updates
    • First observedcalculate_registreringsafgift
    • First observedforecast_registreringsafgift
    • First observedget_afgift_rates
    • First observedget_market_stats
    • First observedget_model_stats
    • First observedget_top_models

Frequently Asked Questions

Discussions

No comments yet. Be the first to start the discussion!

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A4.4/5.0
Disambiguation4/5

Each tool targets a distinct level (current tax, future tax, rates, market stats, individual model stats, rankings), but the two registration-tax calculation tools and the two model-statistics tools are close enough that an agent must read the descriptions carefully to pick the right one. The descriptions do draw clear boundaries, so confusion should be rare.

Naming Consistency5/5

All tool names follow a consistent verb_noun snake_case pattern: calculate, forecast, or get plus a clear object. The mix of Danish (registreringsafgift/afgift) and English nouns is understandable and does not break the pattern.

Tool Count5/5

Six tools cover the server's apparent scope without bloat; each has a distinct job and no tool feels redundant. This is within the ideal range for a specialized Danish vehicle-tax and data server.

Completeness4/5

The surface covers current tax calculation, future tax forecasts, rates, market statistics, model lookups, and monthly top rankings, which is solid. The main gaps are arbitrary historical month queries and model-level data beyond the disclosed windows, but the descriptions clearly document these limitations.

Resources