nhtsa-vehicle-safety-mcp-server
Public Hosted Server: https://nhtsa.caseyjhand.com/mcp
Overview
Vehicle safety data from NHTSA: recalls, consumer complaints, NCAP crash ratings, defect investigations, and VIN decoding. Get a full safety picture for any make, model, and year in one call, or decode a VIN.
Tools
Tool | Description |
| Comprehensive safety profile combining crash test ratings, recalls, and complaint summary with per-section availability status. |
| Search recall campaigns by campaign number, by vehicle, or across all campaigns by make, model, model year, and received date. |
| Consumer safety complaints with component breakdown and severity stats. |
| NCAP crash test ratings and ADAS feature availability. |
| Decode VINs for make, model, year, engine, safety equipment, and driver-assistance features (50 decoded per call). |
| Search NHTSA defect investigations (PE, EA, DP, RQ, AQ, and more), newest opened first. |
| Look up makes, models, vehicle types, and manufacturer details from VPIC, and the model names NHTSA's datasets file a vehicle under. |
Related MCP server: Vincario MCP Server
Capability reference
nhtsa_get_vehicle_safety tool
Combines NCAP crash test ratings, recall history, and complaint summary in a single response
Frontal crash, side crash, and rollover ratings per vehicle variant
Recall consequence text plus the do-not-drive, park-outside, and over-the-air-update advisories;
summary,consequence, andremedyare omitted for older campaigns whose record leaves them blankComplaint breakdown by component with crash, fire, injury, and death counts
Returns
sectionStatus(available/partial/unavailable per section) pluswarningsso a partial NHTSA outage is not mistaken for a clean recordWhen recalls or complaints come back empty, a
noticepoints atnhtsa_lookup_vehicleswithoperation="dataset_models", because NHTSA can file one vehicle under different model names in each dataset
nhtsa_search_recalls tool
Three modes:
campaignNumber;make+model+modelYeartogether; or a broad search with any other combination ofmake,model,modelYear, anddateRange.campaignNumberis mutually exclusive with the vehicle fieldsCampaign lookups return every make/model the campaign covers, plus the ODI investigation that preceded it; a 6-character number (e.g.,
00V419) returns every campaign it coversBroad search returns campaigns newest received date first with an exact
totalCount, up to 50 per page (default 20) withlimitandoffset, and a largerlimitis lowered to 50 with anotice; both are rejected with the other two modes. A campaign matches when one of its vehicle records carries every vehicle filter, compared against whole make and model names, ignoring caseNHTSA may file a vehicle's recalls under a series name or a base name; search both. A broad search's received date can fall one day before the date the other modes report for the same campaign
Optional inclusive
dateRangebounds (after/before, calendar-validYYYY-MM-DD) apply in every mode; blank bounds are unsetIncludes do-not-drive advisories, park-outside warnings, and OTA update availability (never set by a broad search)
nhtsa_search_complaints tool
Component breakdown covers every matching complaint regardless of pagination; up to 50 complaint narratives per page (default 20), offset pagination, sorted by filing date descending. A larger
limitis lowered to 50 with anoticenaming the nextoffset(seeNHTSA_CLAMP_LIMITS)Optional
componentfilter matches case-insensitively within each component name a complaint lists (e.g., "ENGINE", "AIR BAGS"); component names can themselves contain ", " (e.g., "SERVICE BRAKES, HYDRAULIC")Every component line includes crash, fire, injury, and death totals, including zeros; individual complaints preserve fields NHTSA actually reported
An incident date NHTSA reported that the complaint's own filing date or model year rules out is disclosed as
unreliableIncidentDaterather than served as the incident date
nhtsa_get_safety_ratings tool
Accepts either make + model + modelYear, or a follow-up
vehicleIdfrom an earlier result; combining the modes is rejectedFrontal crash, side crash (barrier + pole), and rollover ratings, plus ESC/forward-collision/lane-departure ADAS availability
Per-record complaint, recall, and investigation counts are variant-scoped — not vehicle-level totals
NCAP coverage starts at 1990, most complete for 2011+ model years
nhtsa_decode_vin tool
One VIN, or several in an array or in one string separated by spaces, semicolons, or commas; partial VINs accepted using
*for unknown positions, each as its own entryA call decodes up to 50 VINs and accepts up to 500; the rest come back in
deferredVinsto pass back asvin.VIN,YYYYgives one VIN its own model year; optionalmodelYearcovers the othersA blank entry, a character other than a letter, digit, or
*, or a VIN over 17 characters is rejected before decoding (empty_vin_list,invalid_vin)Safety equipment includes VPIC's driver-assistance features (automatic emergency braking, lane keeping, blind spot warning, backup camera, adaptive cruise control, and others);
Optionalmeans the configuration offers the feature, not that this vehicle has itPreserves sparse VPIC fields instead of filling missing data with placeholders; every result carries VPIC's own
errorCode/errorTextdecode-quality signal, including the clean "0" case
nhtsa_search_investigations tool
Investigation types: Preliminary Evaluations (PE), Engineering Analyses (EA), Defect Petitions (DP), Recall Queries (RQ), Audit Queries (AQ), and additional ODI codes (SQ, EQ, RP, and others)
Free-text search across investigation IDs, subjects, and summaries, plus structured
make,model,modelYear, andcomponentfilters — all ANDed.make,model, andmodelYearmust all match the same vehicle association; an investigation with no model year never matches amodelYearResults are ordered newest-opened first. Rows list every linked
manufacturersandrecallCampaignsentrySearch rows omit
summary; setincludeSummary: trueto include it, or fetch one record withnhtsaId, which always returns itInclusive
openDateRangeandcloseDateRangebounds (after/before, calendar-validYYYY-MM-DD) filter before counting and pagination; active bounds exclude records without the corresponding usable datenhtsaIdfetches one investigation by its exact ID, mutually exclusive with the other filters — the reverse of the recall link, closing the campaign-to-investigation round tripSourced from NHTSA's ODI bulk file (
FLAT_INV.zip), loaded on first use and cached for 24 hoursUp to 50 investigations per page (default 20), offset pagination; a larger
limitis lowered to 50 with anotice
nhtsa_lookup_vehicles tool
Five operations:
makes,models,vehicle_types,manufacturer,dataset_models—models,vehicle_types, andmanufacturermatch partial namesdataset_models(requiresmakeandmodelYear) lists the model names NHTSA's complaint, NCAP, and VPIC lists carry, each taggedlistedByproducts,ncap, orvpic. It takes the full make name (e.g., "Chevrolet"). Use it when a recall, complaint, or rating search comes back empty, then search under each namemodelscan be filtered by year;modelsandvehicle_typesboth requiremakeEach operation rejects inactive filters:
makesaccepts none,modelsanddataset_modelsacceptmake/modelYear,vehicle_typesacceptsmake, andmanufactureracceptsmanufacturer. Optional blank strings are unset; operation-required make/manufacturer names must be nonblankUp to 200 results per page (default 100), offset pagination; a larger
limitis lowered to 200 with anoticemanufacturerlookups stop at a 500-record ceiling and disclosetruncatedwhen more may exist — VPIC publishes no match total
Features
Built on @cyanheads/mcp-ts-core: stdio and Streamable HTTP transports, pluggable auth (none / jwt / oauth), swappable storage (in-memory, filesystem, Supabase, Cloudflare KV/R2/D1), structured logging with optional OpenTelemetry tracing.
NHTSA-specific:
Type-safe client wrapping four NHTSA JSON APIs with retry logic and sparse-field normalization, plus a streaming parser for NHTSA's investigation and recall bulk files
Investigation and recall indexes cached for 24 hours; the bulk files load one at a time, and each load (waiting its turn, downloading, and parsing; both recall files count as one load) must finish within 120 s
Published
nhtsa-vehicle-safety-guideskill (skill://nhtsa-vehicle-safety-guide/SKILL.md) with the identifier chains and gates for merging results across model names, make versus manufacturer, model year versus received date, and what an empty or Not Rated result provesNo API key required — all NHTSA APIs are public
Agent-friendly output:
Provenance: every tool echoes
effectiveQueryin its enrichment block, so callers can verify exactly what was searchedGraceful partial failure:
nhtsa_get_vehicle_safetyreturnssectionStatusper section pluswarnings, so a partial NHTSA outage isn't mistaken for a clean safety recordDiscriminated outputs:
unreliableIncidentDate(complaints), VIN decodeerrorCode/errorText, and manufacturer-lookuptruncateddisclose data-quality limits rather than silently omitting or fabricating values
Getting started
Public Hosted Instance
A public instance is available at https://nhtsa.caseyjhand.com/mcp — no installation required. Point any MCP client at it via Streamable HTTP:
{
"mcpServers": {
"nhtsa-vehicle-safety-mcp-server": {
"type": "streamable-http",
"url": "https://nhtsa.caseyjhand.com/mcp"
}
}
}Self-Hosted / Local
Add the following to your MCP client configuration file:
{
"mcpServers": {
"nhtsa-vehicle-safety-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/nhtsa-vehicle-safety-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}Or with npx (no Bun required):
{
"mcpServers": {
"nhtsa-vehicle-safety-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/nhtsa-vehicle-safety-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}Or with Docker:
{
"mcpServers": {
"nhtsa-vehicle-safety-mcp-server": {
"type": "stdio",
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/nhtsa-vehicle-safety-mcp-server:latest"]
}
}
}For Streamable HTTP, set the transport and start the server:
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcpPrerequisites
Bun v1.4.0 or higher (or Node.js >= 24.0.0)
Installation
Clone the repository:
git clone https://github.com/cyanheads/nhtsa-vehicle-safety-mcp-server.gitNavigate into the directory:
cd nhtsa-vehicle-safety-mcp-serverInstall dependencies:
bun installConfigure environment (optional):
cp .env.example .env
# edit .env to override transport, auth, or storage defaults — no API key requiredConfiguration
No API keys required — all NHTSA APIs are public.
Variable | Description | Default |
| Transport: |
|
| HTTP server host. |
|
| HTTP server port. |
|
| HTTP endpoint path. |
|
| Auth mode: |
|
| HTTP session posture: |
|
| Lower an over-maximum |
|
| Log level (RFC 5424). |
|
| Log each failed tool call's arguments and result, redacted by key name and capped at |
|
| Enable OpenTelemetry instrumentation (spans, metrics, completion logs). |
|
See .env.example for the full list of optional overrides.
Running the server
Local development
Build and run:
# One-time build bun run rebuild # Run the built server bun run start:stdio # or bun run start:httpRun checks and tests:
bun run devcheck # Lint, format, typecheck, security bun run test # Vitest test suite bun run lint:mcp # Validate MCP definitions against spec
Docker
docker build -t nhtsa-vehicle-safety-mcp-server .
docker run --rm -p 3010:3010 nhtsa-vehicle-safety-mcp-serverThe Dockerfile defaults to HTTP transport and logs to /var/log/nhtsa-vehicle-safety-mcp-server; it restates the stateless session mode the server already declares. OpenTelemetry peer dependencies are installed by default — build with --build-arg OTEL_ENABLED=false to omit them.
Project structure
Directory | Purpose |
|
|
| Server configuration parsed from the environment ( |
| Tool definitions ( |
| Page-size and VIN-batch caps shared by the tools. |
| NHTSA API client, bulk-file loader, investigation and recall indexes, and field normalization. |
| Published |
| Unit and integration tests mirroring |
Development guide
See CLAUDE.md for development guidelines and architectural rules. The short version:
Handlers throw, framework catches — no
try/catchin tool logicUse
ctx.logfor request-scoped loggingOne tool per file,
nhtsa_prefix for every tool name, registered increateApp()Validate raw NHTSA responses → normalize to domain types → return the output schema; never fabricate a field NHTSA didn't provide
Data sources
All data comes from NHTSA's public APIs and bulk files:
Recalls API —
api.nhtsa.gov/recallsComplaints API —
api.nhtsa.gov/complaints;dataset_modelsalso reads its model-name list atapi.nhtsa.gov/products/vehicle/modelsSafety Ratings API —
api.nhtsa.gov/SafetyRatingsInvestigations bulk file —
static.nhtsa.gov/odi/ffdd/inv/FLAT_INV.zipRecall bulk files —
static.nhtsa.gov/odi/ffdd/rcl/FLAT_RCL_POST_2010.zipandFLAT_RCL_PRE_2010.zip, used by broadnhtsa_search_recallssearchesVPIC API —
vpic.nhtsa.dot.gov/api/vehicles
Contributing
Issues are welcome. Run checks and tests before submitting:
bun run devcheck
bun run testLicense
Apache-2.0 — see LICENSE for details.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
This server cannot be deployed
Maintenance
Related MCP Connectors
Decodes US VINs and looks up open NHTSA safety recall campaigns for a vehicle.
VIN recall API + MCP: VIN decode + every NHTSA recall, Do Not Drive first. $19/mo; 50 free/day.
NHTSA MCP — wraps the NHTSA vPIC (Vehicle Product Information Catalog) API (free, no auth)…
Vehicle safety recalls, complaints, and crash data from NHTSA
Related MCP Servers
- AlicenseAqualityCmaintenanceConnects Claude to NHTSA vehicle safety data, enabling VIN decoding, recall checks, crash-test ratings, and consumer complaints via natural language.5MIT

Vincario MCP Serverofficial
FlicenseNot gradedqualityDmaintenanceEnables AI assistants to decode VINs, check stolen vehicle databases, and retrieve market valuations through natural language.2-- AlicenseNot gradedqualityCmaintenanceEnables querying U.S. vehicle safety and specification data, including VIN decoding, recalls, complaints, investigations, and crash test ratings.335 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables MCP clients to look up US vehicle-safety data read-only — decoding VINs, and retrieving recalls, owner complaints, and 5-Star NCAP safety ratings by make, model, and year through NHTSA's public APIs.MIT