openvehicle-data
Planned integration with Wikidata to enrich vehicle brand and model data with an independent source of information.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@openvehicle-dataShow me the engine specs for a 2025 Fiat Panda"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
openvehicle-data
Open, verified data on passenger cars: brands, models, versions and technical specifications, for the cars registered in Italy from 2019 to 2025 (EU category M1), with Europe and the world to follow.
It is published three ways, all read-only and free:
a dataset (SQLite, CSV and JSON) on the Releases page;
a REST API with interactive documentation;
an MCP server, so AI agents can look vehicles up themselves.
Every technical value says where it comes from, and where two sources agree it says so. There is no personal data: no owners, no plates, no VIN lookups.
Status: early development. Datasets are pre-releases (
data-v*tags) and the schema can still change. See Limits before relying on it.
Contents
Try it · The data · REST API · MCP server · Run it yourself · Limits · Contributing · Documentation · Licenses
Related MCP server: ECRVSP Processos: Imprimir CRLV-e
Try it
With a server running (see Run it yourself), on its default local address:
U=http://localhost:8000/api/v1
# find a model by name (typos get a "did_you_mean")
curl "$U/search?q=panda"
# the most registered Toyota variants seen in 2023
curl "$U/variants?brand_id=brand_toyota&year=2023&sort=registrations&limit=5"
# one variant, with its engine and the source of every field
curl "$U/variants/var_fiat-panda-312-pyd1b-s5g"
# match the number on an Italian registration document (carta di circolazione)
curl "$U/variants?type_approval=e3*2007/46*0064*05"Interactive documentation is at /docs on the same host.
The data
Structure
Brand ─ Family ─ Model ─ Generation ─ Variant ─ Engine
FIAT PANDA PANDA observed 312 PYD1B S5G hybrid 999 cc 52 kWLevel | What it is | Example id |
Brand | the make |
|
Family | models that differ only by engine, drive or trim (Mercedes |
|
Model | the commercial name as reported by the source |
|
Generation |
|
|
Variant | a type-approval version (type, variant and version codes) |
|
Engine | fuel, displacement and power |
|
Ids are stable and readable. Lists are sorted by id in the REST API and by
registrations in the MCP server, and both accept min_registrations to skip rare or
mistyped entries.
What a variant holds
Field | Meaning |
| the type/variant/version codes, as reported |
| first and last registration year seen (2019-2025), not production years |
| mass in running order |
| only for vehicles registered in 2019-2022 |
| WLTP combined CO2 |
| cars registered in Italy in the source data, summed over the years |
| EU type-approval base number, e.g. |
| fuel, |
Brands also carry a wikidata_id where a reliable match was reviewed.
Where each value comes from
Every technical field (mass, CO2, wheelbase, track width, engine size and power, type
approval, Wikidata id) has its own record: source, licence, evidence link,
last_verified date and a status. get_variant and GET /variants/{id} return them.
Status | Meaning |
| one source only |
| two sources agree, within a tolerance (mass 1 kg, wheelbase 10 mm, power 1 kW, displacement exact) |
| two sources disagree; the value shown is the EEA one and the difference stays visible |
confirmed is a check against transcription and aggregation errors, not a second
measurement: both sources derive from the manufacturer's type-approval data.
Source | Provides | Licence |
EEA CO2 monitoring, Regulation (EU) 2019/631 | the catalogue itself: makes, models, versions, engines, mass, CO2, registrations (2019-2024 final, 2025 provisional) | CC BY 4.0 |
RDW open data (Netherlands) | second source for mass, wheelbase, engine size and power; the type-approval number | Public Domain |
brand identifiers, from a reviewed list | CC0 |
RDW rows are one per licence plate, so they are grouped on the RDW server: no plate is stored, published or logged.
Downloads
Each release has openvehicle-data.db (SQLite), one CSV per table (brands,
families, models, generations, engines, variants, provenance, sources),
dataset.json, manifest.json (SHA-256 of every file) and a changelog against the
previous release.
REST API
Base path /api/v1. Everything is GET.
Path | Filters |
|
|
|
|
|
|
|
|
|
|
|
|
| the variant, its engine and the provenance of every field |
| brands, families and models by name or alias |
| sources and licences; version, counts and attribution; liveness |
Lists take limit (default 50, at most 200) and offset, and answer with total,
count, has_more and next_offset. sort is id or registrations.
type_approval accepts the full number as printed on the registration document or
only its base. An unknown id gives a 404 with a "Did you mean" suggestion; a
malformed value gives a 422.
MCP server
Endpoint /mcp (Streamable HTTP, stateless, no authentication). Add your server to
an MCP client, for example Claude Code:
claude mcp add --transport http openvehicle http://localhost:8000/mcpTool | Use it to |
| find brands, families and models by name or alias |
| browse, most registered first |
| filter by brand, family, model, engine, fuel, year or type-approval number |
| one variant with the source, licence and status of every field |
| counts, sources, version and the attribution text to cite |
Names and codes come from public datasets, so the server tells clients to treat them as data, never as instructions, and it replaces oversized or non-printable strings. Ask an agent, for instance: "Which diesel Peugeot 3008 variants were registered in 2022, and what is the source of their CO2 value?"
Run it yourself
Python 3.12 or newer.
python -m venv .venv
.venv/Scripts/pip install -e ".[dev]" # Linux/macOS: .venv/bin/pip
# build the dataset: downloads 2019-2025 from the EEA and the RDW (about 4 minutes),
# validates, and exports to ./dist (--skip-rdw skips the RDW cross-check)
python -m pipeline.build --years 2019-2025 --version 0.1.0 --out dist
# serve the REST API (docs at /docs) and the MCP server (at /mcp)
OVD_DB=dist/openvehicle-data.db uvicorn --factory service.app:create_app--years also takes one year (2025) or a list (2021,2023); --prev <folder>
compares with a previous export and writes the changelog. The build stops without
writing anything if validation finds an error.
Docker: the image downloads a pinned data release and checks its SHA-256.
docker build -t openvehicle-data . && docker run -p 10000:10000 openvehicle-dataTests, with the required 100% coverage:
coverage run -m pytest tests/ -q && coverage reportA monthly GitHub Actions job rebuilds the data and opens an issue if anything changed; it never publishes by itself. Deployment (Render, data releases, a custom domain) is described in DEPLOY.md.
Limits
Cars only (category M1). No vans, trucks or motorcycles, no trims or equipment, no prices.
Only vehicles registered in Italy, 2019-2025. Years are registration years.
Names are as the EEA reports them, in upper case. Spellings that differ only by spaces, hyphens or case are merged; a few near-duplicates remain.
Family rules cover 48 brands; the other brands keep one family per model.
Wheelbase and track width exist only for 2019-2022 (the EEA stopped reporting them).
RDW covers about half of the variants (cars sold in the Netherlands), so the rest stay
single_source. CO2 is single-source everywhere: RDW's per-plate values vary too much between cars of one variant to serve as a check.Wikidata ids exist for 56 of 90 brands; models are not linked (Wikidata has duplicate and mixed items for them).
The API has no authentication and no rate limiting of its own: put it behind a proxy that limits requests if you expose it publicly (see DEPLOY.md).
Contributing
Known mistakes in the sources are fixed through small reviewed files, each entry with a written reason, so a proposal is a pull request that edits one of them:
File | Fixes |
| brands spelled several ways, wrong makes, models to merge |
| which models form a family, per brand |
| the Wikidata id of a brand |
Work goes through issues and pull requests to dev; main only receives reviewed
releases. Keep the 100% test coverage. Please do not put personal data in issues.
Documentation
ADR.md: architecture decisions and the measurements behind them (in Italian)
DEPLOY.md: data releases, Render, domain and rate limiting
PRIVACY.md: what the public service processes
NOTICE: sources and their licences
Layout:
core/models and storage ·pipeline/import, validation and export ·service/API and MCP server
Licenses and attribution
Code: Apache-2.0 (LICENSE).
Data: CC BY 4.0 (LICENSE-DATA); sources and their licences in NOTICE.
If you use the data, cite: Data from openvehicle-data
(https://github.com/mirkobechini/openvehicle-data), CC BY 4.0. See NOTICE for upstream
sources. The same text is returned by dataset_info and /meta.
Disclaimer
The data is provided "as is", without warranty of any kind. Verify it before any safety-critical use. This project is not affiliated with any vehicle manufacturer; brand and model names are trademarks of their respective owners.
This server cannot be deployed
Maintenance
Related MCP Connectors
Vehicle data for AI: VIN decoder, automotive specs, stolen checks, valuation and way more.
Auto.dev MCP — wraps the Auto.dev automotive data API (auto.dev)
Let AI agents query data and act across all your business apps via MCP.
VIN decoding and European vehicle data for automotive workflows.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables consultation of vehicle documents from an official source via a single read-only tool, with prepaid per-query pricing and compatibility across MCP clients.MIT
- AlicenseNot gradedqualityCmaintenanceEnables querying the official Brazilian vehicle registration (CRLV-e) system with a single read-only tool. Works with any MCP client, featuring prepaid pay-per-use pricing.MIT
- AlicenseNot gradedqualityCmaintenanceProvides read-only access to official Brazilian vehicle lien (gravame) information, enabling AI agents to query it through a hosted MCP endpoint.MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to query official Brazilian DETRAN vehicle restriction data through a hosted, read-only MCP server with prepaid per-query billing.MIT