Skip to main content
Glama

cpsc-recalls-mcp-server

Get CPSC Recall Detail

cpsc_get_recall
Read-onlyIdempotent

Fetch the full record for one CPSC recall by recall number: hazard description, remedy instructions, every product variant, UPCs, incident and injury reports, images, and the official CPSC recall page URL. Get a recall number from cpsc_search_recalls or cpsc_get_recent. CPSC jurisdiction: consumer products only — food/drugs (FDA), motor vehicles/tires (NHTSA), boats (USCG), pesticides (EPA), and firearms (ATF) are covered by other agencies.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
recall_numberYesCPSC recall number: 5 digits for 2002–present records, e.g. "25043", or 5 digits plus a letter a–d for 1998–2001 records, e.g. "99003a". Get one from cpsc_search_recalls or cpsc_get_recent results.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
upcsNoUPC codes for this recall (sparse — ~4% of records have UPCs). CPSC lists UPCs for the recall as a whole, not per product, so on a recall covering several products a UPC cannot be tied to one of them.
errorNoPresent when the call failed. Absent on success.
titleNoOfficial recall title.
imagesNoProduct and identification images from the recall notice.
hazardsNoHazards — read this first.
cpsc_urlNoOfficial CPSC recall page — authoritative source for consumers.
injuriesNoInjury and incident report narrative, e.g. "None reported" or incident count.
productsNoProducts covered. A recall may include multiple products. Model numbers are often in the description text, not a structured field.
importersNoImporter company names.
retailersNoRetailer names with sale date ranges and price.
descriptionNoFull recall description including product identification details. Model numbers are typically embedded here, not in a structured field. Null when CPSC published the record without a description — rare, but a genuine record can still be complete otherwise.
recall_dateNoDate issued, ISO 8601.
source_noteNoProvenance caveat: recall fields are CPSC record text with HTML markup and character codes converted to plain text, not otherwise edited or verified; check cpsc_url before a consumer-facing decision.
distributorsNoDistributor company names.
last_updatedNoDate last published, ISO 8601.
manufacturersNoManufacturer names (often empty — see importers).
recall_numberNoRecall identifier.
remedy_optionsNoRemedy types available: Refund, Repair, Replace, New Instructions, Dispose, Label, No Remedy Available, Inspect. Often empty — CPSC classified the remedy on fewer than half its records. Read remedy_instructions when this is empty, and fall back to cpsc_url when that is empty too, rather than reporting that no remedy exists.
consumer_contactNoContact information for claiming the remedy. Null when not provided.
cpsc_jurisdictionNoWhich products CPSC covers and which agencies cover the rest — food/drugs (FDA), motor vehicles/tires (NHTSA), boats (USCG), pesticides (EPA), firearms (ATF).
data_quality_notesNoGaps this server observed in the CPSC record — absent description, absent hazard text, absent product entries. Derived from which fields CPSC left empty, not from any judgement about the recall itself. Empty when nothing is missing.
coordinated_recallsNoURLs of coordinated recalls by other agencies (e.g., Canada Health).
remedy_instructionsNoFull remedy instructions — exactly what a consumer should do and how to claim.
manufacturer_countriesNoCountries of manufacture.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `not_found`: No recall exists with the given recall number. `upstream_error`: The CPSC recall service (saferproducts.gov) was unavailable, timed out, or sent an unreadable response. `upstream_rejected`: CPSC rejected the lookup instead of returning a recall, and it rejects the same request every time. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `not_found`: No recall exists with the given recall number. `upstream_error`: The CPSC recall service (saferproducts.gov) was unavailable, timed out, reported a temporary failure reading its recall data, or sent an unreadable response. `upstream_rejected`: CPSC rejected the lookup instead of returning a recall, and it rejects the same request every time. Other values are possible when a failure originates below the handler."
    • changedOutput schema / properties / source_note / description
      Previous value: -"Provenance caveat: recall fields are relayed from CPSC unedited and unverified; check cpsc_url before a consumer-facing decision."New value: +"Provenance caveat: recall fields are CPSC record text with HTML markup and character codes converted to plain text, not otherwise edited or verified; check cpsc_url before a consumer-facing decision."
  2. Changed7 schema fields changed
    • changedInput schema / properties / recall_number / description
      Previous value: -"CPSC recall number. Modern records (2002–present) are 5-digit numeric, e.g. \"25043\". Historical records from 1998–2001 may have a letter suffix a–d, e.g. \"99003a\". Obtain from cpsc_search_recalls results."New value: +"CPSC recall number: 5 digits for 2002–present records, e.g. \"25043\", or 5 digits plus a letter a–d for 1998–2001 records, e.g. \"99003a\". Get one from cpsc_search_recalls or cpsc_get_recent results."
    • changedOutput schema / properties / cpsc_jurisdiction / description
      Previous value: -"CPSC covers consumer products — toys, electronics, furniture, appliances, tools, clothing. Does NOT cover: food/drugs (FDA), motor vehicles/tires (NHTSA), boats (USCG), pesticides (EPA), firearms (ATF)."New value: +"Which products CPSC covers and which agencies cover the rest — food/drugs (FDA), motor vehicles/tires (NHTSA), boats (USCG), pesticides (EPA), firearms (ATF)."
    • changedOutput schema / properties / data_quality_notes / description
      Previous value: -"Gaps this server observed in the upstream CPSC record — absent description, absent hazard text, absent product entries. Derived from which fields CPSC left empty, not from any judgement about the recall itself. Empty when nothing is missing."New value: +"Gaps this server observed in the CPSC record — absent description, absent hazard text, absent product entries. Derived from which fields CPSC left empty, not from any judgement about the recall itself. Empty when nothing is missing."
    • changedOutput schema / properties / data_quality_notes / items / description
      Previous value: -"One gap found in the upstream record."New value: +"One gap found in the CPSC record."
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `not_found`: No recall exists with the given recall number. `upstream_error`: The saferproducts.gov API returned a transient error or timed out. `upstream_rejected`: The saferproducts.gov API answered with an error row instead of a recall record, which the same request will always produce. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `not_found`: No recall exists with the given recall number. `upstream_error`: The CPSC recall service (saferproducts.gov) was unavailable, timed out, or sent an unreadable response. `upstream_rejected`: CPSC rejected the lookup instead of returning a recall, and it rejects the same request every time. Other values are possible when a failure originates below the handler."
    • changedOutput schema / properties / products / description
      Previous value: -"Products covered. A recall may include multiple products. Note: model numbers are often in the description text, not a structured field."New value: +"Products covered. A recall may include multiple products. Model numbers are often in the description text, not a structured field."
    • changedOutput schema / properties / upcs / description
      Previous value: -"UPC codes for this recall (sparse — ~4% of records have UPCs). UPCs are stored at the recall level in the API, not per-product; when the recall covers multiple products, UPC-to-product attribution is ambiguous."New value: +"UPC codes for this recall (sparse — ~4% of records have UPCs). CPSC lists UPCs for the recall as a whole, not per product, so on a recall covering several products a UPC cannot be tied to one of them."
  3. Changed5 schema fields changed
    • removedOutput schema / properties / consumer_contact / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / consumer_contact / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / description / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / description / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `not_found`: No recall exists with the given recall number `upstream_error`: The saferproducts.gov API returned a transient error or timed out `upstream_rejected`: The saferproducts.gov API answered with an error row instead of a recall record, which the same request will always produce Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `not_found`: No recall exists with the given recall number. `upstream_error`: The saferproducts.gov API returned a transient error or timed out. `upstream_rejected`: The saferproducts.gov API answered with an error row instead of a recall record, which the same request will always produce. Other values are possible when a failure originates below the handler."
  4. 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": [
      +      "recall_number",
      +      "recall_date",
      +      "last_updated",
      +      "title",
      +      "description",
      +      "cpsc_url",
      +      "consumer_contact",
      +      "hazards",
      +      "remedy_options",
      +      "remedy_instructions",
      +      "products",
      +      "upcs",
      +      "injuries",
      +      "manufacturers",
      +      "importers",
      +      "retailers",
      +      "distributors",
      +      "manufacturer_countries",
      +      "images",
      +      "coordinated_recalls",
      +      "data_quality_notes",
      +      "cpsc_jurisdiction",
      +      "source_note"
      +    ]
      +  },
      +  {
      +    "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: `not_found`: No recall exists with the given recall number `upstream_error`: The saferproducts.gov API returned a transient error or timed out `upstream_rejected`: The saferproducts.gov API answered with an error row instead of a recall record, which the same request will always produce Other values are possible when a failure originates below the handler.",
      +          "examples": [
      +            "not_found",
      +            "upstream_error",
      +            "upstream_rejected"
      +          ],
      +          "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: -[
      -  "recall_number",
      -  "recall_date",
      -  "last_updated",
      -  "title",
      -  "description",
      -  "cpsc_url",
      -  "consumer_contact",
      -  "hazards",
      -  "remedy_options",
      -  "remedy_instructions",
      -  "products",
      -  "upcs",
      -  "injuries",
      -  "manufacturers",
      -  "importers",
      -  "retailers",
      -  "distributors",
      -  "manufacturer_countries",
      -  "images",
      -  "coordinated_recalls",
      -  "data_quality_notes",
      -  "cpsc_jurisdiction",
      -  "source_note"
      -]
  5. Changed1 schema field changed
    • changedOutput schema / properties / remedy_options / description
      Previous value: -"Remedy types available: Refund, Repair, Replace, Dispose, Label, New Instructions."New value: +"Remedy types available: Refund, Repair, Replace, New Instructions, Dispose, Label, No Remedy Available, Inspect. Often empty — CPSC classified the remedy on fewer than half its records. Read remedy_instructions when this is empty, and fall back to cpsc_url when that is empty too, rather than reporting that no remedy exists."
  6. Changed6 schema fields changed
    • addedOutput schema / properties / data_quality_notes
      Added value: +{
      +  "description": "Gaps this server observed in the upstream CPSC record — absent description, absent hazard text, absent product entries. Derived from which fields CPSC left empty, not from any judgement about the recall itself. Empty when nothing is missing.",
      +  "items": {
      +    "description": "One gap found in the upstream record.",
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / description / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / description / description
      Previous value: -"Full recall description including product identification details. Model numbers are typically embedded here, not in a structured field."New value: +"Full recall description including product identification details. Model numbers are typically embedded here, not in a structured field. Null when CPSC published the record without a description — rare, but a genuine record can still be complete otherwise."
    • removedOutput schema / properties / description / type
      Removed value: -"string"
    • addedOutput schema / properties / source_note
      Added value: +{
      +  "description": "Provenance caveat: recall fields are relayed from CPSC unedited and unverified; check cpsc_url before a consumer-facing decision.",
      +  "type": "string"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "recall_number",
      -  "recall_date",
      -  "last_updated",
      -  "title",
      -  "description",
      -  "cpsc_url",
      -  "consumer_contact",
      -  "hazards",
      -  "remedy_options",
      -  "remedy_instructions",
      -  "products",
      -  "upcs",
      -  "injuries",
      -  "manufacturers",
      -  "importers",
      -  "retailers",
      -  "distributors",
      -  "manufacturer_countries",
      -  "images",
      -  "coordinated_recalls",
      -  "cpsc_jurisdiction"
      -]New value: +[
      +  "recall_number",
      +  "recall_date",
      +  "last_updated",
      +  "title",
      +  "description",
      +  "cpsc_url",
      +  "consumer_contact",
      +  "hazards",
      +  "remedy_options",
      +  "remedy_instructions",
      +  "products",
      +  "upcs",
      +  "injuries",
      +  "manufacturers",
      +  "importers",
      +  "retailers",
      +  "distributors",
      +  "manufacturer_countries",
      +  "images",
      +  "coordinated_recalls",
      +  "data_quality_notes",
      +  "cpsc_jurisdiction",
      +  "source_note"
      +]
  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 and idempotentHint, so the safety profile is covered. The description adds behavioral context by listing the full set of returned components, the prerequisite of having a valid recall number, and the jurisdictional limit. It does not contradict the annotations; no destructive or state-changing behavior is implied.

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, each serving a distinct purpose: what the tool returns, how to get the input, and jurisdictional scope. It is front-loaded with the core action and content list, with no filler or redundancy.

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 single-parameter read tool with an output schema and annotations, the description is materially complete. It covers prerequisites, included data, and exceptions. It does not explain error responses, but the simple nature of the tool and the presence of an output schema make that non-critical.

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 coverage is 100%, so the baseline is 3. The description adds value beyond the schema by telling the agent where to obtain a recall number (from cpsc_search_recalls or cpsc_get_recent), which is not in the schema. It also reinforces that recall_number is the unique lookup key, making it clear how to populate the single required parameter.

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 'Fetch the full record for one CPSC recall by recall number' — a specific verb and resource — then enumerates exactly what is included (hazard description, remedy, variants, UPCs, incidents, images, URL). It clearly distinguishes from siblings: cpsc_search_recalls returns a list, cpsc_get_recent returns recent recalls, while this tool returns a single full detail record.

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 explicitly says 'Get a recall number from cpsc_search_recalls or cpsc_get_recent,' giving a prerequisite and pointing to the sibling tools that supply the input. It also provides an exclusion rule by listing agencies for non-consumer products (FDA, NHTSA, etc.), clarifying when not to use CPSC. It lacks a direct 'use this instead of X when...' comparison, but the context is clear enough that an agent can determine when to invoke it.

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.