{"serverId":"mcp-registry/io.bildata/bildata","tools":[{"name":"calculate_registreringsafgift","fixed":{"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","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["vehicleType","condition"],"properties":{"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."},"aaben":{"type":"boolean","description":"Varebil only: open cargo bed (ladvogn)"},"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."},"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."},"actualKm":{"type":"number","description":"Used: actual odometer km. The km regulation is skipped entirely unless actualKm, avgKm, vehicleAgeYears AND handelspris are all present."},"condition":{"enum":["new","used"],"type":"string","description":"new = first registration of a new vehicle; used = import/revaluation of a used vehicle"},"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."},"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."},"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."},"totalvaegt":{"type":"number","description":"Varebil only: total weight in kg"},"handelspris":{"type":"number","description":"Used vehicles: REQUIRED when condition=\"used\". Current Danish trade price in DKK, incl. registration tax. Unused when condition=\"new\"."},"vehicleType":{"enum":["personbil","varebil","motorcykel"],"type":"string","description":"Vehicle category under Danish law"},"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."},"elRaekkevidde":{"type":"number","description":"Electric range in km (WLTP). Send WITH elForbrug — either one alone is a no-op."},"condition_stand":{"enum":["under_middel","middel","over_middel"],"type":"string","description":"Used: maintenance condition (vedligeholdelsesstand)"},"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)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":1187,"tokensAfter":1187},{"name":"get_afgift_rates","fixed":{"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.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":114,"tokensAfter":114},{"name":"get_market_stats","fixed":{"name":"get_market_stats","description":"Danish new-vehicle registration statistics from bildata.io (weekly DMR data). Dimensions: fuel_type, brands (top 20), evs, imports (vehicles brought in from abroad, by toldsyn date: counts, share, top 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 i","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["dimension"],"properties":{"kind":{"enum":["all","Personbil"],"type":"string","description":"Default: all"},"dimension":{"enum":["fuel_type","brands","evs","imports","monthly_totals","country_of_origin"],"type":"string","description":"Which slice to return; exactly one per call"}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":265,"tokensAfter":265},{"name":"get_model_stats","fixed":{"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 an","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["query"],"properties":{"kind":{"enum":["all","Personbil"],"type":"string","description":"Default: Personbil (passenger cars)"},"limit":{"type":"integer","maximum":10,"minimum":1,"description":"Max matches to return, default 5"},"query":{"type":"string","maxLength":80,"minLength":1,"description":"Model or brand name, e.g. \"Tesla Model Y\" or \"Toyota\""},"grouped":{"type":"boolean","description":"Default true: trims collapsed into canonical models (Enyaq 85 -> Skoda Enyaq), matching bildata.io/stats. false returns raw registry variants."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":339,"tokensAfter":339},{"name":"get_top_models","fixed":{"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","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"limit":{"type":"integer","maximum":50,"minimum":1,"description":"Rows per list, default 10, max 50"},"month":{"type":"string","pattern":"^\\d{4}-\\d{2}$","description":"YYYY-MM; default latest available"}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":244,"tokensAfter":244}],"toolsChanged":5,"tokensSaved":0,"todo":[],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}