# retailcrm-mcp [Health: Active]

**Category:** 💻 Developer Tools  
**Repository:** https://github.com/theYahia/retailcrm-mcp  
**GitHub Stars:** 1  
**Views:** 0  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/retailcrm-mcp

## Description
MCP server for RetailCRM — orders, customers management via API v5.

## Claude Desktop Quick Installation
Install path detected from listing signals. Uses `npx` (confidence: high):

```json
"mcpServers": {
  "retailcrm-mcp": {
    "command": "npx",
    "args": ["-y","@theyahia/retailcrm-mcp"]
  }
}
```

## Documentation & README

# MCP-сервер для RetailCRM — заказы, клиенты и товары интернет-магазина через ИИ

Если вы искали, как подключить RetailCRM к нейросети, поднять заказ или карточку клиента и не собирать отчёты руками — это оно. 39 инструментов и 2 навыка поверх API v5: заказы, клиенты, товары, складские остатки, оплаты, задачи, справочники и аналитика. Спрашиваете «что с заказом 12345» — получаете статус, состав и оплату одним ответом.

> Промышленный MCP-сервер для e-commerce CRM **RetailCRM**. 39 инструментов + 2 навыка-промпта для работы с заказами, клиентами, товарами, остатками, оплатами, задачами, справочниками и аналитикой через API v5.

