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

TableJSON Schema
NameRequiredDescriptionDefault
makeYesVehicle manufacturer.
limitNoMax complaint narratives to return. Defaults to 20; max 50. componentBreakdown always reflects all matching complaints.
modelYesVehicle model.
offsetNoPagination offset into the filing-date-descending complaint list. Defaults to 0. componentBreakdown is unaffected by pagination.
componentNoFilter to a specific component (uppercase, e.g., "ENGINE", "AIR BAGS", "ELECTRICAL SYSTEM"). Matches within comma-separated component lists. Omit to see all.
modelYearYesModel year, a whole number.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
errorNoPresent when the call failed. Absent on success.
limitNoPagination limit used for this page
noticeNoGuidance when no complaints match the vehicle, or when the requested page overshoots the result set.
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. 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"
      -]
  2. 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."
  3. 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)"
  4. 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"
      +]
  5. 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"
  6. 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"
      +]
  7. First observed

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true.lukas The description adds valuable behavioral details: it returns a component breakdown across all complaints plus a paginated slice of the most recent ones, and notes that the breakdown is unaffected by pagination. This is context beyond the annotation and helps the agent understand what results to expect.

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?

Two sentences: first states exactly what the tool does and returns; second gives the recommendation for when to use it. No fluff, no ambiguity. Excellent structure for agent consumption.

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 read-only tool with complete schema documentation, the description covers purpose, result structure, and usage context. Nothing critical is missing. Pagination behavior is clarified, which is a potential source of confusion. Output structure is mentioned (component breakdown + paginated complaints). This is complete for an agent to decide and call correctly.

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?

The input schema provides complete descriptions for all 6 parameters (100% coverage). The description complements this by clarifying the result structure and the component filter's behavior. It adds semantic value about pagination and componentBreakdown, though the schema itself is thorough. Credit for the description's clarification of how offset/component interact with the breakdown.

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 states a specific verb ('search'), resource ('consumer safety complaints'), and a clear target ('filed with NHTSA for a specific vehicle'). It also distinguishes itself from siblings by focusing on complaints rather than recalls, ratings, or VIN lookups. An agent can clearly identify this as the complaints search tool.

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?

Provides a clear usage context: 'Use for common problems, failure patterns, or owner-reported issues.' While it doesn't explicitly list alternatives or when not to use it, the phrasing implies it's for complaints rather than recalls or ratings. No exclusions, but the purpose is distinct enough from sibling tools.

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.