Skip to main content
Glama

nhtsa-vehicle-safety-mcp-server

Server Details

Decode VINs, search recalls, complaints, crash ratings, and investigations.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
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

A4.1/5.0

Scored across 7 tools

Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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 tools
nhtsa_decode_vinNhtsa Decode VinA
Read-only
Inspect

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.

NameRequiredDescriptionDefault
vinYesOne 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.
modelYearNoModel year, a whole number, for every VIN without its own ,YYYY. Helps resolve ambiguity for pre-1980 or partial VINs.

Output Schema

NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
noticeNoPresent when VINs past the first 50 were deferred to deferredVins, or when VINs decoded with VPIC warnings (errorCode != 0) — check errorCode/errorText per vehicle.
vehiclesNoDecoded vehicle information per VIN
deferredVinsNoVINs 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.
effectiveQueryNoNumber of VINs named and the path taken (single or batch), with how many were decoded and deferred when VINs were deferred.

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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 RatingsA
Read-only
Inspect

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+.

NameRequiredDescriptionDefault
makeNoVehicle manufacturer. Required with model and modelYear when vehicleId is omitted.
modelNoVehicle model. Required with make and modelYear when vehicleId is omitted.
modelYearNoModel year, a whole number. Required with make and model when vehicleId is omitted. NCAP coverage increases significantly for 2011+.
vehicleIdNoSpecific NCAP vehicle ID (from prior results). Mutually exclusive with active make/model/modelYear criteria.

Output Schema

NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
noticeNoGuidance when no NCAP ratings are found — coverage notes, adjacent years, and the lookup listing the model names NCAP files the vehicle under.
ratingsNoSafety ratings per vehicle variant

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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 SafetyA
Read-only
Inspect

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.

NameRequiredDescriptionDefault
makeYesNonblank vehicle manufacturer (e.g., "Toyota", "Ford"). Case-insensitive.
modelYesNonblank vehicle model (e.g., "Camry", "F-150"). Case-insensitive.
modelYearYesModel year, a whole number (e.g., 2020).

Output Schema

NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
noticeNoGuidance 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.
recallsNoAll recalls for this vehicle when available
warningsNoWarnings about sections that could not be loaded from NHTSA
safetyRatingsNoCrash test ratings per vehicle variant (e.g., FWD vs AWD)
sectionStatusNoAvailability of each data section in this response
effectiveQueryNoThe vehicle queried, as "make model modelYear".
complaintSummaryNoSummary of consumer complaints

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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 VehiclesA
Read-only
Inspect

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.

NameRequiredDescriptionDefault
makeNoMake 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").
limitNoResults per page. Defaults to 100; at most 200 per page.
offsetNoPagination offset into the full result list. Defaults to 0.
modelYearNoModel year, a whole number. Filters "models" to that year; required for "dataset_models". Not accepted by other operations.
operationYes"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).
manufacturerNoManufacturer name or ID (for "manufacturer" operation). Partial match supported.

Output Schema

NameRequiredDescription
capNoMaximum manufacturer records a single lookup retrieves.
errorNoPresent when the call failed. Absent on success.
limitNoPagination limit used for this response
makesNoResults for "makes" operation
shownNoManufacturer records retrieved before pagination, when the cap was reached.
modelsNoResults for "models" operation
noticeNoGuidance when the result set is empty, the page is out of bounds, or limit was lowered to the page maximum.
offsetNoPagination offset used for this response
returnedNoNumber of results in the returned slice
operationNoThe operation that was performed
truncatedNoTrue when the "manufacturer" lookup stopped at its retrieval cap and further matches may exist upstream.
totalCountNoResults retrieved before pagination. For "manufacturer" this is capped — check the truncated field, since VPIC reports no match total.
vehicleTypesNoResults for "vehicle_types" operation
datasetModelsNoResults for "dataset_models" operation, sorted by name
manufacturersNoResults for "manufacturer" operation
effectiveQueryNoThe operation with key args, e.g. "models make=Toyota year=2020".

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 ComplaintsA
Read-only
Inspect

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.

NameRequiredDescriptionDefault
makeYesNonblank vehicle manufacturer.
limitNoComplaint narratives per page. Defaults to 20; at most 50 per page. componentBreakdown always reflects all matching complaints.
modelYesNonblank vehicle model.
offsetNoPagination offset into the filing-date-descending complaint list. Defaults to 0. componentBreakdown is unaffected by pagination.
componentNoFilter 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.
modelYearYesModel year, a whole number.

Output Schema

NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
limitNoPagination limit used for this page
noticeNoGuidance 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.
offsetNoPagination offset used for this page
returnedNoNumber of complaints in this page
complaintsNoPaginated slice of the most recent complaints, date-descending
totalCountNoTotal complaints matching criteria
effectiveQueryNo"make model modelYear" with optional component filter applied, as the server used it.
componentBreakdownNoComplaints grouped by component, sorted by frequency

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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 InvestigationsA
Read-only
Inspect

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.

