Decode VINs, search recalls, complaints, crash ratings, and investigations.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Decode a Vehicle Identification Number to extract make, model, year, body type, engine, safety equipment, and manufacturing details. Pass a single 17-character VIN string, or an array of up to 50 VINs for batch decode. Partial VINs accepted — use * for unknown positions.
A single 17-character VIN (e.g., "1HGCM82633A004352") or an array of up to 50 VINs for batch decode. Partial VINs accepted — use * for unknown positions.
Model year, a whole number. Helps resolve ambiguity for pre-1980 or partial VINs.
Decode a Vehicle Identification Number to extract make, model, year, body type, engine, safety equipment, and manufacturing details. Pass a single 17-character VIN string, or an array of up to 50 VINs for batch decode. Partial VINs accepted — use * for unknown positions.
| Argument | Type | Description |
|---|---|---|
| vin* | any | A single 17-character VIN (e.g., "1HGCM82633A004352") or an array of up to 50 VINs for batch decode. Partial VINs accepted — use * for unknown positions. |
| modelYear | integer | Model year, a whole number. Helps resolve ambiguity for pre-1980 or partial VINs. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"vin"
],
"properties": {
"vin": {
"anyOf": [
{
"type": "string",
"description": "A single VIN string (up to 17 characters, * for unknown positions)"
},
{
"type": "array",
"items": {
"type": "string"
},
"description": "An array of up to 50 VINs for batch decode"
}
],
"description": "A single 17-character VIN (e.g., \"1HGCM82633A004352\") or an array of up to 50 VINs for batch decode. Partial VINs accepted — use * for unknown positions."
},
"modelYear": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Model year, a whole number. Helps resolve ambiguity for pre-1980 or partial VINs."
}
},
"additionalProperties": false
}Get NCAP crash test ratings and ADAS feature availability for a vehicle. Use when the user specifically wants crash test stars, rollover risk, or wants to compare safety features across vehicles. NCAP data available from 1990+, best coverage for 2011+.
| Argument | Type | Description |
|---|---|---|
| make | string | Vehicle manufacturer. Required with model and modelYear when vehicleId is omitted. |
| model | string | Vehicle model. Required with make and modelYear when vehicleId is omitted. |
| modelYear | integer | Model year, a whole number. Required with make and model when vehicleId is omitted. NCAP coverage increases significantly for 2011+. |
| vehicleId | number | Specific NCAP vehicle ID (from prior results). Mutually exclusive with active make/model/modelYear criteria. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"make": {
"type": "string",
"description": "Vehicle manufacturer. Required with model and modelYear when vehicleId is omitted."
},
"model": {
"type": "string",
"description": "Vehicle model. Required with make and modelYear when vehicleId is omitted."
},
"modelYear": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Model year, a whole number. Required with make and model when vehicleId is omitted. NCAP coverage increases significantly for 2011+."
},
"vehicleId": {
"type": "number",
"description": "Specific NCAP vehicle ID (from prior results). Mutually exclusive with active make/model/modelYear criteria."
}
},
"additionalProperties": false
}Get a comprehensive safety profile for a vehicle. Combines NCAP crash test ratings, recalls, and complaint summary into a single response. Use as the default when asked about vehicle safety, reliability, or purchase decisions.
| Argument | Type | Description |
|---|---|---|
| make* | string | Nonblank vehicle manufacturer (e.g., "Toyota", "Ford"). Case-insensitive. |
| model* | string | Nonblank vehicle model (e.g., "Camry", "F-150"). Case-insensitive. |
| modelYear* | integer | Model year, a whole number (e.g., 2020). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"make",
"model",
"modelYear"
],
"properties": {
"make": {
"type": "string",
"minLength": 1,
"description": "Nonblank vehicle manufacturer (e.g., \"Toyota\", \"Ford\"). Case-insensitive."
},
"model": {
"type": "string",
"minLength": 1,
"description": "Nonblank vehicle model (e.g., \"Camry\", \"F-150\"). Case-insensitive."
},
"modelYear": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Model year, a whole number (e.g., 2020)."
}
},
"additionalProperties": false
}Look up valid makes, models, and vehicle types in NHTSA's database. Use to resolve ambiguous vehicle names, find correct make/model spelling, or discover what models a manufacturer produces.
| Argument | Type | Description |
|---|---|---|
| make | string | Make name (required for "models" and "vehicle_types"). Partial match supported. |
| limit | integer | Max results in the returned slice. Defaults to 100; max 200. |
| offset | integer | Pagination offset into the full result list. Defaults to 0. |
| modelYear | integer | Filter models to a specific year, a whole number. Only for "models" operation. |
| operation* | string | "makes" (all NHTSA makes), "models" (models for a make), "vehicle_types" (types for a make), "manufacturer" (manufacturer details). |
| manufacturer | string | Manufacturer name or ID (for "manufacturer" operation). Partial match supported. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"operation"
],
"properties": {
"make": {
"type": "string",
"description": "Make name (required for \"models\" and \"vehicle_types\"). Partial match supported."
},
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "Max results in the returned slice. Defaults to 100; max 200."
},
"offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Pagination offset into the full result list. Defaults to 0."
},
"modelYear": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Filter models to a specific year, a whole number. Only for \"models\" operation."
},
"operation": {
"enum": [
"makes",
"models",
"vehicle_types",
"manufacturer"
],
"type": "string",
"description": "\"makes\" (all NHTSA makes), \"models\" (models for a make), \"vehicle_types\" (types for a make), \"manufacturer\" (manufacturer details)."
},
"manufacturer": {
"type": "string",
"description": "Manufacturer name or ID (for \"manufacturer\" operation). Partial match supported."
}
},
"additionalProperties": false
}Search consumer safety complaints filed with NHTSA for a specific vehicle. Returns a component breakdown over all matching complaints plus a paginated slice of the most recent complaints. Use for common problems, failure patterns, or owner-reported issues.
| Argument | Type | Description |
|---|---|---|
| make* | string | Nonblank vehicle manufacturer. |
| limit | integer | Max complaint narratives to return. Defaults to 20; max 50. componentBreakdown always reflects all matching complaints. |
| model* | string | Nonblank vehicle model. |
| offset | integer | Pagination offset into the filing-date-descending complaint list. Defaults to 0. componentBreakdown is unaffected by pagination. |
| component | string | Filter to a specific component (uppercase, e.g., "ENGINE", "AIR BAGS", "ELECTRICAL SYSTEM"). Matches within comma-separated component lists. Omit to see all. |
| modelYear* | integer | Model year, a whole number. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"make",
"model",
"modelYear"
],
"properties": {
"make": {
"type": "string",
"minLength": 1,
"description": "Nonblank vehicle manufacturer."
},
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Max complaint narratives to return. Defaults to 20; max 50. componentBreakdown always reflects all matching complaints."
},
"model": {
"type": "string",
"minLength": 1,
"description": "Nonblank vehicle model."
},
"offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Pagination offset into the filing-date-descending complaint list. Defaults to 0. componentBreakdown is unaffected by pagination."
},
"component": {
"type": "string",
"description": "Filter to a specific component (uppercase, e.g., \"ENGINE\", \"AIR BAGS\", \"ELECTRICAL SYSTEM\"). Matches within comma-separated component lists. Omit to see all."
},
"modelYear": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Model year, a whole number."
}
},
"additionalProperties": false
}Search NHTSA defect investigations from the ODI flat file — covering Preliminary Evaluations (PE), Engineering Analyses (EA), Defect Petitions (DP), Recall Queries (RQ), Audit Queries (AQ), and additional ODI types. make, model, and component are structured filters against the investigation record's vehicle associations. All filters are ANDed. Use nhtsaId to fetch one investigation by its exact ID — including the investigationId nhtsa_search_recalls returns for a campaign. Investigations may link to a resulting recall campaign via recallCampaign.
| Argument | Type | Description |
|---|---|---|
| make | string | Structured filter — matches against the investigation's associated vehicle makes (e.g., "TOYOTA"). ANDed with other filters. |
| limit | integer | Max investigations to return. Defaults to 20; max 25. The cap is lower than the other paginated tools because a single investigation summary can run several thousand characters and is rendered in full. |
| model | string | Structured filter — matches against the investigation's associated vehicle models. ANDed with other filters. |
| query | string | Free-text search across investigation ID, subject, and summary. |
| offset | integer | Pagination offset into the matching investigations. Defaults to 0. |
| status | string | Filter by status: "O" (Open) or "C" (Closed). Omit to include both. |
Search recall campaigns by vehicle or campaign number. Use for specific recall lookups, recall history for a vehicle, or looking up a known campaign number.
| Argument | Type | Description |
|---|---|---|
| make | string | Vehicle manufacturer. Required with model and modelYear when not using campaignNumber. |
| model | string | Vehicle model. Required with make and modelYear. |
| dateRange | object | Inclusive received-date bounds in YYYY-MM-DD, in either lookup mode. Blank bounds are unset; records without a usable date are excluded only with active bounds. |
| modelYear | integer | Model year, a whole number. Required with make and model. |
| campaignNumber | string | NHTSA campaign number (e.g., "20V682000"). When provided, returns the campaign detail plus every vehicle it covers. Mutually exclusive with make/model/modelYear. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"make": {
"type": "string",
"description": "Vehicle manufacturer. Required with model and modelYear when not using campaignNumber."
},
"model": {
"type": "string",
"description": "Vehicle model. Required with make and modelYear."
},
"dateRange": {
"type": "object",
"properties": {
"after": {
"type": "string",
"description": "Inclusive lower bound, a calendar date in YYYY-MM-DD. Blank means unset."
},
"before": {
"type": "string",
"description": "Inclusive upper bound, a calendar date in YYYY-MM-DD. Blank means unset."
}
},
"description": "Inclusive received-date bounds in YYYY-MM-DD, in either lookup mode. Blank bounds are unset; records without a usable date are excluded only with active bounds."
},
"modelYear": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Model year, a whole number. Required with make and model."
},
"campaignNumber": {
"type": "string",
"description": "NHTSA campaign number (e.g., \"20V682000\"). When provided, returns the campaign detail plus every vehicle it covers. Mutually exclusive with make/model/modelYear."
}
},
"additionalProperties": false
}| nhtsaId | string | Exact NHTSA investigation ID (e.g. "EA23003"), case-insensitive. Fetches that one record — mutually exclusive with every other filter. |
| component | string | Structured filter — matches against the investigation's affected components (e.g., "STEERING"). ANDed with other filters. |
| openDateRange | object | Inclusive opened-date bounds in calendar-valid YYYY-MM-DD. ANDed with other filters; blank bounds are unset. |
| closeDateRange | object | Inclusive closed-date bounds in calendar-valid YYYY-MM-DD. Active bounds exclude investigations without a usable close date, including open investigations. |
| investigationType | string | Filter by ODI investigation type code (the leading letters of the NHTSA ID). Named types: "PE" (Preliminary Evaluation), "EA" (Engineering Analysis), "DP" (Defect Petition), "RQ" (Recall Query), "AQ" (Audit Query). Additional valid codes present in the dataset: "SQ", "EQ", "RP", "ID", "TA", "C". Pass any code exactly as it appears in the investigation ID prefix. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"make": {
"type": "string",
"description": "Structured filter — matches against the investigation's associated vehicle makes (e.g., \"TOYOTA\"). ANDed with other filters."
},
"limit": {
"type": "integer",
"maximum": 25,
"minimum": 1,
"description": "Max investigations to return. Defaults to 20; max 25. The cap is lower than the other paginated tools because a single investigation summary can run several thousand characters and is rendered in full."
},
"model": {
"type": "string",
"description": "Structured filter — matches against the investigation's associated vehicle models. ANDed with other filters."
},
"query": {
"type": "string",
"description": "Free-text search across investigation ID, subject, and summary."
},
"offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Pagination offset into the matching investigations. Defaults to 0."
},
"status": {
"enum": [
"O",
"C"
],
"type": "string",
"description": "Filter by status: \"O\" (Open) or \"C\" (Closed). Omit to include both."
},
"nhtsaId": {
"type": "string",
"description": "Exact NHTSA investigation ID (e.g. \"EA23003\"), case-insensitive. Fetches that one record — mutually exclusive with every other filter."
},
"component": {
"type": "string",
"description": "Structured filter — matches against the investigation's affected components (e.g., \"STEERING\"). ANDed with other filters."
},
"openDateRange": {
"type": "object",
"properties": {
"after": {
"type": "string",
"description": "Inclusive lower bound, a calendar date in YYYY-MM-DD. Blank means unset."
},
"before": {
"type": "string",
"description": "Inclusive upper bound, a calendar date in YYYY-MM-DD. Blank means unset."
}
},
"description": "Inclusive opened-date bounds in calendar-valid YYYY-MM-DD. ANDed with other filters; blank bounds are unset."
},
"closeDateRange": {
"type": "object",
"properties": {
"after": {
"type": "string",
"description": "Inclusive lower bound, a calendar date in YYYY-MM-DD. Blank means unset."
},
"before": {
"type": "string",
"description": "Inclusive upper bound, a calendar date in YYYY-MM-DD. Blank means unset."
}
},
"description": "Inclusive closed-date bounds in calendar-valid YYYY-MM-DD. Active bounds exclude investigations without a usable close date, including open investigations."
},
"investigationType": {
"type": "string",
"description": "Filter by ODI investigation type code (the leading letters of the NHTSA ID). Named types: \"PE\" (Preliminary Evaluation), \"EA\" (Engineering Analysis), \"DP\" (Defect Petition), \"RQ\" (Recall Query), \"AQ\" (Audit Query). Additional valid codes present in the dataset: \"SQ\", \"EQ\", \"RP\", \"ID\", \"TA\", \"C\". Pass any code exactly as it appears in the investigation ID prefix."
}
},
"additionalProperties": false
}