Koskamo

Zovo Product Recall Check MCP

An MCP server that screens inventory against live consumer-product recall records from the U.S. CPSC. It allows agents to check up to 100 stock items by UPC, model, or product words, search recall records by keyword and date range, read full recall details, and download screening spreadsheets.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Zovo Product Recall Check MCP logo, by ZovoCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-01Published by Zovo
MCP endpoint (Streamable HTTP)
https://product-recalls.zovo.one/mcp
Vendor documentation

What you can do with it

  • Check inventory for recalls by UPC or model number
  • Search recall records by keyword and date range
  • Read full recall records and source links
  • Download screening spreadsheets with action taken column

Source and maintenance

Community listingRegistry 1.0.0

Protocol and capabilities

Server
product-recalls 1.0.0
MCP protocol
2025-06-18
Tools
3 advertised
Resources
1 advertised
Resource templates
1 advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "resources": {
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Screen consumer-product stock lists against live CPSC recall records. Show word matches as Possible match - verify. Include failed-year warnings and the coverage statement. Download files expire in about an hour.

Tools

3 advertised

check_inventory_for_recalls — Check inventory for recalls
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Use this when the user wants to check my inventory for recalls, check items against cpsc recalls, or run a resale recall check. Reads live consumer-product recall data and generates XLSX and CSV screening files for 1–100 items, from a chosen year since 2000. Word matches require verification; models written with spaces can be missed. Do not use for food, drugs or vehicle recalls.

check_inventory_for_recalls input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "items"
  ],
  "properties": {
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "product"
        ],
        "properties": {
          "upc": {
            "type": "string",
            "maxLength": 20,
            "description": "Optional UPC with 8, 12, 13 or 14 digits. Example: 860006498115."
          },
          "brand": {
            "type": "string",
            "maxLength": 100,
            "description": "Optional brand printed on the item. Example: Acme."
          },
          "model": {
            "type": "string",
            "maxLength": 60,
            "description": "Optional model number including a digit. Example: TL1302Z."
          },
          "product": {
            "type": "string",
            "maxLength": 200,
            "description": "Product name, 2–200 characters; blank names receive a row error. Example: thermal laminator."
          }
        }
      },
      "maxItems": 100,
      "minItems": 1,
      "description": "Stock list in input order, 1–100 items. Example: [{\"product\":\"thermal laminator\",\"model\":\"TL1302Z\"}]."
    },
    "recalled_since_year": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": 2000,
      "description": "First announcement year through the current UTC year; defaults to current year minus 14. Example: 2026."
    }
  }
}
check_inventory_for_recalls output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "kind",
    "total_items",
    "records_checked",
    "recalled_since_year",
    "counts",
    "rows",
    "downloads",
    "source",
    "source_url",
    "retrieved_utc",
    "coverage",
    "failed_years"
  ],
  "properties": {
    "kind": {
      "type": "string"
    },
    "rows": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "row",
          "product",
          "brand",
          "model",
          "upc",
          "status",
          "match_basis",
          "recall_number",
          "recall_date",
          "title",
          "hazard",
          "remedy",
          "recall_url",
          "other_matches",
          "note"
        ],
        "properties": {
          "row": {
            "type": "number"
          },
          "upc": {
            "type": "string"
          },
          "note": {
            "type": "string"
          },
          "brand": {
            "type": "string"
          },
          "model": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "hazard": {
            "type": "string"
          },
          "remedy": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "product": {
            "type": "string"
          },
          "recall_url": {
            "type": "string"
          },
          "match_basis": {
            "type": "string"
          },
          "recall_date": {
            "type": "string"
          },
          "other_matches": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "recall_number": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "counts": {
      "type": "object",
      "required": [
        "Recall found",
        "Possible match - verify",
        "No matching recall found in CPSC data",
        "Error"
      ],
      "properties": {
        "Error": {
          "type": "number"
        },
        "Recall found": {
          "type": "number"
        },
        "Possible match - verify": {
          "type": "number"
        },
        "No matching recall found in CPSC data": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "source": {
      "type": "string"
    },
    "coverage": {
      "type": "string"
    },
    "downloads": {
      "type": "object",
      "required": [
        "xlsx",
        "csv"
      ],
      "properties": {
        "csv": {
          "type": "string"
        },
        "xlsx": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "source_url": {
      "type": "string"
    },
    "total_items": {
      "type": "number"
    },
    "failed_years": {
      "type": "array",
      "items": {
        "type": "number"
      }
    },
    "retrieved_utc": {
      "type": "string"
    },
    "records_checked": {
      "type": "number"
    },
    "recalled_since_year": {
      "type": "number"
    }
  },
  "additionalProperties": false
}
check_inventory_for_recalls annotations
{
  "title": "Check inventory for recalls",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
search_recalls — Search recalls
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Use this when the user wants product recalls, a recall list, or a consumer product recall search. Searches live consumer-product data by keyword and dates touching at most 15 calendar years since 2000; previews up to 20 rows and exports the newest 2,000 to XLSX and CSV. Do not use for food, drugs or vehicle recalls.

search_recalls input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "date_to": {
      "type": "string",
      "maxLength": 10,
      "description": "Inclusive YYYY-MM-DD no later than today UTC; defaults to today UTC. Example: 2026-10-21."
    },
    "keywords": {
      "type": "string",
      "maxLength": 100,
      "description": "Product, brand, hazard, UPC or model keywords; blank lists the date range. Example: laminator."
    },
    "match_in": {
      "enum": [
        "any",
        "product",
        "brand",
        "hazard",
        "title"
      ],
      "type": "string",
      "description": "Field for word matching; default any. Example: hazard."
    },
    "date_from": {
      "type": "string",
      "maxLength": 10,
      "description": "Inclusive YYYY-MM-DD from 2000, defaults to 365 days before date_to. Example: 2026-10-01."
    }
  }
}
search_recalls output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "kind",
    "total_count",
    "exported_count",
    "date_from",
    "date_to",
    "keywords",
    "match_in",
    "rows",
    "downloads",
    "source",
    "source_url",
    "retrieved_utc",
    "coverage",
    "failed_years"
  ],
  "properties": {
    "kind": {
      "type": "string"
    },
    "rows": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "recall_number",
          "recall_date",
          "title",
          "products",
          "hazard",
          "remedy",
          "recall_url",
          "note"
        ],
        "properties": {
          "note": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "hazard": {
            "type": "string"
          },
          "remedy": {
            "type": "string"
          },
          "products": {
            "type": "string"
          },
          "recall_url": {
            "type": "string"
          },
          "recall_date": {
            "type": "string"
          },
          "recall_number": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "source": {
      "type": "string"
    },
    "date_to": {
      "type": "string"
    },
    "coverage": {
      "type": "string"
    },
    "keywords": {
      "type": "string"
    },
    "match_in": {
      "type": "string"
    },
    "date_from": {
      "type": "string"
    },
    "downloads": {
      "type": "object",
      "required": [
        "xlsx",
        "csv"
      ],
      "properties": {
        "csv": {
          "type": "string"
        },
        "xlsx": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "source_url": {
      "type": "string"
    },
    "total_count": {
      "type": "number"
    },
    "failed_years": {
      "type": "array",
      "items": {
        "type": "number"
      }
    },
    "retrieved_utc": {
      "type": "string"
    },
    "exported_count": {
      "type": "number"
    }
  },
  "additionalProperties": false
}
search_recalls annotations
{
  "title": "Search recalls",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_recall_details — Get recall details
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Use this when the user wants cpsc recalls, a recalled products list, or is this product recalled and has a recall number. Reads full live records for 1–10 recall numbers, including hazard, remedy, contact, retailers, units, UPCs and image links; missing records receive per-number errors. Do not use for recalls outside consumer products.

get_recall_details input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "recall_number"
  ],
  "properties": {
    "recall_number": {
      "type": "array",
      "items": {
        "type": "string",
        "pattern": "^[0-9A-Za-z-]+$",
        "maxLength": 8,
        "minLength": 4,
        "description": "A recall identifier of 4–8 letters, digits or hyphens. Example: 27024."
      },
      "maxItems": 10,
      "minItems": 1,
      "description": "One to ten recall numbers. Example: [\"27024\"]."
    }
  }
}
get_recall_details output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "kind",
    "total_count",
    "rows",
    "source",
    "source_url",
    "retrieved_utc",
    "coverage",
    "failed_years"
  ],
  "properties": {
    "kind": {
      "type": "string"
    },
    "rows": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "requested_number",
          "status",
          "recall_number",
          "recall_date",
          "title",
          "recall_url",
          "error"
        ],
        "properties": {
          "error": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "recall_url": {
            "type": "string"
          },
          "recall_date": {
            "type": "string"
          },
          "recall_number": {
            "type": "string"
          },
          "requested_number": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "source": {
      "type": "string"
    },
    "coverage": {
      "type": "string"
    },
    "source_url": {
      "type": "string"
    },
    "total_count": {
      "type": "number"
    },
    "failed_years": {
      "type": "array",
      "items": {
        "type": "number"
      }
    },
    "retrieved_utc": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
get_recall_details annotations
{
  "title": "Get recall details",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

1 advertised

product-recalls-widget — Zovo Product Recall Check view

Advertised by the server during the last successful anonymous check.

Interactive view for Zovo Product Recall Check.

product-recalls-widget URI
ui://widget/product-recalls-v2-1.0.0-49ea0c9337a5a2e445b43ef478d47a057af6ca1bb6bfa2057641cae60595184f.html

MIME type: text/html;profile=mcp-app

product-recalls-widget-legacy — Zovo Product Recall Check view (previous versions)

Advertised by the server during the last successful anonymous check.

product-recalls-widget-legacy URI template
ui://widget/product-recalls-{version}.html

MIME type: text/html;profile=mcp-app

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
933 ms
95th percentile latency
933 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 933 ms · metadata changed · 3 tool(s), 1 resource(s), 1 resource template(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http zovo-product-recall-check-mcp https://product-recalls.zovo.one/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add zovo-product-recall-check-mcp --url https://product-recalls.zovo.one/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable zovo-product-recall-check-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "zovo-product-recall-check-mcp": {
      "url": "https://product-recalls.zovo.one/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "zovo-product-recall-check-mcp": {
      "type": "streamableHttp",
      "url": "https://product-recalls.zovo.one/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start zovo-product-recall-check-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "zovo-product-recall-check-mcp": {
      "type": "http",
      "url": "https://product-recalls.zovo.one/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http zovo-product-recall-check-mcp https://product-recalls.zovo.one/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "zovo-product-recall-check-mcp": {
      "url": "https://product-recalls.zovo.one/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "zovo-product-recall-check-mcp": {
      "serverUrl": "https://product-recalls.zovo.one/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Zovo Product Recall Check MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.