Skip to main content
Glama

Server Details

U.S. federal product recalls from FDA, FSIS, CPSC, and NHTSA, in one schema.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP ยท MCP 2025-11-25
URL

TDQS

A4.5/5.0

Scored across 2 tools

Disambiguation5/5

The two tools form a clear search/fetch pair with no overlap: search_recalls returns abbreviated matches, get_recall returns the full record. Descriptions explicitly state the workflow and cross-reference each other's filters (agency/slug, firm.slug).

Naming Consistency5/5

Both follow a consistent verb_noun pattern (search_recalls, get_recall), and the singular/plural noun distinction correctly signals single-record vs. multi-record operations.

Tool Count4/5

Two tools is thin but well-matched to a read-only recall lookup service where search+detail is the whole workflow. Each tool clearly earns its place with no redundancy.

Completeness5/5

The domain is read-only recall lookup, and search (with rich filtering, pagination, sorting) plus full-record retrieval with cross-links to firm and preliminary release pages fully covers it. No write operations are expected for this service.

Available Tools

2 tools
get_recallGet one recall by agency and slug
Read-only
Inspect

Fetch the full Recall Canary record for a single U.S. federal recall, given the agency and slug returned by search_recalls. Includes the hazard description, the affected product list with lot codes and UPCs, the recommended consumer action, distribution, the agency source link, and the firm slug (firm.slug, with firm.page_url when the firm has a page) for search_recalls' firm filter. Also resolves preliminary agency press releases: an orphan, or a linked one that kept its own URL (its recalls in linked_recalls). Read-only.

NameRequiredDescriptionDefault
slugYesThe record slug from its URL, e.g. "acme-foods-peanut-butter". The 26-character ULID id is also accepted and resolves to what its URL shows (for a matched press release, often its recall).
agencyYesLowercase agency segment from the record URL. Part of the lookup key, not decoration: a correct slug under the wrong agency is a miss.

Output Schema

NameRequiredDescription
idYes
urlYes
firmNo
riskNoThe agency rating as the page shows it (for example "High risk" for an FDA Class I recall). Null where the page shows no risk line.
slugNo
datesNo
notesYesCaveats for this record, including the aggregator-lag and not-a-clearance statement.
titleYesAgency-published title. Never model-written.
agencyYesKnown values: FDA, FDA_IRES, FSIS, CPSC, NHTSA, ADMIN.
reasonNoThe agency's own stated reason, not model-written.
statusNo
licenseYesAttribution and terms (DATA-LICENSE).
relatedNo
categoryNoKnown values: FOOD, DRUG, DEVICE, COSMETIC, CONSUMER_PRODUCT, VEHICLE, AUTO_EQUIPMENT.
html_urlYesAbsolute URL of the human-readable page.
productsNo
severityNoKnown values: CRITICAL, MODERATE, LOW.
timelineNoDated steps of the record, in date order. Each step names who acted on that date.
canonicalYesAbsolute URL of this representation.
firm_nameNo
listed_atNoSince api 2.6.0. The date the listing shows and sorts by; equals this record's search_recalls row. A recall's listing date is in dates.listed_at.
source_urlNoThe agency's own notice.
api_versionYes
descriptionNoFull agency description. FSIS: sanitized HTML; others: plain text. Sanitize or escape before display.
hazard_tagsYes
record_typeYes
snapshot_atYesISO-8601 UTC response-generation time, second precision. First key on purpose.
advisory_urlNo
ai_generatedYesProvenance: true where the field holds model-written text. Over-attributes on purpose.
distributionNo
published_atNoDeprecated: the stored pub_date.
display_titleNo
mcp_truncatedNoPresent only when a long list was cut to 25 for this response.
product_countNoThe true event scope, which may exceed products.length.
story_lead_idNoSet on a later record of a recall story; the lead it belongs to.
critical_flagsNoNHTSA-only in practice. An absent key means the agency did not state the flag. null for a withdrawn (RETRACTED) record.
identificationYesPage-derived identification: the products and codes the record names. Not a completeness guarantee; `partial` says when the list is incomplete, including when this response cut `products` to 25 (`mcp_truncated.identification_products`).
linked_recallsNo
press_releasesNo
story_lead_urlNo
units_affectedNo
consumer_actionNoThe "What to do" text. Null on a withdrawn alert.
display_summaryNo
source_recall_idNoAgency key; a CPSC one can be stale.
content_changed_atYesWhen the published content last changed.
products_truncatedNoTrue when `product_count` exceeds the length of `products`
agency_published_atNo
company_announced_atNo
company_product_listNoThe company's own list of the affected products, when the agency notice points to it instead of naming them. A product missing from `identification` may still be recalled: check this list.
display_summary_shortNo
search_recallsSearch U.S. federal product recalls
Read-only
Inspect

