@cyanheads/cpsc-recalls-mcp-server

v0.1.1 pre-1.0

MCP server for US consumer product recalls from the Consumer Product Safety Commission — hazards, remedies, and affected products.

@cyanheads/cpsc-recalls-mcp-server
claude mcp add --transport http cpsc-recalls-mcp-server https://cpsc-recalls.caseyjhand.com/mcp
codex mcp add cpsc-recalls-mcp-server --url https://cpsc-recalls.caseyjhand.com/mcp
{
  "mcpServers": {
    "cpsc-recalls-mcp-server": {
      "url": "https://cpsc-recalls.caseyjhand.com/mcp"
    }
  }
}
gemini mcp add --transport http cpsc-recalls-mcp-server https://cpsc-recalls.caseyjhand.com/mcp
{
  "mcpServers": {
    "cpsc-recalls-mcp-server": {
      "command": "bunx",
      "args": [
        "@cyanheads/cpsc-recalls-mcp-server@latest"
      ]
    }
  }
}
{
  "mcpServers": {
    "cpsc-recalls-mcp-server": {
      "type": "http",
      "url": "https://cpsc-recalls.caseyjhand.com/mcp"
    }
  }
}
curl -X POST https://cpsc-recalls.caseyjhand.com/mcp \
  -H "Content-Type: application/json" \
  -H "MCP-Protocol-Version: 2025-11-25" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"curl","version":"1.0.0"}}}'

Tools

3

cpsc_search_recalls

Search consumer product recalls from the CPSC (Consumer Product Safety Commission) database. Covers toys, electronics, furniture, appliances, children's products, tools, and clothing — everything under CPSC jurisdiction. Does NOT cover food/drugs (FDA), motor vehicles/tires (NHTSA), boats (USCG), or pesticides (EPA). All filter fields are optional substring matches that combine with AND. For hazard-type filtering ("fire", "choking", "burn"), use description_search — the dedicated Hazard filter is non-functional in the upstream API. When manufacturer returns no results, try importer or retailer: many recalls list the importer or retailer as the primary responsible org. Use cpsc_get_recall with a recall_number from results to retrieve the full record including complete description, all images, and incident reports.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "cpsc_search_recalls",
    "arguments": {}
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "product_name": {
      "description": "Product name to search for, e.g. \"crib\", \"space heater\", \"bicycle\". Substring match — partial names work.",
      "type": "string"
    },
    "manufacturer": {
      "description": "Manufacturer name, e.g. \"Samsung\", \"LEGO\". Substring match against the Manufacturers array. Note: many recalls list the importer or retailer as the primary org rather than the manufacturer — try importer or retailer if this returns no results.",
      "type": "string"
    },
    "retailer": {
      "description": "Retailer name, e.g. \"Walmart\", \"Target\", \"Amazon\". Substring match against the retailer narrative (which includes store name, dates sold, and price).",
      "type": "string"
    },
    "importer": {
      "description": "Importer company name. Use when searching for recalls by the company that brought the product into the US.",
      "type": "string"
    },
    "description_search": {
      "description": "Keyword search within the recall Description field only (does not search Title or Hazards text). Use for hazard types like \"fire\", \"choking\", \"burn\", or to find product details not captured in product_name. Note: hazard keywords often appear in the Description field — this is the correct filter for hazard-type searching since the Hazard filter param is non-functional upstream.",
      "type": "string"
    },
    "date_start": {
      "description": "Include only recalls on or after this date. ISO 8601 format: \"YYYY-MM-DD\".",
      "anyOf": [
        {
          "type": "string",
          "const": ""
        },
        {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
          "description": "ISO 8601 date: \"YYYY-MM-DD\"."
        }
      ]
    },
    "date_end": {
      "description": "Include only recalls on or before this date. ISO 8601 format: \"YYYY-MM-DD\".",
      "anyOf": [
        {
          "type": "string",
          "const": ""
        },
        {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
          "description": "ISO 8601 date: \"YYYY-MM-DD\"."
        }
      ]
    },
    "limit": {
      "default": 20,
      "description": "Maximum number of results to return (applied client-side — the API returns all matches). Defaults to 20.",
      "type": "integer",
      "minimum": 1,
      "maximum": 200
    }
  },
  "required": [
    "limit"
  ],
  "additionalProperties": false
}
view source ↗

cpsc_get_recall

Full detail for a single CPSC recall by recall number. Returns the complete record: hazard description, remedy instructions, all product variants, incident/injury reports, images, and the official CPSC recall page URL. Use after cpsc_search_recalls or cpsc_get_recent to get the full picture on a specific recall. CPSC jurisdiction: consumer products only — food, vehicles, drugs, and pesticides are covered by other agencies.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "cpsc_get_recall",
    "arguments": {
      "recall_number": "<recall_number>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "recall_number": {
      "type": "string",
      "pattern": "^\\d{5}([a-d])?$",
      "description": "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."
    }
  },
  "required": [
    "recall_number"
  ],
  "additionalProperties": false
}
view source ↗

cpsc_get_recent

Fetch the most recent CPSC consumer product recalls, ordered newest-first. Use for "what's been recalled lately?" or a product safety feed. Always applies a date window (default: last 30 days) — without a date filter the API returns all 9,800+ records. CPSC jurisdiction: consumer products only — food, vehicles, drugs, and pesticides are covered by other agencies.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "cpsc_get_recent",
    "arguments": {}
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "days": {
      "default": 30,
      "description": "Look back this many days from today. Defaults to 30. Use 7 for a weekly digest, 90 for a quarterly review.",
      "type": "integer",
      "minimum": 1,
      "maximum": 365
    },
    "limit": {
      "default": 20,
      "description": "Maximum number of recalls to return. Defaults to 20.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    }
  },
  "required": [
    "days",
    "limit"
  ],
  "additionalProperties": false
}
view source ↗