Recall Canary
REMOTE · RECALLCANARY.COM
U.S. federal product recalls from FDA, FSIS, CPSC, and NHTSA, in one schema.
Available components
Last scanned (6 hours ago)
Scores higher than 64% of remote servers
Reachable. Last reached 5 Nov 2026.
Category Health and Science
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security83
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- No authorisation is required to call this server. Every tool declares its destructiveHint and none is destructive, so open access doesn't expose one. See how to fix → View diagnostics → Partial
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC is configured correctly; the domain's records validate against the full chain to the root. View diagnostics → Pass
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability56
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 1344 tokens (~672/item across 2 items; 2 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management30
- Stability observed for 9 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 2 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 3 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 3 Nov 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.
- 1 Nov 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 13 to 17. That category is still filling its 30-day observation window: 4 days of observed history at the previous scan, 5 at this one. The score rises as the window fills, whether or not the server changes.
- 30 Oct 26 +1
- Server version: 1.3.0 → 1.4.0 functional
- 28 Oct 26 +1
- Stability: unverified → 0.03 ▲ functional
- Server version: 1.2.0 → 1.3.0 functional
- “search_recalls” reworded the description of “q” cosmetic
- 27 Oct 26 71
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 5 Nov 2026 · Probed https://recallcanary.com/data/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=recallcanary.com | CN=WE1,O=Google Trust Services,C=US | 1 Nov 2026 | 31 Jan 2027 | ECDSA 256 | ECDSA-SHA256 | 8a8b749427a1ee0513df6063d98b5244 |
| SANs: recallcanary.com, *.recallcanary.com | ||||||
| CN=WE1,O=Google Trust Services,C=US (CA) | CN=GTS Root R4,O=Google Trust Services LLC,C=US | 13 Dec 2023 | 20 Feb 2029 | ECDSA 256 | ECDSA-SHA384 | 7ff31977972c224a76155d13b6d685e3 |
| CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) | CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE | 15 Nov 2023 | 28 Jan 2028 | ECDSA 384 | SHA256-RSA | 7fe530bf331343bedd821610493d8a1b |
Background: What to check on a remote MCP endpoint →
DNSSEC secure
Validation of recallcanary.com. — Secure
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| com. | present | 19718 | 13 | Verified |
| recallcanary.com. | present | 2371 | 13 | Verified |
| recallcanary.com. | Verified address RRset verified with the apex keys |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
| Header | Value |
|---|---|
| strict-transport-security | max-age=2592000 |
| x-content-type-options | nosniff |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://recallcanary.com/data/mcp | Verified | 200 | |
| http (plaintext) | http://recallcanary.com/data/mcp | HTTPS enforced | 301 | https://recallcanary.com/data/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
get_recall Get one recall by agency and slug ~214
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.
| Name | Type | Req | Description |
|---|---|---|---|
| agency | string | yes | Lowercase agency segment from the record URL. Part of the lookup key, not decoration: a correct slug under the wrong agency is a miss. |
| slug | string | yes | The 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). |
| Name | Type | Req | Description |
|---|---|---|---|
| advisory_url | string|null | – | – |
| agency | string | yes | Known values: FDA, FDA_IRES, FSIS, CPSC, NHTSA, ADMIN. |
| agency_published_at | string|null | – | – |
| ai_generated | object | yes | Provenance: true where the field holds model-written text. Over-attributes on purpose. |
| api_version | string | yes | – |
| canonical | string | yes | Absolute URL of this representation. |
| category | string|null | – | Known values: FOOD, DRUG, BIOLOGIC, DEVICE, COSMETIC, CONSUMER_PRODUCT, VEHICLE, AUTO_EQUIPMENT. |
| company_announced_at | string|null | – | – |
| company_product_list | object|null | – | The 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. |
| consumer_action | string|null | – | The "What to do" text. Null on a withdrawn alert. |
| content_changed_at | string|null | yes | When the published content last changed. |
| critical_flags | object|null | – | NHTSA-only in practice. An absent key means the agency did not state the flag. null for a withdrawn (RETRACTED) record. |
| dates | object | – | – |
| description | string|null | – | Full agency description. FSIS: sanitized HTML; others: plain text. Sanitize or escape before display. |
| display_summary | string|null | – | – |
| display_summary_short | string|null | – | – |
| display_title | string|null | – | – |
| distribution | object|null | – | – |
| firm | object | – | – |
| firm_name | string|null | – | – |
| hazard_tags | array | yes | – |
| html_url | string | yes | Absolute URL of the human-readable page. |
| id | string | yes | – |
| identification | object | yes | 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… |
| late | object|null | – | Since api 2.7.0. Null unless the recall is late: it began more than 184 days before listed_at, or it ended on or before the date its listed_at_basis names. |
| license | object | yes | Attribution and terms (DATA-LICENSE). |
| linked_recalls | array | – | – |
| listed_at | string|null | – | Since 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. |
| mcp_truncated | object | – | Present only when a long list was cut to 25 for this response. |
| notes | string | yes | Caveats for this record, including the aggregator-lag and not-a-clearance statement. |
| press_releases | array | – | – |
| product_count | integer | – | The true event scope, which may exceed products.length. |
| products | array | – | – |
| products_truncated | boolean | – | True when `product_count` exceeds the length of `products` |
| published_at | string|null | – | Deprecated: the stored pub_date. |
| reason | string|null | – | The agency's own stated reason, not model-written. |
| record_type | – | yes | – |
| related | object | – | – |
| risk | object|null | – | The 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. |
| severity | string|null | – | Known values: CRITICAL, MODERATE, LOW. |
| slug | string|null | – | – |
| snapshot_at | string | yes | ISO-8601 UTC response-generation time, second precision. First key on purpose. |
| source_recall_id | string|null | – | Agency key; a CPSC one can be stale. |
| source_url | string|null | – | The agency's own notice. |
| status | string|null | – | – |
| story_lead_id | string|null | – | Set on a later record of a recall story; the lead it belongs to. |
| story_lead_url | string|null | – | – |
| timeline | array | – | Dated steps of the record, in date order. Each step names who acted on that date. FDA labels: Company began the recall, Announced by the company, Added to FDA's Enforcement Report, Classified by FDA,… |
| title | string | yes | Agency-published title. Never model-written. |
| units_affected | number|null | – | – |
| url | string | yes | – |
No examples provided.
search_recalls Search U.S. federal product recalls ~964
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.
| Name | Type | Req | Description |
|---|---|---|---|
| agency | array | – | Issuing agencies; matches any. Case-insensitive; values are uppercase. |
| category | string | – | Single-select product category. Case-insensitive; values are uppercase. |
| date | string | – | Relative window, resolved against the request clock. Ignored when `from` or `to` is set. |
| firm | string | – | Firm 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. A… |
| from | string | – | Inclusive lower bound, YYYY-MM-DD at 00:00:00 UTC. |
| hazard | string | – | Single-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. |
| page | integer | – | 1-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 r… |
| q | string | – | 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, ND… |
| severity | array | – | Matches 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 stil… |
| sort | string | – | `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 descend… |
| state | string | – | Two-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 `… |
| to | string | – | Inclusive upper bound, YYYY-MM-DD at 23:59:59 UTC. |
| Name | Type | Req | Description |
|---|---|---|---|
| api_version | string | yes | – |
| canonical | string | yes | Absolute URL of this representation. |
| filters | object | yes | The filters as applied, after normalization. An unapplied filter is echoed as null or []. |
| html_url | string | yes | Absolute URL of the human-readable page. |
| license | object | yes | Attribution and terms (DATA-LICENSE). |
| notes | string | yes | The caveat that absence of a match is not a clearance. |
| notices | array | yes | Rules that narrowed or widened the results, stated in band. Empty when none apply. |
| pagination | object | yes | – |
| relaxed | boolean | yes | – |
| results | array | yes | – |
| snapshot_at | string | yes | ISO-8601 UTC response-generation time, second precision. First key on purpose. |
No examples provided.
How do I install the Recall Canary MCP server?
Recall Canary is a hosted endpoint at https://recallcanary.com/data/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · recallcanary.com
claude mcp add --transport http com-recallcanary-recall-canary 'https://recallcanary.com/data/mcp'
What is the Recall Canary MCP server?
Recall Canary is an MCP server listed in the public MCP registry as com.recallcanary/recall-canary. U.S. federal product recalls from FDA, FSIS, CPSC, and NHTSA, in one schema. This page covers its hosted endpoint (https://recallcanary.com/data/mcp).
Is the Recall Canary MCP server safe to use?
Recall Canary scores 75 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Recall Canary MCP server expose?
Recall Canary exposes 2 tools: search_recalls, get_recall. Their descriptions and schemas cost roughly 1,178 tokens of context every time the server is loaded.
Does the Recall Canary MCP server require authentication?
No. We connected to Recall Canary without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.
Is the Recall Canary MCP server still maintained?
Recall Canary is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.