mart-compare-mcp
mart-compare-mcp
MCP-сервер, который сравнивает/рекомендует товар A против B (против N товаров) в магазине. Гибридная структура, спроектированная так, чтобы характеристики (страна происхождения/сертификация/пищевая ценность) брались из курируемой БД, а цены/отзывы подтягивались в реальном времени — однако, по состоянию на 2026-08-25, запрос цен/отзывов в реальном времени приостановлен (см. §3).
Сейчас это состояние, в котором реально подтверждены сборка, запуск, тестирование и развёртывание. Включены образцы данных по 5 категориям (молоко/вода/консервированная ветчина/тофу/консервированный тунец), и все 3 инструмента (list_categories/search_products/compare_products) реально вызывались через curl, и их работа подтверждена. Развёрнуто на Render, эндпоинт — https://mart-compare-mcp.onrender.com/mcp (на бесплатном тарифе сервер засыпает при отсутствии трафика). (обновлено 2026-08-25)
1. Локальный запуск
npm install
npm run build # tsc 컴파일 + data/products/*.json을 dist로 복사
npm start # http://localhost:3000/mcp 에서 대기Во время разработки — npm run dev (tsx watch, автоматический перезапуск при сохранении файла).
Проверка здоровья: curl http://localhost:3000/health → {"status":"ok"}
Related MCP server: Trader Joe's MCP Server
2. Структура
src/
index.ts # Express + Streamable HTTP transport 진입점
server.ts # McpServer 인스턴스 생성 + 툴 등록
tools/compareProducts.ts # list_categories / search_products / compare_products 3개 툴
lib/loadProducts.ts # data/products/*.json 로더 (자체 DB)
lib/liveData.ts # 가격/리뷰 실시간 조회 - 현재 항상 null 반환하는 스텁 (§3 참고)
data/schema.ts # 제품 스펙 타입 정의
data/products/*.json # 카테고리별 큐레이션 데이터 (milk, water, canned-ham, tofu, tuna-can)3. Что в текущем состоянии является «фейковым»/«незавершённым» (важно)
Цены/отзывы на самом деле не подключены, и прямо сейчас нет способа их подключить. Изначально планировалось заполнять цены в KR через API поиска Naver Shopping, но этот API полностью прекратил работу с 2026-07-31, и официального заменяющего API нет (фактически подтверждено, что сам пункт «Поиск» исчез из списка «Используемые API» в Naver Developers. Источник: waffleboard.io). В качестве альтернативы рассматривался API поиска Coupang Partners, но из-за трёх причин — ограничение 10 вызовов в час (при 3 подряд ошибках 403 есть риск вечной блокировки аккаунта) + необходимость прохождения проверки при регистрации в Partners + неясность, можно ли использовать его для чистого сравнения цен, поскольку по условиям он предназначен для привлечения партнёрских ссылок — было решено, что регистрироваться должен человек, приняв самостоятельное решение, поэтому пока отложено. OpenAPI 11번가 (11st) тоже искали, но нашлась только документация для продавцов. Интеграция с 楽天市場 (JP) изначально даже не имеет кода. Подробности/метод повторного рассмотрения — см. комментарий в начале
lib/liveData.ts.В данных по консервированному тунцу и тофу поля насыщенных/трансжирных кислот намеренно убраны. Значения из исходного API Министерства безопасности пищевых продуктов и медикаментов (식약처) в 3–6 раз превышают общее содержание жира в том же продукте (например, жир 15 г, а насыщенных жирных кислот 50 г), что позволяет предположить ошибку сопоставления полей или ошибку исходных данных. Поскольку проблема одинаково проявилась во всех 4 продуктах категории тофу и во всех 4 продуктах консервированного тунца, это выглядит не случайностью, а структурной проблемой самих полей этого API (AMT_NUM23/24) — тогда как в молоке/воде/консервированной ветчине этой проблемы не было. Пока официальная документация не подтвердит заново определение AMT_NUM23/24, эти два поля использовать категорически нельзя. (Обнаружено при тестировании в PlayMCP: 2026-08-25)
Категории egg (яйца) пока нет. В
data/staging/egg.draft.jsonвсе 20 результатов поиска по запросу «계란» в API 식약처 оказались переработанными продуктами — печенье из яиц, яичные конфеты, запечённые яйца и т.п., — а сырых яиц (лоток яиц), которые продаются в магазине, не было ни одного, поэтому по итогам проверки всё было отброшено. Для повторного сбора нужно изменить поисковый запрос на «달걀» или сузить до категории яичных продуктов с помощью параметраFOOD_CAT1_NM(крупная категория продуктов питания) и повторить попытку.Элементы с пометкой
needsVerification: trueв файлах данных — это примерные данные, проверка источника которых не завершена. В ответе compare_products этот факт также передаётся в виде note, поэтому использовать эти значения в ответе как факт нельзя.В поле
certificationsвнесены только те данные, которые были фактически подтверждены поиском (например, сертификация ERA Института питьевой воды для Jeju Samdasoo). Негативные факты о конкурирующих продуктах, такие как «несоответствие/непрохождение проверки», без проверки не добавлялись ни в коем случае — такая информация может быть сочтена клеветой, поэтому при необходимости её можно заполнять только из официальных первоисточников, таких как официальная информация об отзыве продукции и административных мерах на Food Safety Korea (식약처).
4. Как добавить категорию/продукт
Вручную:
Добавьте JSON-файл по категории в
src/data/products/(или добавьте позиции в существующий файл)Следуйте схеме
ProductSpec(src/data/schema.ts) — обязательно заполняйтеsources, а значения, для которых не удалось найти источник, не вносите, а оставляйте сneedsVerification: true+ notesЗаново выполните
npm run build(изменения отразятся только после копирования json в dist)
Автоматический сбор (1-й уровень — API 식약처):
Существование и пищевую ценность корейских продуктов можно массово собирать через Open API базы данных пищевой ценности 식약처.
Внимание: заявку на этот API нужно подавать не через поиск на самом сайте foodsafetykorea.go.kr, а через Портал открытых данных (data.go.kr) — если искать на foodsafetykorea.go.kr, выводится другой сервис (ссылочного/L-типа), и подача заявки блокируется.
# 1. https://www.data.go.kr/data/15127578/openapi.do 접속
# → "활용신청" 버튼 클릭 → 자동승인(개발계정, 트래픽 10,000/일)
# 2. 승인 후 마이페이지에서 서비스키(인증키) 확인
# 3. .env.example을 .env로 복사하고 FOODSAFETY_API_KEY 채우기
cp .env.example .env
# 4. 카테고리별로 수집 (검색어, 우리 카테고리id) - .env가 자동으로 읽혀서 이렇게만 하면 됨
npm run ingest -- 우유 milkРезультат сохраняется не в src/data/products/, а только как черновик в src/data/staging/milk.draft.json. Автоматически он не подхватывается, поэтому откройте этот файл и:
отберите только фирменные продукты, которые реально продаются в магазине (много шума: исследовательские образцы, готовые блюда и т.п.)
заполните или удалите позиции с пустым названием бренда
информацию о сертификатах/отличиях (2-й уровень) этот скрипт заполнить не может, поэтому дополните её отдельным поиском
и перенесите в src/data/products/milk.json только отобранные позиции. Этот скрипт предназначен для быстрого создания черновика пищевой ценности, а не для замены проверки.
Прозрачно сообщаю о проверке: спецификация этого API (Base URL
apis.data.go.kr/1471000/FoodNtrCpntDbInfo02, параметры запроса, имена полейAMT_NUM1~157) была фактически подтверждена тем, что я зашёл браузером на страницу data.go.kr и лично прочитал экран спецификации API (Swagger). Что означает каждый код AMT_NUM — документ (Excel) в браузере открыть не удалось, поэтому я перекрёстно проверил по коду сопоставления из проекта с открытым исходным кодом (лицензия ISC) k-mfds-fooddb-mcp-server, который уже реализует этот же API. Сам фактический вызов API здесь выполнить не удалось, поскольку сеть этого контейнера блокируетapis.data.go.kr(host_not_allowed); вместо этого весь поток — сборка запроса → разбор ответа → сопоставление → сохранение файла — был проверен на mock, точно имитирующем реальную схему ответа. Первый вызов с настоящим ключом тебе нужно сделать самому.
5. Развёртывание (Render) — завершено
Развёртывание завершено на бесплатном тарифе Render с привязкой к GitHub-репозиторию (ksbsjh74-code/mart-compare-mcp).
Проверка здоровья:
https://mart-compare-mcp.onrender.com/healthЭндпоинт для регистрации в PlayMCP:
https://mart-compare-mcp.onrender.com/mcpПеременные окружения управляются напрямую на вкладке Environment в панели Render (зарегистрирован только
FOODSAFETY_API_KEY— ingest-скрипт запускается локально, так что на самом деле он не нужен в рантайме сервера, можно убрать позже)При push в ветку
mainRender автоматически переразвёртываетНа бесплатном тарифе при отсутствии трафика сервер переходит в спящий режим, и на первый запрос может быть холодный старт (десятки секунд) — при появлении реального трафика стоит рассмотреть переход на платный тариф (Starter, $7/мес)
Баг с постоянным таймаутом проверки здоровья при первом развёртывании (исправлено, коммит d03db8c): при вызове createMcpExpressApp() из @modelcontextprotocol/sdk в src/index.ts без опций значение по умолчанию — host: '127.0.0.1', и в этом случае SDK автоматически подключает middleware защиты от DNS-ребдинга, который отклоняет с кодом 403 все запросы, у которых заголовок Host не равен localhost/127.0.0.1/[::1]. Поскольку проверка здоровья Render и реальные клиентские запросы приходят с Host: mart-compare-mcp.onrender.com, блокировался и /health, из-за чего развёртывание постоянно падало с таймаутом проверки здоровья, хотя приложение по логам нормально привязывалось к порту. Решено явным указанием createMcpExpressApp({ host: "0.0.0.0" }) — это опция, которую обязательно нужно указывать при использовании этого SDK в публичной среде развёртывания; если позже будешь использовать тот же хелпер в других проектах, обрати на это внимание.
6. Процедура регистрации в PlayMCP (проверено по состоянию на 2026-08)
Эндпоинт сервера, развёрнутого в §5, должен быть доступен из интернета (путь
/mcpдолжен принимать POST). PlayMCP использует способ регистрации удалённых (remote) MCP-серверов, поэтому локальный stdio-сервер как есть использовать нельзя.Войдите на https://playmcp.kakao.com через аккаунт Kakao
В «Регистрация MCP-сервера» введите URL эндпоинта развёрнутого сервера (
https://.../mcp)Сначала сервер находится в приватном (временная регистрация) статусе и доступен для тестирования только с вашего аккаунта
Чтобы открыть доступ другим пользователям, нужно пройти процедуру проверки партнёра Kakao (детальные требования этой части нужно отдельно уточнить в «Руководстве по использованию» на сайте PlayMCP — это постоянно обновляемая область, поэтому перепроверьте непосредственно перед регистрацией)
7. Предложения по следующим шагам
Расширение категорий (добавлены тофу/консервированный тунец; яйца отложены из-за проблем с качеством данных)
Создание Dockerfile/render.yaml
Создание GitHub-репозитория + завершение развёртывания на Render
Исследование API для запроса цен в реальном времени (подтверждено прекращение Naver Shopping, рассмотрены Coupang Partners/11번가 и отложено)
Исправление бага с таймаутом проверки здоровья после развёртывания + подтверждение фактического вызова
/mcp(2026-08-25, коммитd03db8c)Регистрация в PlayMCP + завершение тестового вызова всех 3 инструментов (list_categories/search_products/compare_products) через реальный чат (2026-08-25, заявка на проверку подана — ожидается результат проверки). В ходе тестирования дополнительно подтверждено, что проблема качества данных по насыщенным/трансжирным кислотам есть не только в консервированном тунце, но и в тофу (отражено в §3 выше)
Повторный сбор категории egg (повторить с поисковым запросом «달걀» или фильтром FOOD_CAT1_NM)
(опционально) Повторная попытка запроса цен в реальном времени — пройти проверку регистрации в Coupang Partners и подключить со структурой кэширования с учётом ограничения 10 вызовов в час, либо открыть официальную документацию 11번가 и проверить наличие API общего поиска товаров
This server cannot be installed
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 Servers
- FlicenseNot gradedqualityDmaintenanceProvides grocery price and nutritional information search capabilities, allowing AI agents to search for food products, compare prices, and analyze nutritional content across different grocery stores.1
- AlicenseAqualityDmaintenanceAllows users to search for products, access detailed nutritional and allergen information, and find nearby store locations. It also provides tools to browse new and featured items across various grocery categories.4121MIT
- FlicenseNot gradedqualityDmaintenanceEnables cross-store price comparison and recipe-driven cart automation for Israeli grocery stores Shufersal and Tiv Taam, with an extensible architecture for additional stores.
- FlicenseNot gradedqualityCmaintenanceEnables product comparison and analysis for any MCP-compatible AI assistant, with tools like compare_products and list_products.
Related MCP Connectors
Agent-native product catalog for AI shopping agents. 296M+ products, 28 countries.
Barcode lookup, nutrition search, and product comparison for 3M+ crowd-sourced food products.
Shopping search across 100M+ products, with every retailer's offer and live price in one place.
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/ksbsjh74-code/mart-compare-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server