Один протокол для любого клиента
Model Context Protocol и JSON-RPC 2.0 — сервер подключается к Claude, Cursor, DeepSeek Harness и собственным агентам без отдельной интеграции.
Каталог на 7 000 SKU, расчёт цены, заказы, замеры, монтаж, рекламации, лиды и SEO — доступные AI-агенту через единый протокол. 15 инструментов, 12 на чтение и 3 на запись.
curl -X POST https://mcp.dealshub.ru/mcp/dealshub \
-H "Authorization: Bearer $MCP_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "search_products",
"arguments": { "factory": "Zadoor", "width_mm": 800 }
}
}'
{
"count": 2,
"products": [
{ "id": 101, "sku": "Z-100-W", "name": "Zadoor Z-100",
"factory": "Zadoor", "color": "Белый",
"price": 10000.0, "stock": 5, "in_stock": true }
]
}
Возможности
Сервер отдаёт бизнес-операции маркетплейса как типизированные инструменты — с валидацией, правами доступа и предсказуемыми ответами.
Model Context Protocol и JSON-RPC 2.0 — сервер подключается к Claude, Cursor, DeepSeek Harness и собственным агентам без отдельной интеграции.
Подбор полотна, расчёт цены, создание заказа, замер и монтаж, рекламация и SEO — весь маршрут закрывается инструментами сервера.
Пять правил ценообразования применяются последовательно, и каждая наценка возвращается отдельной строкой — видно, из чего сложилась итоговая сумма.
Personal Access Token с гранулярными abilities mcp:read и mcp:write, лимит запросов на токен и журнал вызовов без персональных данных.
HTTP-эндпоинт для удалённых агентов и STDIO-режим для локального запуска рядом с проектом — одна и та же кодовая база инструментов.
Ответы поиска кешируются, а выдача ограничена и постранично управляема — агент не выгружает каталог целиком.
Инструменты
Инструменты чтения помечены read
и требуют ability mcp:read.
Инструменты записи — write
и mcp:write.
Каталог дверных полотен: поиск по 7 000 SKU и полная карточка с опциями, изображениями и характеристиками.
search_products
Фильтры: фабрика, стиль, материал, цвет, размер, система открывания. Кеш 300 с.
get_product_details
Опции со значениями, изображения, атрибуты, акции, описание.
Расчёт итоговой цены с наценками за нестандарт, срочность, комплект, фабрику и регион.
calculate_price
Каждое правило возвращается отдельной строкой в markups[].
Создание заказа одной транзакцией и сводка по нему: позиции, замеры, монтаж, платежи, рекламации.
create_order
Пишет 8 таблиц: orders → orders_items → … → order_logs.
get_order_summary
Полная карточка заказа с вложенными сущностями.
Гарантийные обращения: список с фильтрами и создание рекламации с позициями и дефектами.
get_order_claims
Фильтры по заказу, статусу и признаку закрытия.
create_order_claim
Позиции, тип и серьёзность дефекта, ожидания клиента.
Заявки с сайта: фильтры по статусу, менеджеру, телефону, e-mail и дате создания.
get_leads
Корзина, источник, страница заявки, статус и менеджер.
Нормативно-справочная информация каталога: категории и коллекции, фабрики, системы открывания, размеры.
get_categories
Дерево категорий и коллекций с количеством товаров.
get_factories
Фабрики со страной, сайтом и числом товаров.
get_opening_systems
Системы открывания с ограничениями по весу и габаритам.
get_door_sizes
Размеры полотен и группы размеров с коэффициентами.
Наполнение мета-тегов и описаний товаров и категорий по «описанию магазина» — с проверкой перед записью.
get_store_seo_profile
Описание магазина, шаблоны и текущие мета-поля.
list_seo_gaps
Что не заполнено, постранично через limit и offset.
save_seo_meta
Запись meta_title, meta_description и description; dry_run для проверки.
Сценарий
Типовая последовательность, которую агент проходит от подбора полотна до проверки созданного заказа.
search_products
Фильтры по фабрике, размеру, цвету и системе открывания.
get_product_details
Значения опций, изображения и характеристики позиции.
calculate_price
Наценки за нестандарт, срочность, комплект и регион.
create_order
Одна транзакция на восемь таблиц заказа.
get_order_summary
Позиции, замеры, монтаж, платежи и рекламации.
Профиль магазина → список пробелов → подготовка текста → запись с проверкой.
get_store_seo_profile
list_seo_gaps
save_seo_meta
Подключение
Токен выдаётся artisan-командой, эндпоинт — обычный JSON-RPC по HTTPS, локальный запуск — STDIO без сети.
Создаётся служебный пользователь и Personal Access Token с нужными abilities.
php artisan mcp:token \
--name=dsh-prod
Укажите URL эндпоинта и заголовок с токеном в конфигурации MCP-клиента.
{
"mcpServers": {
"dealshub": {
"type": "http",
"url": "https://mcp.dealshub.ru/mcp/dealshub",
"headers": {
"Authorization": "Bearer <token>"
}
}
}
}
STDIO-режим поднимает сервер в процессе рядом с проектом — без токена и сети.
php artisan mcp:start \
dealshub
POST https://mcp.dealshub.ru/mcp/dealshub
curl -X POST https://mcp.dealshub.ru/mcp/dealshub \
-H "Authorization: Bearer $MCP_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
Ценообразование
Правила применяются последовательно как множители: ширина → срочность → комплект → фабрика → регион. Ответ содержит исходную цену, итог и расшифровку каждой наценки.
Пример расчёта
10 000 ₽ × 1,15 × 1,25 × 0,90 × 1,10 × 1,10
= 22 741,13 ₽
Полотно 1 000 мм, срочный заказ, комплект из 3 дверей, наценка фабрики +10 %, регион Москва.
config/ai.php| Правило | Условие | Эффект |
|---|---|---|
| Нестандартная ширина | > 900 мм | +15 % |
| Срочность | urgent = true | +25 % |
| Комплект | от 3 дверей | −10 % |
| Наценка фабрики | default_price_rule_id | +0…15 % |
| Регион | msk · spb · mo | ×1,10 / 1,08 / 1,05 |
Коэффициенты читаются из конфигурации; иной регион получает коэффициент
default.
Безопасность
Проверка ability выполняется до валидации полей и работает fail closed: без подтверждённого пользователя инструмент отказывает, а не пропускает вызов.
mcp:read
12 инструментов
mcp:write
3 инструмента
?token= удаляется из запроса до логирования.
200
Ответ JSON-RPC, в том числе result.isError при ошибке валидации
401
Токен отсутствует или недействителен
405
GET или DELETE на эндпоинт (разрешён только POST)
429
Превышен лимит запросов на токен
Вопросы
Командой php artisan mcp:token --name=dsh-prod. Создаётся служебный пользователь mcp@dealshub.local и Personal Access Token с abilities mcp:read и mcp:write. Значение токена показывается один раз. Флаги: --abilities=mcp:read для токена только на чтение, --revoke-all для отзыва прежних токенов.
HTTP (POST /mcp/dealshub) подходит удалённым агентам: запросы авторизуются токеном Sanctum, работают abilities и лимит запросов. STDIO (php artisan mcp:start dealshub) запускает сервер локально рядом с проектом; аутентификации нет, доступ ограничен самим фактом запуска процесса.
Токен можно передать query-параметром: POST /mcp/dealshub?token=<token>. Middleware mcp.token переносит его в заголовок Authorization и удаляет из запроса, чтобы значение не попало в логи.
Инструменты чтения не поднимают ошибку: get_product_details вернёт { found: false, product_id }, get_order_summary — { found: false, order_id }. Так агенту не нужно разбирать исключение, чтобы отличить «нет данных» от сбоя.
save_seo_meta поддерживает dry_run: вызов с dry_run=true возвращает подготовленные значения без записи в базу. Для заказов безопасная последовательность — search_products → calculate_price → create_order.
Журнал MCP-вызовов пишет метод, имя инструмента, ключи аргументов, пользователя, статус и длительность. Значения аргументов и токены в журнал не попадают.
Выдайте токен, укажите эндпоинт — и каталог, цены, заказы и рекламации станут доступны как обычные MCP-инструменты.