nhtsa-vehicle-safety-mcp-server
Server Details
Decode VINs, search recalls, complaints, crash ratings, and investigations.
- Status
- Healthy
- Uptime
- 99.9% over 82 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- cyanheads/nhtsa-vehicle-safety-mcp-server
- GitHub Stars
- 3
- Server Listing
- nhtsa-vehicle-safety-mcp-server
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 7 tools
Most tools target distinct NHTSA data sources or actions (VIN decode, catalog lookup, complaints, investigations, recalls). The main overlap is between nhtsa_get_safety_ratings and nhtsa_get_vehicle_safety, where the latter is a superset; descriptions clarify when to use each, but the boundary is still somewhat fuzzy.
All tools follow a consistent snake_case pattern with the nhtsa_ prefix and a verb_noun structure (decode_vin, get_safety_ratings, search_complaints, etc.). No deviations or mixed conventions.
Seven tools is well-scoped for a vehicle safety data server, covering distinct core operations without redundancy. Each tool earns its place by addressing a specific NHTSA dataset or workflow.
The surface covers VIN decoding, safety ratings, complaints, investigations, recalls, vehicle catalog lookup, and a combined safety profile—most major NHTSA datasets. Minor gaps exist, such as direct recall lookup by VIN or manufacturer communications, but agents can work around these by using make/model/year after decoding a VIN.
Available Tools
7 toolsnhtsa_decode_vinNhtsa Decode VinARead-onlyInspect
Decode Vehicle Identification Numbers to extract make, model, year, body type, engine, manufacturing details, and safety equipment: airbags, stability and braking systems, tire pressure monitoring, and the driver-assistance features VPIC records for the configuration, such as automatic emergency braking, lane keeping, blind spot warning, backup camera, and adaptive cruise control. Pass one VIN, or several as an array or in one string separated by spaces, semicolons, or commas. Partial VINs are accepted, with * for unknown positions; send each partial VIN as its own string or array entry. A call decodes up to 50 VINs; VINs past the first 50 come back in deferredVins to pass back as vin.
| Name | Required | Description | Default |
|---|---|---|---|
| vin | Yes | One VIN or several. A VIN is up to 17 letters, digits, or * for an unknown position (e.g., "1HGCM82633A004352"). Separate several VINs in one string with spaces, semicolons, or commas, or list them in an array; a string naming several VINs takes only full 17-character VINs, so send a partial VIN alone. Append ,YYYY to give one VIN its own model year (e.g., "1HGCM82633A004352,2003"). A call decodes up to 50 VINs and takes at most 500; VINs past the first 50 come back in deferredVins. | |
| modelYear | No | Model year, a whole number, for every VIN without its own ,YYYY. Helps resolve ambiguity for pre-1980 or partial VINs. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| notice | No | Present when VINs past the first 50 were deferred to deferredVins, or when VINs decoded with VPIC warnings (errorCode != 0) — check errorCode/errorText per vehicle. |
| vehicles | No | Decoded vehicle information per VIN |
| deferredVins | No | VINs past the first 50, in the order sent, present when the call named more VINs than it decodes. Each carries its model year as VIN,YYYY when one applied; pass this list as vin to decode them. |
| effectiveQuery | No | Number of VINs named and the path taken (single or batch), with how many were decoded and deferred when VINs were deferred. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond readOnlyHint=true, the description discloses non-obvious behavior: a 50-VIN soft cap, that overflow returns in deferredVins to be re-submitted, and the 500-entry array limit. These are real operational constraints an agent would otherwise discover only by trial. It does not discuss error behavior for malformed VINs, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The capability statement is front-loaded and the batching limits follow logically. The middle sentence on separators and partial VINs duplicates the schema almost verbatim, which is redundant but not confusing, so the text stays readable despite mild padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not explain return values, and it still flags the one output field (deferredVins) that changes caller behavior. Batch limits, partial-VIN handling, and the modelYear override are all covered, leaving only cross-tool routing unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents the string/array union, delimiters, the ',YYYY' year suffix, and the modelYear fallback. The description largely restates those mechanics; its only added semantic is the deferredVins round-trip, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description leads with a specific verb and resource ('Decode Vehicle Identification Numbers') and enumerates the returned data categories (make, model, year, engine, safety equipment), which is far more informative than the title alone. It does not explicitly contrast itself with siblings like nhtsa_lookup_vehicles, so sibling differentiation is only implicit through the VIN-specific framing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear operational guidance: one VIN or a batch, delimiters for multi-VIN strings, partial VINs with '*', and the rule that a partial VIN cannot be embedded in a multi-VIN string. What is missing is any when-to-use routing versus the sibling lookup/safety tools, so it describes how to call rather than when to choose it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nhtsa_get_safety_ratingsNhtsa Get Safety RatingsARead-onlyInspect
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+.
| Name | Required | Description | Default |
|---|---|---|---|
| make | No | Vehicle manufacturer. Required with model and modelYear when vehicleId is omitted. | |
| model | No | Vehicle model. Required with make and modelYear when vehicleId is omitted. | |
| modelYear | No | Model year, a whole number. Required with make and model when vehicleId is omitted. NCAP coverage increases significantly for 2011+. | |
| vehicleId | No | Specific NCAP vehicle ID (from prior results). Mutually exclusive with active make/model/modelYear criteria. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| notice | No | Guidance when no NCAP ratings are found — coverage notes, adjacent years, and the lookup listing the model names NCAP files the vehicle under. |
| ratings | No | Safety ratings per vehicle variant |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation readOnlyHint=true already establishes that this is a safe read operation. Beyond that, the description adds useful behavioral context about data coverage: NCAP data starts in 1990, coverage is best from 2011 onward, and ADAS feature availability is included. It does not discuss pagination or error behavior, but an output schema is present, so return-format details are less critical.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with purpose, followed by use criteria and then a coverage caveat. Every sentence earns its place, and there is no redundant or filler wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only four parameters, an output schema, full schema coverage, and a read-only annotation, the definition is nearly complete. The main remaining gap is that it does not clarify how vehicleId relates to the make/model/year alternative in prose, leaving that relationship to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents each parameter's meaning and its requirement relationships. The description adds a coverage note for modelYear, but the schema itself also states that NCAP coverage increases for 2011+. Therefore, it adds little meaning beyond what the schema provides, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: it retrieves NCAP crash-test ratings and ADAS feature availability for a vehicle. It clearly states the data domain, but it does not distinguish this tool from the sibling nhtsa_get_vehicle_safety, which sounds closely related and could easily be confused with it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear conditions for use: when the user wants crash test stars, rollover risk, or a comparison of safety features across vehicles. What it lacks is an explicit exclusion or a referral to an alternative sibling when the request is not about NCAP safety ratings, so the agent must infer the boundary itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nhtsa_get_vehicle_safetyNhtsa Get Vehicle SafetyARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| make | Yes | Nonblank vehicle manufacturer (e.g., "Toyota", "Ford"). Case-insensitive. | |
| model | Yes | Nonblank vehicle model (e.g., "Camry", "F-150"). Case-insensitive. | |
| modelYear | Yes | Model year, a whole number (e.g., 2020). |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| notice | No | Guidance when no section matched the vehicle, or when recalls or complaints matched nothing while another section had records. NHTSA can file one vehicle under different model names in each dataset, so the notice names the lookup that lists them. |
| recalls | No | All recalls for this vehicle when available |
| warnings | No | Warnings about sections that could not be loaded from NHTSA |
| safetyRatings | No | Crash test ratings per vehicle variant (e.g., FWD vs AWD) |
| sectionStatus | No | Availability of each data section in this response |
| effectiveQuery | No | The vehicle queried, as "make model modelYear". |
| complaintSummary | No | Summary of consumer complaints |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only supply readOnlyHint, and the description adds real value beyond that by disclosing the fan-out behavior — three upstream datasets merged into one response — which sets expectations for latency and payload shape. It stops short of saying what happens when one source has no data for a given make/model/year.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with zero filler: capability first, composition second, selection rule last. Nothing repeats the name or title and nothing is buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not explain return values, and it covers purpose, aggregation scope, and usage. The remaining gap is failure/partial-coverage behavior — an agent cannot tell whether an empty recalls section means 'no recalls' or 'lookup failed.'
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters are fully documented in the schema (case-insensitivity, nonblank constraints, year format), so the description correctly leaves them alone. It adds no interpretation of its own, such as whether modelYear must be a year the vehicle was actually produced.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb plus resource ('Get a comprehensive safety profile for a vehicle') and it enumerates exactly what is aggregated: NCAP crash test ratings, recalls, and complaint summary. That enumeration implicitly separates it from the granular siblings (nhtsa_get_safety_ratings, nhtsa_search_recalls, nhtsa_search_complaints), though no sibling is named outright.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear selection rule: 'Use as the default when asked about vehicle safety, reliability, or purchase decisions.' That tells the agent when this tool wins, but it never states when NOT to use it — e.g., when the caller only wants raw recall records or complaint text, where the narrower siblings would fit better.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nhtsa_lookup_vehiclesNhtsa Lookup VehiclesARead-onlyInspect
Look up makes, models, vehicle types, and manufacturer details in NHTSA's VPIC catalog, or list the model names NHTSA's datasets file a make and model year under. VPIC names often differ from the names complaints and NCAP ratings use (Silverado vs SILVERADO 1500), and a vehicle's recalls can be split between a series name and a base name. When a recall, complaint, or rating search comes back empty or partial, call operation="dataset_models" with make and modelYear, then search under each name it lists. No list enumerates recall names, so search recalls under both the series name and the base name.
| Name | Required | Description | Default |
|---|---|---|---|
| make | No | Make name (required for "models", "vehicle_types", and "dataset_models"). VPIC matches partial names in "models" and "vehicle_types"; "dataset_models" takes the full make name (e.g., "Chevrolet"). | |
| limit | No | Results per page. Defaults to 100; at most 200 per page. | |
| offset | No | Pagination offset into the full result list. Defaults to 0. | |
| modelYear | No | Model year, a whole number. Filters "models" to that year; required for "dataset_models". Not accepted by other operations. | |
| operation | Yes | "makes" (all VPIC makes), "models" (VPIC models for a make), "vehicle_types" (types for a make), "manufacturer" (manufacturer details), "dataset_models" (the model names NHTSA's complaint, NCAP, and VPIC lists carry for a make and model year; requires make and modelYear). | |
| manufacturer | No | Manufacturer name or ID (for "manufacturer" operation). Partial match supported. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | No | Maximum manufacturer records a single lookup retrieves. |
| error | No | Present when the call failed. Absent on success. |
| limit | No | Pagination limit used for this response |
| makes | No | Results for "makes" operation |
| shown | No | Manufacturer records retrieved before pagination, when the cap was reached. |
| models | No | Results for "models" operation |
| notice | No | Guidance when the result set is empty, the page is out of bounds, or limit was lowered to the page maximum. |
| offset | No | Pagination offset used for this response |
| returned | No | Number of results in the returned slice |
| operation | No | The operation that was performed |
| truncated | No | True when the "manufacturer" lookup stopped at its retrieval cap and further matches may exist upstream. |
| totalCount | No | Results retrieved before pagination. For "manufacturer" this is capped — check the truncated field, since VPIC reports no match total. |
| vehicleTypes | No | Results for "vehicle_types" operation |
| datasetModels | No | Results for "dataset_models" operation, sorted by name |
| manufacturers | No | Results for "manufacturer" operation |
| effectiveQuery | No | The operation with key args, e.g. "models make=Toyota year=2020". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already covers the safety profile, and the description adds real domain behavior on top: VPIC names diverge from complaint/NCAP names (Silverado vs SILVERADO 1500) and recall results can be split across a series name and a base name. It stops short of describing result shape, empty-response semantics, or pagination behavior, which the schema and output schema partly cover, so it is strong but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the capability, then the naming caveat, then the concrete recovery workflow. Every sentence carries information; the only mild cost is density, since the naming-mismatch and recall-splitting points are packed into single long clauses.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter, five-operation lookup tool with full schema coverage, annotations, and an output schema, the description supplies exactly the missing piece: the cross-dataset naming pitfall and the follow-up search procedure. Nothing an agent needs to invoke it correctly or interpret a thin result is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including per-operation requirements for make, modelYear, and manufacturer, so the baseline is 3. The description reinforces why make and modelYear matter for dataset_models and the full-vs-partial make distinction, but it does not add syntax, defaults, or constraints beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource set: looking up makes, models, vehicle types and manufacturer details in NHTSA's VPIC catalog, plus a second mode listing the model names NHTSA datasets use for a make/year. It also distinguishes this from the complaint and NCAP siblings by naming the naming mismatch between them, so an agent can tell which tool to reach for without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit conditional trigger: when a recall, complaint, or rating search comes back empty or partial, call operation="dataset_models" with make and modelYear, then re-search under each name returned. It also states an exclusion-like rule for recalls (search both series name and base name, since no list enumerates recall names), which is genuine when-to-use and when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nhtsa_search_complaintsNhtsa Search ComplaintsARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| make | Yes | Nonblank vehicle manufacturer. | |
| limit | No | Complaint narratives per page. Defaults to 20; at most 50 per page. componentBreakdown always reflects all matching complaints. | |
| model | Yes | Nonblank vehicle model. | |
| offset | No | Pagination offset into the filing-date-descending complaint list. Defaults to 0. componentBreakdown is unaffected by pagination. | |
| component | No | Filter to complaints naming a component (e.g., "ENGINE", "AIR BAGS", "SERVICE BRAKES, HYDRAULIC"). Matches case-insensitively within each component name a complaint lists, so "BRAKES" matches "SERVICE BRAKES, HYDRAULIC". Omit to see all. | |
| modelYear | Yes | Model year, a whole number. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| limit | No | Pagination limit used for this page |
| notice | No | Guidance when no complaints match the vehicle (NHTSA may file them under another model name), when the component filter excludes every complaint, when the requested page overshoots the result set, or when limit was lowered to the page maximum. |
| offset | No | Pagination offset used for this page |
| returned | No | Number of complaints in this page |
| complaints | No | Paginated slice of the most recent complaints, date-descending |
| totalCount | No | Total complaints matching criteria |
| effectiveQuery | No | "make model modelYear" with optional component filter applied, as the server used it. |
| componentBreakdown | No | Complaints grouped by component, sorted by frequency |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered and the description only needs to add operational context. It does contribute the sorting behavior ('most recent complaints') and the distinction between aggregate and paginated results, but the pagination invariants it states (componentBreakdown unaffected by pagination) largely duplicate what the schema already documents.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with purpose and return shape, followed by usage guidance. Nothing is redundant or padded relative to the information conveyed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and full parameter documentation in the schema, the description covers what remains: what the tool retrieves, how results are shaped/ordered, and when to reach for it. Only the explicit relationship to the recall and investigation siblings is left to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter including the non-obvious 'component' fuzzy-match behavior is already documented in the schema. The description adds no parameter-level meaning beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('Search consumer safety complaints filed with NHTSA') plus a scoping constraint ('for a specific vehicle'), and even states the return shape (component breakdown + paginated complaint slice). It distinguishes itself implicitly from siblings like nhtsa_search_recalls and nhtsa_search_investigations by naming the complaints corpus, though it doesn't call them out by name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context for when this is the right tool ('common problems, failure patterns, or owner-reported issues'), which routes an agent appropriately versus recall/investigation lookups. It stops short of explicit exclusions or naming the alternative sibling tools for overlapping needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nhtsa_search_investigationsNhtsa Search InvestigationsARead-onlyInspect
Search NHTSA defect investigations — Preliminary Evaluations (PE), Engineering Analyses (EA), Defect Petitions (DP), Recall Queries (RQ), Audit Queries (AQ), and additional ODI types — newest-opened first. make, model, and modelYear match the investigation's vehicle associations, all on the same association; component matches its affected components. All filters are ANDed. Search rows leave out the full summary unless includeSummary is true. Use nhtsaId to fetch one investigation by its exact ID with its full summary — including the investigationId nhtsa_search_recalls returns for a campaign. recallCampaigns lists the recall campaigns NHTSA links to an investigation; pass any to nhtsa_search_recalls as campaignNumber.
| Name | Required | Description | Default |
|---|---|---|---|
| make | No | Vehicle make on one of the investigation's vehicle associations (e.g., "TOYOTA"), matched case-insensitively within the name. With model or modelYear, all must match the same association. | |
| limit | No | Investigations per page. Defaults to 20; at most 50 per page. | |
| model | No | Vehicle model on one of the investigation's vehicle associations, matched case-insensitively within the name. With make or modelYear, all must match the same association. | |
| query | No | Free-text search across investigation ID, subject, and summary. | |
| offset | No | Pagination offset into the matching investigations, ordered newest-opened first: open date descending, then ID descending, undated last. Defaults to 0. | |
| status | No | Filter by status: "O" (Open) or "C" (Closed). Omit to include both. | |
| nhtsaId | No | Exact NHTSA investigation ID (e.g. "EA23003"), case-insensitive. Fetches that one record with its full summary — mutually exclusive with every other filter. | |
| component | No | Structured filter — matches against the investigation's affected components (e.g., "STEERING"). ANDed with other filters. | |
| modelYear | No | Model year, a whole number. Matches when one vehicle association carries this year together with every supplied make and model; an investigation with no model year on any association never matches. | |
| openDateRange | No | Inclusive opened-date bounds in calendar-valid YYYY-MM-DD. ANDed with other filters; blank bounds are unset. | |
| closeDateRange | No | Inclusive closed-date bounds in calendar-valid YYYY-MM-DD. Active bounds exclude investigations without a usable close date, including open investigations. | |
| includeSummary | No | Include each investigation's full summary in search rows. Off by default: rows carry the subject, dates, vehicle associations, and campaign links, and nhtsaId mode always returns the summary. A summary can run several thousand characters, so pair this with a small limit. | |
| investigationType | No | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| limit | No | Pagination limit used for this page |
| notice | No | Guidance when no investigations match the filters, when the requested page overshoots the result set, when limit was lowered to the page maximum, or when search rows omit summaries. |
| offset | No | Pagination offset used for this page |
| returned | No | Number of investigations in this page |
| totalCount | No | Total matching investigations |
| effectiveQuery | No | Applied filters as a readable string, e.g. make="Ford", status="O". |
| investigations | No | Matching investigations |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only supply readOnlyHint, so the description carries the rest and does so well: it discloses that search rows omit the full summary unless includeSummary is true, that summaries can run several thousand characters, that all filters are ANDed, and that nhtsaId mode is mutually exclusive with other filters. It does not discuss rate limits or result-size ceilings beyond the summary note, keeping it just short of fully transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Information density is high and the scope statement is front-loaded, with cross-tool routing at the end. It is a long block of text without sentence-level breaks, which slightly hurts scanability, but no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter, all-optional search tool with an output schema and full schema coverage, the description covers the remaining gaps: type codes, filter conjunction, default ordering, summary payload cost, and the single-record mode. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the description still adds value by restating the same-association constraint across make/model/modelYear and by tying includeSummary to a recommendation to use a small limit. The nhtsaId exclusivity rule is behavior the schema does not encode as a constraint.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ("Search NHTSA defect investigations") and enumerates the ODI type codes it covers (PE, EA, DP, RQ, AQ and additional types), plus the default sort (newest-opened first). It is clearly distinguishable from siblings like nhtsa_search_recalls and nhtsa_search_complaints.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing guidance is given: use nhtsaId for a single record by exact ID, and pass a value from recallCampaigns to nhtsa_search_recalls as campaignNumber, including the fact that nhtsa_search_recalls returns the investigationId. It also states nhtsaId is mutually exclusive with every other filter, so an agent knows which mode to pick.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nhtsa_search_recallsNhtsa Search RecallsARead-onlyInspect
Search recall campaigns by campaign number, by vehicle, or across every campaign by make, model, model year, and received date. campaignNumber returns that campaign with every vehicle it covers; make, model, and modelYear together return that vehicle's recalls; any other combination of make, model, modelYear, and dateRange is a broad search of NHTSA's recall files, newest first, paged with limit and offset. A broad search matches a campaign when one of its vehicle records carries every vehicle filter given, and the received date it reports can fall one day before the date the other modes report for the same campaign.
| Name | Required | Description | Default |
|---|---|---|---|
| make | No | Vehicle make (e.g., "Toyota"). With model and modelYear, looks up that vehicle's recalls; otherwise a broad-search filter matching the whole make name, ignoring case. | |
| limit | No | Campaigns per page of a broad search. Defaults to 20; at most 50 per page. Not accepted with campaignNumber or a full make + model + modelYear lookup, which return every match. | |
| model | No | Vehicle model. With make and modelYear, looks up that vehicle's recalls; otherwise a broad-search filter matching the whole model name, ignoring case. | |
| offset | No | Pagination offset into the newest-first results of a broad search. Defaults to 0. Not accepted with campaignNumber or a full make + model + modelYear lookup. | |
| dateRange | No | Inclusive received-date bounds in YYYY-MM-DD, in every mode; a bound alone is a broad search. Blank bounds are unset; records without a usable date are excluded only with active bounds. | |
| modelYear | No | Model year, a whole number. With make and model, looks up that vehicle's recalls; otherwise a broad-search filter. | |
| campaignNumber | No | NHTSA campaign number (e.g., "20V682000"). When provided, returns the campaign detail plus every vehicle it covers. A 6-character number (e.g., "00V419") returns every campaign it covers, each with its own detail and vehicles. Mutually exclusive with make/model/modelYear. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| limit | No | Broad search only: pagination limit used for this page |
| notice | No | Guidance when no recalls match: for a vehicle lookup, how to list the other model names NHTSA may file its recalls under with nhtsa_lookup_vehicles operation="dataset_models"; for a broad search, which filters to relax. Also explains a date range that excluded every recall, a broad-search page past the last match, and a limit lowered to the page maximum. |
| offset | No | Broad search only: pagination offset used for this page |
| recalls | No | Matching recall campaigns; in a broad search, one page of them |
| returned | No | Broad search only: campaigns in this page |
| totalCount | No | Total recalls matching criteria; in a broad search, across every page |
| effectiveQuery | No | The search key used: campaign number, "make model modelYear" for a vehicle lookup, or the broad-search filters as key=value pairs with make and model uppercased as matched, plus any active date bounds. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint, so the description carries the rest and does add real behavior: broad-search result ordering (newest first), paging via limit/offset, the containment matching rule (a campaign matches when one vehicle record carries every filter), and the subtle one-day received-date discrepancy between modes. It omits default/no-argument behavior and any mention of result size or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the modes and ending on the date caveat that only appears here. The final sentence is dense and packs two distinct ideas (matching rule and date offset) into one long clause, which slightly hurts scannability but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With seven optional parameters, a nested dateRange, an output schema, and only a readOnly annotation, the description covers mode routing, paging, matching semantics, and the date quirk well. It leaves unclear what happens when the tool is called with no parameters at all and does not say how large an unfiltered broad search can be.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter already documents its mode-conditional meaning, so the description largely restates the schema's per-field rules at the composite level. It reinforces which combinations trigger which mode, which is mildly useful, but adds little semantic detail not already in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (search recall campaigns) and immediately enumerates the three access modes — campaign number, vehicle lookup, and broad filtered search — so the agent knows exactly what domain this covers versus the complaints, investigations, and safety-rating siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit mode-selection rules: campaignNumber for one campaign's detail, make+model+modelYear together for a vehicle's recalls, and any other combination for a broad newest-first search. It does not name sibling tools or say when to prefer nhtsa_search_complaints or nhtsa_search_investigations over this one, so it stops short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
7 tool updates
- Changed
nhtsa_decode_vin24 fields changed- changed
Input schema / properties / modelYear / descriptionPrevious value: -"Model year, a whole number. Helps resolve ambiguity for pre-1980 or partial VINs."New value: +"Model year, a whole number, for every VIN without its own ,YYYY. Helps resolve ambiguity for pre-1980 or partial VINs." - changed
Input schema / properties / vin / anyOfPrevious value: -[ - { - "description": "A single VIN string (up to 17 characters, * for unknown positions)", - "type": "string" - }, - { - "description": "An array of up to 50 VINs for batch decode", - "items": { - "type": "string" - }, - "type": "array" - } -]New value: +[ + { + "description": "One VIN, or several separated by spaces, semicolons, or commas.", + "type": "string" + }, + { + "description": "VINs, one per entry or several per entry as in a single string; at most 500 entries.", + "items": { + "type": "string" + }, + "maxItems": 500, + "type": "array" + } +] - changed
Input schema / properties / vin / descriptionPrevious value: -"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."New value: +"One VIN or several. A VIN is up to 17 letters, digits, or * for an unknown position (e.g., \"1HGCM82633A004352\"). Separate several VINs in one string with spaces, semicolons, or commas, or list them in an array; a string naming several VINs takes only full 17-character VINs, so send a partial VIN alone. Append ,YYYY to give one VIN its own model year (e.g., \"1HGCM82633A004352,2003\"). A call decodes up to 50 VINs and takes at most 500; VINs past the first 50 come back in deferredVins." - added
Output schema / properties / deferredVinsAdded value: +{ + "description": "VINs past the first 50, in the order sent, present when the call named more VINs than it decodes. Each carries its model year as VIN,YYYY when one applied; pass this list as vin to decode them.", + "items": { + "type": "string" + }, + "type": "array" +} - changed
Output schema / properties / effectiveQuery / descriptionPrevious value: -"Number of VINs decoded and the path taken (single or batch)."New value: +"Number of VINs named and the path taken (single or batch), with how many were decoded and deferred when VINs were deferred." - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `empty_vin_list`: The VIN list is empty or contains a blank VIN. `batch_too_large`: VIN array exceeds the batch limit. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `empty_vin_list`: The VIN list is empty, or an entry is blank or holds only separators. `invalid_vin`: A VIN holds a character other than a letter A-Z, a digit, or *, runs past 17 characters, or is a partial VIN in a string that names several VINs. `batch_too_large`: The input names more than 500 VINs, or more than 50 on a server set to reject an over-cap batch rather than defer the rest. Other values are possible when a failure originates below the handler." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "empty_vin_list", - "batch_too_large" -]New value: +[ + "empty_vin_list", + "invalid_vin", + "batch_too_large" +] - changed
Output schema / properties / notice / descriptionPrevious value: -"Present when one or more VINs decoded with VPIC warnings (errorCode != 0) — check errorCode/errorText per vehicle."New value: +"Present when VINs past the first 50 were deferred to deferredVins, or when VINs decoded with VPIC warnings (errorCode != 0) — check errorCode/errorText per vehicle." - added
Output schema / properties / vehicles / items / properties / adaptiveCruiseControlAdded value: +{ + "description": "Adaptive Cruise Control (ACC): Standard, Optional, or Not Available for this VIN's configuration. Optional means the configuration offers it; the VIN does not record whether this vehicle has it. Omitted when VPIC leaves it blank.", + "type": "string" +} - added
Output schema / properties / vehicles / items / properties / airBagLocSeatCushionAdded value: +{ + "description": "Seat Cushion Air Bag Locations: a seating position, from Driver Seat Only or Passenger Seat Only through 1st Row (Driver and Passenger) to All Rows. Omitted when VPIC leaves it blank.", + "type": "string" +} - added
Output schema / properties / vehicles / items / properties / backupCameraAdded value: +{ + "description": "Backup Camera: Standard, Optional, or Not Available for this VIN's configuration. Optional means the configuration offers it; the VIN does not record whether this vehicle has it. Omitted when VPIC leaves it blank.", + "type": "string" +} - added
Output schema / properties / vehicles / items / properties / blindSpotInterventionAdded value: +{ + "description": "Blind Spot Intervention (BSI): Standard, Optional, or Not Available for this VIN's configuration. Optional means the configuration offers it; the VIN does not record whether this vehicle has it. Omitted when VPIC leaves it blank.", + "type": "string" +} - added
Output schema / properties / vehicles / items / properties / blindSpotWarningAdded value: +{ + "description": "Blind Spot Warning (BSW): Standard, Optional, or Not Available for this VIN's configuration. Optional means the configuration offers it; the VIN does not record whether this vehicle has it. Omitted when VPIC leaves it blank.", + "type": "string" +} - added
Output schema / properties / vehicles / items / properties / crashImminentBrakingAdded value: +{ + "description": "Crash Imminent Braking (CIB): Standard, Optional, or Not Available for this VIN's configuration. Optional means the configuration offers it; the VIN does not record whether this vehicle has it. Omitted when VPIC leaves it blank.", + "type": "string" +} - added
Output schema / properties / vehicles / items / properties / dynamicBrakeSupportAdded value: +{ + "description": "Dynamic Brake Support (DBS): Standard, Optional, or Not Available for this VIN's configuration. Optional means the configuration offers it; the VIN does not record whether this vehicle has it. Omitted when VPIC leaves it blank.", + "type": "string" +} - added
Output schema / properties / vehicles / items / properties / forwardCollisionWarningAdded value: +{ + "description": "Forward Collision Warning (FCW): Standard, Optional, or Not Available for this VIN's configuration. Optional means the configuration offers it; the VIN does not record whether this vehicle has it. Omitted when VPIC leaves it blank.", + "type": "string" +} - added
Output schema / properties / vehicles / items / properties / laneCenteringAssistanceAdded value: +{ + "description": "Lane Centering Assistance: Standard, Optional, or Not Available for this VIN's configuration. Optional means the configuration offers it; the VIN does not record whether this vehicle has it. Omitted when VPIC leaves it blank.", + "type": "string" +} - added
Output schema / properties / vehicles / items / properties / laneDepartureWarningAdded value: +{ + "description": "Lane Departure Warning (LDW): Standard, Optional, or Not Available for this VIN's configuration. Optional means the configuration offers it; the VIN does not record whether this vehicle has it. Omitted when VPIC leaves it blank.", + "type": "string" +} - added
Output schema / properties / vehicles / items / properties / laneKeepingAssistanceAdded value: +{ + "description": "Lane Keeping Assistance (LKA): Standard, Optional, or Not Available for this VIN's configuration. Optional means the configuration offers it; the VIN does not record whether this vehicle has it. Omitted when VPIC leaves it blank.", + "type": "string" +} - added
Output schema / properties / vehicles / items / properties / parkingAssistAdded value: +{ + "description": "Parking Assist: Standard, Optional, or Not Available for this VIN's configuration. Optional means the configuration offers it; the VIN does not record whether this vehicle has it. Omitted when VPIC leaves it blank.", + "type": "string" +} - added
Output schema / properties / vehicles / items / properties / pedestrianAutomaticEmergencyBrakingAdded value: +{ + "description": "Pedestrian Automatic Emergency Braking (PAEB): Standard, Optional, or Not Available for this VIN's configuration. Optional means the configuration offers it; the VIN does not record whether this vehicle has it. Omitted when VPIC leaves it blank.", + "type": "string" +} - added
Output schema / properties / vehicles / items / properties / rearAutomaticEmergencyBrakingAdded value: +{ + "description": "Rear Automatic Emergency Braking: Standard, Optional, or Not Available for this VIN's configuration. Optional means the configuration offers it; the VIN does not record whether this vehicle has it. Omitted when VPIC leaves it blank.", + "type": "string" +} - added
Output schema / properties / vehicles / items / properties / rearCrossTrafficAlertAdded value: +{ + "description": "Rear Cross Traffic Alert: Standard, Optional, or Not Available for this VIN's configuration. Optional means the configuration offers it; the VIN does not record whether this vehicle has it. Omitted when VPIC leaves it blank.", + "type": "string" +} - added
Output schema / properties / vehicles / items / properties / tpmsTypeAdded value: +{ + "description": "Tire Pressure Monitoring System (TPMS) Type: Direct or Indirect. Omitted when VPIC leaves it blank.", + "type": "string" +}
- Changed
nhtsa_get_safety_ratings4 fields changed- changed
Output schema / properties / notice / descriptionPrevious value: -"Guidance when no NCAP ratings are found — e.g. coverage notes or adjacent year suggestion."New value: +"Guidance when no NCAP ratings are found — coverage notes, adjacent years, and the lookup listing the model names NCAP files the vehicle under." - changed
Output schema / properties / ratings / items / properties / adasFeatures / properties / electronicStabilityControl / descriptionPrevious value: -"\"Standard\", \"Optional\", or \"Not Available\""New value: +"Electronic stability control: \"Standard\", \"Optional\", or \"No\"" - changed
Output schema / properties / ratings / items / properties / adasFeatures / properties / forwardCollisionWarning / descriptionPrevious value: -"Forward collision warning availability"New value: +"Forward collision warning: \"Standard\", \"Optional\", or \"No\"" - changed
Output schema / properties / ratings / items / properties / adasFeatures / properties / laneDepartureWarning / descriptionPrevious value: -"Lane departure warning availability"New value: +"Lane departure warning: \"Standard\", \"Optional\", or \"No\""
- Changed
nhtsa_get_vehicle_safety8 fields changed- changed
Output schema / properties / notice / descriptionPrevious value: -"Guidance when no NHTSA records matched the vehicle — e.g. how to verify make/model/year spelling."New value: +"Guidance when no section matched the vehicle, or when recalls or complaints matched nothing while another section had records. NHTSA can file one vehicle under different model names in each dataset, so the notice names the lookup that lists them." - changed
Output schema / properties / recalls / items / properties / consequence / descriptionPrevious value: -"Safety consequence"New value: +"Safety consequence. Omitted for older campaigns whose record leaves it blank." - changed
Output schema / properties / recalls / items / properties / remedy / descriptionPrevious value: -"Corrective action"New value: +"Corrective action. Omitted for older campaigns whose record leaves it blank." - changed
Output schema / properties / recalls / items / properties / summary / descriptionPrevious value: -"Recall summary"New value: +"Recall summary. Omitted for older campaigns whose record leaves it blank." - changed
Output schema / properties / recalls / items / requiredPrevious value: -[ - "campaignNumber", - "manufacturer", - "component", - "summary", - "consequence", - "remedy", - "reportReceivedDate" -]New value: +[ + "campaignNumber", + "manufacturer", + "component", + "reportReceivedDate" +] - changed
Output schema / properties / safetyRatings / items / properties / adasFeatures / properties / electronicStabilityControl / descriptionPrevious value: -"ESC availability"New value: +"Electronic stability control: \"Standard\", \"Optional\", or \"No\"" - changed
Output schema / properties / safetyRatings / items / properties / adasFeatures / properties / forwardCollisionWarning / descriptionPrevious value: -"FCW availability"New value: +"Forward collision warning: \"Standard\", \"Optional\", or \"No\"" - changed
Output schema / properties / safetyRatings / items / properties / adasFeatures / properties / laneDepartureWarning / descriptionPrevious value: -"LDW availability"New value: +"Lane departure warning: \"Standard\", \"Optional\", or \"No\""
- Changed
nhtsa_lookup_vehicles12 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Max results in the returned slice. Defaults to 100; max 200."New value: +"Results per page. Defaults to 100; at most 200 per page." - removed
Input schema / properties / limit / maximumRemoved value: -200 - added
Input schema / properties / limit / multipleOfAdded value: +1 - changed
Input schema / properties / limit / typePrevious value: -"integer"New value: +"number" - changed
Input schema / properties / make / descriptionPrevious value: -"Make name (required for \"models\" and \"vehicle_types\"). Partial match supported."New value: +"Make name (required for \"models\", \"vehicle_types\", and \"dataset_models\"). VPIC matches partial names in \"models\" and \"vehicle_types\"; \"dataset_models\" takes the full make name (e.g., \"Chevrolet\")." - changed
Input schema / properties / modelYear / descriptionPrevious value: -"Filter models to a specific year, a whole number. Only for \"models\" operation."New value: +"Model year, a whole number. Filters \"models\" to that year; required for \"dataset_models\". Not accepted by other operations." - changed
Input schema / properties / operation / descriptionPrevious value: -"\"makes\" (all NHTSA makes), \"models\" (models for a make), \"vehicle_types\" (types for a make), \"manufacturer\" (manufacturer details)."New value: +"\"makes\" (all VPIC makes), \"models\" (VPIC models for a make), \"vehicle_types\" (types for a make), \"manufacturer\" (manufacturer details), \"dataset_models\" (the model names NHTSA's complaint, NCAP, and VPIC lists carry for a make and model year; requires make and modelYear)." - changed
Input schema / properties / operation / enumPrevious value: -[ - "makes", - "models", - "vehicle_types", - "manufacturer" -]New value: +[ + "makes", + "models", + "vehicle_types", + "manufacturer", + "dataset_models" +] - added
Output schema / properties / datasetModelsAdded value: +{ + "description": "Results for \"dataset_models\" operation, sorted by name", + "items": { + "additionalProperties": false, + "description": "A model name merged across the lists", + "properties": { + "listedBy": { + "description": "Lists carrying this name: \"products\" (the names complaint searches match), \"ncap\" (the names NCAP rating searches match), \"vpic\" (VPIC base names, which some recall campaigns are filed under)", + "items": { + "enum": [ + "products", + "ncap", + "vpic" + ], + "type": "string" + }, + "type": "array" + }, + "modelName": { + "description": "Model name, uppercase", + "type": "string" + } + }, + "required": [ + "modelName", + "listedBy" + ], + "type": "object" + }, + "type": "array" +} - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `inactive_argument`: An argument is not used by the chosen operation. `missing_operation_arg`: A required argument for the chosen operation was not provided. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `inactive_argument`: An argument is not used by the chosen operation. `missing_operation_arg`: A required argument for the chosen operation was not provided. `limit_too_large`: limit exceeds the 200-row page maximum on a server set to reject an over-maximum limit rather than lower it. Other values are possible when a failure originates below the handler." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "inactive_argument", - "missing_operation_arg" -]New value: +[ + "inactive_argument", + "missing_operation_arg", + "limit_too_large" +] - changed
Output schema / properties / notice / descriptionPrevious value: -"Guidance when the result set is empty or the page is out of bounds."New value: +"Guidance when the result set is empty, the page is out of bounds, or limit was lowered to the page maximum."
- Changed
nhtsa_search_complaints9 fields changed- changed
Input schema / properties / component / descriptionPrevious value: -"Filter to a specific component (uppercase, e.g., \"ENGINE\", \"AIR BAGS\", \"ELECTRICAL SYSTEM\"). Matches within comma-separated component lists. Omit to see all."New value: +"Filter to complaints naming a component (e.g., \"ENGINE\", \"AIR BAGS\", \"SERVICE BRAKES, HYDRAULIC\"). Matches case-insensitively within each component name a complaint lists, so \"BRAKES\" matches \"SERVICE BRAKES, HYDRAULIC\". Omit to see all." - changed
Input schema / properties / limit / descriptionPrevious value: -"Max complaint narratives to return. Defaults to 20; max 50. componentBreakdown always reflects all matching complaints."New value: +"Complaint narratives per page. Defaults to 20; at most 50 per page. componentBreakdown always reflects all matching complaints." - removed
Input schema / properties / limit / maximumRemoved value: -50 - added
Input schema / properties / limit / multipleOfAdded value: +1 - changed
Input schema / properties / limit / typePrevious value: -"integer"New value: +"number" - changed
Output schema / properties / complaints / items / properties / components / descriptionPrevious value: -"Affected components (comma-separated)"New value: +"Affected component names as NHTSA lists them, joined by a bare comma. A name can itself contain \", \" (e.g., \"SERVICE BRAKES, HYDRAULIC,AIR BAGS\" is two names)." - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode."New value: +"Machine-readable failure mode. Declared by this tool: `limit_too_large`: limit exceeds the 50-row page maximum on a server set to reject an over-maximum limit rather than lower it. Other values are possible when a failure originates below the handler." - added
Output schema / properties / error / properties / data / properties / reason / examplesAdded value: +[ + "limit_too_large" +] - changed
Output schema / properties / notice / descriptionPrevious value: -"Guidance when no complaints match the vehicle, or when the requested page overshoots the result set."New value: +"Guidance when no complaints match the vehicle (NHTSA may file them under another model name), when the component filter excludes every complaint, when the requested page overshoots the result set, or when limit was lowered to the page maximum."
- Changed
nhtsa_search_investigations20 fields changed- added
Input schema / properties / includeSummaryAdded value: +{ + "default": false, + "description": "Include each investigation's full summary in search rows. Off by default: rows carry the subject, dates, vehicle associations, and campaign links, and nhtsaId mode always returns the summary. A summary can run several thousand characters, so pair this with a small limit.", + "type": "boolean" +} - changed
Input schema / properties / limit / descriptionPrevious value: -"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."New value: +"Investigations per page. Defaults to 20; at most 50 per page." - removed
Input schema / properties / limit / maximumRemoved value: -25 - added
Input schema / properties / limit / multipleOfAdded value: +1 - changed
Input schema / properties / limit / typePrevious value: -"integer"New value: +"number" - changed
Input schema / properties / make / descriptionPrevious value: -"Structured filter — matches against the investigation's associated vehicle makes (e.g., \"TOYOTA\"). ANDed with other filters."New value: +"Vehicle make on one of the investigation's vehicle associations (e.g., \"TOYOTA\"), matched case-insensitively within the name. With model or modelYear, all must match the same association." - changed
Input schema / properties / model / descriptionPrevious value: -"Structured filter — matches against the investigation's associated vehicle models. ANDed with other filters."New value: +"Vehicle model on one of the investigation's vehicle associations, matched case-insensitively within the name. With make or modelYear, all must match the same association." - added
Input schema / properties / modelYearAdded value: +{ + "description": "Model year, a whole number. Matches when one vehicle association carries this year together with every supplied make and model; an investigation with no model year on any association never matches.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" +} - changed
Input schema / properties / nhtsaId / descriptionPrevious value: -"Exact NHTSA investigation ID (e.g. \"EA23003\"), case-insensitive. Fetches that one record — mutually exclusive with every other filter."New value: +"Exact NHTSA investigation ID (e.g. \"EA23003\"), case-insensitive. Fetches that one record with its full summary — mutually exclusive with every other filter." - changed
Input schema / properties / offset / descriptionPrevious value: -"Pagination offset into the matching investigations. Defaults to 0."New value: +"Pagination offset into the matching investigations, ordered newest-opened first: open date descending, then ID descending, undated last. Defaults to 0." - changed
Output schema / properties / effectiveQuery / descriptionPrevious value: -"Applied filters as a readable string, e.g. make=\"Ford\" status=\"O\"."New value: +"Applied filters as a readable string, e.g. make=\"Ford\", status=\"O\"." - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `mode_conflict`: nhtsaId was combined with another filter. `invalid_date`: A date bound is not a calendar-valid YYYY-MM-DD date. `inverted_date_range`: A range has after later than before. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `mode_conflict`: nhtsaId was combined with another filter. `invalid_date`: A date bound is not a calendar-valid YYYY-MM-DD date. `inverted_date_range`: A range has after later than before. `limit_too_large`: limit exceeds the 50-row page maximum on a server set to reject an over-maximum limit rather than lower it. Other values are possible when a failure originates below the handler." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "mode_conflict", - "invalid_date", - "inverted_date_range" -]New value: +[ + "mode_conflict", + "invalid_date", + "inverted_date_range", + "limit_too_large" +] - removed
Output schema / properties / investigations / items / properties / manufacturerRemoved value: -{ - "description": "Manufacturer name", - "type": "string" -} - added
Output schema / properties / investigations / items / properties / manufacturersAdded value: +{ + "description": "Manufacturers named on the investigation's vehicle associations", + "items": { + "type": "string" + }, + "type": "array" +} - removed
Output schema / properties / investigations / items / properties / recallCampaignRemoved value: -{ - "description": "Linked recall campaign number (if any) — use with nhtsa_search_recalls", - "type": "string" -} - added
Output schema / properties / investigations / items / properties / recallCampaignsAdded value: +{ + "description": "Recall campaigns linked to the investigation, as NHTSA lists them — pass any to nhtsa_search_recalls as campaignNumber", + "items": { + "type": "string" + }, + "type": "array" +} - changed
Output schema / properties / investigations / items / properties / summary / descriptionPrevious value: -"Investigation summary"New value: +"Investigation summary. Present in nhtsaId mode, and in search rows only with includeSummary: true." - changed
Output schema / properties / investigations / items / properties / years / descriptionPrevious value: -"Associated model years"New value: +"Model years across all of the investigation's vehicle associations, every make and model, ascending" - changed
Output schema / properties / notice / descriptionPrevious value: -"Guidance when no investigations match the filters, or when the requested page overshoots the result set."New value: +"Guidance when no investigations match the filters, when the requested page overshoots the result set, when limit was lowered to the page maximum, or when search rows omit summaries."
- Changed
nhtsa_search_recalls23 fields changed- changed
Input schema / properties / campaignNumber / descriptionPrevious value: -"NHTSA campaign number (e.g., \"20V682000\"). When provided, returns the campaign detail plus every vehicle it covers. Mutually exclusive with make/model/modelYear."New value: +"NHTSA campaign number (e.g., \"20V682000\"). When provided, returns the campaign detail plus every vehicle it covers. A 6-character number (e.g., \"00V419\") returns every campaign it covers, each with its own detail and vehicles. Mutually exclusive with make/model/modelYear." - changed
Input schema / properties / dateRange / descriptionPrevious value: -"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."New value: +"Inclusive received-date bounds in YYYY-MM-DD, in every mode; a bound alone is a broad search. Blank bounds are unset; records without a usable date are excluded only with active bounds." - added
Input schema / properties / limitAdded value: +{ + "description": "Campaigns per page of a broad search. Defaults to 20; at most 50 per page. Not accepted with campaignNumber or a full make + model + modelYear lookup, which return every match.", + "minimum": 1, + "multipleOf": 1, + "type": "number" +} - changed
Input schema / properties / make / descriptionPrevious value: -"Vehicle manufacturer. Required with model and modelYear when not using campaignNumber."New value: +"Vehicle make (e.g., \"Toyota\"). With model and modelYear, looks up that vehicle's recalls; otherwise a broad-search filter matching the whole make name, ignoring case." - changed
Input schema / properties / model / descriptionPrevious value: -"Vehicle model. Required with make and modelYear."New value: +"Vehicle model. With make and modelYear, looks up that vehicle's recalls; otherwise a broad-search filter matching the whole model name, ignoring case." - changed
Input schema / properties / modelYear / descriptionPrevious value: -"Model year, a whole number. Required with make and model."New value: +"Model year, a whole number. With make and model, looks up that vehicle's recalls; otherwise a broad-search filter." - added
Input schema / properties / offsetAdded value: +{ + "description": "Pagination offset into the newest-first results of a broad search. Defaults to 0. Not accepted with campaignNumber or a full make + model + modelYear lookup.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +} - changed
Output schema / properties / effectiveQuery / descriptionPrevious value: -"The search key used: campaign number, or \"make model modelYear\" for vehicle queries."New value: +"The search key used: campaign number, \"make model modelYear\" for a vehicle lookup, or the broad-search filters as key=value pairs with make and model uppercased as matched, plus any active date bounds." - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `mode_conflict`: Both campaignNumber and vehicle params were provided. `missing_required_combo`: Neither campaignNumber nor a complete vehicle triple was supplied. `campaign_not_found`: The campaignNumber did not match any NHTSA recall. `invalid_date`: A dateRange bound is not a calendar-valid YYYY-MM-DD date. `inverted_date_range`: dateRange.after is later than dateRange.before. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `mode_conflict`: campaignNumber was combined with make, model, or modelYear; or limit or offset was sent with campaignNumber or a full make + model + modelYear lookup. `missing_required_combo`: No campaignNumber, make, model, modelYear, or active dateRange bound was supplied. `limit_too_large`: limit exceeds the 50-row page maximum on a server set to reject an over-maximum limit rather than lower it. `campaign_not_found`: The campaignNumber did not match any NHTSA recall. `invalid_date`: A dateRange bound is not a calendar-valid YYYY-MM-DD date. `inverted_date_range`: dateRange.after is later than dateRange.before. Other values are possible when a failure originates below the handler." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "mode_conflict", - "missing_required_combo", - "campaign_not_found", - "invalid_date", - "inverted_date_range" -]New value: +[ + "mode_conflict", + "missing_required_combo", + "limit_too_large", + "campaign_not_found", + "invalid_date", + "inverted_date_range" +] - added
Output schema / properties / limitAdded value: +{ + "description": "Broad search only: pagination limit used for this page", + "type": "number" +} - changed
Output schema / properties / notice / descriptionPrevious value: -"Guidance when no recalls are found — e.g. how to verify make/model/year spelling."New value: +"Guidance when no recalls match: for a vehicle lookup, how to list the other model names NHTSA may file its recalls under with nhtsa_lookup_vehicles operation=\"dataset_models\"; for a broad search, which filters to relax. Also explains a date range that excluded every recall, a broad-search page past the last match, and a limit lowered to the page maximum." - added
Output schema / properties / offsetAdded value: +{ + "description": "Broad search only: pagination offset used for this page", + "type": "number" +} - changed
Output schema / properties / recalls / descriptionPrevious value: -"Matching recall campaigns"New value: +"Matching recall campaigns; in a broad search, one page of them" - changed
Output schema / properties / recalls / items / properties / component / descriptionPrevious value: -"Affected component (vehicle-scoped queries)"New value: +"Affected component. A broad search joins all of the campaign's components with \" | \"." - changed
Output schema / properties / recalls / items / properties / consequence / descriptionPrevious value: -"Safety consequence"New value: +"Safety consequence. Omitted for older campaigns whose record leaves it blank." - changed
Output schema / properties / recalls / items / properties / overTheAirUpdate / descriptionPrevious value: -"OTA update availability when provided by NHTSA"New value: +"OTA update availability when provided by NHTSA. Never set by a broad search: NHTSA's recall files carry no such flag." - changed
Output schema / properties / recalls / items / properties / potentialUnitsAffected / descriptionPrevious value: -"Units affected (campaign queries)"New value: +"Units affected (campaign queries and broad searches)" - changed
Output schema / properties / recalls / items / properties / remedy / descriptionPrevious value: -"Corrective action"New value: +"Corrective action. Omitted for older campaigns whose record leaves it blank." - changed
Output schema / properties / recalls / items / properties / summary / descriptionPrevious value: -"Recall summary"New value: +"Recall summary. Omitted for older campaigns whose record leaves it blank." - changed
Output schema / properties / recalls / items / requiredPrevious value: -[ - "campaignNumber", - "manufacturer", - "summary", - "consequence", - "remedy", - "reportReceivedDate" -]New value: +[ + "campaignNumber", + "manufacturer", + "reportReceivedDate" +] - added
Output schema / properties / returnedAdded value: +{ + "description": "Broad search only: campaigns in this page", + "type": "number" +} - changed
Output schema / properties / totalCount / descriptionPrevious value: -"Total recalls matching criteria"New value: +"Total recalls matching criteria; in a broad search, across every page"
7 tool updates
- Changed
nhtsa_decode_vin1 field changed- changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `empty_vin_list`: No non-empty VIN strings supplied. `batch_too_large`: VIN array exceeds the batch limit. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `empty_vin_list`: The VIN list is empty or contains a blank VIN. `batch_too_large`: VIN array exceeds the batch limit. Other values are possible when a failure originates below the handler."
- Changed
nhtsa_get_safety_ratings3 fields changed- changed
Input schema / properties / vehicleId / descriptionPrevious value: -"Specific NCAP vehicle ID (from prior results). Skips the year/make/model lookup."New value: +"Specific NCAP vehicle ID (from prior results). Mutually exclusive with active make/model/modelYear criteria." - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `missing_required_combo`: Neither vehicleId nor a complete vehicle triple was supplied. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `mode_conflict`: vehicleId was combined with active vehicle criteria. `missing_required_combo`: Neither vehicleId nor a complete vehicle triple was supplied. Other values are possible when a failure originates below the handler." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "missing_required_combo" -]New value: +[ + "mode_conflict", + "missing_required_combo" +]
- Changed
nhtsa_get_vehicle_safety4 fields changed- changed
Input schema / properties / make / descriptionPrevious value: -"Vehicle manufacturer (e.g., \"Toyota\", \"Ford\"). Case-insensitive."New value: +"Nonblank vehicle manufacturer (e.g., \"Toyota\", \"Ford\"). Case-insensitive." - added
Input schema / properties / make / minLengthAdded value: +1 - changed
Input schema / properties / model / descriptionPrevious value: -"Vehicle model (e.g., \"Camry\", \"F-150\"). Case-insensitive."New value: +"Nonblank vehicle model (e.g., \"Camry\", \"F-150\"). Case-insensitive." - added
Input schema / properties / model / minLengthAdded value: +1
- Changed
nhtsa_lookup_vehicles2 fields changed- changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `missing_operation_arg`: A required argument for the chosen operation was not provided. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `inactive_argument`: An argument is not used by the chosen operation. `missing_operation_arg`: A required argument for the chosen operation was not provided. Other values are possible when a failure originates below the handler." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "missing_operation_arg" -]New value: +[ + "inactive_argument", + "missing_operation_arg" +]
- Changed
nhtsa_search_complaints4 fields changed- changed
Input schema / properties / make / descriptionPrevious value: -"Vehicle manufacturer."New value: +"Nonblank vehicle manufacturer." - added
Input schema / properties / make / minLengthAdded value: +1 - changed
Input schema / properties / model / descriptionPrevious value: -"Vehicle model."New value: +"Nonblank vehicle model." - added
Input schema / properties / model / minLengthAdded value: +1
- Changed
nhtsa_search_investigations4 fields changed- added
Input schema / properties / closeDateRangeAdded value: +{ + "description": "Inclusive closed-date bounds in calendar-valid YYYY-MM-DD. Active bounds exclude investigations without a usable close date, including open investigations.", + "properties": { + "after": { + "description": "Inclusive lower bound, a calendar date in YYYY-MM-DD. Blank means unset.", + "type": "string" + }, + "before": { + "description": "Inclusive upper bound, a calendar date in YYYY-MM-DD. Blank means unset.", + "type": "string" + } + }, + "type": "object" +} - added
Input schema / properties / openDateRangeAdded value: +{ + "description": "Inclusive opened-date bounds in calendar-valid YYYY-MM-DD. ANDed with other filters; blank bounds are unset.", + "properties": { + "after": { + "description": "Inclusive lower bound, a calendar date in YYYY-MM-DD. Blank means unset.", + "type": "string" + }, + "before": { + "description": "Inclusive upper bound, a calendar date in YYYY-MM-DD. Blank means unset.", + "type": "string" + } + }, + "type": "object" +} - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `mode_conflict`: nhtsaId was combined with another filter. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `mode_conflict`: nhtsaId was combined with another filter. `invalid_date`: A date bound is not a calendar-valid YYYY-MM-DD date. `inverted_date_range`: A range has after later than before. Other values are possible when a failure originates below the handler." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "mode_conflict" -]New value: +[ + "mode_conflict", + "invalid_date", + "inverted_date_range" +]
- Changed
nhtsa_search_recalls5 fields changed- changed
Input schema / properties / dateRange / descriptionPrevious value: -"Filter recalls by received date. Applied locally since the API lacks native date filtering."New value: +"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." - changed
Input schema / properties / dateRange / properties / after / descriptionPrevious value: -"Only recalls received after this date (ISO 8601, e.g., \"2025-01-01\")."New value: +"Inclusive lower bound, a calendar date in YYYY-MM-DD. Blank means unset." - changed
Input schema / properties / dateRange / properties / before / descriptionPrevious value: -"Only recalls received before this date (ISO 8601, e.g., \"2026-01-01\")."New value: +"Inclusive upper bound, a calendar date in YYYY-MM-DD. Blank means unset." - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `mode_conflict`: Both campaignNumber and vehicle params were provided. `missing_required_combo`: Neither campaignNumber nor a complete vehicle triple was supplied. `campaign_not_found`: The campaignNumber did not match any NHTSA recall. `invalid_date`: A dateRange bound could not be parsed as a date. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `mode_conflict`: Both campaignNumber and vehicle params were provided. `missing_required_combo`: Neither campaignNumber nor a complete vehicle triple was supplied. `campaign_not_found`: The campaignNumber did not match any NHTSA recall. `invalid_date`: A dateRange bound is not a calendar-valid YYYY-MM-DD date. `inverted_date_range`: dateRange.after is later than dateRange.before. Other values are possible when a failure originates below the handler." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "mode_conflict", - "missing_required_combo", - "campaign_not_found", - "invalid_date" -]New value: +[ + "mode_conflict", + "missing_required_combo", + "campaign_not_found", + "invalid_date", + "inverted_date_range" +]
7 tool updates
- Changed
nhtsa_decode_vin6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "vehicles", + "effectiveQuery" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded value: +{ + "additionalProperties": {}, + "description": "Present when the call failed. Absent on success.", + "properties": { + "code": { + "description": "JSON-RPC error code for this failure.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "data": { + "additionalProperties": {}, + "properties": { + "reason": { + "description": "Machine-readable failure mode. Declared by this tool: `empty_vin_list`: No non-empty VIN strings supplied. `batch_too_large`: VIN array exceeds the batch limit. Other values are possible when a failure originates below the handler.", + "examples": [ + "empty_vin_list", + "batch_too_large" + ], + "type": "string" + }, + "recovery": { + "additionalProperties": {}, + "description": "Actionable next step for the caller.", + "properties": { + "hint": { + "type": "string" + } + }, + "required": [ + "hint" + ], + "type": "object" + }, + "retryable": { + "description": "Whether retrying may succeed.", + "type": "boolean" + } + }, + "type": "object" + }, + "message": { + "description": "Human-readable description of what went wrong.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" +} - removed
Output schema / requiredRemoved value: -[ - "vehicles", - "effectiveQuery" -]
- Changed
nhtsa_get_safety_ratings6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "ratings" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded value: +{ + "additionalProperties": {}, + "description": "Present when the call failed. Absent on success.", + "properties": { + "code": { + "description": "JSON-RPC error code for this failure.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "data": { + "additionalProperties": {}, + "properties": { + "reason": { + "description": "Machine-readable failure mode. Declared by this tool: `missing_required_combo`: Neither vehicleId nor a complete vehicle triple was supplied. Other values are possible when a failure originates below the handler.", + "examples": [ + "missing_required_combo" + ], + "type": "string" + }, + "recovery": { + "additionalProperties": {}, + "description": "Actionable next step for the caller.", + "properties": { + "hint": { + "type": "string" + } + }, + "required": [ + "hint" + ], + "type": "object" + }, + "retryable": { + "description": "Whether retrying may succeed.", + "type": "boolean" + } + }, + "type": "object" + }, + "message": { + "description": "Human-readable description of what went wrong.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" +} - removed
Output schema / requiredRemoved value: -[ - "ratings" -]
- Changed
nhtsa_get_vehicle_safety6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "sectionStatus", + "warnings", + "effectiveQuery" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded value: +{ + "additionalProperties": {}, + "description": "Present when the call failed. Absent on success.", + "properties": { + "code": { + "description": "JSON-RPC error code for this failure.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "data": { + "additionalProperties": {}, + "properties": { + "reason": { + "description": "Machine-readable failure mode.", + "type": "string" + }, + "recovery": { + "additionalProperties": {}, + "description": "Actionable next step for the caller.", + "properties": { + "hint": { + "type": "string" + } + }, + "required": [ + "hint" + ], + "type": "object" + }, + "retryable": { + "description": "Whether retrying may succeed.", + "type": "boolean" + } + }, + "type": "object" + }, + "message": { + "description": "Human-readable description of what went wrong.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" +} - removed
Output schema / requiredRemoved value: -[ - "sectionStatus", - "warnings", - "effectiveQuery" -]
- Changed
nhtsa_lookup_vehicles6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "operation", + "totalCount", + "returned", + "offset", + "limit", + "effectiveQuery" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded value: +{ + "additionalProperties": {}, + "description": "Present when the call failed. Absent on success.", + "properties": { + "code": { + "description": "JSON-RPC error code for this failure.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "data": { + "additionalProperties": {}, + "properties": { + "reason": { + "description": "Machine-readable failure mode. Declared by this tool: `missing_operation_arg`: A required argument for the chosen operation was not provided. Other values are possible when a failure originates below the handler.", + "examples": [ + "missing_operation_arg" + ], + "type": "string" + }, + "recovery": { + "additionalProperties": {}, + "description": "Actionable next step for the caller.", + "properties": { + "hint": { + "type": "string" + } + }, + "required": [ + "hint" + ], + "type": "object" + }, + "retryable": { + "description": "Whether retrying may succeed.", + "type": "boolean" + } + }, + "type": "object" + }, + "message": { + "description": "Human-readable description of what went wrong.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" +} - removed
Output schema / requiredRemoved value: -[ - "operation", - "totalCount", - "returned", - "offset", - "limit", - "effectiveQuery" -]
- Changed
nhtsa_search_complaints6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "totalCount", + "returned", + "offset", + "limit", + "componentBreakdown", + "complaints", + "effectiveQuery" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded value: +{ + "additionalProperties": {}, + "description": "Present when the call failed. Absent on success.", + "properties": { + "code": { + "description": "JSON-RPC error code for this failure.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "data": { + "additionalProperties": {}, + "properties": { + "reason": { + "description": "Machine-readable failure mode.", + "type": "string" + }, + "recovery": { + "additionalProperties": {}, + "description": "Actionable next step for the caller.", + "properties": { + "hint": { + "type": "string" + } + }, + "required": [ + "hint" + ], + "type": "object" + }, + "retryable": { + "description": "Whether retrying may succeed.", + "type": "boolean" + } + }, + "type": "object" + }, + "message": { + "description": "Human-readable description of what went wrong.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" +} - removed
Output schema / requiredRemoved value: -[ - "totalCount", - "returned", - "offset", - "limit", - "componentBreakdown", - "complaints", - "effectiveQuery" -]
- Changed
nhtsa_search_investigations6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "totalCount", + "returned", + "offset", + "limit", + "investigations", + "effectiveQuery" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded value: +{ + "additionalProperties": {}, + "description": "Present when the call failed. Absent on success.", + "properties": { + "code": { + "description": "JSON-RPC error code for this failure.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "data": { + "additionalProperties": {}, + "properties": { + "reason": { + "description": "Machine-readable failure mode. Declared by this tool: `mode_conflict`: nhtsaId was combined with another filter. Other values are possible when a failure originates below the handler.", + "examples": [ + "mode_conflict" + ], + "type": "string" + }, + "recovery": { + "additionalProperties": {}, + "description": "Actionable next step for the caller.", + "properties": { + "hint": { + "type": "string" + } + }, + "required": [ + "hint" + ], + "type": "object" + }, + "retryable": { + "description": "Whether retrying may succeed.", + "type": "boolean" + } + }, + "type": "object" + }, + "message": { + "description": "Human-readable description of what went wrong.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" +} - removed
Output schema / requiredRemoved value: -[ - "totalCount", - "returned", - "offset", - "limit", - "investigations", - "effectiveQuery" -]
- Changed
nhtsa_search_recalls6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "recalls", + "totalCount", + "effectiveQuery" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded value: +{ + "additionalProperties": {}, + "description": "Present when the call failed. Absent on success.", + "properties": { + "code": { + "description": "JSON-RPC error code for this failure.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "data": { + "additionalProperties": {}, + "properties": { + "reason": { + "description": "Machine-readable failure mode. Declared by this tool: `mode_conflict`: Both campaignNumber and vehicle params were provided. `missing_required_combo`: Neither campaignNumber nor a complete vehicle triple was supplied. `campaign_not_found`: The campaignNumber did not match any NHTSA recall. `invalid_date`: A dateRange bound could not be parsed as a date. Other values are possible when a failure originates below the handler.", + "examples": [ + "mode_conflict", + "missing_required_combo", + "campaign_not_found", + "invalid_date" + ], + "type": "string" + }, + "recovery": { + "additionalProperties": {}, + "description": "Actionable next step for the caller.", + "properties": { + "hint": { + "type": "string" + } + }, + "required": [ + "hint" + ], + "type": "object" + }, + "retryable": { + "description": "Whether retrying may succeed.", + "type": "boolean" + } + }, + "type": "object" + }, + "message": { + "description": "Human-readable description of what went wrong.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" +} - removed
Output schema / requiredRemoved value: -[ - "recalls", - "totalCount", - "effectiveQuery" -]
2 tool updates
- Changed
nhtsa_search_complaints2 fields changed- added
Output schema / properties / complaints / items / properties / unreliableIncidentDateAdded value: +{ + "additionalProperties": false, + "description": "An incident date NHTSA reported that this complaint's own filing date or model year rules out — report it as contradicted, never as when the incident happened. Appears in place of dateOfIncident, never alongside it; both absent means NHTSA reported no incident date at all.", + "properties": { + "reason": { + "description": "What the reported date contradicts: \"postdates_filing\" — it falls after this complaint was filed; \"predates_model_year\" — it falls before a vehicle of this model year existed.", + "enum": [ + "postdates_filing", + "predates_model_year" + ], + "type": "string" + }, + "reported": { + "description": "The incident date NHTSA reported, ISO YYYY-MM-DD", + "type": "string" + } + }, + "required": [ + "reported", + "reason" + ], + "type": "object" +} - changed
Output schema / properties / notice / descriptionPrevious value: -"Guidance when no complaints are found — e.g. how to verify make/model/year spelling."New value: +"Guidance when no complaints match the vehicle, or when the requested page overshoots the result set."
- Changed
nhtsa_search_investigations1 field changed- changed
Output schema / properties / notice / descriptionPrevious value: -"Guidance when no investigations match — e.g. suggestions for broadening the search."New value: +"Guidance when no investigations match the filters, or when the requested page overshoots the result set."
7 tool updates
- Changed
nhtsa_decode_vin4 fields changed- changed
Input schema / properties / modelYear / descriptionPrevious value: -"Helps resolve ambiguity for pre-1980 VINs or partial VINs."New value: +"Model year, a whole number. Helps resolve ambiguity for pre-1980 or partial VINs." - added
Input schema / properties / modelYear / maximumAdded value: +9007199254740991 - added
Input schema / properties / modelYear / minimumAdded value: +-9007199254740991 - changed
Input schema / properties / modelYear / typePrevious value: -"number"New value: +"integer"
- Changed
nhtsa_get_safety_ratings4 fields changed- changed
Input schema / properties / modelYear / descriptionPrevious value: -"Model year. Required with make and model when vehicleId is omitted. NCAP coverage increases significantly for 2011+."New value: +"Model year, a whole number. Required with make and model when vehicleId is omitted. NCAP coverage increases significantly for 2011+." - added
Input schema / properties / modelYear / maximumAdded value: +9007199254740991 - added
Input schema / properties / modelYear / minimumAdded value: +-9007199254740991 - changed
Input schema / properties / modelYear / typePrevious value: -"number"New value: +"integer"
- Changed
nhtsa_get_vehicle_safety4 fields changed- changed
Input schema / properties / modelYear / descriptionPrevious value: -"Model year (e.g., 2020)."New value: +"Model year, a whole number (e.g., 2020)." - added
Input schema / properties / modelYear / maximumAdded value: +9007199254740991 - added
Input schema / properties / modelYear / minimumAdded value: +-9007199254740991 - changed
Input schema / properties / modelYear / typePrevious value: -"number"New value: +"integer"
- Changed
nhtsa_lookup_vehicles8 fields changed- changed
Input schema / properties / modelYear / descriptionPrevious value: -"Filter models to a specific year. Only for \"models\" operation."New value: +"Filter models to a specific year, a whole number. Only for \"models\" operation." - added
Input schema / properties / modelYear / maximumAdded value: +9007199254740991 - added
Input schema / properties / modelYear / minimumAdded value: +-9007199254740991 - changed
Input schema / properties / modelYear / typePrevious value: -"number"New value: +"integer" - added
Output schema / properties / capAdded value: +{ + "description": "Maximum manufacturer records a single lookup retrieves.", + "type": "number" +} - added
Output schema / properties / shownAdded value: +{ + "description": "Manufacturer records retrieved before pagination, when the cap was reached.", + "type": "number" +} - changed
Output schema / properties / totalCount / descriptionPrevious value: -"Total results matching before pagination"New value: +"Results retrieved before pagination. For \"manufacturer\" this is capped — check the truncated field, since VPIC reports no match total." - added
Output schema / properties / truncatedAdded value: +{ + "description": "True when the \"manufacturer\" lookup stopped at its retrieval cap and further matches may exist upstream.", + "type": "boolean" +}
- Changed
nhtsa_search_complaints7 fields changed- changed
Input schema / properties / modelYear / descriptionPrevious value: -"Model year."New value: +"Model year, a whole number." - added
Input schema / properties / modelYear / maximumAdded value: +9007199254740991 - added
Input schema / properties / modelYear / minimumAdded value: +-9007199254740991 - changed
Input schema / properties / modelYear / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / offset / descriptionPrevious value: -"Pagination offset into the date-descending complaint list. Defaults to 0. componentBreakdown is unaffected by pagination."New value: +"Pagination offset into the filing-date-descending complaint list. Defaults to 0. componentBreakdown is unaffected by pagination." - changed
Output schema / properties / complaints / items / properties / dateComplaintFiled / descriptionPrevious value: -"Date complaint was filed"New value: +"Date complaint was filed (ISO YYYY-MM-DD)" - changed
Output schema / properties / complaints / items / properties / dateOfIncident / descriptionPrevious value: -"Date the incident occurred"New value: +"Date the incident occurred (ISO YYYY-MM-DD)"
- Changed
nhtsa_search_investigations2 fields changed- added
Input schema / properties / nhtsaIdAdded value: +{ + "description": "Exact NHTSA investigation ID (e.g. \"EA23003\"), case-insensitive. Fetches that one record — mutually exclusive with every other filter.", + "type": "string" +} - changed
Input schema / properties / query / descriptionPrevious value: -"Free-text search across investigation subject and summary."New value: +"Free-text search across investigation ID, subject, and summary."
- Changed
nhtsa_search_recalls9 fields changed- changed
Input schema / properties / campaignNumber / descriptionPrevious value: -"NHTSA campaign number (e.g., \"20V682000\"). When provided, returns campaign details. Other params ignored."New value: +"NHTSA campaign number (e.g., \"20V682000\"). When provided, returns the campaign detail plus every vehicle it covers. Mutually exclusive with make/model/modelYear." - changed
Input schema / properties / modelYear / descriptionPrevious value: -"Model year. Required with make and model."New value: +"Model year, a whole number. Required with make and model." - added
Input schema / properties / modelYear / maximumAdded value: +9007199254740991 - added
Input schema / properties / modelYear / minimumAdded value: +-9007199254740991 - changed
Input schema / properties / modelYear / typePrevious value: -"number"New value: +"integer" - added
Output schema / properties / recalls / items / properties / affectedVehiclesAdded value: +{ + "description": "Every distinct make/model the campaign covers (campaign queries). Equipment and tire campaigns name the part here — make is the brand, model is the part — and carry no model year.", + "items": { + "additionalProperties": false, + "description": "One vehicle covered by the campaign", + "properties": { + "make": { + "description": "Vehicle make", + "type": "string" + }, + "model": { + "description": "Vehicle model", + "type": "string" + }, + "modelYear": { + "description": "Model year", + "type": "number" + } + }, + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / recalls / items / properties / investigationIdAdded value: +{ + "description": "ODI investigation that preceded this campaign, when NHTSA links one (campaign queries) — pass it as nhtsaId to nhtsa_search_investigations for the full record.", + "type": "string" +} - changed
Output schema / properties / recalls / items / properties / reportReceivedDate / descriptionPrevious value: -"Date received by NHTSA"New value: +"Date received by NHTSA (ISO YYYY-MM-DD)" - removed
Output schema / properties / recalls / items / properties / subjectRemoved value: -{ - "description": "Recall subject (campaign queries)", - "type": "string" -}
1 tool update
- Changed
nhtsa_get_vehicle_safety8 fields changed- added
Output schema / properties / effectiveQueryAdded value: +{ + "description": "The vehicle queried, as \"make model modelYear\".", + "type": "string" +} - added
Output schema / properties / noticeAdded value: +{ + "description": "Guidance when no NHTSA records matched the vehicle — e.g. how to verify make/model/year spelling.", + "type": "string" +} - added
Output schema / properties / recalls / items / properties / consequenceAdded value: +{ + "description": "Safety consequence", + "type": "string" +} - added
Output schema / properties / recalls / items / properties / manufacturerAdded value: +{ + "description": "Vehicle/equipment manufacturer", + "type": "string" +} - added
Output schema / properties / recalls / items / properties / overTheAirUpdateAdded value: +{ + "description": "OTA update availability when provided by NHTSA", + "type": "boolean" +} - added
Output schema / properties / recalls / items / properties / parkOutSideAdded value: +{ + "description": "Park-outside advisory when provided by NHTSA", + "type": "boolean" +} - changed
Output schema / properties / recalls / items / requiredPrevious value: -[ - "campaignNumber", - "component", - "summary", - "remedy", - "reportReceivedDate" -]New value: +[ + "campaignNumber", + "manufacturer", + "component", + "summary", + "consequence", + "remedy", + "reportReceivedDate" +] - changed
Output schema / requiredPrevious value: -[ - "sectionStatus", - "warnings" -]New value: +[ + "sectionStatus", + "warnings", + "effectiveQuery" +]
1 tool update
- Changed
nhtsa_search_investigations14 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Max results to return. Default: 20."New value: +"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." - added
Input schema / properties / limit / maximumAdded value: +25 - added
Input schema / properties / limit / minimumAdded value: +1 - changed
Input schema / properties / limit / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / offset / descriptionPrevious value: -"Pagination offset. Default: 0."New value: +"Pagination offset into the matching investigations. Defaults to 0." - added
Input schema / properties / offset / maximumAdded value: +9007199254740991 - added
Input schema / properties / offset / minimumAdded value: +0 - changed
Input schema / properties / offset / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / status / descriptionPrevious value: -"Filter by status: \"O\" (Open), \"C\" (Closed)."New value: +"Filter by status: \"O\" (Open) or \"C\" (Closed). Omit to include both." - added
Input schema / properties / status / enumAdded value: +[ + "O", + "C" +] - added
Output schema / properties / limitAdded value: +{ + "description": "Pagination limit used for this page", + "type": "number" +} - added
Output schema / properties / offsetAdded value: +{ + "description": "Pagination offset used for this page", + "type": "number" +} - added
Output schema / properties / returnedAdded value: +{ + "description": "Number of investigations in this page", + "type": "number" +} - changed
Output schema / requiredPrevious value: -[ - "totalCount", - "investigations", - "effectiveQuery" -]New value: +[ + "totalCount", + "returned", + "offset", + "limit", + "investigations", + "effectiveQuery" +]
1 tool update
- Changed
nhtsa_search_investigations1 field changed- changed
Input schema / properties / investigationType / descriptionPrevious value: -"Filter by type: \"PE\" (Preliminary Evaluation), \"EA\" (Engineering Analysis), \"DP\" (Defect Petition), \"RQ\" (Recall Query)."New value: +"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."
2 tool updates
- Changed
nhtsa_decode_vin3 fields changed- added
Output schema / properties / effectiveQueryAdded value: +{ + "description": "Number of VINs decoded and the path taken (single or batch).", + "type": "string" +} - added
Output schema / properties / noticeAdded value: +{ + "description": "Present when one or more VINs decoded with VPIC warnings (errorCode != 0) — check errorCode/errorText per vehicle.", + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "vehicles" -]New value: +[ + "vehicles", + "effectiveQuery" +]
- Changed
nhtsa_search_investigations15 fields changed- added
Input schema / properties / componentAdded value: +{ + "description": "Structured filter — matches against the investigation's affected components (e.g., \"STEERING\"). ANDed with other filters.", + "type": "string" +} - changed
Input schema / properties / make / descriptionPrevious value: -"Free-text filter — matches manufacturer name against subject/description text. ANDed with other filters."New value: +"Structured filter — matches against the investigation's associated vehicle makes (e.g., \"TOYOTA\"). ANDed with other filters." - changed
Input schema / properties / model / descriptionPrevious value: -"Free-text filter — matches model name against subject/description text. ANDed with other filters."New value: +"Structured filter — matches against the investigation's associated vehicle models. ANDed with other filters." - changed
Input schema / properties / query / descriptionPrevious value: -"Free-text search across investigation subjects and descriptions."New value: +"Free-text search across investigation subject and summary." - added
Output schema / properties / investigations / items / properties / closeDateAdded value: +{ + "description": "Date investigation closed (YYYY-MM-DD), if closed", + "type": "string" +} - added
Output schema / properties / investigations / items / properties / componentsAdded value: +{ + "description": "Affected components", + "items": { + "type": "string" + }, + "type": "array" +} - removed
Output schema / properties / investigations / items / properties / descriptionRemoved value: -{ - "description": "Investigation description (HTML stripped)", - "type": "string" -} - removed
Output schema / properties / investigations / items / properties / latestActivityDateRemoved value: -{ - "description": "Date of latest activity", - "type": "string" -} - added
Output schema / properties / investigations / items / properties / makesAdded value: +{ + "description": "Associated vehicle makes", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / investigations / items / properties / manufacturerAdded value: +{ + "description": "Manufacturer name", + "type": "string" +} - added
Output schema / properties / investigations / items / properties / modelsAdded value: +{ + "description": "Associated vehicle models", + "items": { + "type": "string" + }, + "type": "array" +} - changed
Output schema / properties / investigations / items / properties / openDate / descriptionPrevious value: -"Date investigation opened"New value: +"Date investigation opened (YYYY-MM-DD)" - added
Output schema / properties / investigations / items / properties / recallCampaignAdded value: +{ + "description": "Linked recall campaign number (if any) — use with nhtsa_search_recalls", + "type": "string" +} - added
Output schema / properties / investigations / items / properties / summaryAdded value: +{ + "description": "Investigation summary", + "type": "string" +} - added
Output schema / properties / investigations / items / properties / yearsAdded value: +{ + "description": "Associated model years", + "items": { + "type": "number" + }, + "type": "array" +}
5 tool updates
- Changed
nhtsa_get_safety_ratings2 fields changed- removed
Output schema / properties / messageRemoved value: -{ - "description": "Contextual guidance populated when no ratings are returned", - "type": "string" -} - added
Output schema / properties / noticeAdded value: +{ + "description": "Guidance when no NCAP ratings are found — e.g. coverage notes or adjacent year suggestion.", + "type": "string" +}
- Changed
nhtsa_lookup_vehicles4 fields changed- added
Output schema / properties / effectiveQueryAdded value: +{ + "description": "The operation with key args, e.g. \"models make=Toyota year=2020\".", + "type": "string" +} - removed
Output schema / properties / messageRemoved value: -{ - "description": "Contextual guidance populated when the result set is empty", - "type": "string" -} - added
Output schema / properties / noticeAdded value: +{ + "description": "Guidance when the result set is empty or the page is out of bounds.", + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "operation", - "totalCount", - "returned", - "offset", - "limit" -]New value: +[ + "operation", + "totalCount", + "returned", + "offset", + "limit", + "effectiveQuery" +]
- Changed
nhtsa_search_complaints3 fields changed- added
Output schema / properties / effectiveQueryAdded value: +{ + "description": "\"make model modelYear\" with optional component filter applied, as the server used it.", + "type": "string" +} - added
Output schema / properties / noticeAdded value: +{ + "description": "Guidance when no complaints are found — e.g. how to verify make/model/year spelling.", + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "totalCount", - "returned", - "offset", - "limit", - "componentBreakdown", - "complaints" -]New value: +[ + "totalCount", + "returned", + "offset", + "limit", + "componentBreakdown", + "complaints", + "effectiveQuery" +]
- Changed
nhtsa_search_investigations4 fields changed- added
Output schema / properties / effectiveQueryAdded value: +{ + "description": "Applied filters as a readable string, e.g. make=\"Ford\" status=\"O\".", + "type": "string" +} - removed
Output schema / properties / messageRemoved value: -{ - "description": "Contextual guidance populated when no investigations match the filters", - "type": "string" -} - added
Output schema / properties / noticeAdded value: +{ + "description": "Guidance when no investigations match — e.g. suggestions for broadening the search.", + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "totalCount", - "investigations" -]New value: +[ + "totalCount", + "investigations", + "effectiveQuery" +]
- Changed
nhtsa_search_recalls3 fields changed- added
Output schema / properties / effectiveQueryAdded value: +{ + "description": "The search key used: campaign number, or \"make model modelYear\" for vehicle queries.", + "type": "string" +} - added
Output schema / properties / noticeAdded value: +{ + "description": "Guidance when no recalls are found — e.g. how to verify make/model/year spelling.", + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "recalls", - "totalCount" -]New value: +[ + "recalls", + "totalCount", + "effectiveQuery" +]
1 tool update
- Changed
nhtsa_get_safety_ratings3 fields changed- changed
Output schema / properties / ratings / items / properties / complaintsCount / descriptionPrevious value: -"Number of complaints on file"New value: +"Complaints linked by NHTSA to this specific NCAP record. Variant-scoped — for vehicle-level totals call nhtsa_search_complaints." - changed
Output schema / properties / ratings / items / properties / investigationCount / descriptionPrevious value: -"Number of investigations on file"New value: +"Investigations linked by NHTSA to this specific NCAP record. Variant-scoped — for vehicle-level totals call nhtsa_search_investigations." - changed
Output schema / properties / ratings / items / properties / recallsCount / descriptionPrevious value: -"Number of recalls on file"New value: +"Recalls linked by NHTSA to this specific NCAP record. Variant-scoped — for vehicle-level totals call nhtsa_search_recalls."
Related MCP Connectors
Decode any VIN and see NHTSA safety recalls and owner complaints.
Check a US car: decode a VIN, see recalls, crash ratings, owner complaints and fuel economy.
Vehicle safety recalls, complaints, and crash data from NHTSA
US vehicle, car-seat, product and food recalls, VIN decoding and crash ratings (NHTSA, CPSC, FDA).
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables querying U.S. vehicle safety and specification data, including VIN decoding, recalls, complaints, investigations, and crash test ratings.335 npmMIT
- AlicenseAqualityBmaintenanceDecode VINs, look up specs, history, recalls, market value, and OBD codes. Recognize license plates and VINs from images. Access comprehensive vehicle data by year, make, and model to power automotive workflows.121MIT
- AlicenseNot gradedqualityBmaintenanceProvides comprehensive vehicle reports by aggregating data from multiple public sources to decode VINs, check recalls, and view safety ratings. It enables users to validate VINs locally and retrieve technical specifications, fuel economy, and vehicle photos without requiring API keys.8 npmMIT
- AlicenseNot gradedqualityDmaintenanceEnables instant U.S. vehicle recall lookup by make, model, and year using official NHTSA data.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.