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).
```
```