Search the Recall Canary index of U.S. federal product recalls (FDA, FSIS, CPSC, NHTSA) by keyword, agency, severity, category, distribution state, hazard, firm, or date window. Returns up to 50 matching records per page with abbreviated content (title, firm, severity, date, and the canonical URL of each); call get_recall to fetch the full record. With a keyword, the best matches come first unless sort says otherwise. Unknown agency, severity, category, state and date values are rejected with an error message describing the allowed values. An unknown hazard or firm is also an error. Read-only.

NameRequiredDescriptionDefault
qNoFree-text query over one index of canonical recalls and preliminary press releases: titles, firm, product name/brand/description, agency reason text, AI summary, hazard tags, and identifiers (UPC, NDC, lot codes, recall and campaign numbers; codes match as printed or as bare digits, including typed in spaced or dashed groups). Every word must match, in any order; words of 3+ characters also match as prefixes (a 2-letter word matches itself and its plural), a plural also matches its singular, and a double-quoted run is an exact phrase. The one operator is an uppercase OR between two words, binding tighter than the implicit AND (`salmonella OR listeria cheese` = (salmonella OR listeria) AND cheese); NOT and NEAR are ordinary words. If no record matches every word, the results fall back to records matching SOME of them and the response says `relaxed: true` (with a notice): those are not confirmed matches. A `q` with more than 10 distinct words or codes is refused with a tool error, not searched in part. Results are ranked by relevance by default. A `q` with no searchable word (only symbols, punctuation or the operators OR / AND) is refused with a tool error, not browsed: omit `q` to browse by filters. Zero results is never evidence a product is unaffected: agencies print codes inconsistently, so also search the brand or product name and compare codes on the record.
toNoInclusive upper bound, YYYY-MM-DD at 23:59:59 UTC.
dateNoRelative window, resolved against the request clock. Ignored when `from` or `to` is set.
firmNoFirm slug: the firm of one recall, as the `firm.slug` value of a get_recall record, or the last part of a /firm/ page URL (for example "acme-foods"). Matches that firm's recalls and press releases. An unknown or malformed slug is an error, not a dropped filter: no search is returned.
fromNoInclusive lower bound, YYYY-MM-DD at 00:00:00 UTC.
pageNo1-based page number, 50 records per page. Values above 200 clamp to 200; reach deeper archive by narrowing the date window instead. Pass the next page number in this parameter to navigate paginated results.
sortNo`relevance` (the default when `q` is set) puts the best matches first. `recent` orders by listing date descending (the default without `q`). `severity` puts CRITICAL then MODERATE first, date descending within each band.
stateNoTwo-letter USPS code for a U.S. state or DC. Matches records distributed there or flagged nationwide. Territories are not filterable. Note the round trip: this takes a bare code such as "TX", while `distribution.geos` in the response emits ISO 3166-2 ("US-TX").
agencyNoIssuing agencies; matches any. Case-insensitive; values are uppercase.
hazardNoSingle-select hazard tag, lowercase and hyphenated, the same filter as the website hazard pages: matches records whose hazard_tags include it, press releases included. Anything else is an error.
categoryNoSingle-select product category. Case-insensitive; values are uppercase.
severityNoMatches any. The issuing agency's own level (FDA/FSIS class, NHTSA do-not-drive or park-outside warning) on one scale by a fixed rule; null when the agency gave none. A record reporting null can still match MODERATE here. CPSC records are reachable only via UNKNOWN. Preliminary press releases count as UNKNOWN: a filter without UNKNOWN excludes them. Case-insensitive; values are uppercase.

Output Schema

