Pepesto MCP Server
OfficialPepesto MCP Server
MCP-сервер для API Pepesto — дайте своему агенту возможность превратить любой рецепт (URL, обычный текст или фото) в готовую корзину реальных товаров из супермаркета с актуальными ценами в 26 европейских сетях. Этот MCP охватывает этап «рецепт → сформированная корзина» в процессе покупки продуктов (парсинг / поиск / сопоставление ингредиентов с артикулами (SKU) / проверка каталогов); оформление заказа — это отдельный шаг, см. Где происходит оформление заказа.
Быстрая установка
Claude Desktop
Добавьте в claude_desktop_config.json:
{
"mcpServers": {
"pepesto": {
"command": "npx",
"args": ["-y", "@pepesto/pepesto-mcp"],
"env": { "PEPESTO_API_KEY": "pep_sk_…" }
}
}
}Claude Code
claude mcp add pepesto -e PEPESTO_API_KEY=pep_sk_… -- npx -y @pepesto/pepesto-mcpRelated MCP server: Swissgroceries MCP
Получение API-ключа
Начните с покупки пакета кредитов по модели pay-as-you-go — см. https://www.pepesto.com/pricing/.
Создайте API-ключ, вызвав
/linkс адресом электронной почты, который вы использовали при оплате. Ключ возвращается только один раз — сохраните его сразу.curl -X POST https://s.pepesto.com/api/link \ -H "Content-Type: application/json" \ -d '{"email":"you@example.com"}'Установите ключ в своем окружении:
export PEPESTO_API_KEY=pep_sk_…
Инструменты
Инструмент | Эндпоинт | Описание |
|
| Быстрое преобразование рецепта в корзину, включая |
|
| Парсинг рецепта из URL/текста/изображения в структурированные ингредиенты + |
|
| Поиск по графу рецептов Pepesto (более 1 млн). |
|
| Сопоставление |
|
| Полная выгрузка SKU для супермаркета. Только по явному запросу; кэшируйте результаты. |
|
| Проверка оставшихся кредитов. Бесплатно. |
Этот MCP останавливается на этапе «сформированная корзина с ценами» — см. Где происходит оформление заказа, чтобы узнать, как пользователи завершают заказ. Эндпоинты /session, /checkout и /link намеренно не включены; см. Дорожную карту для ознакомления с планами.
Примеры диалогов
Быстрый: URL рецепта → сформированная корзина
Самый быстрый путь. Один вызов инструмента возвращает сформированную корзину и ссылку на оформление заказа.
Пользователь: Используй рецепт пиццы «Маргарита» с BBC Good Food, чтобы собрать корзину в Tesco, а также добавь газированную воду и оливковое масло.
Ассистент: [Использует
pepesto_oneshotсcontent_urls,content_text,supermarket_domain: "tesco.com"]Ассистент: Корзина сформирована в Tesco. Ссылка на оформление заказа:
<redirect_url>.
Просмотр графа рецептов → выбор → сформированная корзина
Для запросов типа «найди мне что-нибудь приготовить», когда агент сначала ищет в графе рецептов Pepesto и возвращает подобранные товары с ценами.
Пользователь: Найди мне веганский рецепт пасты на двоих.
Ассистент: [Использует
pepesto_suggestсquery: "vegan pasta dinner for two"]Ассистент: Три варианта: Creamy Cashew Penne, Lemon Garlic Spaghetti, Roasted Veg Rigatoni. Какой выберете?
Пользователь: Давай первый. Закажи в Coop (coop.ch).
Ассистент: [Использует
pepesto_productsсkg_tokenвыбранного рецепта иsupermarket_domain: "coop.ch"]Ассистент: Подобрано 8 ингредиентов в Coop — кешью 4.20 CHF, пенне 1.95 CHF, ... — итого 18.40 CHF.
Парсинг конкретного рецепта → сформированная корзина
Когда у пользователя уже есть на примете URL или текст рецепта. MCP возвращает список подобранных товаров — что с ним делать, решать вам.
Пользователь: Распарси это и выдели ингредиенты: https://www.bbcgoodfood.com/recipes/pizza-margherita-4-easy-steps
Ассистент: [Использует
pepesto_parseсrecipe_url]Ассистент: Pizza Margherita in 4 easy steps — 8 ингредиентов: мука для хлеба, быстродействующие дрожжи, ...
Пользователь: Теперь сопоставь их с товарами Sainsbury's.
Ассистент: [Использует
pepesto_productsс возвращеннымkg_tokenиsupermarket_domain: "sainsburys.co.uk"]Ассистент: Подобрано 8 ингредиентов в Sainsbury's — итого 6.40 £.
Еженедельный план питания → одна объединенная корзина
Несколько kg_token через pepesto_products в одном вызове — Pepesto объединяет дублирующиеся ингредиенты из разных рецептов.
Пользователь: Спланируй 5 кето-ужинов на неделю и подбери их в Delhaize.
Ассистент: [Использует
pepesto_suggestсquery: "keto dinner low carb high protein", num_to_fetch: 5]Ассистент: Пять ужинов: Steak & Kale, Salmon Avocado Bowl, Zucchini Lasagna, Cauliflower Risotto, Chicken Caesar.
Пользователь: Составь один список покупок на всю неделю.
Ассистент: [Использует
pepesto_productsсо всеми пятьюkg_tokensиsupermarket_domain: "delhaize.be"]Ассистент: Объединенная корзина: 24 уникальных ингредиента (некоторые повторяются в рецептах), ориентировочная стоимость 68.40 € в Delhaize.
Сравнение цен в двух супермаркетах
Прогоните один и тот же рецепт через pepesto_products для каждого магазина и сравните итоговые суммы.
Пользователь: Распарси этот рецепт воскресного обеда.
Ассистент: [Использует
pepesto_parse]Ассистент: Готово: Italian Sunday Lunch, 12 ингредиентов.
Пользователь: Покажи мне корзину в Esselunga и Conad, чтобы я мог сравнить.
Ассистент: [Использует
pepesto_productsдважды —supermarket_domain: "spesaonline.esselunga.it", затемsupermarket_domain: "spesaonline.conad.it"]Ассистент: Esselunga: 34.20 €. Conad: 31.50 €. Conad дешевле на 2.70 €, в основном за счет пасты и томатов.
Выгрузка каталога для анализа рынка
Только по явному запросу и с агрессивным кэшированием — см. Цены и лучшие практики ниже.
Пользователь: Я создаю дашборд для сравнения цен. Выгрузи полный каталог Plus NL.
Ассистент: Предупреждаю —
pepesto_catalog— самый дорогой вызов. Я запущу его только один раз; вам следует кэшировать результат минимум на день. Подтверждаете?Пользователь: Да.
Ассистент: [Использует
pepesto_catalogсsupermarket_domain: "plus.nl"]Ассистент: Каталог выгружен: 1 847 SKU в 23 категориях.
Поддерживаемые супермаркеты
# | Страна | Супермаркет | Домен / ID |
2 | 🇬🇧 GB | Sainsbury's | sainsburys.co.uk |
3 | 🇬🇧 GB | ASDA | asda.com |
4 | 🇬🇧 GB | Morrisons | groceries.morrisons.com |
5 | 🇬🇧 GB | Waitrose | waitrose.com |
1 | 🇬🇧 GB | Tesco | tesco.com |
6 | 🇳🇱 NL | Albert Heijn | ah.nl |
7 | 🇳🇱 NL | Jumbo | jumbo.com |
8 | 🇳🇱 NL | Plus NL | plus.nl |
9 | 🇩🇪 DE | Rewe | shop.rewe.de |
10 | 🇨🇭 CH | Coop CH | coop.ch |
11 | 🇨🇭 CH | Migros | migros.ch |
12 | 🇨🇭 CH | Farmy | farmy.ch |
13 | 🇨🇭 CH | Aldi CH | aldi-now.ch |
14 | 🇧🇪 BE | Colruyt | colruyt.be |
15 | 🇧🇪 BE | Delhaize | delhaize.be |
16 | 🇮🇪 IE | Tesco IE | tesco.ie |
17 | 🇮🇪 IE | SuperValu | shop.supervalu.ie |
18 | 🇮🇪 IE | Dunnes | dunnesstoresgrocery.com |
19 | 🇮🇹 IT | Esselunga | spesaonline.esselunga.it |
20 | 🇮🇹 IT | Conad | spesaonline.conad.it |
21 | 🇩🇰 DK | Nemlig | nemlig.com |
22 | 🇳🇴 NO | Meny | meny.no |
23 | 🇵🇱 PL | Frisco | frisco.pl |
24 | 🇵🇱 PL | Auchan PL | zakupy.auchan.pl |
25 | 🇧🇬 BG | Bulmag | bulmag.org |
26 | 🇧🇬 BG | eBag | ebag.bg |
Нужен супермаркет, которого нет в этом списке? Свяжитесь с Pepesto.
Где происходит оформление заказа
Этот MCP останавливается на этапе «сформированная корзина с ценами». Он не автоматизирует оформление заказа на сайте супермаркета. Есть два способа завершить покупку:
Приложение Pepesto (рекомендуется). Откройте
redirect_url, возвращенныйpepesto_oneshot, в браузере или передайте пользователю список подобранных товаров изpepesto_productsи предложите воссоздать его в приложении Pepesto — именно там находится процесс оформления заказа, включая вход в систему, проверку корзины и (для некоторых рынков) оплату.Сайт самого супермаркета. Пользователь может взять список товаров из
pepesto_productsи добавить SKU напрямую на tesco.com / coop.ch и т.д. Это медленнее, но аккаунт Pepesto не требуется.
Цены и лучшие практики
Pepesto работает по простой модели оплаты за использование — вы платите только за то, что реально используют ваши агенты, а кредиты никогда не сгорают, поэтому пополнение остается вашим до тех пор, пока вы его не потратите. Мы также предлагаем скидки для студентов и начинающих команд, так что напишите нам, если это про вас. Полный прайс-лист и объемы доступны на https://www.pepesto.com/pricing/.
Несколько советов, как получить максимум от каждого кредита:
pepesto_creditsбесплатен — вызывайте его в любое время для быстрой проверки баланса.pepesto_oneshot,pepesto_parse,pepesto_suggestиpepesto_products— это повседневные вызовы (подобрать рецепт, спланировать неделю, сравнить корзины), и они рассчитаны на рутинное использование агентами.pepesto_catalogвыполняет полную выгрузку SKU для супермаркета и является самым тяжелым вызовом. Это правильный инструмент для глубокого анализа рынка или дашбордов сравнения цен — просто кэшируйте результат минимум на день для каждого супермаркета. Не уверены, что он вам нужен? Расскажите нам о своем сценарии использования, и мы обычно подскажем более дешевый путь.
Дорожная карта
Планируется добавить:
pepesto_session— обертка для/session, чтобы агент мог создать сессию оформления заказа на стороне Pepesto из выбранных SKU.pepesto_checkout— обертка для/checkout, цикла автоматизации браузера, который управляет сайтом супермаркета (вход, добавление в корзину, запрос CAPTCHA и т.д.). Это недостающее звено для полностью автономных покупок.Передача в хостинг-оформление — вывод глубокой ссылки приложения Pepesto как структурированного результата инструмента (вместо обычного текста), чтобы клиенты MCP могли отображать её как кнопку, а не как URL.
Если что-то из этого поможет вам в работе, сообщите нам — это поднимет их выше в очереди разработки.
Разработка
git clone https://github.com/pepesto-solutions/pepesto-mcp.git
cd pepesto-mcp
npm install
npm run build
npm test
npm run test:coverageЗапустите инспектор для локальной сборки:
PEPESTO_API_KEY=pep_sk_… npm run inspectorЛицензия
MCP-сервер Pepesto в этом репозитории распространяется под лицензией MIT.
Available Tools
7 toolspepesto_catalogPepesto Catalog (full SKU dump)A
Dump Pepesto's full indexed catalog for a supermarket (~1-2k SKUs of common cooking ingredients, with names, prices, images, IDs). Optionally pass a webhook_url to receive incremental updates on re-index. Use only when the user has explicitly asked for a catalog dump, market analysis, or storefront build; for normal recipe-to-cart flows use pepesto_oneshot or pepesto_products instead. Cache this query aggressively, no more than one call per day per supermarket is recommended. When presenting supermarket results the user, use the product key as (external) link to the supermarket product itself. Show image if available (json property image_url, don't search for external images, skip rendering the Pepesto image if the image has webp extesion)
| Name | Required | Description | Default |
|---|---|---|---|
| supermarket_domain | Yes | Supermarket domain or ID, e.g. 'coop.ch', 'tesco.com', 'ah.nl'. See README for the full list. | |
| webhook_url | No | URL to POST incremental catalog updates to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses the optional webhook for incremental updates, caching advice, and image handling. Does not explicitly mention read-only nature or auth requirements, but covers key behaviors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is dense with useful information, front-loaded with purpose and core details. Slightly long but every sentence adds value. Could be slightly more concise, but well structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers return content (names, prices, images, IDs), caching, image handling, and presentation guidance. Lacks details on error handling or webhook format, but adequate for a dump tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, baseline 3. Description adds meaning: explains webhook_url is for incremental updates, and gives example for supermarket_domain. Adds value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool dumps the full catalog for a supermarket with specific details (1-2k SKUs, names, prices, images, IDs). It distinguishes from siblings by mentioning alternative tools for normal recipe-to-cart flows.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (catalog dump, market analysis, storefront build) and when not (use pepesto_oneshot or pepesto_products for normal flows). Also provides caching recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pepesto_creditsPepesto Credits (check balance)A
Return the remaining API credits on the configured Pepesto API key.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It clearly states the tool returns credits with no side effects, but lacks detail on error conditions (e.g., missing key). Still sufficient for simple read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no superfluous words. Every word contributes meaning. Perfectly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, so description should explain return value. It states returns remaining credits, but lacks format (e.g., number, string). Adequate for simple tool but could be more precise.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has zero parameters, so schema coverage is 100%. Description adds no param info, which is appropriate. Baseline score of 4 applies as per guidelines.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool returns the remaining API credits, distinguishing it from sibling tools like catalog or oneshot. The verb 'Return' and resource 'remaining API credits' are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. However, due to its specific function, usage is implied when checking API credits. Missing when-not-to-use or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pepesto_oneshotPepesto Oneshot (recipe → cart)A
One-shot: turn recipe URLs, free-form text, and/or an image into a ready-to-checkout cart for a chosen European supermarket. Returns a redirect_url that opens the Pepesto checkout UI for the user to verify and pay. Internally runs parse + products + session (not exposed to agents) with Pepesto's heuristics. Use this when you want the simplest end-to-end flow; use pepesto_parse + pepesto_products + session (not exposed to agents) for finer control.
| Name | Required | Description | Default |
|---|---|---|---|
| content_urls | No | Recipe URLs to parse and shop. | |
| content_text | No | Free-form shopping list or extra items to include. | |
| content_image | No | Base64-encoded recipe image. | |
| supermarket_domain | No | Supermarket domain or ID, e.g. 'coop.ch', 'tesco.com', 'ah.nl'. See README for the full list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It mentions internal steps (parse + products + session) and that it returns a redirect_url, but does not cover error handling, idempotency, authentication needs, or potential side effects beyond cart creation. While the core behavior is described, more detail would improve transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, each serving a purpose: purpose, output, internal process, usage guidance. It is front-loaded with the main action and efficiently conveys all needed information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (multiple input types, single output) and the lack of output schema or annotations, the description provides adequate context: what it does, what it returns, and when to use alternatives. However, it could be more complete by mentioning possible failure modes or prerequisites, but overall it is sufficient for agent decision-making.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All four parameters are described in the input schema (100% coverage). The description loosely maps inputs to parameters (recipe URLs, free-form text, image) and gives an example for supermarket_domain, but this adds only minor context beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: turning recipe URLs, free-form text, and/or an image into a ready-to-checkout cart for a European supermarket. It specifies the output (redirect_url) and distinguishes itself from siblings by noting it internally runs parse+products+session, and recommends pepesto_parse+pepesto_products for finer control.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool ('simplest end-to-end flow') and when to use alternatives ('pepesto_parse + pepesto_products + session for finer control'). This provides clear guidance for the agent to choose appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pepesto_parsePepesto Parse (recipe → structured ingredients)B
Parse a recipe from a URL, free-form text, or image into a structured object: title, ingredients, nutrition, instructions, and a KgToken you can pass to pepesto_products to build a real cart. Once the response is returned, show recipe title, image if available (json property image_url, don't search for external images, skip rendering the Pepesto image if the image has webp extesion), ingredients, steps, nutrition summary, allergens clearly marked, and portions/servings if available. Don't show kg_token, but mark and save it for the next steps (e.g., /products call).
| Name | Required | Description | Default |
|---|---|---|---|
| recipe_url | No | Publicly crawlable recipe URL. | |
| recipe_text | No | Free-form recipe text. | |
| recipe_image | No | Base64-encoded recipe image. | |
| locale | No | BCP 47 locale, e.g. 'en-GB', 'de-CH'. | |
| generate_image | No | Whether to generate a shareable image of the recipe. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description gives response handling instructions but does not disclose behavioral traits like authorization, rate limits, or error scenarios.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is verbose and includes agent instructions (show/hide fields) that could be separate; not concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Explains output fields and KgToken but lacks detail on when to use each input type and does not cover return structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%; description adds context linking input types to output but does not detail each parameter's usage comprehensively.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states verb 'Parse' and resource 'recipe', and enumerates output fields. However, no explicit differentiation from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Describes what to do after parsing (show fields, save kg_token) but lacks guidance on when to use this tool vs alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pepesto_predirectPepesto Predirect (free deferred shopping link)A
Turn a free-form shopping list into a deferred deep link to the Pepesto mobile app, returned as a redirect_url. This is a PUBLIC endpoint: it is FREE to the API client, needs no API key, and returns instantly. Parsing and product matching happen lazily, only after the user opens the link — and the USER (not the API client) is charged when they proceed to checkout in the app. If the app isn't installed, the user is sent to the app store first and the shopping list is preserved until the app opens. This is an end-user / agent-facing handoff (e.g. a person chatting in Claude Desktop who wants to finish shopping on their phone), not a developer-integration endpoint. Choose pepesto_predirect when the cost should fall on the end user and a deferred deep link is acceptable. Choose pepesto_oneshot instead when the client wants the basket matched up front (with prices) and is willing to pay for the matching. PRESENTATION (important): the tool's text output is ready-to-show Markdown — a single tappable, labeled link plus a one-line caption. Surface it to the user exactly as returned; do NOT also paste the long raw URL as plain text. You may add one short sentence telling them to open it on their phone (on a computer, opening it shows a QR code to scan).
| Name | Required | Description | Default |
|---|---|---|---|
| shopping_list | Yes | Free-form shopping list. May contain multiple newline-separated lines, e.g. '2 avocados\n1 loaf of bread\n500 g tomatoes'. | |
| locale | No | User's locale, e.g. 'de-DE'. Optional. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description comprehensively discloses behavioral traits: it is free, requires no API key, returns instantly, parsing occurs lazily after link opening, the user is charged (not the API client), and behavior when app is not installed (app store redirect with preserved list).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is lengthy but well-structured, front-loading the core function and then adding usage guidance, behavioral details, and presentation instructions. Every sentence adds value, though it could be slightly more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without an output schema, the description fully explains the return format (Markdown with a tappable link and caption) and instructs the agent on how to present it to the user. It also covers edge cases (app not installed) and provides a complete picture of the tool's behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters. The description adds minimal extra semantic beyond schema, only noting that shopping_list can be multi-line and locale is optional. This is adequate given the high coverage, but does not significantly enhance parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: converting a free-form shopping list into a deferred deep link to the Pepesto mobile app. It specifies the key characteristics (free, public, no API key, lazy parsing) and distinguishes it from the sibling pepesto_oneshot tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool versus pepesto_oneshot, based on cost allocation and timing of basket matching. It also clarifies that this is an end-user/agent-facing handoff, not a developer-integration endpoint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pepesto_productsPepesto Products (KgToken → real SKUs)A
Map one or more recipe KgTokens (and an optional manual shopping list) to concrete supermarket products with prices, images, or currency. Items are merged across recipes to reduce waste; multiple matches per ingredient let you (or the user) pick. Show product title, image if available (json property image_url, don't search for external images, skip rendering the Pepesto image if the image has webp extesion)product_id when available linking to an (external) supermarket page (open in a new tab), price, ProductClassification (is_bio, is_frozen, is_substitution) tags. PricePromotion shows if the item is currently on promotion and what's current promo_percentage
| Name | Required | Description | Default |
|---|---|---|---|
| recipe_kg_tokens | Yes | KgTokens from pepesto_parse or pepesto_suggest. | |
| supermarket_domain | Yes | Supermarket domain or ID, e.g. 'coop.ch', 'tesco.com', 'ah.nl'. See README for the full list. | |
| manual_shopping_list | No | Free-text extra items to add (e.g. 'milk, bananas, kitchen towel'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses key behavioral traits: merging items across recipes, multiple matches per ingredient for user selection, output fields (title, image, price, classification, promotion), and specific rendering instructions (skip webp images). However, it does not mention idempotency, rate limits, or authorization requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph that covers all necessary details without excessive length. It could benefit from bullet points for output fields, but the information is front-loaded with the main purpose in the first sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema, the description thoroughly explains the return values (title, image, product_id, price, classification, promotion) and the merging/user-picking behavior. It provides sufficient detail for an agent to understand the tool's function and output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds only contextual behavior (merging, picking) but does not enhance parameter semantics beyond what the schema already provides (e.g., examples, source hints).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Map' and clearly states the resource transformation: KgTokens to supermarket products. It distinguishes itself from sibling tools that handle parsing (pepesto_parse) or suggestion (pepesto_suggest) by focusing on product mapping.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used after obtaining KgTokens from pepesto_parse or pepesto_suggest, but it does not provide explicit guidance on when to use this tool versus alternatives, nor does it mention any prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pepesto_suggestPepesto Suggest (search 1M+ recipes)A
Search Pepesto's recipe graph (1M+ recipes) by free-text query and optional filters (cuisine, dietary tags, ingredients to include/avoid, time, servings). Each result includes a KgToken you can pass to pepesto_products. Returned images are licensed for display in your app or website without attribution. Show recipe title, image if available (json property image_url, don't search for external images, skip rendering the Pepesto image if the image has webp extesion), ingredients, steps, nutrition summary, allergens clearly marked, and portions/servings if available. Don't show kg_token, but mark and save it for the next steps (e.g., /products call).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Free-text query that may include cuisine, dietary tags, ingredients to include or avoid, time constraints, and servings, e.g. 'vegan keto dinner low on carb for two'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that images are licensed for display, that kg_token should be saved for the next step, and provides display instructions. However, it does not mention whether the operation is read-only, auth needs, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long and includes instructions for how to handle results, which could be more concise. It mixes tool functionality with behavioral instructions for the agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description explains what the output contains (title, image, ingredients, steps, nutrition, allergens, portions, kg_token) and provides instructions on not showing certain fields. It is fairly complete for a search tool but could be more structured.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema only has one parameter 'query' with a description that already mentions free-text. The tool description adds some extra context about cuisine, dietary tags, etc., but does not add substantial meaning beyond the schema. Schema coverage is 100%, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches Pepesto's recipe graph by free-text query and optional filters, and mentions it returns results with various details. However, it does not differentiate from siblings like pepesto_catalog or pepesto_oneshot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use (searching recipes with filters) and hints at a workflow using the returned KgToken for pepesto_products. But it lacks explicit guidance on when not to use or comparisons to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
v1.7.0- Added
pepesto_predirect
6 tool updates
v1.6.0- First observed
pepesto_catalog - First observed
pepesto_credits - First observed
pepesto_oneshot - First observed
pepesto_parse - First observed
pepesto_products - First observed
pepesto_suggest
TDQS
Scored across 7 tools
Each tool has a distinct role in the recipe-to-cart workflow, but pepesto_oneshot and pepesto_predirect both produce redirect URLs from free-form lists, and pepesto_parse/pepesto_suggest both return KgTokens with similar recipe presentation. The descriptions differentiate them well enough, so this is only a minor ambiguity.
All tools share the pepesto_ prefix, which is helpful, but the naming convention is mixed: some are action verbs (parse, suggest), some are resource nouns (credits, products, catalog), and some are coined terms (oneshot, predirect). The names are readable but not predictable from a single pattern.
Seven tools is well-scoped for the server's purpose. Each tool covers a distinct step or entry point in the recipe-to-cart workflow, with no obvious bloat or thinness.
The surface covers recipe discovery, parsing, product mapping, catalog access, and end-to-end checkout flows. The main gap is that no separate session/checkout tool is exposed for fine-grained flows after pepesto_products, though pepesto_oneshot covers the common end-to-end path.
Maintenance
Related MCP Connectors
Hosted MCP for e-commerce: live product catalog, stock, and pricing for AI agents.
Unlock the power of food transparency with our Open Food Facts MCP server. Easily look up any food
Hosted MCP server to manage a restaurant menu from AI agents - 39 tools over the DuckHub API.
MCP Server for an Agent Task Marketplace
Related MCP Servers
- AlicenseAqualityBmaintenanceA FastMCP server that provides AI assistants like Claude with seamless access to Kroger's grocery shopping functionality through the Model Context Protocol, enabling store finding, product searching, and cart management.3049 PyPI74MIT
- AlicenseAqualityCmaintenanceA Model Context Protocol server for real-time Swiss grocery shopping that searches and compares products across 8 major Swiss retailers (Migros, Coop, Aldi, Denner, Lidl, Farmy, Volgshop, Otto’s), normalizes per-unit prices, surfaces promotions, computes optimal multi-store shopping plans, and works with any MCP-compatible client without API keys or accounts.2771 npm34AGPL 3.0
- AlicenseNot gradedqualityFmaintenanceMCP server for Frisco.pl — lets Claude add groceries to your cart, search products, get nutritional info, and manage recipes, all via natural language.7MIT
- FlicenseAqualityDmaintenanceMCP server enabling AI assistants to manage recipes and ingredients in the WeekPlan app via its REST API.81-