{
  "markdown": "# rk-mcp\n\nGo client and examples for [Recall Kitchen](https://recallkitchen.com/) MCP.\n\nRecall Kitchen searches U.S. CPSC, FDA food, FDA MedWatch, USDA, and NHTSA vehicle recalls.\n\n## Hosted MCP\n\nPublic streamable HTTP: [https://app.recallkitchen.com/mcp](https://app.recallkitchen.com/mcp). Client config: [`.mcp.json`](.mcp.json). Docs: [recallkitchen.com/docs](https://recallkitchen.com/docs/).\n\n- **Free with API key** — mint a key via MCP `signup` or [Integrations](https://app.recallkitchen.com/#/integrations). Send `X-API-Key: rk_...` (required for Grok) or `Authorization: Bearer rk_...` (Claude/Cursor). Env placeholder: `RECALL_KITCHEN_API_KEY`.\n- **Anonymous x402** — USDC on Base at $0.025/call, no signup.\n- **Account tools** (watches, inventory, notifications) need a key.\n- **Rate limits** — about 60 tool calls/hour unverified vs about 600/hour after verified sign-in at [app.recallkitchen.com](https://app.recallkitchen.com).\n\nLocal: `http://localhost:8080/mcp`. Server card: `https://app.recallkitchen.com/.well-known/mcp/server-card.json`.\n\nTool reference: [recallkitchen.com/docs/#mcp](https://recallkitchen.com/docs/#mcp). Implementation notes: [docs/mcp.md](https://github.com/Recall-Kitchen/recall-kitchen/blob/master/docs/mcp.md).\n\n## Auth\n\nTwo ways to call tools:\n\n1. **API key (recommended)** — free, higher limits. Create a key in the app under [Integrations](https://app.recallkitchen.com/#/integrations). Send `X-API-Key: rk_...` (required for Grok) or `Authorization: Bearer rk_...` (Claude Code, Cursor).\n2. **x402** — anonymous USDC on Base (~$0.025 / call). Set `X402_EVM_PRIVATE_KEY`. Watch, inventory, and notification tools still need an API key.\n\nGrok's HTTP MCP client treats `Authorization: Bearer` as OAuth. Use `X-API-Key` for Grok.\n\n```toml\n# ~/.grok/config.toml\n[mcp_servers.recall-kitchen]\nurl = \"https://app.recallkitchen.com/mcp\"\nenabled = true\n\n[mcp_servers.recall-kitchen.headers]\nX-API-Key = \"rk_...\"\n```\n\n```bash\nexport RK_API_KEY=rk_...\n```\n\n## Tools\n\n**Public** (API key or x402)\n\n| Tool | Use |\n|---|---|\n| `search_product_recalls` | Keyword search. Optional `source`, `since`/`until` (`YYYY-MM-DD`), `location`, `offset`, `limit` (1–100, default 3). |\n| `search_recalls_by_identifier` | Exact UPC, lot, model, extracted product name, or VIN (local year/make decode for NHTSA). |\n| `search_product_recalls_by_upc` | Look up a UPC and match extracted recall UPCs. `found=false` if unknown. |\n| `lookup_product` | Catalog / USDA branded-food info. Does not search recalls. |\n| `search_product_recalls_from_image` | Public HTTPS URL, `data:image/...;base64` URI, or MCP image content. No local file paths. |\n| `get_product_recall` | Full description and extracted lots, UPCs, models, locations, contacts, image URLs. |\n\nSearch results truncate descriptions and cap extracted products at 5. Call `get_product_recall` for the full notice.\n\n`location` is ANDed with the query. `CA` matches California / \"northern california\". `United States` matches U.S. notices, not Canada/Ontario.\n\n**Account** (API key required)\n\n`list_watch_patterns`, `add_watch_pattern`, `remove_watch_pattern`, `list_inventory`, `add_inventory_product`, `remove_inventory_product`, `check_tracked_products`, `list_recall_notifications`.\n\nWatch patterns use the same syntax as the search box: words are AND, `OR` is or, `-term` excludes, `\"quoted phrase\"` is a phrase.\n\nPrompts: `check_product`, `check_upc`, `scan_image`, `check_vin`. Resources: `recall://docs/tools`, `recall://docs/sources`.\n\n## Go client\n\n```go\ncc, err := rkmcp.NewClient(rkmcp.Config{\n    ServerURL: \"https://app.recallkitchen.com/mcp\",\n    APIKey:    os.Getenv(\"RK_API_KEY\"),\n})\nrecalls, err := cc.SearchProductRecalls(ctx, \"contamination\", 3)\ndetail, err := cc.GetProductRecall(ctx, recalls[0].ID)\nhits, err := cc.SearchRecallsByIdentifier(ctx, rkmcp.IdentifierOptions{LotCode: \"I31C\"})\n```\n\n`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.\n\nModule: `github.com/Recall-Kitchen/rk-mcp/go`.\n\n## Examples\n\n```bash\ngit clone https://github.com/Recall-Kitchen/rk-mcp.git\ncd rk-mcp/examples/go\nexport RK_API_KEY=rk_...\ngo run ./search_product_recalls -query \"spinach\" -location Iowa\ngo run ./get_product_recall            # searches, then fetches full text\ngo run ./search_by_identifier -name \"infant formula\"\n```\n\nSee [examples/go](examples/go/).\n\n## Other clients\n\n- **Grok**: `X-API-Key` header (see above).\n- **Claude Code**: `claude mcp add --transport http recall-kitchen https://app.recallkitchen.com/mcp --header \"Authorization: Bearer ${RK_API_KEY}\"`\n- **Cursor**: copy [`.mcp.json`](.mcp.json) (`X-API-Key` + `RECALL_KITCHEN_API_KEY`). `Authorization: Bearer` also works.\n\n## Support\n\n[support@recallkitchen.com](mailto:support@recallkitchen.com)\n",
  "bytes": 4872,
  "sha": "dce1b3fb575d2a1356318ed7b4c52abf8fb7de959e35982dbcfd4d70b6265d3b",
  "repo_slug": "recall-kitchen/rk-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_adamdecaf_recall_kitchen_5aae700d/readme"
}