MCP App Proxyfier
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP App Proxyfiersearch for running shoes under $100"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP App Proxyfier
MCP-сервер, который отдаёт в чат с моделью интерактивные MCP Apps (официальное UI-расширение MCP, рендерится в песочнице-iframe хоста). Вместо текстовой обёртки над запросами зритель получает нативный UI прямо в диалоге.
Реализован один вылизанный флоу на настоящих данных: Megamarket — поиск товаров → грид → детальная страница → корзина → оформление.
Данные статические: каталог собран из сохранённых снапшотов реальных страниц
megamarket.ru (pages/) скриптом pnpm update:data. Сеть и браузер на демо не нужны —
сервер стартует мгновенно и отвечает одинаково при любом Wi-Fi в зале.
Сценарий живого демо (без MCP → MCP без UI → MCP с UI → MCP с UI и скиллом) — в
DEMO.md.
Структура
packages/
ui/ React + Vite; собирается в самодостаточные HTML (по одному на приложение)
server/ MCP-сервер, отдаёт UI как ui:// ресурсы + инструменты
pages/ HAR/HTML-снапшоты megamarket.ru — сырьё для pnpm update:dataUI собирается в два самодостаточных HTML-бандла — index (каркасный ping) и
megamarket; все JS/CSS встроены, внешних ссылок нет (требование песочницы-iframe).
Сервер на старте читает эти HTML и регистрирует как ui:// ресурсы.
Related MCP server: FakeStore MCP
Инструменты
Инструмент | Вход | UI | Назначение |
|
|
| Каркасная проверка рендера iframe |
|
| — | Поиск товаров, результат только текстом (список позиций) |
|
|
| Тот же поиск + грид карточек виджетом |
|
|
| Тот же поиск + виджет; описание обязывает прочитать |
|
|
| Карточка товара: галерея, таблица «О товаре», описание |
| — | — | Сегодня/завтра + ближайшие 7 дней с днями недели |
|
|
| Добавляет товар в корзину |
| — |
| Текущее состояние корзины |
| — |
| Оформляет заказ по корзине, возвращает подтверждение и очищает её |
filters — ценовой коридор priceMin / priceMax и срок доставки deliveryBy
(YYYY-MM-DD; оставляет только то, что приедет не позже).
get_delivery_calendar существует потому, что у модели нет часов: «до пятницы» она сама
в число не превратит — либо выдумает, либо отсчитает от даты обучения. Скилл обязывает
вызвать календарь до поиска, отсюда и порядок вызовов в демо.
Три варианта поиска — это ступени живого демо (без UI → с UI → с UI и методичкой). Они
существуют одновременно на одном подключении, переключение идёт формулировкой запроса, без
перезапуска сервера. Почему их три, а не один с параметром: привязка UI живёт в
_meta.ui.resourceUri на регистрации инструмента и уезжает клиенту в tools/list —
результат вызова её изменить не может.
Корзина — in-memory, одна на процесс сервера: перезапуск её обнуляет.
Ресурсы ui://
MCP Apps: самодостаточный HTML, который хост рендерит в песочнице-iframe и кормит
structuredContent результата инструмента через мост. MIME — text/html;profile=mcp-app.
URI | Собирается из | Кто рендерит |
|
|
|
|
| все инструменты Megamarket |
Приложение Megamarket — мини-SPA: выдача → деталка → корзина → подтверждение. Какой вид
показать, оно решает по форме пришедшего structuredContent: products — выдача,
product — деталка, cart — корзина.
Виджет интерактивный, а не картинка:
чипы фильтров над гридом (бренд, шумоподавление) — фильтруют внутри iframe, без вызова инструмента и без нового пузыря в чате;
клик по карточке открывает деталку (
get_productчерез мост), «Назад» возвращает в тот же отфильтрованный список — состояние фильтров переживает переход;деталка открывается и голосом («покажи подробнее вот эти») — вид тот же самый;
«В корзину» на карточке и на деталке — app-initiated
add_to_cart(id); ответ несёт актуальную корзину, поэтому бейдж обновляется без отдельногоview_cart.
Фильтры виджета сознательно не трогают доставку: срок задаёт агент через
filters.deliveryBy на сервере. Иначе виджет молча показывал бы то, что агент уже отсёк.
Ресурсы skill://
Методички для агента. В отличие от ui:// это не MCP Apps — рендерить нечего, это
обычный текст, который агент читает перед вызовом инструмента.
URI | MIME | Назначение |
|
| Индекс скиллов — точка входа, по которой агент находит остальные |
|
| Подбор товара: уточнить бюджет и сценарий, перевести бюджет в |
Индекс и сами методички собираются из одного SkillDefinition
(packages/server/src/skills/skill-registry.ts), поэтому имя и описание в индексе не могут
разъехаться с ресурсом.
Данные
Каталог — packages/server/data/market.json (70 товаров, у всех есть детальная карточка).
Пересобирается из снапшотов:
pnpm update:data # разбирает pages/ → packages/server/data/market.json
pnpm update:data -- --dry-run # только показать, что распарсилось, ничего не писатьСкрипт идемпотентен: повторный прогон просто перезаписывает файл. Сеть не трогает.
Выдача поиска ограничена девятью позициями (SEARCH_RESULT_LIMIT) — грид 3×3 в узком
чат-iframe.
Сроки доставки — синтетические
packages/server/data/delivery.json не собирается из снапшотов: настоящий срок
(calculatedDeliveryDate в SSR-стейте страниц) есть ровно у одного товара каталога из 70, а
на выдаче Мегамаркет его не отдаёт вовсе. Формат подписей при этом взят у сайта: он пишет
только «Сегодня», «Завтра» и дату вида «15 июля» — «Послезавтра» у него нет.
В файле лежат дни, а не даты: дата считается в рантайме от сегодня, поэтому «Завтра» остаётся завтрашним и через месяц. Товары, которых в файле нет, получают детерминированный срок по хешу id — одинаковый между запусками, чтобы выдача не «дышала».
Флаг anc (активное шумоподавление) поднимается в «плоский» DTO из характеристик, чтобы
виджет фильтровал грид без запроса деталки на каждый товар. null означает «характеристики
нет в снапшоте», а не «шумоподавления нет».
Требования
Node.js 22+ (рекомендуется 24)
pnpm 11+
Сборка
pnpm install
pnpm build # сначала собирает HTML-бандлы UI, затем серверpnpm build сначала собирает UI (самодостаточные HTML со встроенными JS/CSS — без внешних
источников, как требует песочница-iframe), затем компилирует сервер, который на старте
читает эти HTML и регистрирует как ui:// ресурсы.
Превью виджета в браузере
Посмотреть виджет без Claude Desktop:
pnpm --filter @mcp-app-proxyfier/ui exec vite
# → http://localhost:5173/preview.htmlРендерит те же компоненты вью, что и боевое приложение, на настоящем ответе сервера.
Работают чипы фильтров, заход в карточку и возврат в отфильтрованный список. Кейс
открывается ссылкой: ?case=friday, ?case=detail, ?case=cart.
Фикстуры пересобираются с живого сервера, руками их править не надо:
pnpm build # превью читает ответы собранного сервера
pnpm update:fixtures # → packages/ui/src/preview/fixtures.jsonДаты доставки в фикстуре заморожены на момент снятия (превью — про вёрстку, не про
календарь). Протухли подписи вроде «Завтра» — просто перезапустите update:fixtures.
Чего в превью нет: postMessage-моста и вызовов инструментов — «Подробнее» берёт деталку из
фикстуры, а не дёргает get_product; «В корзину» показывает снимок корзины, а не вызывает
add_to_cart. Мост и рендер iframe проверяются только вживую, в Claude Desktop (см.
«Ручная проверка рендера» ниже). В продакшен-сборку превью не попадает: pnpm build:ui
собирает только index и megamarket.
Тесты
pnpm test # typecheck (включая тесты) + прогонТесты проверяют внешнее поведение через швы: инструменты MCP как чёрные ящики (поднимается
настоящий McpServer на in-memory транспорте), загрузку статического каталога (включая
деградацию товара без богатой детали), сроки доставки, реестр скиллов и выбор транспорта.
Рендер iframe проверяется вручную (см. ниже) — в CI его нет.
Тесты тайпчекаются вместе с кодом: гоняет их tsx, который типы не проверяет, поэтому
раньше tsc молча зеленел на тестах, ссылающихся на удалённые модули. Сборка идёт отдельным
конфигом (tsconfig.build.json), чтобы тесты не попадали в dist/.
Запуск / регистрация в Claude Desktop
Сервер говорит по MCP через stdio: Claude Desktop запускает его как дочерний процесс.
После pnpm build пропишите его в конфиг Claude Desktop.
Расположение файла конфигурации:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.json
Добавьте (замените путь на абсолютный путь к этому репозиторию):
{
"mcpServers": {
"mcp-app-proxyfier": {
"command": "node",
"args": ["/absolute/path/to/mcp-app-proxyfier/packages/server/dist/index.js"]
}
}
}Затем полностью закройте и заново откройте Claude Desktop.
Ручная проверка рендера (главный риск демо)
Главный риск — баг рендера iframe на хосте (ext-apps #671): клиент согласует UI-возможность и тянет ресурс, но не рисует iframe. Поэтому его проверяют глазами на боевой сборке.
В чате Claude Desktop попросите модель вызвать инструмент ping (например, «вызови
инструмент ping с echo hello»). Убедитесь визуально:
В чате нарисован интерактивный iframe (карточка с заголовком «MCP App Proxyfier»), а не только текстовый результат.
Карточка показывает
message: pong,echo: helloи таймстамп — то естьstructuredContentинструмента дошёл до UI через мост.
Если виден только текст и iframe не рисуется — баг #671 воспроизведён: зафиксируйте версию Claude Desktop и держите наготове запасной текстовый сценарий для демо.
Абстракция транспорта
Сервер не зависит от транспорта. Инструменты и ресурсы регистрируются на McpServer без
знания о канале. Транспорт выбирается за швом ServerTransportProvider
(packages/server/src/transport/): stdio (по умолчанию) и http (Streamable HTTP). Оба
провайдера регистрируют ровно те же инструменты и ui:// ресурсы — добавление HTTP не
потребовало правок кода инструментов или ресурсов.
Транспорт выбирается флагом или переменной окружения (флаг приоритетнее):
Параметр | Флаг | Env | По умолчанию |
Транспорт |
|
|
|
Интерфейс прослушивания |
|
|
|
Порт |
|
|
|
Путь эндпоинта |
|
|
|
Bearer-токен |
|
| (выкл.) |
Флаги понимают обе формы: --port 3000 и --port=3000.
Удалённый коннектор (Streamable HTTP)
Для демо, где владелец подключает коннектор сам (custom connector в claude.ai), а не Claude Desktop запускает его локально. Это альтернативный канал к тому же серверу — stdio-демо он не блокирует.
Соберите и запустите сервер по HTTP (слушает на
127.0.0.1:3000/mcp). Туннель делает порт публичным, поэтому задайтеMCP_HTTP_TOKEN— запросы безAuthorization: Bearer <token>отклоняются с401:pnpm build MCP_TRANSPORT=http MCP_HTTP_TOKEN="$(openssl rand -hex 16)" pnpm start # токен выкл. (только локально, без туннеля): pnpm start -- --transport httpОткройте публичный HTTPS-туннель к этому локальному порту:
cloudflared tunnel --url http://127.0.0.1:3000 # → печатает https://<random>.trycloudflare.com # альтернатива ngrok: # ngrok http 3000 → https://<random>.ngrok-free.appURL коннектора — это origin туннеля плюс путь эндпоинта, например
https://<random>.trycloudflare.com/mcp.В claude.ai → Settings → Connectors → Add custom connector вставьте этот URL (и Bearer-токен в поле авторизации коннектора, если вы его задали). Claude инициализирует сессию Streamable HTTP и показывает те же инструменты и
ui://приложения, что и stdio.
Ручная проверка (рендер iframe на хосте, ext-apps #671). Как и для stdio, убедитесь визуально, что результат инструмента рисует интерактивный iframe в чате claude.ai, а не только текст. Баг рендера #671 — клиентский и не связан с транспортом, но его нужно перепроверить на claude.ai: сборка хоста отличается от Claude Desktop.
Замечания:
Один запущенный процесс держит одну сессию Streamable HTTP — одного докладчика за туннелем.
Реконнект = перезапуск. При чистом отключении claude.ai шлёт завершение сессии и повторное подключение работает; после грязного обрыва (туннель умер) проще всего
Ctrl-Cи заново--transport http, если коннектор потерял сессию.Прослушивание остаётся на localhost намеренно; не слушайте
0.0.0.0— доступ к серверу только через туннель. Защита от DNS-rebinding выключена намеренно (host туннеля динамический); доступ охраняет Bearer-токенMCP_HTTP_TOKEN.После демо погасите туннель — URL является секретом.
Available Tools
9 toolsadd_to_cartДобавить в корзину MegamarketA
Добавляет товар в корзину (по id из выдачи/деталки) и возвращает актуальное состояние корзины.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Идентификатор товара из выдачи search_products или get_product |
Output Schema
| Name | Required | Description |
|---|---|---|
| cart | Yes | |
| added | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden. It discloses the side effect (add to cart) and the return value (current cart state), but it does not mention authentication requirements, duplicate-item behavior, or error conditions, leaving some behavioral gaps.
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 sentence that starts with the action, specifies the id source in parentheses, and states the return value. Every phrase is meaningful; there is no filler.
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?
For a one-parameter tool with an output schema and clear sibling context, the description is sufficiently complete: it states the action, the id source, and the returned cart state. It lacks minor behavioral details like duplicate handling, but the tool's simplicity and existing output schema mitigate the impact.
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 single parameter 'id' is fully described in the schema as from search_products or get_product, and the tool description mirrors this by saying 'по id из выдачи/деталки'. Since schema coverage is 100%, the description adds no new parameter semantics beyond the schema, 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 uses the specific verb 'Добавляет' with the resource 'корзину' and specifies that it works by product id from search or detail pages, clearly distinguishing it from sibling tools like view_cart and checkout. The scope is immediately understandable.
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 use after obtaining an id via search_products/get_product, which gives a clear workflow context. However, it does not explicitly state alternatives or exclusions (e.g., when not to use), so it falls just short of full guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
checkoutОформление MegamarketA
Оформляет заказ по текущей корзине и возвращает подтверждение с её снимком.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| cart | Yes | |
| confirmedAt | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It states that it places an order and returns a confirmation with a snapshot of the cart, which is useful. However, it does not mention that checkout is likely irreversible, may trigger payment, or that the cart will be emptied—important details for a mutating action like this.
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, front-loaded sentence that clearly states the action and outcome. It contains no filler or redundant information, making it highly concise and 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?
The tool is a checkout action that has significant side effects (financial transaction, cart clearing), yet the description only mentions placing an order and returning confirmation. It lacks prerequisites like having items in the cart or having payment details configured. An output schema exists for return values, but the behavioral context is still incomplete for such a complex action.
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 tool has zero parameters, so the baseline is 4. The input schema is empty, and no parameter descriptions are needed. The description adds no parameter semantics, but no such semantics are required for a parameterless tool.
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 'Оформляет заказ' (places/checks out order) with a clear resource 'текущей корзине' (current cart). It distinctly performs a final purchase action, differentiating it from sibling tools like view_cart and add_to_cart which manage the cart rather than complete it.
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 usage when the user has a current cart ready to check out, and returns a confirmation. However, it does not explicitly state when to use this tool over alternatives, such as mentioning it should be used after adding items to the cart or that it should not be used for merely viewing cart contents.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_delivery_calendarКалендарь доставкиA
Возвращает сегодняшнюю и завтрашнюю дату плюс ближайшие 7 дней с днями недели. Вызывай ПЕРЕД поиском всегда, когда пользователь говорит о сроке словами — «завтра», «до пятницы», «к выходным», «на этой неделе». Своих часов у тебя нет: без этого вызова дату подставлять нельзя. Полученную дату передавай в search_products* как filters.deliveryBy.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| today | Yes | |
| tomorrow | Yes | |
| upcoming | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full responsibility. It discloses the return format (today, tomorrow, plus 7 days with weekdays) and the critical dependency on this call for any date substitution. It doesn't mention timezone or edge cases, but the output schema covers exact structure, so this is sufficient.
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?
Four sentences that each serve a distinct purpose: what it does, when to call, why it's necessary, and how to use the result. The core function is front-loaded and there is no redundant text.
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?
For a parameterless tool with an output schema, the description fully covers the tool's role, usage, and output integration. It leaves no ambiguity about why and how to invoke it, making it complete in context.
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 tool has zero parameters, making schema coverage trivially 100%. Per the baseline for 0 params, a score of 4 is appropriate; no parameter explanation is needed.
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 returns today's and tomorrow's dates plus the next 7 days with weekdays. This specific verb+resource distinctly separates it from sibling search/cart 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?
The description explicitly instructs to call before searching whenever the user specifies a date verbally, provides concrete examples ('tomorrow', 'by Friday'), and states the tool is mandatory because the agent has no clock. It also directs how to pass the result to search_products*.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_productКарточка товара MegamarketA
Возвращает детальную карточку товара Megamarket (галерея, цена, характеристики, описание) по его id из выдачи.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Идентификатор товара из выдачи search_products |
Output Schema
| Name | Required | Description |
|---|---|---|
| product | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the burden. It clarifies the return content (gallery, price, characteristics, description) but does not explicitly state that it is a read-only operation or disclose error/rate-limit behavior. The verb 'returns' implies a safe read, but more context 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?
A single sentence with no wasted words; the core verb, target resource, and key parameter context are all present up front.
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?
With one parameter, an existing output schema, and simple read semantics, the description covers the necessary context: what is returned, how to obtain the id, and the scope (Megamarket). No further information is critically needed.
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 schema already provides a description for the id parameter (identifier from search_products output). The tool description merely repeats this provenance ('по его id из выдачи') without adding new details, so it does not surpass the schema baseline.
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 the verb 'Возвращает' (returns) and specifies a detailed product card with gallery, price, characteristics, and description, keyed by product id from search results. This clearly distinguishes it from sibling tools like search_products that return lists.
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?
It states that the id comes from search_products output, implying this tool is used after a search to fetch details. However, it does not explicitly mention alternative tools or exclusion criteria, only that the id originates from search results.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pingPingA
Health check that renders the minimal MCP App and echoes an optional message.
| Name | Required | Description | Default |
|---|---|---|---|
| echo | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| echo | Yes | |
| message | Yes | |
| timestamp | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of explaining behavior. It discloses that the tool renders the minimal MCP App and echoes an optional message, covering its primary actions. It does not explicitly state side effects, but the description implies a safe, non-destructive health check, which is sufficient for a ping tool.
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, front-loaded sentence that conveys the purpose, behavior, and parameter semantics without any filler. Every word contributes value, making it highly concise and 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?
The tool is extremely simple: one optional parameter and an output schema that presumably defines the echo response. The description covers the main behavior and parameter, and since an output schema exists, the description does not need to explain return values. It is complete for a tool of this complexity.
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 has one parameter 'echo' with no description (0% schema coverage). The description directly explains this parameter by stating it 'echoes an optional message,' fully compensating for the schema gap and clarifying both the parameter's purpose and its optionality.
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 ('echoes') and identifies the resource ('health check') and scope (minimal MCP App). It clearly distinguishes this from sibling tools, which are product/cart operations, making it a health-check utility.
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 clearly labels this as a health check, implying it is for verifying connectivity/availability. It does not explicitly list alternatives or exclusion criteria, but the sibling tools are all product-related, so the usage context is clear without needing explicit 'use when' statements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_productsПоиск товаров Megamarket (только текст)A
Ищет товары в каталоге Megamarket и возвращает результат ТОЛЬКО ТЕКСТОМ — списком позиций. Интерактивный виджет не рендерится. Использовать по умолчанию, когда пользователь просто просит найти товар и НЕ просил показать виджет, карточки или интерактивную выдачу, и НЕ просил подобрать товар или помочь с выбором.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Поисковый запрос, например «беспроводные наушники» | |
| filters | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | |
| products | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses a key behavioral trait: the output is text-only and interactive widgets are not rendered. However, it doesn't mention potential rate limits, empty results handling, or side effects, but for a search tool the most critical behavior is covered.
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 two sentences, front-loaded with the core functionality (text-only search results) and then clear usage guidance. Every word earns its place with no 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 that an output schema exists, the description does not need to explain return values. It adequately covers when to use the tool and the essential text-only behavior. The missing details on filters are a minor gap, but overall it is sufficiently complete for selecting and invoking the tool correctly.
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 50% (query is described, filters object is not). The description does not mention filters at all, leaving the meaning and usage of the filters parameter undocumented. The description adds no value beyond the schema for 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 searches the Megamarket catalog and returns a text-only list of items. It explicitly distinguishes from sibling tools like search_products_widget and search_products_advised by noting that the interactive widget does not render and that it handles simple search requests, not product selection advice.
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 usage guidance: 'Use by default' and specifies when to avoid it (when user asks for widget, cards, interactive output, or product selection help). This clearly differentiates from alternatives and gives concrete selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_products_advisedПодбор товара Megamarket (виджет + методичка)A
Подбирает товар под задачу пользователя и рендерит интерактивный виджет — грид карточек. ОБЯЗАТЕЛЬНО: перед первым вызовом прочитай ресурс skill://shopping-advisor/SKILL.md и следуй методичке (уточни бюджет и сценарий использования, переведи бюджет в filters, сравнивай по цене и объёму отзывов, предложи 2–3 варианта с разным компромиссом). Использовать, когда пользователь просит ПОДОБРАТЬ товар или ПОМОЧЬ ВЫБРАТЬ, а не просто найти.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Поисковый запрос, например «беспроводные наушники» | |
| filters | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | |
| products | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full transparency burden. It discloses several behavioral traits: rendering a widget, mandatory prerequisite reading of skill://shopping-advisor/SKILL.md, asking clarifying questions, and comparing by price/review volume. It does not elaborate on side effects or state changes, but the tool is clearly advisory and non-destructive in intent.
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 compact but dense, using two sentences plus a mandatory instruction. Every clause earns its place, covering purpose, prerequisites, usage context, and methodology. It is front-loaded with the core function, and while packed, it remains clear and not overly verbose.
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?
The description is contextually complete for a complex tool with nested parameters and an output schema. It explains what the tool does, when to use it (vs simply searching), mandatory prep (SKILL.md), the step-by-step approach, and the expected deliverable (interactive widget with 2-3 tradeoff options). The output schema covers return-value details, so no further explanation is needed.
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 schema coverage is 50%: only 'query' has a description, while filters properties (priceMax, priceMin, deliveryBy) lack descriptions. The description adds value by instructing to 'translate budget into filters', implying the price parameters, but it does not clarify deliveryBy or any exact parameter formats. This partial compensation justifies a mid score.
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 it 'selects a product for the user's task and renders an interactive widget', using specific verbs and resources. It also distinguishes itself from siblings by explicitly contrasting with 'just find' (search_products) and referencing the widget and methodology.
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 gives explicit when-to-use guidance: 'when the user asks to SELECT a product or HELP CHOOSE, not just find'. It also mandates reading the SKILL.md resource before first call and outlines the required methodology (clarify budget, translate budget to filters, compare, suggest 2-3 options), providing strong usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_products_widgetПоиск товаров Megamarket (виджет)A
Ищет товары в каталоге Megamarket и рендерит интерактивный виджет — грид карточек (фото, название, цена, рейтинг). Использовать ТОЛЬКО когда пользователь явно попросил показать виджет, карточки, интерактивную выдачу или UI. Методичку skill:// перед вызовом читать не нужно.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Поисковый запрос, например «беспроводные наушники» | |
| filters | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | |
| products | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the main behavior (searches and renders a widget), but does not mention side effects, permissions, or rate limits. Since this is a read-only style widget tool, the lack of such details is a minor gap.
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 two sentences, front-loaded with the core purpose and followed by a clear usage condition. Every sentence serves a purpose, and there is no fluff.
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?
With an output schema present, the return format is already specified. The description provides purpose and usage guidelines, and the 'only when widget requested' clause sufficiently distinguishes it from siblings. Minor omission: no explicit mention of alternative tools, but the guideline implies it.
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 only 50%, and the description adds no parameter semantics beyond what the schema provides. The 'query' parameter is described in the schema, but 'filters' and its nested properties are undocumented, and the description doesn't mention them at all.
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 it searches the Megamarket catalog and renders an interactive widget grid with photo, name, price, and rating. The specific verb 'searches and renders' and the underlined 'widget' distinguishes it from sibling search 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?
Explicitly states 'Использовать ТОЛЬКО когда пользователь явно попросил показать виджет, карточки, интерактивную выдачу или UI', giving a strong condition for when to invoke. This differentiates it from plain search tools and instructs the agent not to read the skill manual.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
view_cartКорзина MegamarketA
Возвращает текущее состояние корзины Megamarket (позиции, количество, сумма).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| cart | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It implies a read-only operation via 'returns' but does not disclose potential side effects, authentication needs, or behavior when the cart is empty. For a simple view operation, the basics are adequate but not rich.
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 concise sentence that front-loads the purpose and includes parenthetical details. Every word earns its place, with no unnecessary elaboration.
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?
For a zero-parameter tool with an output schema, this description sufficiently conveys what the tool returns (cart state with items, quantity, sum). No additional context is needed for the agent to understand its purpose.
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 tool has zero parameters, so the schema is trivial. The description adds value by explaining what the response contains, but parameter semantics are not a concern. Baseline 4 is appropriate for zero parameters.
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 specifies the action ('Возвращает' - returns), the resource ('корзину Megamarket'), and the content (positions, quantity, sum). This clearly differentiates it from sibling tools like search_products, add_to_cart, and checkout.
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 does not provide any guidance on when to use this tool versus alternatives. It only states the tool's function, leaving the usage context to inference.
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. Dates show when Glama detected each change.
9 tool updates
v1.0.0- First observed
add_to_cart - First observed
checkout - First observed
get_delivery_calendar - First observed
get_product - First observed
ping - First observed
search_products - First observed
search_products_advised - First observed
search_products_widget - First observed
view_cart
TDQS
The three search tools share a core purpose but have clear differentiators: text output vs. widget rendering vs. advisory mode. The extensive descriptions and usage rules make misselection unlikely, though the overlap still creates some ambiguity.
All tools follow a consistent snake_case verb-noun pattern (search_products, get_product, add_to_cart). The search variants use meaningful suffixes (_widget, _advised), and even ping fits as a simple action verb. No mixed conventions or unclear names.
Nine tools is well-scoped for a shopping assistant, covering search, product details, cart management, and checkout without bloat. Each tool serves a distinct purpose and earns its place.
The core shopping flow is complete: discovery, details, cart, and checkout. Missing cart mutation tools (remove/update quantity) are minor gaps an agent can work around, but they prevent full lifecycle management.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Hosted MCP for e-commerce: live product catalog, stock, and pricing for AI agents.
MCP-native ad server. Monetize AI chatbots and agents with conversational ads.
Agent-native commerce with trusted catalog, durable carts, and Stripe Checkout via MCP and UCP.
Related MCP Servers
- FlicenseAqualityDmaintenanceAn MCP server that connects AI assistants to SearchAgora, enabling users to search for, discover, and purchase products across the web through natural language conversations.62-
- FlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that enables AI assistants to interact with a complete e-commerce application, providing authentication, product browsing, and shopping cart management through standardized MCP tools.-
- AlicenseNot gradedqualityDmaintenanceMCP server that connects Carrefour Drive to Claude and other MCP clients, enabling product search with real prices, nutriscore, availability, and natural language cart management.MIT
- FlicenseNot gradedqualityDmaintenanceMCP server for VkusVill grocery store, enabling product search, details retrieval, and cart link creation.3-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/DreamShaded/MCP-Apps-data-proxyfier'
If you have feedback or need assistance with the MCP directory API, please join our Discord server