{
  "markdown": "# Pepesto MCP Server\n\n<!-- mcp-name: io.github.pepesto-solutions/pepesto-mcp -->\n\nMCP server for the [Pepesto API](https://www.pepesto.com/ai-grocery-shopping-agent/) — give your agent the ability to turn any recipe (a URL, plain text, or a photo) into a matched basket of real supermarket products with live prices, across 26 European supermarkets. The MCP covers the **recipe → matched cart** half of the workflow (parse / search / map ingredients to SKUs / check catalogs); placing the actual order is a separate step — see [Where checkout actually happens](#where-checkout-actually-happens).\n\n## Quick install\n\n### Claude Desktop\n\nAdd to `claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"pepesto\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@pepesto/pepesto-mcp\"],\n      \"env\": { \"PEPESTO_API_KEY\": \"pep_sk_…\" }\n    }\n  }\n}\n```\n\n### Claude Code\n\n```bash\nclaude mcp add pepesto -e PEPESTO_API_KEY=pep_sk_… -- npx -y @pepesto/pepesto-mcp\n```\n\n## Getting an API key\n\n> Most tools need a key, but `pepesto_predirect` is **public and free** — it works with no key at all (the end user pays when they check out in the app).\n\n1. Start with a pay-as-you-go credit pack — see <https://www.pepesto.com/pricing/>.\n2. Mint an API key by calling `/link` with the email you used at checkout. The key is returned **only once** — store it immediately.\n\n   ```bash\n   curl -X POST https://s.pepesto.com/api/link \\\n     -H \"Content-Type: application/json\" \\\n     -d '{\"email\":\"you@example.com\"}'\n   ```\n\n3. Set the key in your environment:\n\n   ```bash\n   export PEPESTO_API_KEY=pep_sk_…\n   ```\n\n## Tools\n\n| Tool | Endpoint | Description |\n| --- | --- | --- |\n| `pepesto_oneshot`   | `POST /oneshot`   | One-shot recipe → matched cart, including a `redirect_url` for checkout. |\n| `pepesto_predirect` | `POST /predirect` | **Free, no API key.** Shopping list → deferred deep link (`redirect_url`); the **end user** pays when they check out in the Pepesto app. |\n| `pepesto_parse`     | `POST /parse`     | Parse a URL/text/image recipe into structured ingredients + `KgToken`. |\n| `pepesto_suggest`   | `POST /suggest`   | Search Pepesto's 1M+ recipe graph. |\n| `pepesto_products`  | `POST /products`  | Map `KgToken`s + supermarket to concrete products with prices. |\n| `pepesto_catalog`   | `POST /catalog`   | Full SKU dump for a supermarket. Only when explicitly requested; cache results. |\n| `pepesto_credits`   | `POST /credits`   | Check remaining credits. Free. |\n\nThe MCP stops at \"matched cart with prices\" — see [Where checkout actually happens](#where-checkout-actually-happens) for how users finish the order. `/session`, `/checkout`, and `/link` are intentionally not wrapped; see [Roadmap](#roadmap) for what's planned.\n\n## Example conversations\n\n### Quick: recipe URL → matched cart\n\nThe fastest path. One tool call returns a matched cart and a checkout link.\n\n> **User:** Use the BBC Good Food pizza margherita recipe to build a Tesco cart, and also add sparkling water and olive oil.\n>\n> **Assistant:** *[Uses `pepesto_oneshot` with `content_urls`, `content_text`, `supermarket_domain: \"tesco.com\"`]*\n>\n> **Assistant:** Cart matched at Tesco. Checkout link: `<redirect_url>`.\n\n### Free, deferred handoff → end user pays (`pepesto_predirect`)\n\nWhen the API client doesn't want to pay for matching and a deferred deep link is acceptable. `pepesto_predirect` is **free** and needs **no API key**: it returns instantly with a link, and parsing + product matching happen lazily once the user opens it. The **user** is charged when they proceed to checkout in the Pepesto app (if the app isn't installed, they're sent to the app store first and the list is preserved).\n\n> **Who this is for:** `pepesto_predirect` is an **end-user / agent-facing** tool, not a developer-integration endpoint. It's the right fit when a person is chatting with an assistant (Claude Desktop, ChatGPT, etc.) and wants to hand their shopping list off to their own phone — the agent returns a link, the user finishes (and pays) in the app. If you're a developer building a product *on top of* Pepesto, you'll usually want `pepesto_oneshot` (matched cart up front, you pay) instead. Got a developer use case for `predirect` anyway? [Tell us](https://www.pepesto.com/contact) — we'd love to hear it.\n\nUse `pepesto_predirect` when the cost should fall on the end user; use `pepesto_oneshot` when the client wants the basket matched up front (with prices) and is willing to pay for it.\n\n> **User:** Here's my weekly shopping list — just give me a link I can open on my phone to finish in the Pepesto app.\n>\n> **Assistant:** *[Uses `pepesto_predirect` with `shopping_list: \"2 avocados\\n1 loaf of bread\\n500 g tomatoes\\n...\"`]*\n>\n> **Assistant:** Done — **[🛒 Open your shopping list in Pepesto →](…)**\n> Free to open · 3 items ready · you only pay at checkout in the app. Open it on your phone (on a computer it'll show a QR code to scan).\n\nThe tool returns this as ready-to-show Markdown — one tappable, labeled link plus a short caption — so the long `redirect_url` is never dumped as raw text.\n\n### Browse the recipe graph → pick → matched cart\n\nFor \"find me something to cook\" prompts, where the agent searches Pepesto's recipe graph first and returns matched products with prices.\n\n> **User:** Find me a vegan pasta recipe for two.\n>\n> **Assistant:** *[Uses `pepesto_suggest` with `query: \"vegan pasta dinner for two\"`]*\n>\n> **Assistant:** Three options: *Creamy Cashew Penne*, *Lemon Garlic Spaghetti*, *Roasted Veg Rigatoni*. Which would you like?\n>\n> **User:** Go with the first one. Shop it at Coop (coop.ch).\n>\n> **Assistant:** *[Uses `pepesto_products` with the chosen recipe's `kg_token` and `supermarket_domain: \"coop.ch\"`]*\n>\n> **Assistant:** Matched 8 ingredients at Coop — cashews CHF 4.20, penne CHF 1.95, ... — total CHF 18.40.\n\n### Parse a specific recipe → matched cart\n\nWhen the user already has a recipe URL or text in mind. The MCP returns the matched product list — what to do with it is up to you.\n\n> **User:** Parse this and break out the ingredients: https://www.bbcgoodfood.com/recipes/pizza-margherita-4-easy-steps\n>\n> **Assistant:** *[Uses `pepesto_parse` with `recipe_url`]*\n>\n> **Assistant:** *Pizza Margherita in 4 easy steps* — 8 ingredients: strong bread flour, fast-action yeast, ...\n>\n> **User:** Now match those to Sainsbury's products.\n>\n> **Assistant:** *[Uses `pepesto_products` with the returned `kg_token` and `supermarket_domain: \"sainsburys.co.uk\"`]*\n>\n> **Assistant:** Matched 8 ingredients at Sainsbury's — total £6.40.\n\n### Weekly meal plan → one merged matched cart\n\nMultiple `kg_token`s through `pepesto_products` in a single call — Pepesto merges duplicated ingredients across recipes.\n\n> **User:** Plan 5 keto dinners for the week and match them at Delhaize.\n>\n> **Assistant:** *[Uses `pepesto_suggest` with `query: \"keto dinner low carb high protein\", num_to_fetch: 5`]*\n>\n> **Assistant:** Five dinners: *Steak & Kale*, *Salmon Avocado Bowl*, *Zucchini Lasagna*, *Cauliflower Risotto*, *Chicken Caesar*.\n>\n> **User:** Build one shopping list that covers the whole week.\n>\n> **Assistant:** *[Uses `pepesto_products` with all five `kg_tokens` and `supermarket_domain: \"delhaize.be\"`]*\n>\n> **Assistant:** Combined match: 24 unique ingredients (some shared across recipes), estimated total €68.40 at Delhaize.\n\n### Compare prices across two supermarkets\n\nRun the same recipe through `pepesto_products` for each market and compare totals.\n\n> **User:** Parse this Sunday lunch recipe.\n>\n> **Assistant:** *[Uses `pepesto_parse`]*\n>\n> **Assistant:** Got it: *Italian Sunday Lunch*, 12 ingredients.\n>\n> **User:** Show me the cart at both Esselunga and Conad so I can compare.\n>\n> **Assistant:** *[Uses `pepesto_products` twice — `supermarket_domain: \"spesaonline.esselunga.it\"`, then `supermarket_domain: \"spesaonline.conad.it\"`]*\n>\n> **Assistant:** Esselunga: €34.20. Conad: €31.50. Conad is €2.70 cheaper, mostly on pasta and tomatoes.\n\n### Catalog dump for market analysis\n\nOnly on explicit request, and cache aggressively — see [Pricing & best practices](#pricing--best-practices) below.\n\n> **User:** I'm building a price-comparison dashboard. Pull the full Plus NL catalog.\n>\n> **Assistant:** Heads up — `pepesto_catalog` is the most expensive call here. I'll only run it once; you should cache the result for at least a day. Confirm?\n>\n> **User:** Yes.\n>\n> **Assistant:** *[Uses `pepesto_catalog` with `supermarket_domain: \"plus.nl\"`]*\n>\n> **Assistant:** Catalog dumped: 1,847 SKUs across 23 categories.\n\n## Supported supermarkets\n\n| # | Country | Supermarket | Domain / ID |\n| --- | --- | --- | --- |\n| 2 | 🇬🇧 GB | Sainsbury's | sainsburys.co.uk |\n| 3 | 🇬🇧 GB | ASDA | asda.com |\n| 4 | 🇬🇧 GB | Morrisons | groceries.morrisons.com |\n| 5 | 🇬🇧 GB | Waitrose | waitrose.com |\n| 1 | 🇬🇧 GB | Tesco | tesco.com |\n| 6 | 🇳🇱 NL | Albert Heijn | ah.nl |\n| 7 | 🇳🇱 NL | Jumbo | jumbo.com |\n| 8 | 🇳🇱 NL | Plus NL | plus.nl |\n| 9 | 🇩🇪 DE | Rewe | shop.rewe.de |\n| 10 | 🇨🇭 CH | Coop CH | coop.ch |\n| 11 | 🇨🇭 CH | Migros | migros.ch |\n| 12 | 🇨🇭 CH | Farmy | farmy.ch |\n| 13 | 🇨🇭 CH | Aldi CH | aldi-now.ch |\n| 14 | 🇧🇪 BE | Colruyt | colruyt.be |\n| 15 | 🇧🇪 BE | Delhaize | delhaize.be |\n| 16 | 🇮🇪 IE | Tesco IE | tesco.ie |\n| 17 | 🇮🇪 IE | SuperValu | shop.supervalu.ie |\n| 18 | 🇮🇪 IE | Dunnes | dunnesstoresgrocery.com |\n| 19 | 🇮🇹 IT | Esselunga | spesaonline.esselunga.it |\n| 20 | 🇮🇹 IT | Conad | spesaonline.conad.it |\n| 21 | 🇩🇰 DK | Nemlig | nemlig.com |\n| 22 | 🇳🇴 NO | Meny | meny.no |\n| 23 | 🇵🇱 PL | Frisco | frisco.pl |\n| 24 | 🇵🇱 PL | Auchan PL | zakupy.auchan.pl |\n| 25 | 🇧🇬 BG | Bulmag | bulmag.org |\n| 26 | 🇧🇬 BG | eBag | ebag.bg |\n\nNeed a supermarket that isn't on this list? [Contact Pepesto](https://www.pepesto.com/contact).\n\n## Where checkout actually happens\n\nThis MCP stops at \"matched cart with prices.\" It does **not** automate placing the order on the supermarket's website. Two ways to finish the trip:\n\n- **Pepesto app (recommended).** Open the `redirect_url` returned by `pepesto_oneshot` in a browser, or hand the user the matched-product list from `pepesto_products` and tell them to recreate it in the [Pepesto app](https://www.pepesto.com/) — that's where the hosted checkout flow lives, including login, basket review, and (for some markets) payment.\n- **The supermarket's own site.** The user can take the matched product list from `pepesto_products` and add the SKUs directly on tesco.com / coop.ch / etc. Slower, but no Pepesto account needed.\n\n## Pricing & best practices\n\nPepesto runs on simple pay-as-you-go credits — you only pay for what your agents actually use, and **credits never expire**, so a top-up is yours until you spend it. We also offer discounts for students and early-stage teams, so [say hi](https://www.pepesto.com/contact) if that sounds like you. Full per-call pricing and volume tiers live at <https://www.pepesto.com/pricing/>.\n\nA few tips to get the most out of every credit:\n\n- `pepesto_credits` is free — call it any time for a quick balance read-out.\n- `pepesto_predirect` is free and needs no API key — it defers matching and bills the **end user** at checkout, so it costs the API client nothing.\n- `pepesto_oneshot`, `pepesto_parse`, `pepesto_suggest`, and `pepesto_products` are the everyday calls (match a recipe, plan a week, compare baskets) and are priced for routine agent use.\n- `pepesto_catalog` does a full SKU dump for a supermarket and is the heaviest call. It's the right tool for genuine market analysis or price-comparison dashboards — just **cache the result** for at least a day per supermarket. Not sure you need it? [Tell us about your use case](https://www.pepesto.com/contact) and we'll usually point you to a cheaper path.\n\n## Roadmap\n\nPlanned to follow:\n\n- **`pepesto_session`** — wrap `/session` so an agent can build a Pepesto-side checkout session from selected SKUs.\n- **`pepesto_checkout`** — wrap `/checkout`, the turn-by-turn browser-automation loop that drives the supermarket's own site (login, add-to-basket, prompt-for-CAPTCHA, etc.). This is the missing piece for fully autonomous shopping.\n- **Hosted-checkout handoff** — surface the Pepesto-app deep link as a structured tool result (instead of free text), so MCP clients can render it as a button instead of a URL.\n\nIf any of these would unblock you, [tell us](https://www.pepesto.com/contact) — it'll move them up the queue.\n\n## Development\n\n```bash\ngit clone https://github.com/pepesto-solutions/pepesto-mcp.git\ncd pepesto-mcp\nnpm install\nnpm run build\nnpm test\nnpm run test:coverage\n```\n\nRun the inspector against the local build:\n\n```bash\nPEPESTO_API_KEY=pep_sk_… npm run inspector\n```\n\n## License\n\nThe Pepesto MCP server in this repository is licensed under the [MIT License](./LICENSE).\n\n\n## Deploy\n\n- Deploy the [Pepesto MCP on Glama](https://glama.ai/mcp/servers/pepesto-solutions/pepesto-mcp).\n",
  "bytes": 12924,
  "sha": "b0af0aaf93d2e6e00435fb01ec9f2eac46b525604016d02490eefd32c627f2b6",
  "repo_slug": "pepesto-solutions/pepesto-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_pepesto_solutions_pepesto_mcp_a131c8e5/readme"
}