US recall lookup: NHTSA vehicle and VIN recalls, FDA food, drug and device recalls, CPSC products.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Searches US Consumer Product Safety Commission (CPSC) recalls of consumer products such as toys, cribs, strollers, furniture, heaters, e-bikes, batteries and appliances, newest first. Keywords (every word must appear) are matched against the recall title, product names, models and types, description, hazard, firm and retailer names, and UPCs; a CPSC recall number also works. Optional recall-date range. Returns recall number, date, title, products, units, hazard, remedy and the cpsc.gov link. Does not cover vehicles, food, drugs, cosmetics or medical devices.
Results per page (1-10, default 10; at most 5 with detail "full").
Keywords, e.g. "space heater", "IKEA dresser", "magnet", a model number, a UPC or a recall number like 27054. Up to 6 words. Optional if a date range is given.
"brief" (default) keeps each result short; "full" adds the complete text fields.
Number of results to skip, for paging (0-200).
Latest recall date, YYYY-MM-DD.
Earliest recall date, YYYY-MM-DD.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http recalllens https://recalls.trystarrynightops.com/mcp
Searches US Consumer Product Safety Commission (CPSC) recalls of consumer products such as toys, cribs, strollers, furniture, heaters, e-bikes, batteries and appliances, newest first. Keywords (every word must appear) are matched against the recall title, product names, models and types, description, hazard, firm and retailer names, and UPCs; a CPSC recall number also works. Optional recall-date range. Returns recall number, date, title, products, units, hazard, remedy and the cpsc.gov link. Does not cover vehicles, food, drugs, cosmetics or medical devices.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Results per page (1-10, default 10; at most 5 with detail "full"). |
| query | string | Keywords, e.g. "space heater", "IKEA dresser", "magnet", a model number, a UPC or a recall number like 27054. Up to 6 words. Optional if a date range is given. |
| detail | string | "brief" (default) keeps each result short; "full" adds the complete text fields. |
| offset | integer | Number of results to skip, for paging (0-200). |
| date_to | string | Latest recall date, YYYY-MM-DD. |
| date_from | string | Earliest recall date, YYYY-MM-DD. |
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"default": 10,
"maximum": 10,
"minimum": 1,
"description": "Results per page (1-10, default 10; at most 5 with detail \"full\")."
},
"query": {
"type": "string",
"maxLength": 200,
"description": "Keywords, e.g. \"space heater\", \"IKEA dresser\", \"magnet\", a model number, a UPC or a recall number like 27054. Up to 6 words. Optional if a date range is given."
},
"detail": {
"enum": [
"brief",
"full"
],
"type": "string",
"default": "brief",
"description": "\"brief\" (default) keeps each result short; \"full\" adds the complete text fields."
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 200,
"minimum": 0,
"description": "Number of results to skip, for paging (0-200)."
},
"date_to": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Latest recall date, YYYY-MM-DD."
},
"date_from": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Earliest recall date, YYYY-MM-DD."
}
},
"additionalProperties": false
}Searches FDA recall enforcement reports published through openFDA for food, drugs and medical devices, newest report date first. Optional filters: keywords (every word must appear in the product description, reason for recall, recalling firm or lot/code information; "quoted phrases" are kept together), product type, classification (Class I, II or III), status and report-date range. Returns recall number, class, status, firm, product, reason, distribution, dates and a link to the openFDA record. The data is FDA's weekly Enforcement Report (2012 onward), which can lag FDA's recall announcements.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Results per page (1-25, default 10). At most 10 without product_type or for devices, and at most 5 with detail "full". |
| query | string | Keywords, e.g. "peanut butter", "listeria", "insulin pen", a firm name or a lot number. Up to 6 words. Optional. |
| detail | string | "brief" (default) keeps each result short; "full" adds the complete text fields. |
| offset | integer | Number of results to skip, for paging (0-100). Without product_type, offset + limit can be at most 20. |
| status | string | Recall status in the Enforcement Report. |
| date_to | string | Latest Enforcement Report date, YYYY-MM-DD. |
Returns one NHTSA recall campaign by its campaign number (e.g. 20V314000, 20V-314 or 23C001): manufacturer, report date, component, summary, consequence, remedy, potential number of units affected, advisories, and the makes, models and model years it covers. Works for vehicle (V), equipment (E), tire (T) and child seat (C) campaigns.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum number of make/model entries to list (1-200, default 40). |
| detail | string | "brief" (default) keeps each result short; "full" adds the complete text fields. |
| campaign_number* | string | NHTSA campaign number, e.g. "20V314000", "20V-314" or "23C001". |
{
"type": "object",
"required": [
"campaign_number"
],
"properties": {
"limit": {
"type": "integer",
"default": 40,
"maximum": 200,
"minimum": 1,
"description": "Maximum number of make/model entries to list (1-200, default 40)."
},
"detail": {
"enum": [
"brief",
"full"
],
"type": "string",
"default": "brief",
"description": "\"brief\" (default) keeps each result short; \"full\" adds the complete text fields."
},
"campaign_number": {
"type": "string",
"maxLength": 12,
"minLength": 6,
"description": "NHTSA campaign number, e.g. \"20V314000\", \"20V-314\" or \"23C001\"."
}
},
"additionalProperties": false
}Lists NHTSA safety recall campaigns for a US-market vehicle by make, model and model year, newest first: campaign number, report date, component, a short defect summary, the safety risk, the remedy, any "do not drive" or "park outside" advisory, and a link to the NHTSA recall page. If the model name does not match NHTSA's naming, it returns the closest NHTSA model names for that make and year. It covers campaigns issued for the model, not whether a specific vehicle has been repaired.
| Argument | Type | Description |
|---|---|---|
| make* | string | Vehicle make, e.g. "Honda", "Chevrolet", "Ford". Short forms such as "Chevy" and "VW" are accepted. |
| limit | integer | Maximum number of campaigns to return (1-50, default 10). |
| model* | string | Model name, e.g. "Accord", "F-150", "Silverado 1500", "Model 3". |
| detail | string | "brief" (default) keeps each result short; "full" adds the complete text fields. |
| model_year* | integer | Four-digit model year, e.g. 2018. |
{
"type": "object",
"required": [
"make",
"model",
"model_year"
],
"properties": {
"make": {
"type": "string",
"maxLength": 40,
"minLength": 1,
"description": "Vehicle make, e.g. \"Honda\", \"Chevrolet\", \"Ford\". Short forms such as \"Chevy\" and \"VW\" are accepted."
},
"limit": {
"type": "integer",
"default": 10,
"maximum": 50,
"minimum": 1,
"description": "Maximum number of campaigns to return (1-50, default 10)."
},
"model": {
"type": "string",
"maxLength": 60,
"minLength": 1,
"description": "Model name, e.g. \"Accord\", \"F-150\", \"Silverado 1500\", \"Model 3\"."
},
"detail": {
"enum": [
"brief",
"full"
],
"type": "string",
"default": "brief",
"description": "\"brief\" (default) keeps each result short; \"full\" adds the complete text fields."
},
"model_year": {
"type": "integer",
"maximum": 2028,
"minimum": 1949,
"description": "Four-digit model year, e.g. 2018."
}
},
"additionalProperties": false
}Checks a 17-character vehicle identification number (VIN): validates its check digit, decodes make, model and model year with NHTSA's vPIC service (only the first 11 characters are sent, or 14 for low-volume manufacturers; never the serial number), then lists the NHTSA safety recall campaigns issued for that make, model and year, with the same fields as vehicle_recalls. It does not confirm whether this specific vehicle is included in a campaign or has been repaired; NHTSA's own VIN lookup at nhtsa.gov/recalls is the official source for that.
| Argument | Type | Description |
|---|---|---|
| vin* | string | 17-character VIN, e.g. "1HGCV1F37JA000001". Spaces and dashes are ignored; letters I, O and Q never occur in VINs. |
| limit | integer | Maximum number of campaigns to return (1-50, default 10). |
| detail | string | "brief" (default) keeps each result short; "full" adds the complete text fields. |
{
"type": "object",
"required": [
"vin"
],
"properties": {
"vin": {
"type": "string",
"maxLength": 24,
"minLength": 11,
"description": "17-character VIN, e.g. \"1HGCV1F37JA000001\". Spaces and dashes are ignored; letters I, O and Q never occur in VINs."
},
"limit": {
"type": "integer",
"default": 10,
"maximum": 50,
"minimum": 1,
"description": "Maximum number of campaigns to return (1-50, default 10)."
},
"detail": {
"enum": [
"brief",
"full"
],
"type": "string",
"default": "brief",
"description": "\"brief\" (default) keeps each result short; \"full\" adds the complete text fields."
}
},
"additionalProperties": false
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 10, 2026.
| date_from | string | Earliest Enforcement Report date, YYYY-MM-DD. |
| product_type | string | Limit to one FDA product type. Omit to search all three. |
| classification | string | FDA recall class. Class I is the most serious. |
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"default": 10,
"maximum": 25,
"minimum": 1,
"description": "Results per page (1-25, default 10). At most 10 without product_type or for devices, and at most 5 with detail \"full\"."
},
"query": {
"type": "string",
"maxLength": 200,
"description": "Keywords, e.g. \"peanut butter\", \"listeria\", \"insulin pen\", a firm name or a lot number. Up to 6 words. Optional."
},
"detail": {
"enum": [
"brief",
"full"
],
"type": "string",
"default": "brief",
"description": "\"brief\" (default) keeps each result short; \"full\" adds the complete text fields."
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 100,
"minimum": 0,
"description": "Number of results to skip, for paging (0-100). Without product_type, offset + limit can be at most 20."
},
"status": {
"enum": [
"Ongoing",
"Completed",
"Terminated"
],
"type": "string",
"description": "Recall status in the Enforcement Report."
},
"date_to": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Latest Enforcement Report date, YYYY-MM-DD."
},
"date_from": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Earliest Enforcement Report date, YYYY-MM-DD."
},
"product_type": {
"enum": [
"food",
"drug",
"device"
],
"type": "string",
"description": "Limit to one FDA product type. Omit to search all three."
},
"classification": {
"enum": [
"Class I",
"Class II",
"Class III"
],
"type": "string",
"description": "FDA recall class. Class I is the most serious."
}
},
"additionalProperties": false
}