rk-mcp
Go client and examples for Recall Kitchen MCP.
Recall Kitchen searches U.S. CPSC, FDA food, FDA MedWatch, USDA, and NHTSA vehicle recalls.
Hosted MCP
Public streamable HTTP: https://app.recallkitchen.com/mcp. Client config: .mcp.json. Docs: recallkitchen.com/docs.
- Free with API key — mint a key via MCP
signupor Integrations. SendX-API-Key: rk_...(required for Grok) orAuthorization: Bearer rk_...(Claude/Cursor). Env placeholder:RECALL_KITCHEN_API_KEY. - Anonymous x402 — USDC on Base at $0.025/call, no signup.
- Account tools (watches, inventory, notifications) need a key.
- Rate limits — about 60 tool calls/hour unverified vs about 600/hour after verified sign-in at app.recallkitchen.com.
Local: http://localhost:8080/mcp. Server card: https://app.recallkitchen.com/.well-known/mcp/server-card.json.
Tool reference: recallkitchen.com/docs/#mcp. Implementation notes: docs/mcp.md.
Auth
Two ways to call tools:
- API key (recommended) — free, higher limits. Create a key in the app under Integrations. Send
X-API-Key: rk_...(required for Grok) orAuthorization: Bearer rk_...(Claude Code, Cursor). - x402 — anonymous USDC on Base (~$0.025 / call). Set
X402_EVM_PRIVATE_KEY. Watch, inventory, and notification tools still need an API key.
Grok's HTTP MCP client treats Authorization: Bearer as OAuth. Use X-API-Key for Grok.
# ~/.grok/config.toml
[mcp_servers.recall-kitchen]
url = "https://app.recallkitchen.com/mcp"
enabled = true
[mcp_servers.recall-kitchen.headers]
X-API-Key = "rk_..."
export RK_API_KEY=rk_...
Tools
Public (API key or x402)
| Tool | Use |
|---|---|
search_product_recalls | Keyword search. Optional source, since/until (YYYY-MM-DD), location, offset, limit (1–100, default 3). |
search_recalls_by_identifier | Exact UPC, lot, model, extracted product name, or VIN (local year/make decode for NHTSA). |
search_product_recalls_by_upc | Look up a UPC and match extracted recall UPCs. found=false if unknown. |
lookup_product | Catalog / USDA branded-food info. Does not search recalls. |
search_product_recalls_from_image | Public HTTPS URL, data:image/...;base64 URI, or MCP image content. No local file paths. |
get_product_recall | Full description and extracted lots, UPCs, models, locations, contacts, image URLs. |
Search results truncate descriptions and cap extracted products at 5. Call get_product_recall for the full notice.
location is ANDed with the query. CA matches California / "northern california". United States matches U.S. notices, not Canada/Ontario.
Account (API key required)
list_watch_patterns, add_watch_pattern, remove_watch_pattern, list_inventory, add_inventory_product, remove_inventory_product, check_tracked_products, list_recall_notifications.
Watch patterns use the same syntax as the search box: words are AND, OR is or, -term excludes, "quoted phrase" is a phrase.
Prompts: check_product, check_upc, scan_image, check_vin. Resources: recall://docs/tools, recall://docs/sources.
Go client
cc, err := rkmcp.NewClient(rkmcp.Config{
ServerURL: "https://app.recallkitchen.com/mcp",
APIKey: os.Getenv("RK_API_KEY"),
})
recalls, err := cc.SearchProductRecalls(ctx, "contamination", 3)
detail, err := cc.GetProductRecall(ctx, recalls[0].ID)
hits, err := cc.SearchRecallsByIdentifier(ctx, rkmcp.IdentifierOptions{LotCode: "I31C"})
APIKey is also read from RK_API_KEY or RECALL_KITCHEN_API_KEY. The client sends X-API-Key. Anonymous clients can set EVMPrivateKey / X402_EVM_PRIVATE_KEY instead.
Module: github.com/Recall-Kitchen/rk-mcp/go.
Examples
git clone https://github.com/Recall-Kitchen/rk-mcp.git
cd rk-mcp/examples/go
export RK_API_KEY=rk_...
go run ./search_product_recalls -query "spinach" -location Iowa
go run ./get_product_recall # searches, then fetches full text
go run ./search_by_identifier -name "infant formula"
See examples/go.
Other clients
- Grok:
X-API-Keyheader (see above). - Claude Code:
claude mcp add --transport http recall-kitchen https://app.recallkitchen.com/mcp --header "Authorization: Bearer ${RK_API_KEY}" - Cursor: copy
.mcp.json(X-API-Key+RECALL_KITCHEN_API_KEY).Authorization: Beareralso works.