bildata
Server Details
Danish vehicle registration tax (registreringsafgift) calculator and DMR registration statistics
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
Available Tools
6 toolscalculate_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.
| Name | Required | Description | Default |
|---|---|---|---|
| co2 | No | 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. | |
| aaben | No | Varebil only: open cargo bed (ladvogn) | |
| avgKm | No | Used: average odometer km of the comparable adverts. Part of the actualKm/avgKm/vehicleAgeYears set — a partial send is silently ignored. | |
| nypris | No | Used 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. | |
| actualKm | No | Used: actual odometer km. The km regulation is skipped entirely unless actualKm, avgKm, vehicleAgeYears AND handelspris are all present. | |
| condition | Yes | new = first registration of a new vehicle; used = import/revaluation of a used vehicle | |
| elForbrug | No | Electric consumption in Wh/km. Send WITH elRaekkevidde — the battery deduction is (elForbrug/1000) * elRaekkevidde, so either one alone is a no-op. | |
| isElectric | No | MOTORCYKEL: 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. | |
| targetYear | No | Rules 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. | |
| totalvaegt | No | Varebil only: total weight in kg | |
| handelspris | No | Used vehicles: REQUIRED when condition="used". Current Danish trade price in DKK, incl. registration tax. Unused when condition="new". | |
| vehicleType | Yes | Vehicle category under Danish law | |
| bruttovaerdi | No | New 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. | |
| elRaekkevidde | No | Electric range in km (WLTP). Send WITH elForbrug — either one alone is a no-op. | |
| condition_stand | No | Used: maintenance condition (vedligeholdelsesstand) | |
| vehicleAgeYears | No | Used: 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. | |
| allDealerListings | No | Used: true only if EVERY comparable advert is a dealer listing (enables annoncefradrag + leveringsomkostninger) |
TDQS
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.
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.
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.
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.
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.
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").
| Name | Required | Description | Default |
|---|---|---|---|
| co2 | No | 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. | |
| aaben | No | Varebil only: open cargo bed (ladvogn) | |
| nypris | Yes | Price as new in DKK (taxable value) | |
| isElectric | No | 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. | |
| totalvaegt | No | Varebil only: total weight in kg | |
| vehicleType | Yes | Vehicle category under Danish law | |
| electricRange | No | Electric range km | |
| batteryCapacity | No | Battery kWh (used with electricRange to derive Wh/km) | |
| electricConsumption | No | Electric consumption Wh/km (overrides battery/range derivation) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Default: all | |
| dimension | Yes | Which slice to return; exactly one per call |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Default: Personbil (passenger cars) | |
| limit | No | Max matches to return, default 5 | |
| query | Yes | Model or brand name, e.g. "Tesla Model Y" or "Toyota" | |
| grouped | No | Default true: trims collapsed into canonical models (Enyaq 85 -> Skoda Enyaq), matching bildata.io/stats. false returns raw registry variants. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Rows per list, default 10, max 50 | |
| month | No | YYYY-MM; default latest available |
TDQS
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.
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.
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.
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.
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.
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.
3 tool updates
- Changed
calculate_registreringsafgift1 field changed- changed
Input schema / properties / co2 / descriptionPrevious 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."
- Changed
forecast_registreringsafgift5 fields changed- added
Input schema / properties / aaben / descriptionAdded value: +"Varebil only: open cargo bed (ladvogn)" - changed
Input schema / properties / co2 / descriptionPrevious 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." - added
Input schema / properties / isElectric / descriptionAdded 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." - added
Input schema / properties / totalvaegt / descriptionAdded value: +"Varebil only: total weight in kg" - added
Input schema / properties / vehicleType / descriptionAdded value: +"Vehicle category under Danish law"
- Changed
get_market_stats1 field changed- added
Input schema / properties / dimension / descriptionAdded value: +"Which slice to return; exactly one per call"
6 tool updates
- First observed
calculate_registreringsafgift - First observed
forecast_registreringsafgift - First observed
get_afgift_rates - First observed
get_market_stats - First observed
get_model_stats - First observed
get_top_models
Frequently Asked Questions
Claiming proves that you control a remote MCP connector. It does not move, proxy, or interrupt the server.
Open the connector listing, choose Claim ownership, and sign in to Glama.
Complete one verification method:
GitHub identity — fastest for official registry listings. For a namespace such as
io.github.alice/server, link the matching GitHub user, then choose Claim with GitHub. An organization namespace such asio.github.acme/serveralso needs that organization to have installed the Glama AI GitHub App and approved its permissions, because GitHub discloses organization membership only to apps it has installed. Use HTTP or DNS when it has not.HTTP challenge — works when you can deploy a public file. Generate a token, publish the exact JSON Glama shows at
/.well-known/glama.jsonon the same origin as the connector, then choose Check HTTP challenge.DNS challenge — works when you control DNS but cannot change the server. Generate a token, create the exact TXT record Glama shows, wait for it to propagate, then choose Check DNS challenge.
After verification, Glama sends a confirmation email and gives you access to listing details, thumbnails, health checks, and analytics. Keep the HTTP file or DNS record in place: Glama periodically checks it and ownership remains verified while the token is discoverable.
The HTTP ownership file has this structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"claim": "glama_claim_..."
}Claim tokens are opaque, stable, and bound to the signed-in Glama account. They contain no email address or other personal information. If Glama can no longer discover a verified HTTP or DNS token, it starts a seven-day grace period before removing claim-based access. Restore the same token during that period to keep ownership verified. Never publish an email address, Glama session token, GitHub token, or connector credential as ownership proof.
If verification fails, confirm that you copied the current token exactly. The HTTP file must be public, return valid JSON with a successful HTTP response, and stay on the connector's origin. DNS changes may need more time to propagate. A claim cannot transfer to a different origin or hostname: if the connector target changes, Glama starts the grace period and the new target must be claimed separately after the previous claim is released.
For a connector linked to the official MCP Registry, registry updates continue to replace its name, description, and URL by default. After claiming, open Manage connector and enable Use Glama listing details as the source of truth if edits made on Glama should be preserved. Categories and thumbnails are always managed on Glama; registry linkage and technical connection settings continue to sync.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
To improve your MCP server's ranking:
Claim ownership of the server listing
Complete the server profile with an accurate description and thumbnail
Provide a test profile so Glama can connect to and evaluate the server
Keep tool definitions clear and complete to earn a high Tool Definition Quality Score (TDQS)
Route real usage through the Glama Gateway; more recorded successful server uses also improve the ranking
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Connectors
UK used cars: road tax (VED), ULEZ charges, MOT dates, DVSA reliability, live dealer stock.
Danish company registry (CVR): company search, financials, ownership, beneficial owners and more.
Danish parliamentary cases, votes, politicians, parties, elections, and comparison tools.
Statistics Denmark (Danmarks Statistik / Statbank) MCP.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceMCP server for looking up Danish vehicle information by registration number or VIN via MotorAPI.dk, including vehicle details, environmental data, equipment, and API usage.1-
- AlicenseAqualityCmaintenanceComputes car driving time, distance, and 'leave by' time between places in Denmark using public OpenStreetMap services with no API key required.3MIT
- AlicenseAqualityBmaintenanceRemote MCP server for the Danish company register (CVR): company lookup, name search, and parsed annual-report financials as structured JSON for 860,000+ active Danish companies.3MIT
- FlicenseNot gradedqualityDmaintenanceScrapes and serves India's national vehicle registration database (VAHAN Dashboard), providing detailed insights into registrations, manufacturers, fuel types, and RTO-level metrics.-
Glama MCP Gateway
Add one secure layer between your agents and this server.
TDQS
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.
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.
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.
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.