NameRequiredDescription
notesYesThe caveat that absence of a match is not a clearance.
filtersYesThe filters as applied, after normalization. An unapplied filter is echoed as null or [].
licenseYesAttribution and terms (DATA-LICENSE).
noticesYesRules that narrowed or widened the results, stated in band. Empty when none apply.
relaxedYes
resultsYes
html_urlYesAbsolute URL of the human-readable page.
canonicalYesAbsolute URL of this representation.
paginationYes
api_versionYes
snapshot_atYesISO-8601 UTC response-generation time, second precision. First key on purpose.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updates
    • Changedget_recall1 field changed
      • changedOutput schema / properties / identification / description
        Previous value: -"Page-derived identification: the products and codes the record names. Not a completeness guarantee; `partial` says when the list is incomplete."New value: +"Page-derived identification: the products and codes the record names. Not a completeness guarantee; `partial` says when the list is incomplete, including when this response cut `products` to 25 (`mcp_truncated.identification_products`)."
    • Changedsearch_recalls3 fields changed
      • changedInput schema / properties / q / description
        Previous value: -"Free-text query over one index of canonical recalls and preliminary press releases: titles, firm, product name/brand/description, agency reason text, AI summary, hazard tags, and identifiers (UPC, NDC, lot codes, recall and campaign numbers; codes match as printed or as bare digits, including typed in spaced or dashed groups). Every word must match, in any order; words also match as prefixes, a plural also matches its singular, and a double-quoted run is an exact phrase. The one operator is an uppercase OR between two words, binding tighter than the implicit AND (`salmonella OR listeria cheese` = (salmonella OR listeria) AND cheese); NOT and NEAR are ordinary words. If no record matches every word, the results fall back to records matching SOME of them and the response says `relaxed: true` (with a notice): those are not confirmed matches. Results are ranked by relevance by default. A `q` with no searchable word (only symbols, punctuation or the operators OR / AND) is refused with a tool error, not browsed: omit `q` to browse by filters. Zero results is never evidence a product is unaffected: agencies print codes inconsistently, so also search the brand or product name and compare codes on the record."New value: +"Free-text query over one index of canonical recalls and preliminary press releases: titles, firm, product name/brand/description, agency reason text, AI summary, hazard tags, and identifiers (UPC, NDC, lot codes, recall and campaign numbers; codes match as printed or as bare digits, including typed in spaced or dashed groups). Every word must match, in any order; words of 3+ characters also match as prefixes (a 2-letter word matches itself and its plural), a plural also matches its singular, and a double-quoted run is an exact phrase. The one operator is an uppercase OR between two words, binding tighter than the implicit AND (`salmonella OR listeria cheese` = (salmonella OR listeria) AND cheese); NOT and NEAR are ordinary words. If no record matches every word, the results fall back to records matching SOME of them and the response says `relaxed: true` (with a notice): those are not confirmed matches. A `q` with more than 10 distinct words or codes is refused with a tool error, not searched in part. Results are ranked by relevance by default. A `q` with no searchable word (only symbols, punctuation or the operators OR / AND) is refused with a tool error, not browsed: omit `q` to browse by filters. Zero results is never evidence a product is unaffected: agencies print codes inconsistently, so also search the brand or product name and compare codes on the record."
      • changedOutput schema / properties / results / items / description
        Previous value: -"One compacted listing row. Null-valued keys are omitted, so only record_type, id, agency, url, product_count and hazard_tags are guaranteed. `title` and `reason` are not in this projection; call get_recall for the full record."New value: +"One compacted listing row. Null-valued keys are omitted, so only record_type, id, agency, url, product_count and hazard_tags are guaranteed, and every row carries `display_title` or `title`. `reason` is not in this projection; call get_recall for the full record."
      • addedOutput schema / properties / results / items / properties / title
        Added value: +{
        +  "description": "Only when `display_title` is absent (a record not yet enriched): the title recallcanary.com shows for it, from the agency record's product names and title; never the agency headline. Not model-written.",
        +  "type": "string"
        +}
  2. 2 tool updates
    • First observedget_recall
    • First observedsearch_recalls

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Access US consumer-product safety recalls from the CPSC, free and without authentication.
    25 npm
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables Alexa+ and any MCP client to ask out loud whether a car, crib, food or medicine has been recalled, drawing on NHTSA, CPSC and FDA data in parallel. Returns a short spoken answer plus structured recall details such as hazard, remedy and official link.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources