Introduction

Welcome to the Recall Kitchen Developer Documentation. This site provides resources for integrating with Recall Kitchen's services programmatically.

Recall Kitchen offers an API and Agent integrations (MCP, MPP, x402) for searching product recalls, ensuring safety in consumer products.

Questions about keys, limits, or client setup? Email [email protected].

Overview

Our platform supports:


Next Step: Getting Started

Getting Started

To start developing with Recall Kitchen, you'll need:

Authentication

Create a key with the MCP signup tool (email, no existing key) or in the app under Integrations. Send it on every request as Authorization: Bearer rk_... or X-API-Key: rk_.... MCP and HTTP search use the same keys. Without a key, search tool calls require x402 payment (USDC on Base). signup itself is free.

Usage is counted per account, not per key. Unverified signup accounts: 60 requests/hour, 400/day, one key, and no watch/inventory writes. After you sign in at app.recallkitchen.com with the same email: 600/hour, 3,000/day, three keys, 20 watch patterns, and 50 inventory products. Rate-limited responses return HTTP 429 with a Retry-After header and a JSON hint to verify or pay with x402.

curl

Search recalls:

curl -sS -H "Authorization: Bearer rk_..." \
  "https://app.recallkitchen.com/api/sources?q=spinach&limit=10"

Call an MCP tool:

curl -sS -H "Authorization: Bearer rk_..." \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"search_product_recalls","arguments":{"query":"spinach","limit":3}}}' \
  https://app.recallkitchen.com/mcp

Fetch one recall (lots, UPCs, locations):

curl -sS -H "Authorization: Bearer rk_..." \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_product_recall","arguments":{"recall_id":"RECALL_ID"}}}' \
  https://app.recallkitchen.com/mcp

Against a local server, swap the host for http://localhost:8080.

If a request fails or a client will not connect, email [email protected].


Next Step: Agent Integrations (MCP, MPP, x402)
Previous Step: Introduction

Agent Integrations (MCP, MPP, x402)

Recall Kitchen integrates with the Model Context Protocol (MCP) and Machine Payment Protocol (MPP) standards for tool use by AI models. Our MCP implementation leverages x402 (USDC on Base) for micropayments, enabling paid access to tools.

MCP

Tools are free with an API key. Anonymous calls are paid (USDC on Base, $0.025 per call) via x402. Search tools return compact recall objects with id, source, title, a truncated description, url, publishedOn, and up to five extracted products (lots/UPCs/locations). Use get_product_recall for the full description and full extracted lists. Prompts (check_product, check_upc, scan_image) and resources (recall://docs/tools, recall://docs/sources) are available. Vehicle and VIN search is coming soon.

Public tools

Call with an API key or x402. Use search_product_recalls for keywords, search_recalls_by_identifier for a UPC/lot/model, search_product_recalls_from_image for a photo URL, data URI, or MCP image content, and get_product_recall for the full notice. Local file paths are not accepted. List tools support offset and return nextOffset when more results exist.

search_product_recalls

Search by query string. Query uses websearch syntax: unquoted words are AND, OR is or, -term excludes, quoted phrases match as a unit (example: Generac Generator -Portable). Optional filters: source (cpsc, fdafoodsafety, FDAMedWatch, usda), since/until, location (country, region, or place, ANDed with the query; CA matches California and "northern california"; United States does not match Canada/Ontario), offset, and limit (1–100, default 3). Descriptions are truncated; call get_product_recall for the full text.

{
  "query": "string",
  "source": "string",
  "since": "YYYY-MM-DD",
  "until": "YYYY-MM-DD",
  "location": "string",
  "offset": 0,
  "limit": 3
}

search_product_recalls_by_upc

Search extracted recall UPCs by UPC/EAN, or pass a barcode image as an HTTPS URL or data:image/...;base64 URI. Returns found=false with a hint when the UPC is unknown. Does not attach unrelated keyword hits.

{
  "upc": "string",
  "image_url": "string",
  "limit": 3
}

search_product_recalls_from_image

Identify products in a public HTTPS image URL, a data:image/...;base64 URI (JPEG, PNG, GIF, WebP, BMP; max 8 MiB), or MCP image content (type: image with mimeType and base64 data). Local file paths are not supported. Each product includes match (upc, model, text, or category) and confidence. Category matches (generic cups, coolers, bowls) omit recalls unless include_category_matches is true.

{
  "image_url": "string",
  "limit": 3,
  "include_category_matches": false
}

get_product_recall

Fetch one recall by id, including extracted lots, UPCs, model numbers, locations, stores, and contact info.

{
  "recall_id": "string"
}

search_recalls_by_identifier

Search extracted recall data by UPC, lot code, model number, or product name. Multiple fields are AND-matched on the same product.

{
  "upc": "string",
  "lot_code": "string",
  "model_number": "string",
  "product_name": "string",
  "limit": 3
}

lookup_product

Look up a product by UPC. Returns name and USDA branded-food details when available. Returns found=false when unknown. Does not search recalls.

{
  "upc": "string"
}

Account tools

signup does not require an API key or x402. The other account tools require an API key. Anonymous x402 callers get an error. Unverified accounts cannot add watch patterns or inventory.

signup

Create an account from an email and receive an API key once. No existing key or x402 payment. Does not re-issue a key if the email already has an account. Unverified accounts have lower rate limits until you sign in at app.recallkitchen.com with the same email.

{
  "email": "string",
  "name": "string"
}

create_api_key

Create an additional API key for this account. Requires an existing API key. Unverified accounts may have only one key; verified accounts may have three. Usage is shared across keys.

{
  "name": "string",
  "kind": "agent"
}

check_tracked_products

Check this API key's watch patterns and inventory against current indexed recalls (including historical notices). Does not create notifications. Generic patterns such as food or hazard only match whole words in titles, and are not used as search queries unless weight is 7+.

{
  "limit": 3,
  "offset": 0
}

list_watch_patterns

List this API key's recall watch patterns.

{}

add_watch_pattern

Add a recall watch pattern. Same websearch syntax as search_product_recalls (AND, OR, -exclude, quoted phrases). Weight is 0–8 and defaults to 4.

{
  "pattern": "string",
  "weight": 4
}

remove_watch_pattern

Remove a watch pattern.

{
  "pattern": "string"
}

list_inventory

List this API key's tracked inventory products.

{
  "query": "string",
  "limit": 3
}

add_inventory_product

Add a product to this API key's inventory.

{
  "name": "string",
  "brand": "string",
  "category": "string",
  "sku": "string"
}

remove_inventory_product

Remove an inventory product by id from list_inventory.

{
  "id": 1
}

list_recall_notifications

List recall notifications for this API key. unread defaults to true. Empty for new accounts until a new matching recall is published; this is not a backfill of check_tracked_products.

{
  "unread": true,
  "limit": 3
}

x402 Payments

Anonymous MCP tool calls require x402 payments. Recall Kitchen currently supports USDC on Base. Send an API key to skip payment.

MCP Endpoints

Recall Kitchen's MCP endpoint is https://app.recallkitchen.com/mcp (or http://localhost:8080/mcp when running locally).

Authorization: Bearer rk_...

Grok, Claude Code, and Cursor

Most MCP clients have no API-key prompt in the add UI. Pass the key as an HTTP header. If a client still will not connect, email [email protected].

Grok

Use X-API-Key, not Authorization: Bearer. Grok's HTTP MCP client treats a Bearer header as OAuth and fails initialize because Recall Kitchen does not implement MCP OAuth:

Auth required, when send initialize request

The --header flag is Name: value.

grok mcp add --transport http recall-kitchen https://app.recallkitchen.com/mcp \
  --header "X-API-Key: ${RECALL_KITCHEN_API_KEY}"

Local:

grok mcp add --transport http recall-kitchen http://localhost:8080/mcp \
  --header "X-API-Key: ${RECALL_KITCHEN_API_KEY}"

Or in ~/.grok/config.toml:

[mcp_servers.recall-kitchen]
url = "http://localhost:8080/mcp"
enabled = true

[mcp_servers.recall-kitchen.headers]
X-API-Key = "rk_..."

If you already added the server with Authorization: Bearer, change that header to X-API-Key and refresh with r in /mcps.

Claude Code

Claude Code sends Authorization as a static header (it does not start OAuth when you pass --header). Official form:

claude mcp add --transport http recall-kitchen https://app.recallkitchen.com/mcp \
  --header "Authorization: Bearer ${RECALL_KITCHEN_API_KEY}"

Local:

claude mcp add --transport http recall-kitchen http://localhost:8080/mcp \
  --header "Authorization: Bearer ${RECALL_KITCHEN_API_KEY}"

Cursor

Add to project .cursor/mcp.json or global ~/.cursor/mcp.json. Cursor interpolates ${env:VAR} in url and headers:

{
  "mcpServers": {
    "recall-kitchen": {
      "url": "https://app.recallkitchen.com/mcp",
      "headers": {
        "Authorization": "Bearer ${env:RECALL_KITCHEN_API_KEY}"
      }
    }
  }
}

Claude Code and Cursor send Authorization as a static header. Grok does not — it starts an OAuth handshake — so Grok must use X-API-Key.

Examples

Go client and examples (API key or x402) are in Recall-Kitchen/rk-mcp. Implementation notes: docs/mcp.md.

MPP

Coming Soon -


Next Step: SDKs
Previous Step: Getting Started

API Reference

Search recalls from software with an API key. Create keys in the app under Integrations.

Search recalls

GET /api/sources?q=spinach&limit=10

curl -sS -H "Authorization: Bearer rk_..." \
  "https://app.recallkitchen.com/api/sources?q=spinach&limit=10"

curl -sS -H "X-API-Key: rk_..." \
  "http://localhost:8080/api/sources?q=spinach&limit=10"

Logged-in browser sessions continue to work without a key. Anonymous HTTP clients can pay with x402 instead.

Additional endpoints (image scan, inventory) remain session-authenticated in the web app. MCP tools cover UPC and image search for agents.

Questions about these endpoints: [email protected].


Next Step: SDKs
Previous Step: Getting Started

SDKs

We provide SDKs for popular languages:


Next Step: Examples

Examples

MCP Tool Usage

Payment Flow

API keys are free (rate limited). Without a key, MCP tool calls are paid automatically via x402 on supported networks.


Next Step: FAQ
Previous Step: SDKs

FAQ

What recalls do you support?

We currently ingest United States CPSC, FDA, and USDA food and product recalls. Vehicle and VIN search is coming soon.

How do I get an API key?

Sign in at app.recallkitchen.com, open Integrations, and create a key. Send it as Authorization: Bearer rk_... on /mcp or /api/sources. See curl and Grok / Claude Code / Cursor for copy-paste examples. Keys are free, with 1,200 requests per hour and 10,000 per day. Anonymous clients can still pay per request with x402.

Who do I contact with questions?

Email [email protected] for API keys, rate limits, MCP client setup (Grok, Claude Code, Cursor), or anything else in these docs.