Skip to main content
Glama

nhtsa-vehicle-safety-mcp-server

Nhtsa Get Vehicle Safety

nhtsa_get_vehicle_safety
Read-only

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.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
makeYesVehicle manufacturer (e.g., "Toyota", "Ford"). Case-insensitive.
modelYesVehicle model (e.g., "Camry", "F-150"). Case-insensitive.
modelYearYesModel year, a whole number (e.g., 2020).

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
errorNoPresent when the call failed. Absent on success.
noticeNoGuidance when no NHTSA records matched the vehicle — e.g. how to verify make/model/year spelling.
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

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": [
      +      "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"
      -]
  2. Changed4 schema 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"
  3. Changed8 schema 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"
      +]
  4. Changed3 schema fields changed
    • addedOutput schema / properties / complaintSummary / properties / componentBreakdown / items / description
      Added value: +"Complaint counts for a single component"
    • addedOutput schema / properties / recalls / items / description
      Added value: +"A single recall campaign"
    • addedOutput schema / properties / safetyRatings / items / description
      Added value: +"Safety ratings for a single vehicle variant"
  5. Changed2 schema fields changed
    • addedOutput schema / properties / safetyRatings / items / properties / sideCrash / properties / combinedBarrierPoleFront
      Added value: +{
      +  "description": "Combined barrier/pole front rating",
      +  "type": "string"
      +}
    • addedOutput schema / properties / safetyRatings / items / properties / sideCrash / properties / combinedBarrierPoleRear
      Added value: +{
      +  "description": "Combined barrier/pole rear rating",
      +  "type": "string"
      +}
  6. Changed3 schema fields changed
    • changedOutput schema / properties / recalls / description
      Previous value: -"All recalls for this vehicle"New value: +"All recalls for this vehicle when available"
    • addedOutput schema / properties / sectionStatus
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Availability of each data section in this response",
      +  "properties": {
      +    "complaints": {
      +      "description": "Availability of complaint data in this response",
      +      "enum": [
      +        "available",
      +        "partial",
      +        "unavailable"
      +      ],
      +      "type": "string"
      +    },
      +    "recalls": {
      +      "description": "Availability of recall data in this response",
      +      "enum": [
      +        "available",
      +        "partial",
      +        "unavailable"
      +      ],
      +      "type": "string"
      +    },
      +    "safetyRatings": {
      +      "description": "Availability of NCAP safety ratings in this response",
      +      "enum": [
      +        "available",
      +        "partial",
      +        "unavailable"
      +      ],
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "safetyRatings",
      +    "recalls",
      +    "complaints"
      +  ],
      +  "type": "object"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "safetyRatings",
      -  "recalls",
      -  "complaintSummary",
      -  "warnings"
      -]New value: +[
      +  "sectionStatus",
      +  "warnings"
      +]
  7. First observed

TDQS

A4.3/5.0
Behavior4/5

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

With readOnlyHint=true, the safety profile is already covered. The description adds meaningful behavioral context by disclosing that the tool aggregates multiple data sources (ratings, recalls, complaints) into a single combined response. This is more informative than a simple read operation and helps set expectations for the returned payload.

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 crisp sentences accomplish the goal with no filler. The first sentence scopes the purpose and contents, and the second gives immediate usage direction. Every word adds value.

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 aggregating tool with a rich output schema and three fully described parameters, the description is sufficient. The agent knows what data to expect, when to use it, and that the result is a single response. No important operational detail is missing for the typical calling scenario.

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?

The input schema has 100% description coverage for all three parameters (make, model, modelYear), so the schema already carries the parameter meaning. The tool description does not add extra detail about how these parameters are used together; it only generically refers to 'a vehicle', so the schema remains the primary source of parameter semantics.

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 ('Get') and clearly defines the resource as a comprehensive safety profile combining NCAP crash ratings, recalls, and complaint summaries. This distinguishes it from sibling tools that cover only one of these areas, so an agent can immediately identify how it differs.

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?

The description explicitly says to use this tool as the default when asked about vehicle safety, reliability, or purchase decisions, which is strong guidance. However, it doesn't explicitly name alternatives or state when NOT to use it, such as when a user specifically wants only recalls or only crash ratings without the combined context.

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.