NameRequiredDescriptionDefault
makeNoVehicle 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.
limitNoInvestigations per page. Defaults to 20; at most 50 per page.
modelNoVehicle 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.
queryNoFree-text search across investigation ID, subject, and summary.
offsetNoPagination offset into the matching investigations, ordered newest-opened first: open date descending, then ID descending, undated last. Defaults to 0.
statusNoFilter by status: "O" (Open) or "C" (Closed). Omit to include both.
nhtsaIdNoExact NHTSA investigation ID (e.g. "EA23003"), case-insensitive. Fetches that one record with its full summary — mutually exclusive with every other filter.
componentNoStructured filter — matches against the investigation's affected components (e.g., "STEERING"). ANDed with other filters.
modelYearNoModel 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.
openDateRangeNoInclusive opened-date bounds in calendar-valid YYYY-MM-DD. ANDed with other filters; blank bounds are unset.
closeDateRangeNoInclusive closed-date bounds in calendar-valid YYYY-MM-DD. Active bounds exclude investigations without a usable close date, including open investigations.
includeSummaryNoInclude 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.
investigationTypeNoFilter 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

NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
limitNoPagination limit used for this page
noticeNoGuidance 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.
offsetNoPagination offset used for this page
returnedNoNumber of investigations in this page
totalCountNoTotal matching investigations
effectiveQueryNoApplied filters as a readable string, e.g. make="Ford", status="O".
investigationsNoMatching investigations

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 RecallsA
Read-only
Inspect

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.

NameRequiredDescriptionDefault
makeNoVehicle 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.
limitNoCampaigns 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.
modelNoVehicle model. With make and modelYear, looks up that vehicle's recalls; otherwise a broad-search filter matching the whole model name, ignoring case.
offsetNoPagination offset into the newest-first results of a broad search. Defaults to 0. Not accepted with campaignNumber or a full make + model + modelYear lookup.
dateRangeNoInclusive 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.
modelYearNoModel year, a whole number. With make and model, looks up that vehicle's recalls; otherwise a broad-search filter.
campaignNumberNoNHTSA 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

NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
limitNoBroad search only: pagination limit used for this page
noticeNoGuidance 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.
offsetNoBroad search only: pagination offset used for this page
recallsNoMatching recall campaigns; in a broad search, one page of them
returnedNoBroad search only: campaigns in this page
totalCountNoTotal recalls matching criteria; in a broad search, across every page
effectiveQueryNoThe 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

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 7 tool updates
    • Changednhtsa_decode_vin24 fields changed
      • changedInput schema / properties / modelYear / description
        Previous 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."
      • changedInput schema / properties / vin / anyOf
        Previous 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"
        +  }
        +]
      • changedInput schema / properties / vin / description
        Previous 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."
      • addedOutput schema / properties / deferredVins
        Added 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"
        +}
      • changedOutput schema / properties / effectiveQuery / description
        Previous 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."
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous 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."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "empty_vin_list",
        -  "batch_too_large"
        -]New value: +[
        +  "empty_vin_list",
        +  "invalid_vin",
        +  "batch_too_large"
        +]
      • changedOutput schema / properties / notice / description
        Previous 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."
      • addedOutput schema / properties / vehicles / items / properties / adaptiveCruiseControl
        Added 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"
        +}
      • addedOutput schema / properties / vehicles / items / properties / airBagLocSeatCushion
        Added 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"
        +}
      • addedOutput schema / properties / vehicles / items / properties / backupCamera
        Added 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"
        +}
      • addedOutput schema / properties / vehicles / items / properties / blindSpotIntervention
        Added 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"
        +}
      • addedOutput schema / properties / vehicles / items / properties / blindSpotWarning
        Added 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"
        +}
      • addedOutput schema / properties / vehicles / items / properties / crashImminentBraking
        Added 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"
        +}
      • addedOutput schema / properties / vehicles / items / properties / dynamicBrakeSupport
        Added 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"
        +}
      • addedOutput schema / properties / vehicles / items / properties / forwardCollisionWarning
        Added 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"
        +}
      • addedOutput schema / properties / vehicles / items / properties / laneCenteringAssistance
        Added 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"
        +}
      • addedOutput schema / properties / vehicles / items / properties / laneDepartureWarning
        Added 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"
        +}
      • addedOutput schema / properties / vehicles / items / properties / laneKeepingAssistance
        Added 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"
        +}
      • addedOutput schema / properties / vehicles / items / properties / parkingAssist
        Added 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"
        +}
      • addedOutput schema / properties / vehicles / items / properties / pedestrianAutomaticEmergencyBraking
        Added 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"
        +}
      • addedOutput schema / properties / vehicles / items / properties / rearAutomaticEmergencyBraking
        Added 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"
        +}
      • addedOutput schema / properties / vehicles / items / properties / rearCrossTrafficAlert
        Added 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"
        +}
      • addedOutput schema / properties / vehicles / items / properties / tpmsType
        Added value: +{
        +  "description": "Tire Pressure Monitoring System (TPMS) Type: Direct or Indirect. Omitted when VPIC leaves it blank.",
        +  "type": "string"
        +}
    • Changednhtsa_get_safety_ratings4 fields changed
      • changedOutput schema / properties / notice / description
        Previous 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."
      • changedOutput schema / properties / ratings / items / properties / adasFeatures / properties / electronicStabilityControl / description
        Previous value: -"\"Standard\", \"Optional\", or \"Not Available\""New value: +"Electronic stability control: \"Standard\", \"Optional\", or \"No\""
      • changedOutput schema / properties / ratings / items / properties / adasFeatures / properties / forwardCollisionWarning / description
        Previous value: -"Forward collision warning availability"New value: +"Forward collision warning: \"Standard\", \"Optional\", or \"No\""
      • changedOutput schema / properties / ratings / items / properties / adasFeatures / properties / laneDepartureWarning / description
        Previous value: -"Lane departure warning availability"New value: +"Lane departure warning: \"Standard\", \"Optional\", or \"No\""
    • Changednhtsa_get_vehicle_safety8 fields changed
      • changedOutput schema / properties / notice / description
        Previous 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."
      • changedOutput schema / properties / recalls / items / properties / consequence / description
        Previous value: -"Safety consequence"New value: +"Safety consequence. Omitted for older campaigns whose record leaves it blank."
      • changedOutput schema / properties / recalls / items / properties / remedy / description
        Previous value: -"Corrective action"New value: +"Corrective action. Omitted for older campaigns whose record leaves it blank."
      • changedOutput schema / properties / recalls / items / properties / summary / description
        Previous value: -"Recall summary"New value: +"Recall summary. Omitted for older campaigns whose record leaves it blank."
      • changedOutput schema / properties / recalls / items / required
        Previous value: -[
        -  "campaignNumber",
        -  "manufacturer",
        -  "component",
        -  "summary",
        -  "consequence",
        -  "remedy",
        -  "reportReceivedDate"
        -]New value: +[
        +  "campaignNumber",
        +  "manufacturer",
        +  "component",
        +  "reportReceivedDate"
        +]
      • changedOutput schema / properties / safetyRatings / items / properties / adasFeatures / properties / electronicStabilityControl / description
        Previous value: -"ESC availability"New value: +"Electronic stability control: \"Standard\", \"Optional\", or \"No\""
      • changedOutput schema / properties / safetyRatings / items / properties / adasFeatures / properties / forwardCollisionWarning / description
        Previous value: -"FCW availability"New value: +"Forward collision warning: \"Standard\", \"Optional\", or \"No\""
      • changedOutput schema / properties / safetyRatings / items / properties / adasFeatures / properties / laneDepartureWarning / description
        Previous value: -"LDW availability"New value: +"Lane departure warning: \"Standard\", \"Optional\", or \"No\""
    • Changednhtsa_lookup_vehicles12 fields changed
      • changedInput schema / properties / limit / description
        Previous 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."
      • removedInput schema / properties / limit / maximum
        Removed value: -200
      • addedInput schema / properties / limit / multipleOf
        Added value: +1
      • changedInput schema / properties / limit / type
        Previous value: -"integer"New value: +"number"
      • changedInput schema / properties / make / description
        Previous 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\")."
      • changedInput schema / properties / modelYear / description
        Previous 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."
      • changedInput schema / properties / operation / description
        Previous 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)."
      • changedInput schema / properties / operation / enum
        Previous value: -[
        -  "makes",
        -  "models",
        -  "vehicle_types",
        -  "manufacturer"
        -]New value: +[
        +  "makes",
        +  "models",
        +  "vehicle_types",
        +  "manufacturer",
        +  "dataset_models"
        +]
      • addedOutput schema / properties / datasetModels
        Added 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"
        +}
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous 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."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "inactive_argument",
        -  "missing_operation_arg"
        -]New value: +[
        +  "inactive_argument",
        +  "missing_operation_arg",
        +  "limit_too_large"
        +]
      • changedOutput schema / properties / notice / description
        Previous 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."
    • Changednhtsa_search_complaints9 fields changed
      • changedInput schema / properties / component / description
        Previous 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."
      • changedInput schema / properties / limit / description
        Previous 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."
      • removedInput schema / properties / limit / maximum
        Removed value: -50
      • addedInput schema / properties / limit / multipleOf
        Added value: +1
      • changedInput schema / properties / limit / type
        Previous value: -"integer"New value: +"number"
      • changedOutput schema / properties / complaints / items / properties / components / description
        Previous 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)."
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous 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."
      • addedOutput schema / properties / error / properties / data / properties / reason / examples
        Added value: +[
        +  "limit_too_large"
        +]
      • changedOutput schema / properties / notice / description
        Previous 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."
    • Changednhtsa_search_investigations20 fields changed
      • addedInput schema / properties / includeSummary
        Added 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"
        +}
      • changedInput schema / properties / limit / description
        Previous 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."
      • removedInput schema / properties / limit / maximum
        Removed value: -25
      • addedInput schema / properties / limit / multipleOf
        Added value: +1
      • changedInput schema / properties / limit / type
        Previous value: -"integer"New value: +"number"
      • changedInput schema / properties / make / description
        Previous 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."
      • changedInput schema / properties / model / description
        Previous 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."
      • addedInput schema / properties / modelYear
        Added 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"
        +}
      • changedInput schema / properties / nhtsaId / description
        Previous 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."
      • changedInput schema / properties / offset / description
        Previous 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."
      • changedOutput schema / properties / effectiveQuery / description
        Previous 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\"."
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous 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."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "mode_conflict",
        -  "invalid_date",
        -  "inverted_date_range"
        -]New value: +[
        +  "mode_conflict",
        +  "invalid_date",
        +  "inverted_date_range",
        +  "limit_too_large"
        +]
      • removedOutput schema / properties / investigations / items / properties / manufacturer
        Removed value: -{
        -  "description": "Manufacturer name",
        -  "type": "string"
        -}
      • addedOutput schema / properties / investigations / items / properties / manufacturers
        Added value: +{
        +  "description": "Manufacturers named on the investigation's vehicle associations",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • removedOutput schema / properties / investigations / items / properties / recallCampaign
        Removed value: -{
        -  "description": "Linked recall campaign number (if any) — use with nhtsa_search_recalls",
        -  "type": "string"
        -}
      • addedOutput schema / properties / investigations / items / properties / recallCampaigns
        Added 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"
        +}
      • changedOutput schema / properties / investigations / items / properties / summary / description
        Previous value: -"Investigation summary"New value: +"Investigation summary. Present in nhtsaId mode, and in search rows only with includeSummary: true."
      • changedOutput schema / properties / investigations / items / properties / years / description
        Previous value: -"Associated model years"New value: +"Model years across all of the investigation's vehicle associations, every make and model, ascending"
      • changedOutput schema / properties / notice / description
        Previous 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."
    • Changednhtsa_search_recalls23 fields changed
      • changedInput schema / properties / campaignNumber / description
        Previous 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."
      • changedInput schema / properties / dateRange / description
        Previous 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."
      • addedInput schema / properties / limit
        Added 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"
        +}
      • changedInput schema / properties / make / description
        Previous 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."
      • changedInput schema / properties / model / description
        Previous 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."
      • changedInput schema / properties / modelYear / description
        Previous 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."
      • addedInput schema / properties / offset
        Added 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"
        +}
      • changedOutput schema / properties / effectiveQuery / description
        Previous 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."
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous 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."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous 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"
        +]
      • addedOutput schema / properties / limit
        Added value: +{
        +  "description": "Broad search only: pagination limit used for this page",
        +  "type": "number"
        +}
      • changedOutput schema / properties / notice / description
        Previous 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."
      • addedOutput schema / properties / offset
        Added value: +{
        +  "description": "Broad search only: pagination offset used for this page",
        +  "type": "number"
        +}
      • changedOutput schema / properties / recalls / description
        Previous value: -"Matching recall campaigns"New value: +"Matching recall campaigns; in a broad search, one page of them"
      • changedOutput schema / properties / recalls / items / properties / component / description
        Previous value: -"Affected component (vehicle-scoped queries)"New value: +"Affected component. A broad search joins all of the campaign's components with \" | \"."
      • changedOutput schema / properties / recalls / items / properties / consequence / description
        Previous value: -"Safety consequence"New value: +"Safety consequence. Omitted for older campaigns whose record leaves it blank."
      • changedOutput schema / properties / recalls / items / properties / overTheAirUpdate / description
        Previous 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."
      • changedOutput schema / properties / recalls / items / properties / potentialUnitsAffected / description
        Previous value: -"Units affected (campaign queries)"New value: +"Units affected (campaign queries and broad searches)"
      • changedOutput schema / properties / recalls / items / properties / remedy / description
        Previous value: -"Corrective action"New value: +"Corrective action. Omitted for older campaigns whose record leaves it blank."
      • changedOutput schema / properties / recalls / items / properties / summary / description
        Previous value: -"Recall summary"New value: +"Recall summary. Omitted for older campaigns whose record leaves it blank."
      • changedOutput schema / properties / recalls / items / required
        Previous value: -[
        -  "campaignNumber",
        -  "manufacturer",
        -  "summary",
        -  "consequence",
        -  "remedy",
        -  "reportReceivedDate"
        -]New value: +[
        +  "campaignNumber",
        +  "manufacturer",
        +  "reportReceivedDate"
        +]
      • addedOutput schema / properties / returned
        Added value: +{
        +  "description": "Broad search only: campaigns in this page",
        +  "type": "number"
        +}
      • changedOutput schema / properties / totalCount / description
        Previous value: -"Total recalls matching criteria"New value: +"Total recalls matching criteria; in a broad search, across every page"
  2. 7 tool updates
    • Changednhtsa_decode_vin1 field changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous 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."
    • Changednhtsa_get_safety_ratings3 fields changed
      • changedInput schema / properties / vehicleId / description
        Previous 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."
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous 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."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "missing_required_combo"
        -]New value: +[
        +  "mode_conflict",
        +  "missing_required_combo"
        +]
    • Changednhtsa_get_vehicle_safety4 fields changed
      • changedInput schema / properties / make / description
        Previous value: -"Vehicle manufacturer (e.g., \"Toyota\", \"Ford\"). Case-insensitive."New value: +"Nonblank vehicle manufacturer (e.g., \"Toyota\", \"Ford\"). Case-insensitive."
      • addedInput schema / properties / make / minLength
        Added value: +1
      • changedInput schema / properties / model / description
        Previous value: -"Vehicle model (e.g., \"Camry\", \"F-150\"). Case-insensitive."New value: +"Nonblank vehicle model (e.g., \"Camry\", \"F-150\"). Case-insensitive."
      • addedInput schema / properties / model / minLength
        Added value: +1
    • Changednhtsa_lookup_vehicles2 fields changed
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous 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."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "missing_operation_arg"
        -]New value: +[
        +  "inactive_argument",
        +  "missing_operation_arg"
        +]
    • Changednhtsa_search_complaints4 fields changed
      • changedInput schema / properties / make / description
        Previous value: -"Vehicle manufacturer."New value: +"Nonblank vehicle manufacturer."
      • addedInput schema / properties / make / minLength
        Added value: +1
      • changedInput schema / properties / model / description
        Previous value: -"Vehicle model."New value: +"Nonblank vehicle model."
      • addedInput schema / properties / model / minLength
        Added value: +1
    • Changednhtsa_search_investigations4 fields changed
      • addedInput schema / properties / closeDateRange
        Added 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"
        +}
      • addedInput schema / properties / openDateRange
        Added 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"
        +}
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous 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."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "mode_conflict"
        -]New value: +[
        +  "mode_conflict",
        +  "invalid_date",
        +  "inverted_date_range"
        +]
    • Changednhtsa_search_recalls5 fields changed
      • changedInput schema / properties / dateRange / description
        Previous 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."
      • changedInput schema / properties / dateRange / properties / after / description
        Previous 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."
      • changedInput schema / properties / dateRange / properties / before / description
        Previous 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."
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous 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."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous 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"
        +]
  3. 7 tool updates
    • Changednhtsa_decode_vin6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "vehicles",
        +      "effectiveQuery"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added 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"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "vehicles",
        -  "effectiveQuery"
        -]
    • Changednhtsa_get_safety_ratings6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "ratings"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added 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"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "ratings"
        -]
    • Changednhtsa_get_vehicle_safety6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "sectionStatus",
        +      "warnings",
        +      "effectiveQuery"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added 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"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "sectionStatus",
        -  "warnings",
        -  "effectiveQuery"
        -]
    • Changednhtsa_lookup_vehicles6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "operation",
        +      "totalCount",
        +      "returned",
        +      "offset",
        +      "limit",
        +      "effectiveQuery"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added 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"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "operation",
        -  "totalCount",
        -  "returned",
        -  "offset",
        -  "limit",
        -  "effectiveQuery"
        -]
    • Changednhtsa_search_complaints6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "totalCount",
        +      "returned",
        +      "offset",
        +      "limit",
        +      "componentBreakdown",
        +      "complaints",
        +      "effectiveQuery"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added 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"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "totalCount",
        -  "returned",
        -  "offset",
        -  "limit",
        -  "componentBreakdown",
        -  "complaints",
        -  "effectiveQuery"
        -]
    • Changednhtsa_search_investigations6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "totalCount",
        +      "returned",
        +      "offset",
        +      "limit",
        +      "investigations",
        +      "effectiveQuery"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added 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"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "totalCount",
        -  "returned",
        -  "offset",
        -  "limit",
        -  "investigations",
        -  "effectiveQuery"
        -]
    • Changednhtsa_search_recalls6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "recalls",
        +      "totalCount",
        +      "effectiveQuery"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added 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"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "recalls",
        -  "totalCount",
        -  "effectiveQuery"
        -]
  4. 2 tool updates
    • Changednhtsa_search_complaints2 fields changed
      • addedOutput schema / properties / complaints / items / properties / unreliableIncidentDate
        Added 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"
        +}
      • changedOutput schema / properties / notice / description
        Previous 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."
    • Changednhtsa_search_investigations1 field changed
      • changedOutput schema / properties / notice / description
        Previous 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."
  5. 7 tool updates
    • Changednhtsa_decode_vin4 fields changed
      • changedInput schema / properties / modelYear / description
        Previous 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."
      • addedInput schema / properties / modelYear / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / modelYear / minimum
        Added value: +-9007199254740991
      • changedInput schema / properties / modelYear / type
        Previous value: -"number"New value: +"integer"
    • Changednhtsa_get_safety_ratings4 fields changed
      • changedInput schema / properties / modelYear / description
        Previous 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+."
      • addedInput schema / properties / modelYear / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / modelYear / minimum
        Added value: +-9007199254740991
      • changedInput schema / properties / modelYear / type
        Previous value: -"number"New value: +"integer"
    • Changednhtsa_get_vehicle_safety4 fields changed
      • changedInput schema / properties / modelYear / description
        Previous value: -"Model year (e.g., 2020)."New value: +"Model year, a whole number (e.g., 2020)."
      • addedInput schema / properties / modelYear / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / modelYear / minimum
        Added value: +-9007199254740991
      • changedInput schema / properties / modelYear / type
        Previous value: -"number"New value: +"integer"
    • Changednhtsa_lookup_vehicles8 fields changed
      • changedInput schema / properties / modelYear / description
        Previous 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."
      • addedInput schema / properties / modelYear / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / modelYear / minimum
        Added value: +-9007199254740991
      • changedInput schema / properties / modelYear / type
        Previous value: -"number"New value: +"integer"
      • addedOutput schema / properties / cap
        Added value: +{
        +  "description": "Maximum manufacturer records a single lookup retrieves.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / shown
        Added value: +{
        +  "description": "Manufacturer records retrieved before pagination, when the cap was reached.",
        +  "type": "number"
        +}
      • changedOutput schema / properties / totalCount / description
        Previous 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."
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "description": "True when the \"manufacturer\" lookup stopped at its retrieval cap and further matches may exist upstream.",
        +  "type": "boolean"
        +}
    • Changednhtsa_search_complaints7 fields changed
      • changedInput schema / properties / modelYear / description
        Previous value: -"Model year."New value: +"Model year, a whole number."
      • addedInput schema / properties / modelYear / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / modelYear / minimum
        Added value: +-9007199254740991
      • changedInput schema / properties / modelYear / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / offset / description
        Previous 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."
      • changedOutput schema / properties / complaints / items / properties / dateComplaintFiled / description
        Previous value: -"Date complaint was filed"New value: +"Date complaint was filed (ISO YYYY-MM-DD)"
      • changedOutput schema / properties / complaints / items / properties / dateOfIncident / description
        Previous value: -"Date the incident occurred"New value: +"Date the incident occurred (ISO YYYY-MM-DD)"
    • Changednhtsa_search_investigations2 fields changed
      • addedInput schema / properties / nhtsaId
        Added value: +{
        +  "description": "Exact NHTSA investigation ID (e.g. \"EA23003\"), case-insensitive. Fetches that one record — mutually exclusive with every other filter.",
        +  "type": "string"
        +}
      • changedInput schema / properties / query / description
        Previous value: -"Free-text search across investigation subject and summary."New value: +"Free-text search across investigation ID, subject, and summary."
    • Changednhtsa_search_recalls9 fields changed
      • changedInput schema / properties / campaignNumber / description
        Previous 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."
      • changedInput schema / properties / modelYear / description
        Previous value: -"Model year. Required with make and model."New value: +"Model year, a whole number. Required with make and model."
      • addedInput schema / properties / modelYear / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / modelYear / minimum
        Added value: +-9007199254740991
      • changedInput schema / properties / modelYear / type
        Previous value: -"number"New value: +"integer"
      • addedOutput schema / properties / recalls / items / properties / affectedVehicles
        Added 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"
        +}
      • addedOutput schema / properties / recalls / items / properties / investigationId
        Added 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"
        +}
      • changedOutput schema / properties / recalls / items / properties / reportReceivedDate / description
        Previous value: -"Date received by NHTSA"New value: +"Date received by NHTSA (ISO YYYY-MM-DD)"
      • removedOutput schema / properties / recalls / items / properties / subject
        Removed value: -{
        -  "description": "Recall subject (campaign queries)",
        -  "type": "string"
        -}
  6. 1 tool update
    • Changednhtsa_get_vehicle_safety8 fields changed
      • addedOutput schema / properties / effectiveQuery
        Added value: +{
        +  "description": "The vehicle queried, as \"make model modelYear\".",
        +  "type": "string"
        +}
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Guidance when no NHTSA records matched the vehicle — e.g. how to verify make/model/year spelling.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / recalls / items / properties / consequence
        Added value: +{
        +  "description": "Safety consequence",
        +  "type": "string"
        +}
      • addedOutput schema / properties / recalls / items / properties / manufacturer
        Added value: +{
        +  "description": "Vehicle/equipment manufacturer",
        +  "type": "string"
        +}
      • addedOutput schema / properties / recalls / items / properties / overTheAirUpdate
        Added value: +{
        +  "description": "OTA update availability when provided by NHTSA",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / recalls / items / properties / parkOutSide
        Added value: +{
        +  "description": "Park-outside advisory when provided by NHTSA",
        +  "type": "boolean"
        +}
      • changedOutput schema / properties / recalls / items / required
        Previous value: -[
        -  "campaignNumber",
        -  "component",
        -  "summary",
        -  "remedy",
        -  "reportReceivedDate"
        -]New value: +[
        +  "campaignNumber",
        +  "manufacturer",
        +  "component",
        +  "summary",
        +  "consequence",
        +  "remedy",
        +  "reportReceivedDate"
        +]
      • changedOutput schema / required
        Previous value: -[
        -  "sectionStatus",
        -  "warnings"
        -]New value: +[
        +  "sectionStatus",
        +  "warnings",
        +  "effectiveQuery"
        +]
  7. 1 tool update
    • Changednhtsa_search_investigations14 fields changed
      • changedInput schema / properties / limit / description
        Previous 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."
      • addedInput schema / properties / limit / maximum
        Added value: +25
      • addedInput schema / properties / limit / minimum
        Added value: +1
      • changedInput schema / properties / limit / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / offset / description
        Previous value: -"Pagination offset. Default: 0."New value: +"Pagination offset into the matching investigations. Defaults to 0."
      • addedInput schema / properties / offset / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / offset / minimum
        Added value: +0
      • changedInput schema / properties / offset / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / status / description
        Previous value: -"Filter by status: \"O\" (Open), \"C\" (Closed)."New value: +"Filter by status: \"O\" (Open) or \"C\" (Closed). Omit to include both."
      • addedInput schema / properties / status / enum
        Added value: +[
        +  "O",
        +  "C"
        +]
      • addedOutput schema / properties / limit
        Added value: +{
        +  "description": "Pagination limit used for this page",
        +  "type": "number"
        +}
      • addedOutput schema / properties / offset
        Added value: +{
        +  "description": "Pagination offset used for this page",
        +  "type": "number"
        +}
      • addedOutput schema / properties / returned
        Added value: +{
        +  "description": "Number of investigations in this page",
        +  "type": "number"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "totalCount",
        -  "investigations",
        -  "effectiveQuery"
        -]New value: +[
        +  "totalCount",
        +  "returned",
        +  "offset",
        +  "limit",
        +  "investigations",
        +  "effectiveQuery"
        +]
  8. 1 tool update
    • Changednhtsa_search_investigations1 field changed
      • changedInput schema / properties / investigationType / description
        Previous 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."
  9. 2 tool updates
    • Changednhtsa_decode_vin3 fields changed
      • addedOutput schema / properties / effectiveQuery
        Added value: +{
        +  "description": "Number of VINs decoded and the path taken (single or batch).",
        +  "type": "string"
        +}
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Present when one or more VINs decoded with VPIC warnings (errorCode != 0) — check errorCode/errorText per vehicle.",
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "vehicles"
        -]New value: +[
        +  "vehicles",
        +  "effectiveQuery"
        +]
    • Changednhtsa_search_investigations15 fields changed
      • addedInput schema / properties / component
        Added value: +{
        +  "description": "Structured filter — matches against the investigation's affected components (e.g., \"STEERING\"). ANDed with other filters.",
        +  "type": "string"
        +}
      • changedInput schema / properties / make / description
        Previous 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."
      • changedInput schema / properties / model / description
        Previous 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."
      • changedInput schema / properties / query / description
        Previous value: -"Free-text search across investigation subjects and descriptions."New value: +"Free-text search across investigation subject and summary."
      • addedOutput schema / properties / investigations / items / properties / closeDate
        Added value: +{
        +  "description": "Date investigation closed (YYYY-MM-DD), if closed",
        +  "type": "string"
        +}
      • addedOutput schema / properties / investigations / items / properties / components
        Added value: +{
        +  "description": "Affected components",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • removedOutput schema / properties / investigations / items / properties / description
        Removed value: -{
        -  "description": "Investigation description (HTML stripped)",
        -  "type": "string"
        -}
      • removedOutput schema / properties / investigations / items / properties / latestActivityDate
        Removed value: -{
        -  "description": "Date of latest activity",
        -  "type": "string"
        -}
      • addedOutput schema / properties / investigations / items / properties / makes
        Added value: +{
        +  "description": "Associated vehicle makes",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / investigations / items / properties / manufacturer
        Added value: +{
        +  "description": "Manufacturer name",
        +  "type": "string"
        +}
      • addedOutput schema / properties / investigations / items / properties / models
        Added value: +{
        +  "description": "Associated vehicle models",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / investigations / items / properties / openDate / description
        Previous value: -"Date investigation opened"New value: +"Date investigation opened (YYYY-MM-DD)"
      • addedOutput schema / properties / investigations / items / properties / recallCampaign
        Added value: +{
        +  "description": "Linked recall campaign number (if any) — use with nhtsa_search_recalls",
        +  "type": "string"
        +}
      • addedOutput schema / properties / investigations / items / properties / summary
        Added value: +{
        +  "description": "Investigation summary",
        +  "type": "string"
        +}
      • addedOutput schema / properties / investigations / items / properties / years
        Added value: +{
        +  "description": "Associated model years",
        +  "items": {
        +    "type": "number"
        +  },
        +  "type": "array"
        +}
  10. 5 tool updates
    • Changednhtsa_get_safety_ratings2 fields changed
      • removedOutput schema / properties / message
        Removed value: -{
        -  "description": "Contextual guidance populated when no ratings are returned",
        -  "type": "string"
        -}
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Guidance when no NCAP ratings are found — e.g. coverage notes or adjacent year suggestion.",
        +  "type": "string"
        +}
    • Changednhtsa_lookup_vehicles4 fields changed
      • addedOutput schema / properties / effectiveQuery
        Added value: +{
        +  "description": "The operation with key args, e.g. \"models make=Toyota year=2020\".",
        +  "type": "string"
        +}
      • removedOutput schema / properties / message
        Removed value: -{
        -  "description": "Contextual guidance populated when the result set is empty",
        -  "type": "string"
        -}
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Guidance when the result set is empty or the page is out of bounds.",
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "operation",
        -  "totalCount",
        -  "returned",
        -  "offset",
        -  "limit"
        -]New value: +[
        +  "operation",
        +  "totalCount",
        +  "returned",
        +  "offset",
        +  "limit",
        +  "effectiveQuery"
        +]
    • Changednhtsa_search_complaints3 fields changed
      • addedOutput schema / properties / effectiveQuery
        Added value: +{
        +  "description": "\"make model modelYear\" with optional component filter applied, as the server used it.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Guidance when no complaints are found — e.g. how to verify make/model/year spelling.",
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "totalCount",
        -  "returned",
        -  "offset",
        -  "limit",
        -  "componentBreakdown",
        -  "complaints"
        -]New value: +[
        +  "totalCount",
        +  "returned",
        +  "offset",
        +  "limit",
        +  "componentBreakdown",
        +  "complaints",
        +  "effectiveQuery"
        +]
    • Changednhtsa_search_investigations4 fields changed
      • addedOutput schema / properties / effectiveQuery
        Added value: +{
        +  "description": "Applied filters as a readable string, e.g. make=\"Ford\" status=\"O\".",
        +  "type": "string"
        +}
      • removedOutput schema / properties / message
        Removed value: -{
        -  "description": "Contextual guidance populated when no investigations match the filters",
        -  "type": "string"
        -}
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Guidance when no investigations match — e.g. suggestions for broadening the search.",
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "totalCount",
        -  "investigations"
        -]New value: +[
        +  "totalCount",
        +  "investigations",
        +  "effectiveQuery"
        +]
    • Changednhtsa_search_recalls3 fields changed
      • addedOutput schema / properties / effectiveQuery
        Added value: +{
        +  "description": "The search key used: campaign number, or \"make model modelYear\" for vehicle queries.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Guidance when no recalls are found — e.g. how to verify make/model/year spelling.",
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "recalls",
        -  "totalCount"
        -]New value: +[
        +  "recalls",
        +  "totalCount",
        +  "effectiveQuery"
        +]
  11. 1 tool update
    • Changednhtsa_get_safety_ratings3 fields changed
      • changedOutput schema / properties / ratings / items / properties / complaintsCount / description
        Previous 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."
      • changedOutput schema / properties / ratings / items / properties / investigationCount / description
        Previous 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."
      • changedOutput schema / properties / ratings / items / properties / recallsCount / description
        Previous 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

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables querying U.S. vehicle safety and specification data, including VIN decoding, recalls, complaints, investigations, and crash test ratings.
    335 npm
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Decode 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.
    12
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides 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 npm
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.