{"name":"io.bildata/bildata","slug":"bildata","title":null,"description":"Danish vehicle registration tax (registreringsafgift) calculator and DMR registration statistics","url":"https://mcp.market/server/bildata","rating":null,"grade":"C","score":69,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":8,"stars":null,"forks":null,"downloads_week":null,"last_push_at":null,"license":null},"uptime":{"percent":100,"checks":7,"ok":7,"last_checked_at":"2026-09-21T03:05:59.130Z","last_ok_at":"2026-09-21T03:05:59.130Z","latency_ms":77},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":null,"website":"https://bildata.io","version":"1.0.0","remotes":[{"type":"streamable-http","url":"https://bildata.io/mcp"}],"packages":[],"tools":[{"name":"calculate_registreringsafgift","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"vehicleType":{"type":"string","enum":["personbil","varebil","motorcykel"],"description":"Vehicle category under Danish law"},"condition":{"type":"string","enum":["new","used"],"description":"new = first registration of a new vehicle; used = import/revaluation of a used vehicle"},"bruttovaerdi":{"type":"number","description":"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."},"handelspris":{"type":"number","description":"Used vehicles: REQUIRED when condition=\"used\". Current Danish trade price in DKK, incl. registration tax. Unused when condition=\"new\"."},"nypris":{"type":"number","description":"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."},"co2":{"type":"number","description":"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."},"elForbrug":{"type":"number","description":"Electric consumption in Wh/km. Send WITH elRaekkevidde — the battery deduction is (elForbrug/1000) * elRaekkevidde, so either one alone is a no-op."},"elRaekkevidde":{"type":"number","description":"Electric range in km (WLTP). Send WITH elForbrug — either one alone is a no-op."},"totalvaegt":{"type":"number","description":"Varebil only: total weight in kg"},"aaben":{"type":"boolean","description":"Varebil only: open cargo bed (ladvogn)"},"isElectric":{"type":"boolean","description":"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."},"actualKm":{"type":"number","description":"Used: actual odometer km. The km regulation is skipped entirely unless actualKm, avgKm, vehicleAgeYears AND handelspris are all present."},"avgKm":{"type":"number","description":"Used: average odometer km of the comparable adverts. Part of the actualKm/avgKm/vehicleAgeYears set — a partial send is silently ignored."},"vehicleAgeYears":{"type":"number","description":"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":{"type":"boolean","description":"Used: true only if EVERY comparable advert is a dealer listing (enables annoncefradrag + leveringsomkostninger)"},"condition_stand":{"type":"string","enum":["under_middel","middel","over_middel"],"description":"Used: maintenance condition (vedligeholdelsesstand)"},"targetYear":{"type":"number","description":"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."}},"required":["vehicleType","condition"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"forecast_registreringsafgift","description":"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\").","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"vehicleType":{"type":"string","enum":["personbil","varebil","motorcykel"],"description":"Vehicle category under Danish law"},"nypris":{"type":"number","description":"Price as new in DKK (taxable value)"},"co2":{"type":"number","description":"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."},"batteryCapacity":{"type":"number","description":"Battery kWh (used with electricRange to derive Wh/km)"},"electricRange":{"type":"number","description":"Electric range km"},"electricConsumption":{"type":"number","description":"Electric consumption Wh/km (overrides battery/range derivation)"},"totalvaegt":{"type":"number","description":"Varebil only: total weight in kg"},"aaben":{"type":"boolean","description":"Varebil only: open cargo bed (ladvogn)"},"isElectric":{"type":"boolean","description":"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."}},"required":["vehicleType","nypris"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"get_afgift_rates","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"get_market_stats","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"dimension":{"type":"string","enum":["fuel_type","brands","evs","imports","monthly_totals","country_of_origin"],"description":"Which slice to return; exactly one per call"},"kind":{"type":"string","enum":["all","Personbil"],"description":"Default: all"}},"required":["dimension"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"get_model_stats","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"type":"string","minLength":1,"maxLength":80,"description":"Model or brand name, e.g. \"Tesla Model Y\" or \"Toyota\""},"kind":{"type":"string","enum":["all","Personbil"],"description":"Default: Personbil (passenger cars)"},"limit":{"type":"integer","minimum":1,"maximum":10,"description":"Max matches to return, default 5"},"grouped":{"type":"boolean","description":"Default true: trims collapsed into canonical models (Enyaq 85 -> Skoda Enyaq), matching bildata.io/stats. false returns raw registry variants."}},"required":["query"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"get_top_models","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"month":{"type":"string","pattern":"^\\d{4}-\\d{2}$","description":"YYYY-MM; default latest available"},"limit":{"type":"integer","minimum":1,"maximum":50,"description":"Rows per list, default 10, max 50"}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}],"scan":{"score":69,"grade":"C","scanned_at":"2026-09-20T21:00:51.874Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-20T21:00:51.859Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 1246ms"]},"poisoning":{"score":15,"max":15,"notes":["6 tool descriptions checked"]},"auth":{"score":10,"max":15,"notes":["open endpoint, read-only tools"]},"maintenance":{"score":3,"max":15,"notes":["no repository listed"]},"identity":{"score":4,"max":10,"notes":["verified namespace with website, no repo"]}},"findings":[{"id":"maint.no-repo","severity":"low","component":"maintenance","title":"No source repository listed"}],"inputs":{"probes":[{"url":"https://bildata.io/mcp","reachable":true,"authRequired":false,"latencyMs":1246,"serverInfo":{"name":"bildata","version":"1.0.0"}}],"packages":[],"repo":{"found":false},"icon":{"url":"https://bildata.io/favicon.svg?v=3","source":"site"},"presence":{"stars":null,"forks":null,"downloadsWeek":null,"license":null,"lastPushAt":null,"score":8}}}},"grade_history":[],"reviews":[]}