Skip to main content
Glama
AlekseiKastsiuk

garmonia-crm-mcp

README.md
# garmonia-crm-mcp

MCP-сервер для тестирования CRM «Гармония отеля» через её внутренний API.
Логинится по паролю (сессионная cookie), даёт инструменты для заказов, клиентов,
брендов, календаря и универсальный доступ ко всему остальному CRUD.

## Быстрая установка (одна команда, без клонирования)

Нужен только Node 18+. Ставить и клонировать репозиторий не надо — `npx`
запустит сервер прямо из GitHub.

1. Создай локальный файл с кредами, например `~/garmonia-crm.json`:

   ```json
   {
     "baseUrl": "https://адрес-crm",
     "login": "твой-логин",
     "password": "твой-пароль"
   }
   ```

2. Добавь MCP одной командой (подставь свой путь к файлу):

   ```bash
   claude mcp add garmonia-crm \
     -e CRM_CONFIG="$HOME/garmonia-crm.json" \
     -- npx -y github:AlekseiKastsiuk/garmonia-crm-mcp
   ```

3. Перезапусти Claude Code.

Креды лежат только в твоём локальном файле и никуда не отправляются —
`npx` тянет с GitHub лишь код сервера.

## Установка из исходников (альтернатива)

```bash
git clone https://github.com/AlekseiKastsiuk/garmonia-crm-mcp
cd garmonia-crm-mcp
npm install
cp crm-config.example.json crm-config.json
# открой crm-config.json и впиши baseUrl, логин и пароль своей CRM
```

`crm-config.json` — это адрес CRM и логин/пароль, в git его не коммить
(он уже в `.gitignore`).

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

В `~/.claude.json` (или через `claude mcp add`) добавить сервер:

```json
{
  "mcpServers": {
    "garmonia-crm": {
      "command": "node",
      "args": ["/полный/путь/к/garmonia-crm-mcp/server.mjs"]
    }
  }
}
```

Если конфиг лежит не рядом с сервером — указать путь в env:

```json
"env": { "CRM_CONFIG": "/полный/путь/к/crm-config.json" }
```

После правки — перезапустить Claude Code.

## Инструменты

| Инструмент | Что делает |
|---|---|
| `crm_login` | Принудительный перелогин |
| `crm_orders_list` | Доска заказов (scope: all / free / mine) |
| `crm_order_create` | Создать заказ/лид (name, phone) |
| `crm_order_claim` | Взять заказ в работу |
| `crm_order_set_status` | Сменить статус (new/in_work/shipped/done/cancelled) |
| `crm_order_delete` | Удалить заказ навсегда (по умолчанию сначала в cancelled) |
| `crm_orders_delete` | Массово удалить заказы по списку id |
| `crm_clients_search` | Поиск клиентов |
| `crm_client_delete` | Удалить клиента |
| `crm_brands_list` / `crm_brand_create` / `crm_brand_delete` | Бренды |
| `crm_staff_list` | Сотрудники |
| `crm_calendar_list` | Календарь (задачи/звонки) |
| `crm_request` | Прямой запрос к любому `/api/...` (товары, категории, cold-база и т.д.) |

## Безопасность

- Пароль и адрес CRM держатся в `crm-config.json`, который в `.gitignore` —
  в репозиторий не попадает.
- В `crm-config.example.json` только плейсхолдеры, без реальных данных.
- Перед первым пушем стоит проверить: `git ls-files` не должен содержать
  `crm-config.json`, а `git grep -i password` — только имя поля в коде.

## Примечания

- Заказы создаются публичным эндпоинтом `POST /api/form-lead` — авторизация не нужна.
- Удаление заказа — это не REST, а Next.js server action (та же кнопка «Удалить»
  на вкладке закрытых). `crm_order_delete` дёргает её сам. id экшена привязан к
  сборке фронта; если после деплоя CRM удаление отвалится — обнови
  `bulkDeleteActionId` в `crm-config.json` (искать в JS-бандле по `bulkDelete`).
- Товары/категории отдают листинги через серверный рендер, а не через GET API —
  для их создания/правки/удаления пользуйся `crm_request` (POST/PATCH/DELETE).
```
```