Skip to main content
Glama
arhancanli

recall-check-mcp

Recall Check

CI npm downloads OpenSSF Scorecard License: MIT

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

exact

The UPC matched, or every term matched including a model number of 5+ characters

high

Every term matched in the recall's title, product name or firm

medium

Every term matched, some only in the description or reason

low

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

Install in Cursor Install in VS Code Install in Goose

Needs Node.js 20 or newer. No account or key.

Claude Code

claude mcp add recall-check -- npx -y recall-check-mcp

Claude 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-mcp

Hosted (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

check_recalls

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.

recent_recalls

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.

vehicle_recalls

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.json under factory.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.

  • The whole collection

License

MIT, Copyright (c) 2026 Arhan Canli.

Available Tools

3 tools
check_recallsCheck a product for recallsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
upcNoBarcode digits
queryNoProduct, brand or model
sinceNoYYYY-MM-DD
sourcesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
totalYes
resultsYes
searchedYes

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 recallsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoDefault 14
agencyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
sinceYes
totalYes
resultsYes

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 recallsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
vinNo
makeNo
yearNo
modelNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
totalYes
recallsYes
vehicleYes

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

  1. 3 tool updatesv0.1.0
    • First observedcheck_recalls
    • First observedrecent_recalls
    • First observedvehicle_recalls

TDQS

A4.1/5.0

Scored across 3 tools

Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers