recall-check-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@recall-check-mcpIs the Fisher-Price Rock n Play sleeper recalled?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Recall Check
Is this product recalled? One question, every US agency that answers it: CPSC for consumer products, FDA for food, drugs and medical devices, NHTSA for vehicles. Search by product name, brand, model number or UPC, or give a VIN.
Recall data is split across agencies that each publish it differently, and the existing servers each cover one of them. Recall Check asks CPSC and all three FDA report streams in one call, scores every record against the whole query, and says how sure each match is:
Confidence | Meaning |
| The UPC matched, or every term matched including a model number of 5+ characters |
| Every term matched in the recall's title, product name or firm |
| Every term matched, some only in the description or reason |
| All but one term matched; shown only when nothing matched fully, and flagged as near matches |
Barcodes are compared in every form agencies print them (12 digits, the 10-digit core FDA often lists, 11 digits without the check digit, UPC-E), and a VIN's check digit is verified, so a mistyped VIN is reported instead of silently looked up.
No match is not proof a product is safe: the answer says which agencies were searched, when more reports exist than were read, and that FDA publishes enforcement reports weekly and a week or two behind. USDA meat and poultry recalls (FSIS) are not included, because FSIS's API refuses automated requests.
No account or key needed. Built and maintained by Arhan Canli.
Install
Needs Node.js 20 or newer. No account or key.
Claude Code
claude mcp add recall-check -- npx -y recall-check-mcpClaude Desktop: download recall-check-mcp-<version>.mcpb from the latest release and open it. The bundle is signed; verify it with gh attestation verify <file> --repo arhancanli/recall-check-mcp.
Any other client (Windsurf, Zed, Cline, Continue and others), in its MCP config file:
{
"mcpServers": {
"recall-check": {
"command": "npx",
"args": [
"-y",
"recall-check-mcp"
]
}
}
}Docker
docker build -t recall-check-mcp https://github.com/arhancanli/recall-check-mcp.git && docker run -i --rm recall-check-mcpHosted (Streamable HTTP): node src/server.mjs --http serves stateless MCP at POST /mcp (port from PORT, default 3000).
Related MCP server: FDA API MCP Service
Example
An agent calls check_recalls with:
{
"query": "Fisher-Price Rock n Play sleeper"
}and gets back (recorded from the live server on 2026-09-26):
{
"searched": [
"CPSC (consumer products)",
"FDA (food)",
"FDA (drugs)",
"FDA (medical devices)"
],
"total": 3,
"results": [
{
"agency": "CPSC (consumer products)",
"id": "23088",
"date": "2023-01-09",
"title": "Fisher-Price Reannounces Recall of 4.7 Million Rock 'n Play Sleepers; At Least Eight Deaths Occurred After Recall",
"product": "All models of Rock 'n Play Sleepers",
"firm": "Fisher-Price, of East Aurora, New York",
"hazard": "Infant fatalities have occurred in the Rock 'n Play Sleepers, after the infants rolled from their back to their stomach or side while unrestrained, or under other circumstances.",
"remedy": "Consumers should stop using the Rock 'n Play immediately and contact Fisher-Price for a refund or voucher. It is illegal to sell or distribute the recalled sleepers.",
"units": "About 4.7 million (The original recall was announced on April 12, 2019)",
"injuries": "On April 12, 2019, at the time the original recall was announced, over 30 fatalities were reported to have occurred in the Rock 'n Play Sleepers after the infants rolled from their back to their stomach or side while unrestrained, or under other circ [clipped: 446 more characters]",
"sold_at": "Major stores nationwide including Walmart, Target, and online at Amazon from September 2009 through April 2019 for between $40 and $149.",
"url": "https://www.cpsc.gov/Recalls/2023/Fisher-Price-Reannounces-Recall-of-4-7-Million-Rock-n-Play-Sleepers-At-Least-Eight-Deaths-Occurred-After-Recall",
"confidence": "high",
"matched": [
"fisher",
"price",
"rock",
"play",
"sleeper"
]
},
{
"agency": "CPSC (consumer products)",
"id": "19105",
"date": "2019-04-12",
"title": "Fisher-Price Recalls Rock 'n Play Sleepers Due to Reports of Deaths",
"product": "All Models of Rock 'n Play Sleeper",
"firm": "Fisher-Price, of East Aurora, N.Y.",
"hazard": "Infant fatalities have occurred in Rock 'n Play Sleepers, after the infants rolled from their back to their stomach or side while unrestrained, or under other circumstances.",
"remedy": "Consumers should immediately stop using the product and contact Fisher-Price for a refund or voucher.",
"units": "About 4.7 million products",
"injuries": "Since the 2009 product introduction, over 30 infant fatalities have occurred in Rock 'n Play Sleepers, after the infants rolled over while unrestrained, or under other circumstances.",
"sold_at": "Major retailers for approximately $40 to $149.",
"url": "https://www.cpsc.gov/Recalls/2019/Fisher-Price-Recalls-Rock-n-Play-Sleepers-Due-to-Reports-of-Deaths",
"confidence": "high",
"matched": [
"fisher",
"price",
"rock",
"play",
"sleeper"
]
},
{
"agency": "CPSC (consumer products)",
"id": "13087",
"date": "2013-01-08",
"title": "Fisher-Price Recalls to Inspect Rock 'N Play Infant Sleepers Due to Risk of Exposure to Mold",
"product": "Newborn Rock 'n Play Sleeper™",
"firm": "Fisher-Price Inc., of East Aurora, N.Y.",
... (18 more lines)Tools
Tool | What it does |
| Searches US recalls for a product by name, brand, model number or UPC across CPSC consumer products and FDA food, drugs and devices in one call. Each match has a confidence (exact, high, medium, low), the hazard or reason, remedy and date. No match is not proof of safety. |
| The newest US recalls from CPSC and FDA (food, drugs, devices) over the last N days (up to 90), newest first, optionally one agency only. |
| NHTSA safety recalls for a vehicle by VIN (decoded, with its check digit verified) or by make, model and year: campaign number, date, component, summary, consequence, remedy, and whether to park it or park outside. Recall campaigns apply to the model, not proof a given VIN is still unrepaired. |
How it behaves
Read-only: no tool changes anything outside this process.
Network: HTTPS only, to the hosts listed in
package.jsonunderfactory.allowHosts, with a deadline, a size cap and bounded retries; a stalled read is retried. Nothing else is contacted, and nothing is logged except unexpected failures (to stderr, without your inputs).Agencies are asked in parallel, each within its limits (openFDA allows 240 requests per minute without a key); answers are cached for an hour.
FDA device reports can list thousands of serial numbers; only the first 20,000 characters of those lists are read, and fewer device reports are fetched per query, so an answer stays fast and small.
Results are compact JSON with a matching output schema.
Benchmark
Measured 2026-09-26 with gpt-5.4-mini, 10 fixed tasks graded by fixed checks (bench/tasks.json, raw results in bench/results/).
Server | Correct | Input tokens | Output tokens | Tool calls | Median time |
This server | 6/10 | 26340 | 773 | 21 | 4.8 s |
Performance
Measured 2026-09-26 from Dubai, home connection against the live upstream, Node 24.19.0 (bench/perf.json, scripts/perf.mjs in the factory).
Call | First call | Repeat | Result size |
check_recalls: Fisher-Price Rock n Play sleeper | 2741 ms | 2.7 ms | 4,254 chars |
check_recalls: insulin pump (FDA devices) | 3022 ms | 4.7 ms | 7,563 chars |
check_recalls: peanut butter, FDA food only | 2552 ms | 4.6 ms | 5,713 chars |
vehicle_recalls: 2018 Honda Accord | 331 ms | 0.5 ms | 6,617 chars |
vehicle_recalls: a VIN with a wrong check digit | 827 ms | 0.5 ms | 6,764 chars |
recent_recalls: last 7 days | 2713 ms | 1.1 ms | 12,776 chars |
First call: a fresh server process, including the TLS connection and the upstream's own time. Repeat: the same call again, answered from the in-process cache, so it shows this server's own overhead.
Tool definitions the model reads on every turn (name, description, input schema): 1,765 characters, against 10,121 for @cyanheads/cpsc-recalls-mcp-server, the most downloaded recall server. The full tool list, with the output schemas and annotations clients use to validate results, is 3,187 characters (28,479 for the alternative).
Data sources
CPSC recalls through the SaferProducts.gov REST service.
openFDA food, drug and device enforcement reports.
NHTSA recalls by vehicle, and VIN decoding through NHTSA vPIC.
All are US government services. They do not endorse this server.
More MCP servers by Arhan Canli
Citation Check: Verifies citations: finds fabricated or mismatched references and retractions, returns clean BibTeX.
Drug Label: FDA drug label answers with section citations, RxNorm name resolution, recalls and shortages.
End of Life: Is this version still supported? EOL dates, latest patch and upgrade target for 470+ products.
Internet Standards: RFC sections, status, obsoleted-by chains, errata and IANA registries for coding agents.
Package Truth: Checks packages exist before install: version, deprecation, vulnerabilities, licence. 7 ecosystems.
Satellite Imagery: Find the clearest Sentinel-2, Landsat, Sentinel-1 or NAIP scene for any place, with band links.
License
MIT, Copyright (c) 2026 Arhan Canli.
Available Tools
3 toolscheck_recallsCheck a product for recallsARead-onlyIdempotent
Searches US recalls for a product by name, brand, model number or UPC across CPSC consumer products and FDA food, drugs and devices in one call. Each match has a confidence (exact, high, medium, low), the hazard or reason, remedy and date. No match is not proof of safety.
| Name | Required | Description | Default |
|---|---|---|---|
| upc | No | Barcode digits | |
| query | No | Product, brand or model | |
| since | No | YYYY-MM-DD | |
| sources | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | |
| results | Yes | |
| searched | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false, so the safety profile is covered. The description adds valuable behavioral context beyond annotations: it warns that 'No match is not proof of safety,' and notes each match has a confidence level, which is not in the annotations. It does not contradict any annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The first sentence front-loads the action, scope, and output content; the second adds a critical caveat. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, scope, output elements, and a caveat. It does not explicitly mention the 'since' filter or that vehicle recalls are excluded, but those are inferable from the schema and sibling tools. The presence of an output schema means return-value details need not be repeated. Overall it gives an agent enough to call it correctly for most cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75% (3 of 4 params have descriptions). The description reinforces the meaning of 'query' (product, brand, model) and 'upc' (barcode) by listing search keys. It does not add to 'since' (filter by date) or 'sources' (agency enum), but those are reasonably self-explanatory from the schema (pattern and enum). The description adds enough value for the main search parameters to exceed the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Searches'), a clear resource ('US recalls'), and the exact scope ('CPSC consumer products and FDA food, drugs and devices'). It also enumerates search keys (name, brand, model number, UPC) and output elements (confidence, hazard, remedy, date). This distinguishes it from sibling vehicle_recalls, which is not mentioned but clearly outside the stated agencies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it (for CPSC/FDA recalls) and implicitly that vehicle_recalls would be for vehicles, but it never explicitly says 'use vehicle_recalls for vehicles' or 'use recent_recalls for recent lists.' It provides clear context (US, CPSC/FDA) but lacks explicit exclusions or alternative selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recent_recallsRecent recallsARead-onlyIdempotent
The newest US recalls from CPSC and FDA (food, drugs, devices) over the last N days (up to 90), newest first, optionally one agency only.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Default 14 | |
| agency | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| since | Yes | |
| total | Yes | |
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds useful behavioral context such as 'newest first' and 'up to 90' days, but does not go much beyond that. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The entire description is one efficient, front-loaded sentence that conveys scope, source, time range, ordering, and optional filtering without any filler or redundant wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only listing tool with two optional parameters and an output schema present, the description provides the essential operational details: data sources, time window, filtering, and order. Minor gaps like an explicit all-agencies default are not material given the schema covers the default.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema description coverage at only 50%, the description compensates by clarifying that 'days' is a lookback window capped at 90 and that 'agency' is an optional single-agency filter. The enum values are self-explanatory, so the added meaning is adequate for both parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly names a specific resource ('newest US recalls from CPSC and FDA') and the operation scope, with a time window and optional agency filter. It does not explicitly distinguish itself from sibling tools check_recalls or vehicle_recalls, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it: to retrieve recent recalls within a certain number of days, optionally filtered by agency. However, it provides no explicit guidance on when to prefer this tool over check_recalls or vehicle_recalls, nor any exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vehicle_recallsVehicle recallsARead-onlyIdempotent
NHTSA safety recalls for a vehicle by VIN (decoded, with its check digit verified) or by make, model and year: campaign number, date, component, summary, consequence, remedy, and whether to park it or park outside. Recall campaigns apply to the model, not proof a given VIN is still unrepaired.
| Name | Required | Description | Default |
|---|---|---|---|
| vin | No | ||
| make | No | ||
| year | No | ||
| model | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | |
| recalls | Yes | |
| vehicle | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds genuine behavioral context beyond that: VIN input is decoded with its check digit verified, and the caveat that recall campaigns apply to the model, not proof a given VIN is unrepaired, sets clear expectations about result interpretation. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler; the first front-loads the purpose, lookup modes, and output fields, and the second adds a single high-value caveat. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema covers return structure and annotations cover the read-only/idempotent profile, the description covers purpose, lookup modes, output contents, and a key interpretive caveat. The main gap is parameter combination semantics (all four params optional, alternative lookup modes), which an agent would need to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description carries the full burden of parameter meaning and largely meets it: it explains that vin is one lookup key (decoded, check-digit verified) and that make, model, and year form an alternative lookup path. It does not clarify combination rules, such as whether VIN and make/model/year are mutually exclusive or what happens if no parameters are supplied.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource — 'NHTSA safety recalls for a vehicle' — and enumerates the two lookup modes (VIN or make/model/year) plus the exact fields returned (campaign number, date, component, summary, consequence, remedy, park status). The closing caveat about model-level applicability clarifies what the tool does and does not prove, which helps an agent distinguish it from a repair-status checker.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool — when recall information for a vehicle is needed — and warns that results are model-level, not proof a VIN is unrepaired. However, it never names the sibling tools (recent_recalls, check_recalls) or states when one should be preferred, so routing guidance is left implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
v0.1.0- First observed
check_recalls - First observed
recent_recalls - First observed
vehicle_recalls
TDQS
Scored across 3 tools
Each tool has a clearly distinct query mode: recent_recalls is temporal/agency browsing, check_recalls is product-name/UPC search across CPSC/FDA, and vehicle_recalls is VIN/make-model lookup for NHTSA. Though recent_recalls and check_recalls both cover CPSC/FDA, one is a listing by date and the other is a targeted search, so agents should not confuse them.
All names follow the same _recalls suffix and snake_case convention, with descriptive prefixes: recent, check, vehicle. This is not a strict verb_noun pattern throughout, but the pattern is predictable and readable enough that agents can infer each tool's scope from its name.
Three tools is a well-scoped set for a recall-checking server: one for browsing recent recalls, one for product search, and one for vehicle-specific recalls. Each tool serves a distinct and necessary purpose with no redundancy or filler.
The tool surface covers the primary recall workflows: recent recalls, product recall search, and vehicle recalls by VIN or vehicle attributes. Minor gaps exist, such as no direct recall-detail lookup by recall ID and no single unified search across CPSC, FDA, and NHTSA, but agents can work around these by combining the available tools.
Maintenance
Related MCP Connectors
Search U.S. product recalls (CPSC, FDA, NHTSA, FSIS) by product, brand, model, or UPC code.
Check a product's recall risk: score + active CPSC/FDA/NHTSA recalls for a product or brand.
Search U.S. FDA, USDA FSIS, and CPSC recalls, fetch one, or diff since a date. API key or x402.
Search recall records by company name or product keywords.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceAccess US consumer-product safety recalls from the CPSC, free and without authentication.4 npmMIT
- FlicenseNot gradedqualityDmaintenanceEnables searching FDA food recalls and adverse event reports through natural language, supporting filters and pagination.-

deeprecall-mcpofficial
AlicenseNot gradedqualityDmaintenanceSearch 120,000+ recalled products from CPSC, FDA, EU Safety Gate, and other global agencies via MCP. Enables AI agents to check product safety by text or image.Apache 2.0- AlicenseNot gradedqualityDmaintenanceEnables instant U.S. vehicle recall lookup by make, model, and year using official NHTSA data.MIT