Skip to main content
Glama
dreamcatchered

Pyaterochka MCP Tool

🛒 Pyaterochka MCP Tool

MCP-сервер и AI-бот для каталога «Пятёрочки» — поиск магазинов, товаров, акций и цен по всей России прямо из вашей нейросети.

Python MCP Telegram License


✨ Что это

Проект превращает публичный каталог 5ka.ru в инструменты (tools) для LLM:

Компонент

Что делает

🧩 MCP stdio-сервер

Подключается к Claude Desktop, Cursor, opencode и любому MCP-клиенту

🌐 HTTP MCP-сервер

Тот же набор инструментов по http://127.0.0.1:8765/mcp (Streamable HTTP) — удобно для remote MCP через туннель

🤖 Telegram-бот с ИИ

Полноценный агент: сам находит магазин, ищет товары, показывает фото и цены, помнит ваши предпочтения

Умеет:

  • 🔍 найти физический магазин по адресу или геолокации;

  • 🗂️ получить категории конкретного магазина;

  • 🛒 искать товары с фильтрами: цена (мин/макс), бренд, только акции;

  • 📊 сортировать по цене / размеру скидки / популярности;

  • 💳 показывать цену по карте, акции «при покупке N штук», старую цену;

  • 📋 возвращать наличие, остаток, БЖУ, состав, PLU и ссылку на товар;

  • 📸 отправлять альбом фотографий найденных товаров в Telegram.

⚠️ Проект неофициальный и не связан с X5 Group. Используется открытый веб-каталог без логина и пароля. Только в образовательных целях.


Related MCP server: supermercado

🏗️ Архитектура

                    ┌──────────────────────┐
                    │   Claude / Cursor /  │
                    │  ChatGPT / Telegram  │
                    └──────────┬───────────┘
                               │
              ┌────────────────┴────────────────┐
              │                                 │
     MCP stdio / HTTP MCP                OpenAI-compatible API
              │                                 │
    ┌─────────▼─────────┐             ┌─────────▼─────────┐
    │   mcp/mcp_server  │             │    llm_client     │
    │  + mcp_http_server│             │ (фолбэк между     │
    └─────────┬─────────┘             │  провайдерами)    │
              │                       └─────────┬─────────┘
    ┌─────────▼──────────────────────────────────▼─────────┐
    │                 pyaterochka_store_api                 │
    │   браузер Camoufox  ИЛИ  aiohttp + cookies.json       │
    └──────────────────────────┬───────────────────────────┘
                               │
                        🌐 5d.5ka.ru API

🚀 Быстрый старт

1. Установка

git clone https://github.com/<you>/pyaterochka-mcp-tool.git
cd pyaterochka-mcp-tool

python -m venv .venv
# Windows:
.venv\Scripts\activate
# Linux/macOS:
source .venv/bin/activate

pip install -r requirements.txt

Без него тоже работает — через cookies (см. ниже). С ним cookies не нужны вообще:

pip install "camoufox[geoip]"
python -m camoufox fetch   # один раз скачать браузер (~150 МБ)

2. Настройка .env

cp .env.example .env

Минимум для работы MCP-сервера — ничего (только cookies, если не ставили camoufox). Минимум для бота:

TELEGRAM_BOT_TOKEN=123456:AA...      # от @BotFather
LLM_API_URL=https://api.openai.com/v1
LLM_API_KEY=sk-...
LLM_MODEL=gpt-4o-mini

Любой OpenAI-совместимый провайдер подойдёт: OpenAI, OpenRouter, Groq, DeepSeek, NVIDIA NIM, Together AI, локальный vLLM/Ollama (http://localhost:11434/v1).

Переменная

По умолчанию

Описание

TELEGRAM_BOT_TOKEN

—

Токен бота от @BotFather (обязателен для бота)

TELEGRAM_API_BASE_URL

https://api.telegram.org

Можно указать локальный Telegram Bot API Server — тогда включится стриминг ответа

LLM_API_URL

https://api.openai.com/v1

Основной LLM (OpenAI-совместимый /v1)

LLM_API_KEY

—

Ключ основного LLM

LLM_MODEL

gpt-4o-mini

Модель основного провайдера

LLM_RESERVE_URL/_KEY/_MODEL

—

Резерв №1 (автофолбэк при сбоях/429/5xx)

LLM_FALLBACK_URL/_KEY/_MODEL

—

Резерв №2 (последний рубеж)

OPENAI_API_KEY, OPENROUTER_API_KEY, GROQ_API_KEY, …

—

Ключи для инлайн-меню /model в боте

PYATEROCHKA_COOKIES_FILE

—

Путь к cookies.json (если нет браузерного режима)

PYATEROCHKA_PROXY

—

SOCKS5-прокси для запросов к 5ka.ru

MCP_HOST / MCP_PORT

127.0.0.1 / 8765

Адрес HTTP MCP-сервера

🇷🇺 Пользователям из РФ: если официальный api.telegram.org недоступен, можно использовать публичное зеркало Telegram Bot API — просто добавьте в .env:

TELEGRAM_API_BASE_URL=https://telegram.ebalo.lol

🧩 Запуск MCP-сервера

Вариант A: stdio (для десктопных клиентов)

Ничего запускать руками не нужно — клиент сам стартует процесс. Добавьте сервер в конфиг клиента:

Claude Desktop — claude_desktop_config.json:

{
  "mcpServers": {
    "pyaterochka": {
      "command": "python",
      "args": ["C:/absolute/path/to/pyaterochka-mcp-tool/mcp/mcp_server.py"],
      "env": {
        "PYATEROCHKA_COOKIES_FILE": "C:/secrets/pyaterochka/cookies.json"
      }
    }
  }
}

Cursor / любой клиент с mcpServers — формат тот же.

Проверить вручную можно так:

python mcp/mcp_server.py          # слушает JSON-RPC в stdin/stdout
# или после pip install -e . :
pyaterochka-mcp

Вариант B: HTTP (Streamable HTTP)

python mcp_http_server.py         # → http://127.0.0.1:8765/mcp

Эндпоинты: POST /mcp (JSON-RPC), GET /health, GET / (инфо + список tools).

Пример запроса:

curl -X POST http://127.0.0.1:8765/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"find_store","arguments":{"address":"Москва, Кировоградская улица, 17"}}}'

🧰 Доступные инструменты (12)

Tool

Описание

find_store

Найти магазин по адресу → store_id

find_nearest_stores

Ближайшие магазины по координатам

get_store_info / get_store_hours

Карточка и часы работы магазина

list_stores_in_area

Магазины в прямоугольной области карты

list_store_categories

Дерево категорий магазина

search_products

Поиск товаров: цена, бренд, акции, сортировка

list_category_products

Товары категории с фильтрами

find_products

Универсальный поиск по адресу или store_id

get_product_promotion

Условия акции на товар

get_product_info

Карточка товара: состав, калории, БЖУ

refresh_session

Обновить web-сессию 5ka.ru

Подробнее — в mcp/README.md.


🤖 Запуск Telegram-бота

python bot.py      # только бот
python run.py      # бот + HTTP MCP-сервер вместе (живой вывод в консоль)

Как пользоваться:

  1. /start → отправьте боту геолокацию (скрепка → 📍 Location) или напишите адрес;

  2. выберите избранный магазин кнопками;

  3. спрашивайте: «найди молоко до 100 ₽», «что со скидкой на кофе?», «часы работы?»;

  4. команды: /reset — сбросить память, /stop — прервать выполнение, /model — сменить модель на лету.

Бот ведёт себя как агент: сам вызывает инструменты по цепочке (найти магазин → искать товары → проверить акции → показать фото и итог).


🍪 Cookies: нужны ли и зачем

Есть два транспорта для доступа к каталогу — выберите один:

🦊 Браузерный (camoufox)

📄 aiohttp + cookies.json

Ручные cookies

❌ не нужны

✅ нужны

Надёжность при 403/антиботе

выше

ниже

Зависимости

тяжёлые (~150 МБ браузер)

лёгкие

Как получить cookies.json (для второго варианта):

  1. Откройте 5ka.ru в Chrome/Firefox — логиниться не нужно, достаточно просто открыть сайт;

  2. Экспортируйте cookies расширением типа Get cookies.txt LOCALLY (формат JSON или Netscape);

  3. Сохраните файл вне репозитория, например C:\secrets\pyaterochka\cookies.json;

  4. Укажите путь: PYATEROCHKA_COOKIES_FILE=C:\secrets\pyaterochka\cookies.json.

При запуске клиент сначала открывает 5ka.ru, чтобы принять свежие защитные cookies (spjs/spsc и др.), а затем обновляет их автоматически.

🔐 Никогда не публикуйте cookies.json — это ваша живая веб-сессия. Файл уже добавлен в .gitignore. Если утёк — очистите cookies на сайте.


🌍 Публичный доступ: подключение ChatGPT / Claude через туннель

HTTP MCP-сервер слушает 127.0.0.1:8765 — чтобы внешние нейросети (ChatGPT, Claude и любые клиенты с поддержкой remote MCP) достучались до него, заверните порт в туннель:

ngrok:

ngrok http 8765
# получите адрес вида https://a1b2-...ngrok-free.app

cloudflared (без регистрации):

cloudflared tunnel --url http://localhost:8765
# получите адрес вида https://....trycloudflare.com

Затем добавьте URL в клиент:

Клиент

Где указать

Claude Desktop / Claude Web

Settings → Connectors → Add custom connector → https://ваш-адрес/mcp

ChatGPT

Settings → Apps & Connectors → Create (Developer Mode) → URL https://ваш-адрес/mcp

Cursor

MCP settings → Add server → тип URL/SSE

MCP Inspector

npx @modelcontextprotocol/inspector, transport: URL

⚠️ Безопасность: endpoint публичный и без авторизации — любой, кто узнает адрес, сможет пользоваться вашими инструментами. Для постоянного использования прикройте туннель базовой авторизацией на реверс-прокси или используйте ngrok с IP-ограничением. SSH-туннели/ключи в код проекта сознательно не включены.


💡 Примеры запросов

Найди в Пятёрочке по адресу Москва, Кировоградская улица, 17
молоко дешевле 200 рублей и отсортируй по цене.
Что из кофе сейчас по акции рядом со мной? Пришли фото топ-5.

Через CLI (без нейросети):

python pyaterochka_store_api.py resolve --address "Москва, Кировоградская улица, 17"
python pyaterochka_store_api.py products --address "Москва, Кировоградская улица, 17" \
    --store-id S105 --query "молоко" --price-max 200 --sort price_asc --limit 20

📁 Структура проекта

pyaterochka-mcp-tool/
├── mcp/
│   ├── mcp_server.py        # MCP stdio-сервер (12 инструментов)
│   └── README.md            # детали подключения MCP-клиентов
├── mcp_http_server.py       # HTTP (Streamable HTTP) транспорт MCP
├── pyaterochka_store_api.py # API-слой каталога 5ka.ru (+CLI)
├── bot.py                   # Telegram-бот (aiogram)
├── run.py                   # бот + HTTP MCP одним процессом
├── agent.py                 # агентский цикл: LLM ↔ инструменты
├── llm_client.py            # OpenAI-совместимый клиент с фолбэком
├── providers.py             # каталог LLM-провайдеров для /model
├── config.py                # конфиг из переменных окружения
├── stats.py / live_timer.py # статистика и консольные украшения
├── requirements.txt
├── pyproject.toml
└── .env.example

🛡️ Безопасность

  • Все ключи и токены — только через .env (в git не попадает).

  • cookies.json, sessions.json, логи — в .gitignore.

  • Ответы моделей никогда не содержат внутренних id (sap_code, PLU).

  • Не публикуйте cookies, прокси и токены — см. раздел Cookies.

⚖️ Лицензия

MIT. Проект не аффилирован с X5 Group («Пятёрочка»); все товарные знаки принадлежат их владельцам.

Available Tools

12 tools
find_nearest_storesB

Find nearby Pyaterochka stores by coordinates, sorted by distance.

NameRequiredDescriptionDefault
limitNo
latitudeYes
longitudeYes

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full responsibility for behavioral disclosure. It clearly states the distance sorting, but it does not disclose what information is returned (store full details, hours, etc.), whether a default limit applies when 'limit' is omitted, or any potential rate limiting or error conditions. Without annotations, this is a notable gap in transparency for a query tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, information-dense sentence. Every word contributes value: 'Find', 'nearby', 'Pyaterochka stores', 'by coordinates', 'sorted by distance'. There is no redundant phrasing or filler, and the core intent is front-loaded. This is an exemplary example of conciseness without under-specification.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with only three parameters and no output schema, the description covers the fundamental purpose and ordering. However, it omits practical details an agent would need for reliable invocation: the meaning of 'limit' (whether it's a count or a distance radius), the nature of the returned data (store IDs, names, hours), and any default or edge-case behavior. It is sufficient for a basic call but not comprehensive enough to avoid guesswork.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the schema itself contains no property descriptions. The description mentions 'coordinates' but does not explicitly map latitude and longitude, nor does it explain the semantics of 'limit' (e.g., maximum number of results). An agent would have to infer that latitude/longitude are the coordinates and that limit controls result count, which is not fully explicit. The description adds little beyond the parameter names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('find'), a clear resource ('Pyaterochka stores'), the input method ('by coordinates'), and the output ordering ('sorted by distance'). It is immediately distinguishable from siblings like 'find_store' (singular) and 'list_stores_in_area' (area-based), which serve different use cases. No ambiguity remains about the tool's core function.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context: when the agent has coordinates and wants nearby stores sorted by distance. However, it does not explicitly state when to prefer this over 'find_store' or 'list_stores_in_area', nor does it mention any exclusions (e.g., 'use this only when a center point is available'). The 'by coordinates' phrase gives some directional guidance, but no concrete comparison to alternatives is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_productsC

Find products by store_id or address, resolving the nearest store when needed.

NameRequiredDescriptionDefault
sortNo
brandNo
limitNo
queryYes
offsetNo
addressNo
store_idNo
price_maxNo
price_minNo
promo_onlyNo

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description must fully disclose behavior. It only mentions that the nearest store is resolved 'when needed', but does not explain what triggers that, how conflicts between store_id and address are handled, pagination behavior, or any side effects. For a tool with 10 parameters, this is a significant transparency gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise – a single sentence that front-loads the primary action and location parameters. It is efficient and to the point, though the brevity comes at the cost of omitting essential details for correct invocation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 10 parameters, no output schema, and no annotations, this description is highly inadequate. It fails to explain key behavioral aspects like sorting, filtering, pagination, error handling, or the structure of results. Agents have almost no guidance on how to construct a proper request or interpret the response.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description should compensate. It only mentions store_id and address, while other parameters like query, brand, price_min, promo_only, sort, limit, and offset remain unexplained. The description adds minimal semantic value beyond the parameter names themselves and fails to clarify their intended usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Find products') and the resource (products), and explicitly mentions the key parameters (store_id or address). It distinguishes itself from siblings like search_products by focusing on store-based lookup, though the phrase 'resolving the nearest store when needed' is somewhat ambiguous about the exact logic.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide guidance on when to use this tool versus alternatives such as search_products or list_category_products. It implies the tool is for store-specific product queries but does not state exclusions, prerequisites, or how to choose between this and sibling tools. Agents are left to infer usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_storeB

Find the nearest Pyaterochka store for a full address and return its store_id.

NameRequiredDescriptionDefault
addressYesFor example: Москва, Кировоградская улица, 17

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states the core function without revealing any traits such as whether it requires authentication, what happens if no store is found, or any rate limits. For a read-only lookup this is a notable gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence that front-loads the primary purpose and output. It contains no redundant words and is perfectly sized for a simple tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter tool with no output schema and no annotations, the description is minimally adequate. It clarifies the input and output but omits potential edge cases (e.g., invalid address, no nearby store) and any prerequisites. Given the simplicity, a 3 is fair.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the parameter has a clear example. The tool description does not add extra meaning beyond the schema, but the schema itself is sufficient. Baseline 3 is appropriate; the example helps but does not elevate beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('find'), a resource ('nearest Pyaterochka store'), an input ('full address'), and an output ('store_id'). It is clear on the tool's function. It does not explicitly differentiate from the sibling 'find_nearest_stores', but the singular address input and return of store_id give a distinct purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'find_nearest_stores' or 'list_stores_in_area'. There is no mention of prerequisites, context, or exclusions. The agent is left to infer usage from the tool name and description, which is minimal.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_product_infoB

Get product details by PLU, including ingredients, calories, nutrients and URL.

NameRequiredDescriptionDefault
pluYes
store_idYes

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of disclosing behavior. It mentions the output contents but does not state whether the operation is read-only, what happens if the product is not found, any permission requirements, rate limits, or other side effects. The word 'Get' implies read-only, but it is not explicit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that front-loads the primary action and result, with no filler. It is concise and to the point, though it could briefly mention the store_id parameter to improve completeness without adding much length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter lookup with no output schema or annotations, the description provides the core purpose and some return fields, but omits clarification on why store_id is needed, the semantic difference from search tools, and any error/edge-case behavior. It is barely adequate for an agent to call it correctly without additional assumptions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must explain both parameters. It explains 'PLU' as the product identifier, but does not mention 'store_id' at all, nor explain its purpose or required format. This leaves an entire required parameter undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Get'), a specific resource ('product details'), and a specific lookup key ('by PLU'), and lists the data returned (ingredients, calories, nutrients, URL). This clearly differentiates it from sibling tools like search_products or find_products, which are for finding by query rather than direct lookup.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is used when you have a PLU (product code) to retrieve details, but it does not explicitly state when to prefer this over search_products or find_products, nor does it mention when not to use it. The 'by PLU' hint gives context but no explicit exclusions or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_product_promotionB

Get promotion details for a product PLU in a store.

NameRequiredDescriptionDefault
pluYes
store_idYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description must convey behavioral traits. It only says 'Get', implying a read operation, but does not disclose any side effects, error handling, or whether the tool might return null if no promotion exists. It also does not mention any required permissions or rate limits, leaving the agent with minimal insight beyond the action itself.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that is easy to parse and front-loads the core purpose. There is no unnecessary detail or redundancy, making it appropriately brief for a simple retrieval tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and sparse annotations, the description is incomplete. It does not explain what 'promotion details' includes, how to interpret the response, or any edge cases like missing promotions. For a tool with two parameters and no output schema, more context is needed to ensure correct usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has no parameter descriptions (0% coverage), so the description needs to explain the parameters. It mentions 'product PLU' and 'store', which maps to the plu and store_id parameters, but adds no format, constraints, or examples. The description essentially restates the parameter names without providing additional semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves promotion details for a product PLU in a store, specifying both the resource (promotion) and the scope (product and store). It distinguishes from siblings like get_product_info which presumably returns general product details, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives such as get_product_info or search_products. The description does not mention any conditions, prerequisites, or exclusions, leaving the agent to infer from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_store_hoursB

Get opening hours and 24-hour status for a store by store_id.

NameRequiredDescriptionDefault
store_idYes

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It states what data is returned but does not disclose behavior for invalid store_id, error handling, or whether the store must be open. No extra context beyond the basic function.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, concise sentence with no redundancy. The information is front-loaded and directly addresses the tool's purpose without any filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-parameter getter, the description covers the essential purpose but omits any mention of return format, error cases, or prerequisites. Given no output schema and no annotations, a more complete description would include what the response looks like or what happens for nonexistent stores.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must clarify the parameter. It mentions 'by store_id', which identifies the parameter as an identifier, but does not specify format (numeric vs string), source, or validation rules. Minimal compensation for the lack of schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get', the resource 'opening hours and 24-hour status', and the identifying parameter 'store_id'. It distinguishes from siblings like find_store (search) and get_store_info (general info) by specifying the exact data returned.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool over alternatives. It doesn't mention situations where this is preferred over get_store_info or list_stores_in_area, nor any prerequisites like needing a valid store_id.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_store_infoB

Get store details by store_id, including address, opening hours, metro and coordinates.

NameRequiredDescriptionDefault
store_idYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It only states what is returned, which is essentially the purpose. It does not mention any side effects, permissions, rate limits, or reversibility. For a read-like 'get' operation, the lack of confirmation that it is non-destructive or safe is a gap, though the name suggests read-only. The description adds little beyond the obvious.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the action and resource, then lists expected fields. There is no unnecessary verbosity or duplication. Every word contributes to understanding the tool's purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple schema (one parameter) and no output schema, the description covers the basic return values. However, it does not address potential ambiguity with sibling tools (e.g., get_store_hours) or how the user might need to use the store_id (e.g., from where it comes). It is adequate for a simple getter but lacks guidance on when to choose it over alternatives.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage for the sole parameter store_id. The description compensates by saying 'by store_id', which indicates the parameter is the identifier used to look up the store. However, it does not explain the format, any constraints, or how to obtain a valid store_id. This is a minimal but useful clarification that the schema lacks.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (Get) and resource (store details) and lists specific fields (address, opening hours, metro, coordinates). It distinguishes from siblings like get_store_hours by implying a broader set of details, though it doesn't explicitly name alternatives. The verb and resource are unambiguous, so it clearly communicates what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus siblings. For example, it doesn't mention that get_store_hours may be better if only hours are needed, or that find_store might be used when the ID is unknown. The agent is left to infer the appropriate context from the description alone, which is insufficient given the variety of similar tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_category_productsC

List products in a store category and apply filters.

NameRequiredDescriptionDefault
sortNo
brandNo
limitNo
offsetNo
store_idYes
price_maxNo
price_minNo
promo_onlyNo
category_idYes

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It says 'List products' but doesn't state whether the operation is read-only, what the return format looks like, whether pagination is applied, or any side effects. This is a significant gap for a tool with no output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single efficient sentence with no redundant phrases. It is front-loaded with the core action and purpose, making it easy to parse quickly. There is zero fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 9 parameters, no output schema, and no annotations, the description is far too sparse. It omits essential usage details like default sorting, pagination limits, whether filters are optional, and how results are returned. An agent would be under-informed about how to construct a correct call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 0%, so the description should compensate by explaining the filters (e.g., price_min, promo_only, sort). Instead, it only says 'apply filters' without enumerating or clarifying any parameter semantics. The description adds negligible value over the raw property names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List') and resource ('products in a store category') and mentions 'apply filters,' which distinguishes it from global sibling tools like search_products. It is clear but doesn't explicitly differentiate from similar tools, so it's not a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus siblings like search_products or find_products. No context, prerequisites, or exclusion criteria are mentioned. An agent must infer usage solely from the name and category scope.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_store_categoriesC

Get the category tree for a store.

NameRequiredDescriptionDefault
store_idYes

TDQS

C2.1/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description alone must disclose behavior. It only says 'Get the category tree' without mentioning return format, hierarchy, pagination, authentication, or side effects. As a read operation, it likely has no destructive behavior, but that is not stated. This is a significant gap given the lack of annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that is efficient and front-loaded, but it is under-specified for a tool with no other documentation. While conciseness is a virtue, here it borders on omission. The structure is minimal but not unnecessarily verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the low complexity (one parameter, no output schema, no annotations), the description provides the basic action but leaves the agent guessing about the expected response and any hierarchy or filtering details. It does not fully enable an agent to call the tool without further investigation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description does not elaborate on the store_id parameter. The agent only sees that it's a string, with no guidance on format, validation, or its role in identifying the store. The description adds no meaning beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb and resource: getting the category tree for a store. This distinguishes it from siblings like list_category_products, which focus on products within a category, though it doesn't explicitly call out that distinction. It's specific enough for an agent to understand the basic function.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives. Sibling tools like get_store_info or list_category_products exist, but the description provides no context about when to select this one over them. This leaves the agent without routing information.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_stores_in_areaC

List Pyaterochka stores inside a rectangular map area.

NameRequiredDescriptionDefault
top_latitudeYes
left_longitudeYes
bottom_latitudeYes
right_longitudeYes

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the action 'List' which implies a read-only operation, but it does not specify whether the operation returns a list of store IDs, full store objects, or any pagination behavior. There is no mention of authentication, rate limits, or side effects. The description is minimal and leaves the agent guessing about the operation's behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence with no wasted words. However, it is under-specified for a tool with four numeric parameters. While it is not verbose, the lack of additional context makes it feel insufficient rather than appropriately sized. The sentence does earn its place, but more detail is needed to make the tool usable, so it's a middle score.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is incomplete given the tool's complexity. There is no output schema, no annotations, and no explanation of the return format, coordinate constraints, or any prerequisites. An agent cannot confidently call this tool without knowing what the response looks like or how to correctly construct the rectangle. The description is too sparse to be contextually complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, so the description must explain the parameters. It only mentions 'rectangular map area' but does not clarify how the four coordinates (top_latitude, bottom_latitude, left_longitude, right_longitude) form the rectangle, nor the expected value ranges or ordering. The parameter names are self-evident but the description adds almost no value beyond the names, failing to compensate for the schema's lack of detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('List'), the resource ('Pyaterochka stores'), and the scope ('inside a rectangular map area'). It distinguishes itself from siblings like find_store and find_nearest_stores by specifying an area-based search rather than a single store or proximity-based search. However, it does not explicitly contrast these alternatives, so it slightly misses the top score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no explicit guidance on when to use this tool versus alternatives like find_nearest_stores or find_store. It only hints at the 'rectangular map area' scope, but doesn't state scenarios (e.g., 'use this when you need all stores in a region rather than the nearest one'). No exclusions or context is provided, leaving the choice to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

refresh_sessionB

Refresh the protective cookies for the current 5ka.ru web session.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full responsibility for behavioral disclosure. It mentions 'refresh' which implies a state change, but does not indicate whether this is destructive, requires special permissions, or has side effects on the session state. There is no mention of what happens if cookies are invalid or if the operation can fail. This is a significant gap for a mutation-like operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with no filler. It states the action and target clearly. Every word contributes to meaning, and there is no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no parameters, no output schema, and no annotations, the description is minimal but borderline acceptable. However, it lacks critical context such as when this tool should be invoked (e.g., after long idle periods, before high-stakes requests), what 'protective cookies' protect against, and whether there are any errors or side effects. For a session-management tool, an agent would benefit from knowing typical use cases and limitations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so schema coverage is 100% and there is nothing to explain. The description correctly omits parameter details. It would be unreasonable to expect parameter-level semantic information when no parameters exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb ('refresh') and resource ('protective cookies') for the current web session. This is distinct from all sibling tools which focus on store/product operations, so an agent can easily differentiate it. It could be slightly more explicit about what 'protective cookies' are, but the action is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives, nor any prerequisites or conditions that would warrant calling it. The description implies it maintains session integrity but does not state under what circumstances a refresh is needed (e.g., after authentication expiry, before sensitive operations). This leaves the agent to infer usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_productsC

Search products in a store and apply price, brand, promotion and sorting filters.

NameRequiredDescriptionDefault
sortNo
brandNo
limitNo
queryYes
offsetNo
store_idYes
price_maxNo
price_minNo
promo_onlyNo

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states that it searches and applies filters, but it does not reveal any behavioral traits such as pagination (limit/offset meaning), error handling, authentication requirements, or the shape of the response. It does not mention whether results are store-scoped (though 'in a store' implies store_id). Beyond that, there is no information about rate limits, sorting semantics, or how promotions are filtered. This is a significant gap for a search operation with no annotation support.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that front-loads the primary action ('Search products') and lists the filter dimensions. It has no repetition or fluff. It is appropriately sized for the tool's complexity, though it could be slightly longer to include critical parameter context. For a tool with 9 parameters, it may be too terse, but the structure itself is clean and to the point.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (9 parameters, no annotations, no output schema), the description is clearly incomplete. It does not explain the two required parameters (store_id and query) beyond a loose implication of 'in a store'. It does not mention limit/offset pagination, enum choices for sort, or how filters interact. The description provides only the high-level purpose and filter names, leaving an agent without enough context to correctly invoke the tool without further schema inspection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It names filter categories (price, brand, promotion, sorting) which loosely map to parameters like price_min/price_max, brand, promo_only, and sort, but it does not explain individual parameters. It omits the meaning of required fields query and store_id (though 'in a store' hints store_id). It does not clarify the enum values for sort, the semantics of limit/offset, or the default behavior. The description provides only a high-level overview, which is insufficient for the 9 parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb ('Search') and resource ('products in a store') and enumerates the filter dimensions (price, brand, promotion, sorting). It is specific enough to suggest this is a filtered search tool, though it does not explicitly differentiate from sibling tools like find_products or list_category_products, which might also involve searching/filtering products. The mention of 'apply ... filters' gives a distinct purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage: use this when you need to search products with filters. However, it does not provide explicit guidance on when to choose this versus siblings like find_products, list_category_products, or get_product_info. There are no exclusions or alternatives mentioned. The context of filters gives some direction but the usage is only implicit, not explicit.

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. 12 tool updatesv1.0.0
    • First observedfind_nearest_stores
    • First observedfind_products
    • First observedfind_store
    • First observedget_product_info
    • First observedget_product_promotion
    • First observedget_store_hours
    • First observedget_store_info
    • First observedlist_category_products
    • First observedlist_store_categories
    • First observedlist_stores_in_area
    • First observedrefresh_session
    • First observedsearch_products

TDQS

C2.9/5.0

Scored across 12 tools

Disambiguation3/5

Several tools overlap in purpose: find_store, find_nearest_stores, and list_stores_in_area all retrieve store locations but with different inputs, while get_store_info and get_store_hours both provide hours (though get_store_info is more comprehensive). Similarly, search_products, list_category_products, and find_products all search products with overlapping filters, which could cause misselection. The descriptions help but are not always enough to clearly distinguish the best tool.

Naming Consistency2/5

Tool names use a mix of verbs (refresh, find, get, list, search) without a consistent convention. Some are find_* (e.g., find_store, find_nearest_stores), some get_* (get_store_info, get_store_hours), some list_* (list_stores_in_area, list_store_categories), and some search_* (search_products). This mixed style makes it harder to predict tool names from intent, though the noun part is generally clear.

Tool Count5/5

With 12 tools covering store lookup, store details, product search, categories, promotions, and session management, the count is well-scoped for the domain. Each tool has a distinct role, and there are enough tools to represent the core API surface without being overwhelming.

Completeness4/5

The tool set covers the typical read-only operations for a grocery store API: finding stores, retrieving store info, searching products, filtering by category and promotion, and getting product details. Minor gaps exist (e.g., no tool for store reviews or a direct list-all-products endpoint), but the main workflows users would expect are well covered.

Maintenance

ActivitySlowing
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    B
    maintenance
    Provides MCP tools to search products, check stock, and retrieve store information from the GTA7 Lab supermarket entity.
    -
  • A
    license
    B
    quality
    B
    maintenance
    Enables LLM-driven interaction with the GLOBUS online store, including product search, catalog browsing, product details, promotions, recommendations, and anonymous shopping cart management via MCP.
    22
    MIT