[![npm](https://img.shields.io/npm/v/@theyahia/retailcrm-mcp)](https://www.npmjs.com/package/@theyahia/retailcrm-mcp)
[![Smithery](https://smithery.ai/badge/@theyahia/retailcrm-mcp)](https://smithery.ai/server/@theyahia/retailcrm-mcp)

## Ответы экономят токены по умолчанию

Читающие инструменты возвращают **компактную структурированную сводку** только из тех полей, которые нужны агенту, а не весь ответ RetailCRM. Подробность настраивается на каждый вызов:

| Параметр | Что делает |
|-------|--------|
| _(по умолчанию)_ | `detail:"summary"` — ключевые поля + блок `pagination` |
| `detail:"full"` | Все структурированные поля (позиции, доставка, оплаты, адрес…) |
| `raw:true` | Нетронутый ответ RetailCRM (для отладки) |

> ⚠️ **v3 ломает совместимость** с v2: по умолчанию отдаётся структурированная сводка, а не сырой JSON. Передайте `raw:true`, чтобы вернуть прежний формат.

## Инструменты (39)

### Заказы
| Инструмент | Описание |
|------|-------------|
| `list_orders` | Список заказов по статусу, клиенту, номеру, периоду |
| `get_order` | Один заказ по ID или externalId |
| `create_order` | Создать заказ; привязать существующего клиента (`customer_id`/`customer_external_id`) или завести нового прямо в вызове |
| `update_order` | Изменить статус, клиента, доставку, комментарии |
| `orders_history` | История изменений заказов, включая смены статусов (инкрементальная синхронизация) |

### Клиенты
| Инструмент | Описание |
|------|-------------|
| `list_customers` | Поиск клиентов по имени, e-mail, телефону, дате |
| `get_customer` | Один клиент по ID или externalId |
| `create_customer` | Создать клиента |
| `update_customer` | Изменить существующего клиента |
| `merge_customers` | Объединить дубли (разрушающая операция) |
| `customers_history` | Лог изменений клиентов (прирост/отток, инкрементальная синхронизация) |

### Товары и остатки
| Инструмент | Описание |
|------|-------------|
| `list_products` | Товары каталога по названию, группе, активности, цене |
| `list_product_groups` | Дерево товарных категорий |
| `store_inventories` | Остатки и себестоимость по торговым предложениям и складам |

### Оплаты
| Инструмент | Описание |
|------|-------------|
| `order_payment_create` | Зафиксировать оплату по заказу |
| `order_payment_edit` | Изменить оплату |
| `order_payment_delete` | Удалить оплату (разрушающая операция) |

### Заметки и задачи
| Инструмент | Описание |
|------|-------------|
| `customer_notes_list` / `customer_notes_create` / `customer_notes_delete` | Произвольные заметки по клиенту |
| `tasks_list` / `tasks_create` / `tasks_edit` | Задачи и напоминания |

### Маркетинг и финансы
| Инструмент | Описание |
|------|-------------|
| `list_segments` | Сегменты клиентов (RFM и маркетинговые когорты) |
| `list_costs` / `create_cost` | Записи расходов для аналитики маржи |

### Файлы
| Инструмент | Описание |
|------|-------------|
| `files_list` / `files_get` / `files_upload` | Прикрепление и получение файлов (загрузка сырым octet-stream) |

### Справочники
| Инструмент | Описание |
|------|-------------|
| `list_statuses` / `list_delivery_types` / `list_payment_types` / `list_stores` | Справочники статусов, доставок, оплат и магазинов |
| `list_sites` | Сайты, доступные ключу API (для заполнения параметра `site`) |
| `list_countries` / `list_order_types` / `list_order_methods` | Справочники адресов и заказов |

### Аналитика
| Инструмент | Описание |
|------|-------------|
| `get_orders_summary` | Статистика заказов за период: точное количество и выручка, средний чек, распределение по статусам |
| `get_customers_summary` | Количество новых клиентов за период |

## Навыки-промпты (2)

| Навык | Описание |
|-------|-------------|
| `new-orders` | Быстрый ежедневный обзор сегодняшних заказов |
| `customer-search` | Найти клиента по имени, e-mail или телефону |

## Настройка

1. В RetailCRM откройте **Настройки → Интеграция → Ключи API**.
2. Создайте ключ API с нужными правами (заказы, клиенты, склад, справочники). Для **мультисайтового** ключа передавайте код `site` в инструментах создания и изменения (см. `list_sites`).
3. Запомните свой домен (часть `yourstore` из `yourstore.retailcrm.ru`).

## Переменные окружения

| Переменная | Обяз. | Описание |
|----------|----------|-------------|
| `RETAILCRM_DOMAIN` | да | Домен вашего RetailCRM (например, `yourstore.retailcrm.ru`) |
| `RETAILCRM_API_KEY` | да | Ключ API (передаётся в заголовке `X-API-KEY`) |
| `RETAILCRM_READONLY` | нет | `1` — оставить только читающие инструменты (скрыть create/update/merge/delete) |
| `RETAILCRM_RATE_LIMIT` | нет | Клиентское ограничение запросов в секунду (RetailCRM допускает ~10/с) |
| `PORT` / `HOST` | нет | Привязка HTTP-сервера (по умолчанию `3000` / `127.0.0.1`, только в режиме `--http`) |
| `RETAILCRM_HTTP_ALLOWED_HOSTS` | нет | Разрешённые значения `Host` через запятую для защиты от DNS-rebinding |
| `RETAILCRM_DNS_PROTECTION` | нет | `off` — отключить защиту от DNS-rebinding (HTTP-режим) |

> `RETAILCRM_URL` по-прежнему принимается как запасной вариант для `RETAILCRM_DOMAIN`.

## Подключение к Claude Desktop

```json
{
  "mcpServers": {
    "retailcrm": {
      "command": "npx",
      "args": ["-y", "@theyahia/retailcrm-mcp"],
      "env": {
        "RETAILCRM_DOMAIN": "yourstore.retailcrm.ru",
        "RETAILCRM_API_KEY": "your-api-key"
      }
    }
  }
}
```

## Режим Streamable HTTP

Запуск в виде HTTP-сервера вместо stdio:

```bash
RETAILCRM_DOMAIN=yourstore.retailcrm.ru \
RETAILCRM_API_KEY=your-key \
npx @theyahia/retailcrm-mcp --http
```

- `POST /mcp` — эндпоинт MCP Streamable HTTP (stateless: на каждый запрос создаётся новый сервер)
- `GET /health` — проверка состояния (JSON с версией и числом инструментов)
- `GET`/`DELETE /mcp` — `405` (в stateless-режиме не используются)
- Привязка по умолчанию: `127.0.0.1:3000`. Защита от DNS-rebinding для локальных привязок включена по умолчанию.

## Smithery

```bash
npx @smithery/cli install @theyahia/retailcrm-mcp
```

## Демо-промпты

**1. Обзор заказов за день:** «Покажи все заказы, созданные сегодня, в статусе „новый“. Дай итоговое количество и выручку.»

**2. Клиент и его история заказов:** «Найди клиента с почтой anna@example.com. Покажи полный профиль и последние заказы.»

**3. Проверка остатков:** «Есть ли товар с externalId SKU-42 в наличии и на каком складе?»

## Вебхуки и триггеры

RetailCRM не умеет создавать вебхуки через API. Используйте **Триггеры** в админке (Настройки → Триггеры), чтобы отправлять HTTP-запросы на внешние эндпоинты по событиям заказов и клиентов.

## Обработка ошибок

- **Лимиты запросов и 5xx:** автоматический повтор с экспоненциальной задержкой и джиттером (до 3 попыток).
- **Ошибки API:** детали ошибки RetailCRM разбираются и возвращаются модели как результат инструмента с `isError: true`, чтобы агент мог исправиться сам (например, повторить с `by:"externalId"`).
- **Таймауты:** 15 секунд на запрос с повтором.

## Разработка

```bash
npm install
npm test          # vitest (на моках; живой ключ API не нужен)
npm run lint      # eslint
npm run typecheck # tsc --noEmit
npm run dev       # dev-режим stdio (tsx)
npm run build     # очистка + сборка в dist/
```

## Лицензия

MIT

---

Часть [WWmcp](https://github.com/theYahia/WWmcp) · Telegram: [@vhodvai](https://t.me/vhodvai)

