amocrm-mcp 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- amocrm_mcp-0.1.0/.gitignore +8 -0
- amocrm_mcp-0.1.0/LICENSE +21 -0
- amocrm_mcp-0.1.0/PKG-INFO +217 -0
- amocrm_mcp-0.1.0/QA_TEST_PROMPT.md +128 -0
- amocrm_mcp-0.1.0/README.md +196 -0
- amocrm_mcp-0.1.0/amocrm_client.py +554 -0
- amocrm_mcp-0.1.0/auth_setup.py +131 -0
- amocrm_mcp-0.1.0/config.py +41 -0
- amocrm_mcp-0.1.0/pyproject.toml +37 -0
- amocrm_mcp-0.1.0/server.py +497 -0
amocrm_mcp-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Ilya
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: amocrm-mcp
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: MCP server for AmoCRM — gives Claude Desktop direct access to your CRM
|
|
5
|
+
Project-URL: Homepage, https://github.com/ilyaberdysh/amocrm-mcp
|
|
6
|
+
Project-URL: Issues, https://github.com/ilyaberdysh/amocrm-mcp/issues
|
|
7
|
+
License: MIT
|
|
8
|
+
License-File: LICENSE
|
|
9
|
+
Keywords: amocrm,claude,crm,mcp,model-context-protocol
|
|
10
|
+
Classifier: Development Status :: 4 - Beta
|
|
11
|
+
Classifier: Intended Audience :: Developers
|
|
12
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
13
|
+
Classifier: Programming Language :: Python :: 3
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
17
|
+
Classifier: Topic :: Office/Business
|
|
18
|
+
Requires-Python: >=3.11
|
|
19
|
+
Requires-Dist: mcp>=1.0.0
|
|
20
|
+
Description-Content-Type: text/markdown
|
|
21
|
+
|
|
22
|
+
# AmoCRM MCP Server
|
|
23
|
+
|
|
24
|
+
MCP-сервер для [AmoCRM](https://www.amocrm.ru/). Подключается к Claude Desktop и даёт Claude прямой доступ к вашей CRM через 17 инструментов.
|
|
25
|
+
|
|
26
|
+
Задавайте вопросы на русском — Claude сам вызовет нужные API и скомбинирует ответ.
|
|
27
|
+
|
|
28
|
+
## Архитектура
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
┌──────────────────┐ stdin/stdout ┌──────────────────┐ HTTPS ┌──────────────┐
|
|
32
|
+
│ Claude Desktop │ ◄──── MCP Protocol ──► │ amocrm-mcp │ ◄── REST ───► │ AmoCRM API │
|
|
33
|
+
│ (LLM + UI) │ │ (локальный) │ │ (облако) │
|
|
34
|
+
└──────────────────┘ └──────────────────┘ └──────────────┘
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
**Как это работает:**
|
|
38
|
+
|
|
39
|
+
1. Claude Desktop запускает `amocrm-mcp` как subprocess
|
|
40
|
+
2. MCP-сервер сообщает Claude: "у меня 17 инструментов — get_leads, get_contacts..."
|
|
41
|
+
3. Пользователь пишет вопрос на русском
|
|
42
|
+
4. Claude решает какие инструменты вызвать и в каком порядке
|
|
43
|
+
5. MCP-сервер передаёт запросы в AmoCRM API v4, возвращает JSON
|
|
44
|
+
6. Claude анализирует данные и отвечает пользователю
|
|
45
|
+
|
|
46
|
+
Внутри MCP-сервера нет ИИ — это прокси между Claude и AmoCRM.
|
|
47
|
+
|
|
48
|
+
## Установка
|
|
49
|
+
|
|
50
|
+
### Вариант A: pip (рекомендуется)
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
pip install amocrm-mcp
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Вариант B: из исходников
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
git clone https://github.com/ilyaberdysh/amocrm-mcp.git
|
|
60
|
+
cd amocrm-mcp
|
|
61
|
+
pip install -e .
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Настройка
|
|
65
|
+
|
|
66
|
+
### 1. Создать интеграцию в AmoCRM
|
|
67
|
+
|
|
68
|
+
1. AmoCRM → **Настройки** → **Интеграции** → **Создать интеграцию**
|
|
69
|
+
2. Тип: **Внешняя интеграция**
|
|
70
|
+
3. Redirect URI: `https://localhost`
|
|
71
|
+
4. Скопировать **Client ID** и **Client Secret**
|
|
72
|
+
|
|
73
|
+
### 2. Авторизоваться
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
amocrm-mcp-auth
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Или если установлено из исходников:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
python3 auth_setup.py
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Скрипт спросит:
|
|
86
|
+
- **Субдомен** — часть URL вашего AmoCRM (например `mycompany` из `mycompany.amocrm.ru`)
|
|
87
|
+
- **Client ID** и **Client Secret** — из шага 1
|
|
88
|
+
- **Redirect URI** — по умолчанию `https://localhost`
|
|
89
|
+
- **Auth code** — откроется URL, авторизуетесь, скопируете `code` из URL редиректа
|
|
90
|
+
|
|
91
|
+
Токены сохранятся в `~/.amocrm/config.json`.
|
|
92
|
+
|
|
93
|
+
### 3. Подключить к Claude Desktop
|
|
94
|
+
|
|
95
|
+
Откройте файл конфигурации:
|
|
96
|
+
|
|
97
|
+
**Mac:** `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
98
|
+
**Windows:** `%APPDATA%\Claude\claude_desktop_config.json`
|
|
99
|
+
|
|
100
|
+
Добавьте:
|
|
101
|
+
|
|
102
|
+
```json
|
|
103
|
+
{
|
|
104
|
+
"mcpServers": {
|
|
105
|
+
"amocrm": {
|
|
106
|
+
"command": "amocrm-mcp"
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
> Если установлено из исходников, укажите полный путь:
|
|
113
|
+
> ```json
|
|
114
|
+
> {"command": "python3", "args": ["/путь/до/amocrm-mcp/server.py"]}
|
|
115
|
+
> ```
|
|
116
|
+
|
|
117
|
+
### 4. Перезапустить Claude Desktop
|
|
118
|
+
|
|
119
|
+
**Cmd+Q** (Mac) / **Alt+F4** (Windows) → открыть заново.
|
|
120
|
+
|
|
121
|
+
В чате появится иконка инструментов — `amocrm` с 17 тулами.
|
|
122
|
+
|
|
123
|
+
### 5. Проверить
|
|
124
|
+
|
|
125
|
+
```
|
|
126
|
+
Покажи мои воронки в AmoCRM
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
## Инструменты (17)
|
|
130
|
+
|
|
131
|
+
| Инструмент | Что делает |
|
|
132
|
+
|------------|-----------|
|
|
133
|
+
| `get_pipelines` | Воронки продаж с этапами и их ID |
|
|
134
|
+
| `get_leads` | Сделки с фильтрами (менеджер, воронка, статус, даты, сумма) |
|
|
135
|
+
| `count_and_sum_leads` | Подсчёт и сумма сделок **без лимита 200** — для аналитики |
|
|
136
|
+
| `get_contacts` | Контакты (поиск по имени, email, телефону) |
|
|
137
|
+
| `get_companies` | Компании |
|
|
138
|
+
| `get_users` | Пользователи / менеджеры |
|
|
139
|
+
| `get_tasks` | Задачи (активные/выполненные, сортировка по дедлайну) |
|
|
140
|
+
| `get_notes` | Примечания к сделкам, контактам, компаниям |
|
|
141
|
+
| `get_events` | Журнал событий (смена этапов, создание сделок) |
|
|
142
|
+
| `get_customers` | Покупатели (повторные клиенты) |
|
|
143
|
+
| `get_unsorted` | Неразобранные заявки |
|
|
144
|
+
| `get_catalogs` | Каталоги товаров/услуг |
|
|
145
|
+
| `get_catalog_elements` | Элементы каталогов |
|
|
146
|
+
| `get_custom_fields` | Пользовательские поля сущностей |
|
|
147
|
+
| `get_loss_reasons` | Причины отказа |
|
|
148
|
+
| `get_tags` | Теги |
|
|
149
|
+
| `get_sources` | Источники трафика |
|
|
150
|
+
|
|
151
|
+
## Примеры запросов
|
|
152
|
+
|
|
153
|
+
```
|
|
154
|
+
Сколько сделок закрыто в феврале 2025?
|
|
155
|
+
Сравни продажи за этот и прошлый месяц
|
|
156
|
+
Кто из менеджеров закрыл больше всего сделок?
|
|
157
|
+
Покажи просроченные задачи Никиты
|
|
158
|
+
Сделки на этапе "Переговоры" во всех воронках
|
|
159
|
+
Найди сделки дороже 500 000 ₽ в работе
|
|
160
|
+
Сколько неразобранных заявок?
|
|
161
|
+
Какие кастомные поля есть у сделок?
|
|
162
|
+
Причины отказа по проигранным сделкам
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
## Структура проекта
|
|
166
|
+
|
|
167
|
+
```
|
|
168
|
+
amocrm-mcp/
|
|
169
|
+
├── server.py # MCP-сервер — точка входа, 17 tool definitions
|
|
170
|
+
├── amocrm_client.py # AmoCRM API v4 клиент
|
|
171
|
+
│ - OAuth2 с auto-refresh токенов
|
|
172
|
+
│ - Retry на 429 (rate limit) с backoff 2s/5s/10s
|
|
173
|
+
│ - Пагинация до 10 000 записей
|
|
174
|
+
│ - Обработка пустых ответов API
|
|
175
|
+
├── config.py # Чтение/запись ~/.amocrm/config.json
|
|
176
|
+
├── auth_setup.py # CLI для первичной OAuth2 авторизации
|
|
177
|
+
├── pyproject.toml # Метаданные, зависимости, entry points
|
|
178
|
+
└── QA_TEST_PROMPT.md # QA-промпт для тестирования (10 вопросов)
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
## Токены
|
|
182
|
+
|
|
183
|
+
- Хранятся в `~/.amocrm/config.json`
|
|
184
|
+
- Обновляются автоматически при каждом запросе
|
|
185
|
+
- Протухают если не использовать > 3 месяцев
|
|
186
|
+
- Если протухли — снова запустите `amocrm-mcp-auth`
|
|
187
|
+
|
|
188
|
+
## Отладка
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
# Проверить что сервер запускается
|
|
192
|
+
amocrm-mcp
|
|
193
|
+
# Если висит без ошибок — ждёт подключения (Ctrl+C для выхода)
|
|
194
|
+
|
|
195
|
+
# Проверить конфиг
|
|
196
|
+
cat ~/.amocrm/config.json
|
|
197
|
+
|
|
198
|
+
# Логи Claude Desktop
|
|
199
|
+
# Mac: ~/Library/Logs/Claude/
|
|
200
|
+
# Windows: %APPDATA%\Claude\logs\
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
## Требования
|
|
204
|
+
|
|
205
|
+
- Python 3.11+
|
|
206
|
+
- Claude Desktop
|
|
207
|
+
- Аккаунт AmoCRM с правами создания интеграций
|
|
208
|
+
|
|
209
|
+
## Технологии
|
|
210
|
+
|
|
211
|
+
- [MCP SDK](https://github.com/modelcontextprotocol/python-sdk) — Model Context Protocol
|
|
212
|
+
- AmoCRM API v4 (OAuth2)
|
|
213
|
+
- Без внешних HTTP-библиотек — `urllib` из stdlib
|
|
214
|
+
|
|
215
|
+
## Лицензия
|
|
216
|
+
|
|
217
|
+
MIT
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# QA Test Prompt для AmoCRM MCP Server (v2)
|
|
2
|
+
|
|
3
|
+
Скопируй весь текст ниже и вставь в Claude Desktop (или Claude Code) где подключён AmoCRM MCP.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## ПРОМПТ
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
Ты QA-тестировщик AmoCRM MCP сервера. Твоя задача — последовательно выполнить 10 тестовых запросов, записать результаты и составить итоговый QA-отчёт.
|
|
11
|
+
|
|
12
|
+
ВАЖНО:
|
|
13
|
+
- Каждый вопрос выполняй ОТДЕЛЬНО, дожидаясь полного ответа
|
|
14
|
+
- Записывай ТОЧНЫЕ числа, суммы, количество записей из ответа
|
|
15
|
+
- Если инструмент вернул ошибку — запиши текст ошибки
|
|
16
|
+
- Фиксируй какие именно инструменты (tool calls) были вызваны и с какими параметрами
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
### ТЕСТ 1: Поиск контактов
|
|
21
|
+
Вызови нужные инструменты чтобы ответить: "Покажи контакты с именем Алексей"
|
|
22
|
+
Ожидание: список контактов, у каждого — имя, телефон/email если есть. Не пустой результат.
|
|
23
|
+
|
|
24
|
+
### ТЕСТ 2: Компании
|
|
25
|
+
Ответь: "Какие компании есть в CRM? Покажи первые 5"
|
|
26
|
+
Ожидание: 5 компаний с названиями. Если есть — ответственный менеджер и количество сделок.
|
|
27
|
+
|
|
28
|
+
### ТЕСТ 3: Воронки + активные сделки (MULTI-TOOL)
|
|
29
|
+
Ответь: "Покажи все воронки и сколько активных сделок в каждой"
|
|
30
|
+
Ожидание: таблица воронок с количеством активных сделок (exclude_closed=true). Нужно вызвать get_pipelines, затем count_and_sum_leads для каждой воронки.
|
|
31
|
+
|
|
32
|
+
### ТЕСТ 4: Топ менеджер месяца (MULTI-TOOL, КРИТИЧЕСКИЙ)
|
|
33
|
+
Ответь: "Кто из менеджеров закрыл больше всего сделок в этом месяце?"
|
|
34
|
+
Ожидание: вызвать get_users, затем count_and_sum_leads с closed_at фильтром за текущий месяц для каждого менеджера. Результат — рейтинг менеджеров по количеству закрытых сделок.
|
|
35
|
+
|
|
36
|
+
### ТЕСТ 5: Просроченные задачи менеджера (MULTI-TOOL)
|
|
37
|
+
Ответь: "Покажи просроченные задачи Никиты Чуравского"
|
|
38
|
+
Ожидание: найти user_id через get_users, затем get_tasks с complete_till_to=текущий unix timestamp и responsible_user_ids. Задачи должны быть отсортированы по дедлайну (просроченные первыми).
|
|
39
|
+
|
|
40
|
+
### ТЕСТ 6: Причины отказа
|
|
41
|
+
Ответь: "Какие причины отказа по проигранным сделкам?"
|
|
42
|
+
Ожидание: список причин отказа из get_loss_reasons. Не ошибка и не пустой список.
|
|
43
|
+
|
|
44
|
+
### ТЕСТ 7: События за сегодня
|
|
45
|
+
Ответь: "Покажи последние события — кто что менял за сегодня"
|
|
46
|
+
Ожидание: список событий из get_events(date_from=начало сегодня в unix). Тип события, кто сделал, что изменилось.
|
|
47
|
+
|
|
48
|
+
### ТЕСТ 8: Неразобранные заявки
|
|
49
|
+
Ответь: "Сколько нераспределённых заявок?"
|
|
50
|
+
Ожидание: число из get_unsorted. Может быть 0 — это валидный результат, но не ошибка.
|
|
51
|
+
|
|
52
|
+
### ТЕСТ 9: Сделки по цене (ФИЛЬТРАЦИЯ)
|
|
53
|
+
Ответь: "Покажи сделки дороже 500 000 рублей в работе"
|
|
54
|
+
Ожидание: сделки с price >= 500000, только активные (не закрытые). Можно использовать get_leads(price_from=500000) + исключить status 142/143, или count_and_sum_leads(price_from=500000, exclude_closed=true).
|
|
55
|
+
|
|
56
|
+
### ТЕСТ 10: Кастомные поля
|
|
57
|
+
Ответь: "Какие кастомные поля есть у сделок?"
|
|
58
|
+
Ожидание: список полей из get_custom_fields(entity="leads"). Каждое поле — ID, название, тип.
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
### СОСТАВЛЕНИЕ ОТЧЁТА
|
|
63
|
+
|
|
64
|
+
После всех 10 тестов составь отчёт в ТОЧНО таком формате:
|
|
65
|
+
|
|
66
|
+
# QA Report — AmoCRM MCP Server — [ДАТА]
|
|
67
|
+
|
|
68
|
+
## Общий результат: X/10 passed
|
|
69
|
+
|
|
70
|
+
| # | Вопрос | Ожидание | Результат | Статус |
|
|
71
|
+
|---|--------|----------|-----------|--------|
|
|
72
|
+
| 1 | [вопрос] | [что ожидалось] | [что реально вернулось — ТОЧНЫЕ числа, данные, ошибки] | ✅ PASS / ❌ FAIL |
|
|
73
|
+
| ... | ... | ... | ... | ... |
|
|
74
|
+
|
|
75
|
+
## Детали по FAIL-кейсам
|
|
76
|
+
|
|
77
|
+
Для каждого FAIL опиши:
|
|
78
|
+
|
|
79
|
+
### BUG-N — Тест X: [краткое описание]
|
|
80
|
+
**Вопрос:** [точный вопрос]
|
|
81
|
+
**Что вернул:** [точный ответ с числами]
|
|
82
|
+
**Что ожидалось:** [ожидаемый результат]
|
|
83
|
+
**Какие инструменты вызывались:** [список tool calls с параметрами]
|
|
84
|
+
**Гипотеза причины:** [почему результат неверный]
|
|
85
|
+
**Рекомендация:** [что исправить в MCP-сервере]
|
|
86
|
+
|
|
87
|
+
## Прочие находки
|
|
88
|
+
|
|
89
|
+
Замечания, не являющиеся FAIL, но важные (аномальные данные, UX-улучшения, медленные ответы).
|
|
90
|
+
|
|
91
|
+
## Критерии оценки
|
|
92
|
+
|
|
93
|
+
- ✅ PASS: инструмент вернул корректные данные, нет ошибок
|
|
94
|
+
- ❌ FAIL: ошибка (JSONDecodeError, timeout, пустой результат при наличии данных), неверные данные
|
|
95
|
+
- ✅ PASS (с оговоркой): данные верные но есть мелкий недочёт (формат, сортировка)
|
|
96
|
+
|
|
97
|
+
## Итоговый список задач
|
|
98
|
+
|
|
99
|
+
| ID | Приоритет | Описание |
|
|
100
|
+
|----|-----------|----------|
|
|
101
|
+
| BUG-1 | 🔴 КРИТ / 🟡 СРЕДН / 🟢 НИЗК | [описание бага и что нужно исправить] |
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## Как использовать
|
|
107
|
+
|
|
108
|
+
1. Подключи AmoCRM MCP к Claude Desktop (см. README.md)
|
|
109
|
+
2. Открой новый чат в Claude Desktop
|
|
110
|
+
3. Скопируй весь блок ПРОМПТ выше и вставь в чат
|
|
111
|
+
4. Claude выполнит все 10 тестов и выдаст отчёт
|
|
112
|
+
5. Сохрани отчёт — сравнивай между версиями сервера
|
|
113
|
+
|
|
114
|
+
## Покрытие тулов
|
|
115
|
+
|
|
116
|
+
| Тул | Тесты |
|
|
117
|
+
|-----|-------|
|
|
118
|
+
| get_contacts | 1 |
|
|
119
|
+
| get_companies | 2 |
|
|
120
|
+
| get_pipelines | 3 |
|
|
121
|
+
| count_and_sum_leads | 3, 4, 9 |
|
|
122
|
+
| get_users | 4, 5 |
|
|
123
|
+
| get_tasks | 5 |
|
|
124
|
+
| get_loss_reasons | 6 |
|
|
125
|
+
| get_events | 7 |
|
|
126
|
+
| get_unsorted | 8 |
|
|
127
|
+
| get_leads | 9 |
|
|
128
|
+
| get_custom_fields | 10 |
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
# AmoCRM MCP Server
|
|
2
|
+
|
|
3
|
+
MCP-сервер для [AmoCRM](https://www.amocrm.ru/). Подключается к Claude Desktop и даёт Claude прямой доступ к вашей CRM через 17 инструментов.
|
|
4
|
+
|
|
5
|
+
Задавайте вопросы на русском — Claude сам вызовет нужные API и скомбинирует ответ.
|
|
6
|
+
|
|
7
|
+
## Архитектура
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
┌──────────────────┐ stdin/stdout ┌──────────────────┐ HTTPS ┌──────────────┐
|
|
11
|
+
│ Claude Desktop │ ◄──── MCP Protocol ──► │ amocrm-mcp │ ◄── REST ───► │ AmoCRM API │
|
|
12
|
+
│ (LLM + UI) │ │ (локальный) │ │ (облако) │
|
|
13
|
+
└──────────────────┘ └──────────────────┘ └──────────────┘
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
**Как это работает:**
|
|
17
|
+
|
|
18
|
+
1. Claude Desktop запускает `amocrm-mcp` как subprocess
|
|
19
|
+
2. MCP-сервер сообщает Claude: "у меня 17 инструментов — get_leads, get_contacts..."
|
|
20
|
+
3. Пользователь пишет вопрос на русском
|
|
21
|
+
4. Claude решает какие инструменты вызвать и в каком порядке
|
|
22
|
+
5. MCP-сервер передаёт запросы в AmoCRM API v4, возвращает JSON
|
|
23
|
+
6. Claude анализирует данные и отвечает пользователю
|
|
24
|
+
|
|
25
|
+
Внутри MCP-сервера нет ИИ — это прокси между Claude и AmoCRM.
|
|
26
|
+
|
|
27
|
+
## Установка
|
|
28
|
+
|
|
29
|
+
### Вариант A: pip (рекомендуется)
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
pip install amocrm-mcp
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Вариант B: из исходников
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
git clone https://github.com/ilyaberdysh/amocrm-mcp.git
|
|
39
|
+
cd amocrm-mcp
|
|
40
|
+
pip install -e .
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Настройка
|
|
44
|
+
|
|
45
|
+
### 1. Создать интеграцию в AmoCRM
|
|
46
|
+
|
|
47
|
+
1. AmoCRM → **Настройки** → **Интеграции** → **Создать интеграцию**
|
|
48
|
+
2. Тип: **Внешняя интеграция**
|
|
49
|
+
3. Redirect URI: `https://localhost`
|
|
50
|
+
4. Скопировать **Client ID** и **Client Secret**
|
|
51
|
+
|
|
52
|
+
### 2. Авторизоваться
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
amocrm-mcp-auth
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Или если установлено из исходников:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
python3 auth_setup.py
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Скрипт спросит:
|
|
65
|
+
- **Субдомен** — часть URL вашего AmoCRM (например `mycompany` из `mycompany.amocrm.ru`)
|
|
66
|
+
- **Client ID** и **Client Secret** — из шага 1
|
|
67
|
+
- **Redirect URI** — по умолчанию `https://localhost`
|
|
68
|
+
- **Auth code** — откроется URL, авторизуетесь, скопируете `code` из URL редиректа
|
|
69
|
+
|
|
70
|
+
Токены сохранятся в `~/.amocrm/config.json`.
|
|
71
|
+
|
|
72
|
+
### 3. Подключить к Claude Desktop
|
|
73
|
+
|
|
74
|
+
Откройте файл конфигурации:
|
|
75
|
+
|
|
76
|
+
**Mac:** `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
77
|
+
**Windows:** `%APPDATA%\Claude\claude_desktop_config.json`
|
|
78
|
+
|
|
79
|
+
Добавьте:
|
|
80
|
+
|
|
81
|
+
```json
|
|
82
|
+
{
|
|
83
|
+
"mcpServers": {
|
|
84
|
+
"amocrm": {
|
|
85
|
+
"command": "amocrm-mcp"
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
> Если установлено из исходников, укажите полный путь:
|
|
92
|
+
> ```json
|
|
93
|
+
> {"command": "python3", "args": ["/путь/до/amocrm-mcp/server.py"]}
|
|
94
|
+
> ```
|
|
95
|
+
|
|
96
|
+
### 4. Перезапустить Claude Desktop
|
|
97
|
+
|
|
98
|
+
**Cmd+Q** (Mac) / **Alt+F4** (Windows) → открыть заново.
|
|
99
|
+
|
|
100
|
+
В чате появится иконка инструментов — `amocrm` с 17 тулами.
|
|
101
|
+
|
|
102
|
+
### 5. Проверить
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
Покажи мои воронки в AmoCRM
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## Инструменты (17)
|
|
109
|
+
|
|
110
|
+
| Инструмент | Что делает |
|
|
111
|
+
|------------|-----------|
|
|
112
|
+
| `get_pipelines` | Воронки продаж с этапами и их ID |
|
|
113
|
+
| `get_leads` | Сделки с фильтрами (менеджер, воронка, статус, даты, сумма) |
|
|
114
|
+
| `count_and_sum_leads` | Подсчёт и сумма сделок **без лимита 200** — для аналитики |
|
|
115
|
+
| `get_contacts` | Контакты (поиск по имени, email, телефону) |
|
|
116
|
+
| `get_companies` | Компании |
|
|
117
|
+
| `get_users` | Пользователи / менеджеры |
|
|
118
|
+
| `get_tasks` | Задачи (активные/выполненные, сортировка по дедлайну) |
|
|
119
|
+
| `get_notes` | Примечания к сделкам, контактам, компаниям |
|
|
120
|
+
| `get_events` | Журнал событий (смена этапов, создание сделок) |
|
|
121
|
+
| `get_customers` | Покупатели (повторные клиенты) |
|
|
122
|
+
| `get_unsorted` | Неразобранные заявки |
|
|
123
|
+
| `get_catalogs` | Каталоги товаров/услуг |
|
|
124
|
+
| `get_catalog_elements` | Элементы каталогов |
|
|
125
|
+
| `get_custom_fields` | Пользовательские поля сущностей |
|
|
126
|
+
| `get_loss_reasons` | Причины отказа |
|
|
127
|
+
| `get_tags` | Теги |
|
|
128
|
+
| `get_sources` | Источники трафика |
|
|
129
|
+
|
|
130
|
+
## Примеры запросов
|
|
131
|
+
|
|
132
|
+
```
|
|
133
|
+
Сколько сделок закрыто в феврале 2025?
|
|
134
|
+
Сравни продажи за этот и прошлый месяц
|
|
135
|
+
Кто из менеджеров закрыл больше всего сделок?
|
|
136
|
+
Покажи просроченные задачи Никиты
|
|
137
|
+
Сделки на этапе "Переговоры" во всех воронках
|
|
138
|
+
Найди сделки дороже 500 000 ₽ в работе
|
|
139
|
+
Сколько неразобранных заявок?
|
|
140
|
+
Какие кастомные поля есть у сделок?
|
|
141
|
+
Причины отказа по проигранным сделкам
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
## Структура проекта
|
|
145
|
+
|
|
146
|
+
```
|
|
147
|
+
amocrm-mcp/
|
|
148
|
+
├── server.py # MCP-сервер — точка входа, 17 tool definitions
|
|
149
|
+
├── amocrm_client.py # AmoCRM API v4 клиент
|
|
150
|
+
│ - OAuth2 с auto-refresh токенов
|
|
151
|
+
│ - Retry на 429 (rate limit) с backoff 2s/5s/10s
|
|
152
|
+
│ - Пагинация до 10 000 записей
|
|
153
|
+
│ - Обработка пустых ответов API
|
|
154
|
+
├── config.py # Чтение/запись ~/.amocrm/config.json
|
|
155
|
+
├── auth_setup.py # CLI для первичной OAuth2 авторизации
|
|
156
|
+
├── pyproject.toml # Метаданные, зависимости, entry points
|
|
157
|
+
└── QA_TEST_PROMPT.md # QA-промпт для тестирования (10 вопросов)
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
## Токены
|
|
161
|
+
|
|
162
|
+
- Хранятся в `~/.amocrm/config.json`
|
|
163
|
+
- Обновляются автоматически при каждом запросе
|
|
164
|
+
- Протухают если не использовать > 3 месяцев
|
|
165
|
+
- Если протухли — снова запустите `amocrm-mcp-auth`
|
|
166
|
+
|
|
167
|
+
## Отладка
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
# Проверить что сервер запускается
|
|
171
|
+
amocrm-mcp
|
|
172
|
+
# Если висит без ошибок — ждёт подключения (Ctrl+C для выхода)
|
|
173
|
+
|
|
174
|
+
# Проверить конфиг
|
|
175
|
+
cat ~/.amocrm/config.json
|
|
176
|
+
|
|
177
|
+
# Логи Claude Desktop
|
|
178
|
+
# Mac: ~/Library/Logs/Claude/
|
|
179
|
+
# Windows: %APPDATA%\Claude\logs\
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
## Требования
|
|
183
|
+
|
|
184
|
+
- Python 3.11+
|
|
185
|
+
- Claude Desktop
|
|
186
|
+
- Аккаунт AmoCRM с правами создания интеграций
|
|
187
|
+
|
|
188
|
+
## Технологии
|
|
189
|
+
|
|
190
|
+
- [MCP SDK](https://github.com/modelcontextprotocol/python-sdk) — Model Context Protocol
|
|
191
|
+
- AmoCRM API v4 (OAuth2)
|
|
192
|
+
- Без внешних HTTP-библиотек — `urllib` из stdlib
|
|
193
|
+
|
|
194
|
+
## Лицензия
|
|
195
|
+
|
|
196
|
+
MIT
|