Skip to main content
Glama

nhtsa-vehicle-safety-mcp-server

Nhtsa Search Complaints

nhtsa_search_complaints
Read-only

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.

Input Schema

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

NameRequiredDescriptionDefault
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

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed9 schema 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."
  2. Changed4 schema 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
  3. Changed6 schema 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"
      -]
  4. Changed2 schema 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."
  5. Changed7 schema 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)"
  6. Changed3 schema 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"
      +]
  7. Changed2 schema fields changed
    • addedOutput schema / properties / complaints / items / description
      Added value: +"A single consumer complaint"
    • addedOutput schema / properties / componentBreakdown / items / description
      Added value: +"Complaint counts for a single component"
  8. Changed7 schema fields changed
    • addedInput schema / properties / limit
      Added value: +{
      +  "description": "Max complaint narratives to return. Defaults to 20; max 50. componentBreakdown always reflects all matching complaints.",
      +  "maximum": 50,
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • addedInput schema / properties / offset
      Added value: +{
      +  "description": "Pagination offset into the date-descending complaint list. Defaults to 0. componentBreakdown is unaffected by pagination.",
      +  "maximum": 9007199254740991,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • changedOutput schema / properties / complaints / description
      Previous value: -"Most recent complaints (up to 50)"New value: +"Paginated slice of the most recent complaints, date-descending"
    • 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 complaints in this page",
      +  "type": "number"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "totalCount",
      -  "componentBreakdown",
      -  "complaints"
      -]New value: +[
      +  "totalCount",
      +  "returned",
      +  "offset",
      +  "limit",
      +  "componentBreakdown",
      +  "complaints"
      +]
  9. First observed

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.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.