{
  "markdown": "# Dutch Vehicle Context — MCP server & API voor Nederlandse kentekens\n\nEén kenteken erin, één gekoppeld voertuigrapport eruit. APK-historie, afkeurpunten met\nleesbare omschrijving, het officiële oordeel over de kilometerstand, en de **volledige\nterugroepketen** — inclusief wat er stuk kan, hoe gevaarlijk dat is en wat het herstel is.\n\nDraait als **remote MCP-server** en als gewone HTTPS-API. Gratis, geen API-sleutel, geen\nregistratie.\n\n```\nhttps://vehicle-context.tradebrite.nl\n```\n\n📖 **Documentatie:** https://tradebrite.nl/vehicle-context/\n\n---\n\n## Aansluiten in 10 seconden\n\n[![Add dutch-vehicle-context MCP server to Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/install-mcp?name=dutch-vehicle-context&config=eyJ1cmwiOiJodHRwczovL3ZlaGljbGUtY29udGV4dC50cmFkZWJyaXRlLm5sL21jcCJ9)\n\n**Claude** (web of desktop, elk abonnement): *Customize → Connectors → + → Add custom connector*, plak `https://vehicle-context.tradebrite.nl/mcp`.\n\n**ChatGPT:** custom connectors vereisen Developer Mode (Pro/Team/Enterprise/Edu); op Plus kan het niet — gebruik daar de HTTPS-API.\n\n**Claude Code:**\n\n```bash\nclaude mcp add --transport http vehicle-context https://vehicle-context.tradebrite.nl/mcp\n```\n\nOf in je MCP-configuratie (Claude Desktop, Cursor, Windsurf, …):\n\n```json\n{\n  \"mcpServers\": {\n    \"vehicle-context\": {\n      \"type\": \"http\",\n      \"url\": \"https://vehicle-context.tradebrite.nl/mcp\"\n    }\n  }\n}\n```\n\nDaarna kun je vragen: *\"Wat weet je van kenteken 01-TH-FD, is dat een verstandige koop?\"*\n\nLiever gewoon HTTP:\n\n```bash\ncurl \"https://vehicle-context.tradebrite.nl/v1/vehicle/context?plate=01-TH-FD\"\n```\n\n## Waarom dit bestaat\n\nAlle onderliggende gegevens zijn openbaar en gratis. Het probleem is de versnippering: het\nantwoord op een normale vraag staat verspreid over elf datasets en twee codetabellen, en de\ninteressantste conclusies staan in géén enkele daarvan.\n\nTwee voorbeelden uit de praktijk.\n\n**De terugroepketen.** Het basisregister meldt over een openstaande actie niet meer dan `Ja`.\nWil je weten wélke actie, dan moet je van kenteken naar referentiecode (`t49b-isb7`), naar de\nactiebeschrijving (`j9yg-7rg9`), naar de gevarenlijst (`9ihi-jgpf`). Bij het testvoertuig\nleverde dat twee acties op: een afgehandelde uit 2018 en een openstaande uit 2024 over een\nairbag-gasgenerator die bij een ongeval kan exploderen. **Wie de eerste rij pakt, rapporteert\nde verkeerde.**\n\n**Terugkerende gebreken.** Eén afkeuring zegt weinig — dat wordt gerepareerd. Dezelfde\nafkeuring in drie opeenvolgende jaren zegt dat er iets structureel niet in orde is. Die\nconclusie staat nergens; hij ontstaat pas door registraties per keuringsronde te groeperen.\nEn let op de valkuil die ons bijna te pakken had: een herkeuring ná reparatie is een eigen\ndatum met dezelfde gebreken. Op datum tellen levert vals alarm. Zie\n[`src/context.ts`](src/context.ts).\n\n## Wat je terugkrijgt\n\nEén JSON-antwoord (~10 kB) met `identity`, `technical`, `fuel`, `inspection`, `defects`,\n`odometer`, `recalls`, `status_flags`, `value`, `signals` en `provenance`.\n\nDe laag die dit bruikbaar maakt voor een agent is `signals` — observaties die nooit een gebrek\nvaststellen, gesorteerd op ernst, elk met een aanbeveling en de onderbouwing:\n\n| Signaal | Betekenis |\n|---|---|\n| `open_recall` | Openstaande terugroepactie, met defect, gevaar en herstel |\n| `recurring_defect` | Zelfde afkeurpunt in meerdere keuringsrondes |\n| `odometer_illogical` | Register beoordeelt de kilometerstand als onlogisch |\n| `odometer_no_judgement` | Er is géén oordeel — dat is iets anders dan een goedkeuring |\n| `imported_vehicle` | Historie van vóór de import ontbreekt in het NL-register |\n| `emission_zone_restricted` | Diesel onder EURO 5 |\n| `apk_expired`, `not_insured`, `exported`, `taxi_history`, `source_unavailable` | … |\n\n## Wat het níét doet\n\n> **Diefstalstatus zit er niet in, en dat is geen omissie.** Of een voertuig als gestolen of\n> vermist geregistreerd staat wordt principieel niet als open data verstrekt. Elk antwoord\n> meldt dat expliciet, óók als de rest schoon is — anders leest een volledig ogend rapport\n> zonder diefstalvermelding als \"niet gestolen\", en dat is de gevaarlijkste conclusie die\n> iemand uit deze gegevens kan trekken.\n\nVerder: geen taxatie, geen technische keuring, geen aankoopadvies. Geen schadeverleden, geen\naantal eigenaren, geen actuele kilometerstand — die staan niet in de open registers.\n\n## Ontwerpprincipes\n\n1. **Nooit een ontbrekende waarde invullen omdat hij waarschijnlijk lijkt.** Elke bron draagt\n   een status: `ok` / `not_found` / `empty` / `not_published` / `unavailable` / `error`.\n2. **FEIT ≠ SIGNAAL ≠ ONBEKEND.**\n3. **Wat niet openbaar is, wordt expliciet als onbekend gemeld.**\n4. **Eén MCP-tool, niet tientallen.** Onze toollijst is 2.347 tekens. Een brede\n   Nederlandse open-data-MCP die we ernaast legden: 55.452 tekens voor 64 tools — ongeveer\n   15.000 tokens die een agent moet inlezen vóór hij iets kan vragen.\n5. **Een falende bron faalt zichtbaar.** Stilte mag niet lijken op \"niets te melden\".\n6. **Elke afgeleide conclusie draagt zijn onderbouwing** in `based_on`.\n\n## Zelf draaien\n\n```bash\nnpm install\nnpx wrangler deploy      # vul eerst je eigen account_id in wrangler.toml\nnode regression.mjs      # acht gevallen tegen de live dienst\n```\n\nGeen sleutels nodig — alle bronnen zijn publiek. Geen voorberekende data in de bundle, alles\nwordt live bevraagd (240–480 ms per bron, parallel).\n\n## Bronnen en licentie\n\nElf datasets uit het Nederlandse kentekenregister en het terugroepregister, allemaal\nbeschikbaar onder **Creative Commons Zero**. Let op: de bronhouder stáát bronvermelding bij\nhergebruik uitdrukkelijk niet toe en verbiedt gebruik van naam en logo, dus die staan hier\nbewust niet in — alleen de neutrale registeraanduiding plus de dataset-id.\n\nDe bronhouder geeft geen garantie op beschikbaarheid en mag datasets zonder opgaaf intrekken.\nPerformance is fair use; vandaar de rate limit van 10 verzoeken per 10 s en 60 per minuut per\nIP op de gehoste dienst.\n\n**Code:** MIT, zie [LICENSE](LICENSE).\n\n## Privacy\n\nEen kenteken kan een persoonsgegeven zijn. De gehoste dienst logt **geen kentekens en geen\nIP-adressen** — een logbestand met kentekens plus tijdstippen zou precies de koppeling maken\ndie in de brondata ontbreekt. Wel: merk, bouwjaar, voertuigsoort en de afgegeven signalen.\n\n## Verwant\n\n**[Dutch Property Context](https://github.com/rleefers/dutch-property-context)** — dezelfde\naanpak voor Nederlandse woningen: adres erin, bouwjaar, energielabel, buurtcijfers,\nmonumentstatus en scholen eruit.\n\n---\n\nGebouwd door [Tradebrite BV](https://tradebrite.nl) · info@tradebrite.nl\n",
  "bytes": 6666,
  "sha": "41e3158ca5aece894f2cbb6842c3eb324a58cc4a7cfaa99898037066f20a872a",
  "repo_slug": "rleefers/dutch-vehicle-context",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_nl_tradebrite_dutch_vehicle_context_fb4144f9/readme"
}