Перейти к содержимому
DealsHub MCP CRM межкомнатных дверей
MCP · JSON-RPC 2.0 · Laravel 13

MCP-сервер CRM маркетплейса межкомнатных дверей

Каталог на 7 000 SKU, расчёт цены, заказы, замеры, монтаж, рекламации, лиды и SEO — доступные AI-агенту через единый протокол. 15 инструментов, 12 на чтение и 3 на запись.

Инструментов
15
Доменов
7
Транспорта
2
Запросов/мин
60
HTTP · POST /mcp/dealshub
curl -X POST https://www.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 }
    }
  }'
Ответ · result.structuredContent 200 OK
{
  "count": 2,
  "products": [
    { "id": 101, "sku": "Z-100-W", "name": "Zadoor Z-100",
      "factory": "Zadoor", "color": "Белый",
      "price": 10000.0, "stock": 5, "in_stock": true }
  ]
}

Возможности

CRM, готовая к работе с агентами

Сервер отдаёт бизнес-операции маркетплейса как типизированные инструменты — с валидацией, правами доступа и предсказуемыми ответами.

Один протокол для любого клиента

Model Context Protocol и JSON-RPC 2.0 — сервер подключается к Claude, Cursor, DeepSeek Harness и собственным агентам без отдельной интеграции.

Полный цикл сделки

Подбор полотна, расчёт цены, создание заказа, замер и монтаж, рекламация и SEO — весь маршрут закрывается инструментами сервера.

Прозрачные наценки

Пять правил ценообразования применяются последовательно, и каждая наценка возвращается отдельной строкой — видно, из чего сложилась итоговая сумма.

Доступ по токенам Sanctum

Personal Access Token с гранулярными abilities mcp:read и mcp:write, лимит запросов на токен и журнал вызовов без персональных данных.

Два транспорта

HTTP-эндпоинт для удалённых агентов и STDIO-режим для локального запуска рядом с проектом — одна и та же кодовая база инструментов.

Отзывчивый каталог

Ответы поиска кешируются, а выдача ограничена и постранично управляема — агент не выгружает каталог целиком.

Инструменты

15 инструментов в 7 доменах

Инструменты чтения помечены read и требуют ability mcp:read. Инструменты записи — write и mcp:write.

12 read 3 write

Товары

Каталог дверных полотен: поиск по 7 000 SKU и полная карточка с опциями, изображениями и характеристиками.

  • read search_products Фильтры: фабрика, стиль, материал, цвет, размер, система открывания. Кеш 300 с.
  • read get_product_details Опции со значениями, изображения, атрибуты, акции, описание.

Ценообразование

Расчёт итоговой цены с наценками за нестандарт, срочность, комплект, фабрику и регион.

  • read calculate_price Каждое правило возвращается отдельной строкой в markups[].

Заказы

Создание заказа одной транзакцией и сводка по нему: позиции, замеры, монтаж, платежи, рекламации.

  • write create_order Пишет 8 таблиц: orders → orders_items → … → order_logs.
  • read get_order_summary Полная карточка заказа с вложенными сущностями.

Рекламации

Гарантийные обращения: список с фильтрами и создание рекламации с позициями и дефектами.

  • read get_order_claims Фильтры по заказу, статусу и признаку закрытия.
  • write create_order_claim Позиции, тип и серьёзность дефекта, ожидания клиента.

Лиды

Заявки с сайта: фильтры по статусу, менеджеру, телефону, e-mail и дате создания.

  • read get_leads Корзина, источник, страница заявки, статус и менеджер.

Справочники

Нормативно-справочная информация каталога: категории и коллекции, фабрики, системы открывания, размеры.

  • read get_categories Дерево категорий и коллекций с количеством товаров.
  • read get_factories Фабрики со страной, сайтом и числом товаров.
  • read get_opening_systems Системы открывания с ограничениями по весу и габаритам.
  • read get_door_sizes Размеры полотен и группы размеров с коэффициентами.

SEO

Наполнение мета-тегов и описаний товаров и категорий по «описанию магазина» — с проверкой перед записью.

  • read get_store_seo_profile Описание магазина, шаблоны и текущие мета-поля.
  • read list_seo_gaps Что не заполнено, постранично через limit и offset.
  • write save_seo_meta Запись meta_title, meta_description и description; dry_run для проверки.

Сценарий

Путь заказа — пять вызовов

Типовая последовательность, которую агент проходит от подбора полотна до проверки созданного заказа.

  1. 1 search_products

    Подобрать полотна

    Фильтры по фабрике, размеру, цвету и системе открывания.

  2. 2 get_product_details

    Уточнить опции

    Значения опций, изображения и характеристики позиции.

  3. 3 calculate_price

    Посчитать цену

    Наценки за нестандарт, срочность, комплект и регион.

  4. 4 create_order

    Оформить заказ

    Одна транзакция на восемь таблиц заказа.

  5. 5 get_order_summary

    Проверить результат

    Позиции, замеры, монтаж, платежи и рекламации.

Наполнение SEO идёт отдельной веткой

Профиль магазина → список пробелов → подготовка текста → запись с проверкой.

get_store_seo_profile list_seo_gaps save_seo_meta

Подключение

Три шага до первого вызова

Токен выдаётся artisan-командой, эндпоинт — обычный JSON-RPC по HTTPS, локальный запуск — STDIO без сети.

1

Выдать токен

Создаётся служебный пользователь и Personal Access Token с нужными abilities.

php artisan mcp:token \
  --name=dsh-prod
2

Подключить HTTP-клиент

Укажите URL эндпоинта и заголовок с токеном в конфигурации MCP-клиента.

{
  "mcpServers": {
    "dealshub": {
      "type": "http",
      "url": "https://www.mcp.dealshub.ru/mcp/dealshub",
      "headers": {
        "Authorization": "Bearer <token>"
      }
    }
  }
}
3

Или запустить локально

STDIO-режим поднимает сервер в процессе рядом с проектом — без токена и сети.

php artisan mcp:start \
  dealshub

Проверка соединения: список инструментов

POST https://www.mcp.dealshub.ru/mcp/dealshub
curl -X POST https://www.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 инструментов
Каталог, цены, сводки заказов, рекламации, лиды, справочники, SEO-профиль.
mcp:write 3 инструмента
Создание заказа, создание рекламации, запись SEO-мета.

Ограничения и аудит

  • Лимит 60 запросов в минуту на токен.
  • Журнал вызовов: метод, инструмент, ключи аргументов, статус, длительность.
  • Значения аргументов, токены и пароли в журнал не попадают.
  • Query-параметр ?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 отличается от STDIO?

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-вызовов пишет метод, имя инструмента, ключи аргументов, пользователя, статус и длительность. Значения аргументов и токены в журнал не попадают.

Подключите DealsHub к своему агенту

Выдайте токен, укажите эндпоинт — и каталог, цены, заказы и рекламации станут доступны как обычные MCP-инструменты.