nhtsa-vehicle-safety-mcp-server-216ddf — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited nhtsa-vehicle-safety-mcp-server-216ddf (Plugin) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
<div align="center"> <h1>@cyanheads/nhtsa-vehicle-safety-mcp-server</h1> <p><b>Decode VINs, search recalls, complaints, crash ratings, and investigations via MCP. STDIO or Streamable HTTP.</b> <div>7 Tools</div> </p> </div>
<div align="center">
</div>
<div align="center">
</div>
<div align="center">
Public Hosted Server: https://nhtsa.caseyjhand.com/mcp
</div>
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.
| Tool | Description |
|---|---|
nhtsa_get_vehicle_safety | Comprehensive safety profile combining crash test ratings, recalls, and complaint summary with per-section availability status. |
nhtsa_search_recalls | Search recall campaigns by vehicle or campaign number with optional date filtering. |
nhtsa_search_complaints | Consumer safety complaints with component breakdown and severity stats. |
nhtsa_get_safety_ratings | NCAP crash test ratings and ADAS feature availability. |
nhtsa_decode_vin | Decode VINs for make, model, year, engine, safety equipment (single or batch up to 50). |
nhtsa_search_investigations | Search NHTSA defect investigations (PE, EA, DP, RQ, AQ, and more) with cached index. |
nhtsa_lookup_vehicles | Look up valid makes, models, vehicle types, and manufacturer details from VPIC. |
nhtsa_get_vehicle_safety <sub>tool</sub>sectionStatus (available/partial/unavailable per section) plus warnings so a partial NHTSA outage is not mistaken for a clean recordnhtsa_search_recalls <sub>tool</sub>dateRange bounds (after/before, calendar-valid YYYY-MM-DD) apply in both modes; blank bounds are unsetnhtsa_search_complaints <sub>tool</sub>component filter matches within comma-separated component lists (e.g., "ENGINE", "AIR BAGS")unreliableIncidentDate rather than served as the incident datenhtsa_get_safety_ratings <sub>tool</sub>vehicleId from an earlier result; combining the modes is rejectednhtsa_decode_vin <sub>tool</sub>* for unknown positions; any blank entry rejects the whole batch before decodingmodelYear helps disambiguate pre-1980 or partial VINserrorCode/errorText decode-quality signal, including the clean "0" casenhtsa_search_investigations <sub>tool</sub>openDateRange and closeDateRange bounds (after/before, calendar-valid YYYY-MM-DD) filter before counting and pagination; active bounds exclude records without the corresponding usable datenhtsaId fetches one investigation by its exact ID, mutually exclusive with the other filters — the reverse of the recall link, closing the campaign-to-investigation round tripFLAT_INV.zip) — concurrent cold queries share one streaming load with a two-minute deadline. Cancelling one query leaves other callers running; successful loads remain cached for 24 hours from completionnhtsa_lookup_vehicles <sub>tool</sub>makes, models, vehicle_types, manufacturer — partial match supported on make/manufacturer namesmodels can be filtered by year; models and vehicle_types both require makemakes accepts none, models accepts make/modelYear, vehicle_types accepts make, and manufacturer accepts manufacturer. Optional blank strings are unset; operation-required make/manufacturer names must be nonblankmanufacturer lookups stop at a 500-record ceiling and disclose truncated when more may exist — VPIC publishes no match totalBuilt 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:
Agent-friendly output:
effectiveQuery in its enrichment block, so callers can verify exactly what was searchednhtsa_get_vehicle_safety returns sectionStatus per section plus warnings, so a partial NHTSA outage isn't mistaken for a clean safety recordunreliableIncidentDate (complaints), VIN decode errorCode/errorText, and manufacturer-lookup truncated disclose data-quality limits rather than silently omitting or fabricating valuesA 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"
}
}
}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/mcpgit clone https://github.com/cyanheads/nhtsa-vehicle-safety-mcp-server.gitcd nhtsa-vehicle-safety-mcp-serverbun installcp .env.example .env
# edit .env to override transport, auth, or storage defaults — no API key requiredNo API keys required — all NHTSA APIs are public.
| Variable | Description | Default |
|---|---|---|
MCP_TRANSPORT_TYPE | Transport: stdio or http. | stdio |
MCP_HTTP_HOST | HTTP server host. | 127.0.0.1 |
MCP_HTTP_PORT | HTTP server port. | 3010 |
MCP_HTTP_ENDPOINT_PATH | HTTP endpoint path. | /mcp |
MCP_AUTH_MODE | Auth mode: none, jwt, or oauth. | none |
MCP_SESSION_MODE | HTTP session posture: auto, stateful, or stateless. The server declares stateless in code — it keeps no per-session state — and this variable overrides that. | stateless |
MCP_LOG_LEVEL | Log level (RFC 5424). | info |
LOG_TOOL_FAILURE_PAYLOADS | Log each failed tool call's arguments and result, redacted by key name and capped at LOG_TOOL_FAILURE_PAYLOAD_MAX_BYTES (default 16384). A secret inside a free-form value is not redacted. | false |
OTEL_ENABLED | Enable OpenTelemetry instrumentation (spans, metrics, completion logs). | false |
See .env.example for the full list of optional overrides.
# One-time build
bun run rebuild
# Run the built server
bun run start:stdio
# or
bun run start:http bun run devcheck # Lint, format, typecheck, security
bun run test # Vitest test suite
bun run lint:mcp # Validate MCP definitions against specdocker 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.
| Directory | Purpose |
|---|---|
src/index.ts | createApp() entry point — registers tools and inits the NHTSA service. |
src/mcp-server/tools/definitions/ | Tool definitions (*.tool.ts). |
src/services/nhtsa/ | NHTSA API client, ODI bulk-file parser, and field normalization. |
tests/ | Unit and integration tests mirroring src/. |
See CLAUDE.md for development guidelines and architectural rules. The short version:
try/catch in tool logicctx.log for request-scoped loggingnhtsa_ prefix for every tool name, registered in createApp()All data comes from NHTSA's public APIs and bulk files:
api.nhtsa.gov/recallsapi.nhtsa.gov/complaintsapi.nhtsa.gov/SafetyRatingsstatic.nhtsa.gov/odi/ffdd/inv/FLAT_INV.zipvpic.nhtsa.dot.gov/api/vehiclesIssues are welcome. Run checks and tests before submitting:
bun run devcheck
bun run testApache-2.0 — see LICENSE for details.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.