bitrix24-mcp-bridge 0.5.0 → 1.0.0
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.
- package/README.md +124 -47
- package/dist/cli.js +3202 -1614
- package/docs/api-notes.md +308 -51
- package/extension/dist/connector.js +131 -77
- package/extension/dist/connector.js.map +3 -3
- package/extension/dist/sessid-shim.js +7 -4
- package/extension/dist/sessid-shim.js.map +2 -2
- package/package.json +3 -9
- package/actions.example.json +0 -34
package/README.md
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
# Bitrix24 MCP Bridge
|
|
2
2
|
|
|
3
|
-
Локальный MCP-сервер, дающий ИИ-агенту доступ к задачам,
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
официального REST-вебхука.
|
|
3
|
+
Локальный MCP-сервер, дающий ИИ-агенту доступ к задачам, проектам, чатам и созвонам Bitrix24
|
|
4
|
+
через встроенные операции моста — в объёме прав пользователя, через браузерное расширение,
|
|
5
|
+
переиспользующее живую сессию. Без прав администратора и без официального REST-вебхука.
|
|
7
6
|
|
|
8
7
|
```
|
|
9
8
|
ИИ-агент ─stdio─► MCP-клиент ─UDS(bridge.sock)─► daemon ─WS(127.0.0.1:39917, токен+Origin)─► Расширение (вкладка портала)
|
|
@@ -16,7 +15,7 @@
|
|
|
16
15
|
|
|
17
16
|
```bash
|
|
18
17
|
# 1. Настроить портал через npx — без глобальной установки (интерактивно): токен +
|
|
19
|
-
# первый портал + config.json +
|
|
18
|
+
# первый портал + config.json + расширение
|
|
20
19
|
npx -y bitrix24-mcp-bridge setup
|
|
21
20
|
|
|
22
21
|
# 2. Зарегистрировать сервер у MCP-клиента (пример — Claude Code); каждый запуск идёт через npx
|
|
@@ -43,21 +42,23 @@ bitrix24-mcp-bridge`.
|
|
|
43
42
|
|
|
44
43
|
- **Первый запуск** (нет `config.json`): спрашивает origin портала и его alias,
|
|
45
44
|
генерирует общий токен (`crypto.randomBytes(32)`), пишет
|
|
46
|
-
`~/.bitrix24-mcp-bridge/config.json
|
|
47
|
-
(каталог методов) и **материализует расширение** в
|
|
45
|
+
`~/.bitrix24-mcp-bridge/config.json` и **материализует расширение** в
|
|
48
46
|
`~/.bitrix24-mcp-bridge/extension/` (статичные JS-бандлы + `config.json` +
|
|
49
47
|
`manifest.json`, собранный под ваши порталы).
|
|
50
48
|
- **Повторный запуск** (config уже есть): открывает меню правки —
|
|
51
49
|
`[a]` добавить портал, `[r]` удалить, `[e]` изменить origin, `[d]` сменить
|
|
52
|
-
портал по умолчанию, `[p]` порт, `[
|
|
53
|
-
расширение из установленного пакета, `[q]` выход.
|
|
50
|
+
портал по умолчанию, `[p]` порт, `[m]` включить/выключить мутации, `[t]` ротировать
|
|
51
|
+
токен, `[u]` обновить расширение из установленного пакета, `[q]` выход.
|
|
54
52
|
|
|
55
53
|
**Обновление пакета** почти полностью автоматическое:
|
|
56
54
|
|
|
57
|
-
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
55
|
+
- **Daemon** — MCP-клиент новой версии при старте сверяет версию работающего daemon и, если она
|
|
56
|
+
старше, гасит его и поднимает свой (в stderr — `[mcp] restarted daemon <старая> → <новая>`).
|
|
57
|
+
Более новый daemon клиент не трогает (`[mcp] daemon <v> is newer than this client <v>; leaving it`),
|
|
58
|
+
чтобы две установленные версии не перезапускали daemon друг у друга по очереди.
|
|
59
|
+
- **Устаревшие файлы** — `actions.json` и `catalog-state.json` от прежней модели (каталог вызовов)
|
|
60
|
+
удаляются из `~/.bitrix24-mcp-bridge/` при старте (`[cleanup] removed …`). `config.json` и
|
|
61
|
+
`downloads/` не трогаются никогда.
|
|
61
62
|
- **Файлы расширения** в `~/.bitrix24-mcp-bridge/extension/` обновляются там же автоматически, если
|
|
62
63
|
версия пакета изменилась (`[extension] refreshed …`), — запускать `setup` → `[u]` вручную больше не нужно.
|
|
63
64
|
- **Один ручной шаг остаётся:** нажать «Обновить» на расширении в `chrome://extensions` и перезагрузить
|
|
@@ -65,6 +66,12 @@ bitrix24-mcp-bridge`.
|
|
|
65
66
|
сам. Пока этого не сделано, `bitrix_status` возвращает `warning` с версиями моста и расширения, так
|
|
66
67
|
что рассинхрон виден сразу, а не всплывает необъяснимой ошибкой.
|
|
67
68
|
|
|
69
|
+
> **Переход на встроенные операции — несовместимый (breaking) релиз.** `bitrix_call` и
|
|
70
|
+
> пользовательский каталог вызовов убраны; агент работает только через инструменты из таблицы ниже.
|
|
71
|
+
> Первый же MCP-клиент новой версии заменит daemon, и **клиенты, запущенные прежней версией** (другие
|
|
72
|
+
> открытые сессии агентов), потеряют мост — на вызовы они получат `unsupported request type call — this
|
|
73
|
+
> daemon is <версия>; restart the agent session…`; им нужно перезапустить сессию агента.
|
|
74
|
+
|
|
68
75
|
**Мультипортальность** поддержана: каждый портал — отдельная запись, а в манифесте
|
|
69
76
|
расширения `matches`/`host_permissions` перечисляют ровно сконфигурированные origin'ы
|
|
70
77
|
(least-privilege на origin).
|
|
@@ -78,18 +85,21 @@ daemon после любой правки, затрагивающей конфи
|
|
|
78
85
|
|
|
79
86
|
## Инструменты
|
|
80
87
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
88
|
+
Кроме `bitrix_help` / `bitrix_status`, каждый инструмент — **встроенная операция** моста
|
|
89
|
+
(`src/ops/`): типизированные аргументы, разумные дефолты, запрос к Bitrix24 строит и проверяет
|
|
90
|
+
daemon. Набор операций фиксирован в коде; произвольного вызова Bitrix-метода по имени нет. У
|
|
91
|
+
большинства операций (пометка «+ `params`» в [`docs/api-notes.md`](docs/api-notes.md) §3) есть
|
|
92
|
+
необязательный `params` в нативном формате Bitrix (мержится последним, перекрывает дефолты). Каждый инструмент принимает необязательный `portal` (alias; по умолчанию —
|
|
93
|
+
из `config.json`). Мутирующие помечены ⚠: они **включены по умолчанию** и выключаются одним
|
|
94
|
+
переключателем (см. «Переключатель мутаций»). Мутирующие операции, кроме отметки прочитанным
|
|
95
|
+
(`bitrix_chat_mark_read` / `bitrix_chat_read_all`), не принимают `params`; изменения задач они,
|
|
96
|
+
где это возможно, перечитывают после записи, а списочные поля (соисполнители, наблюдатели, теги) правят поверх
|
|
97
|
+
текущего значения задачи.
|
|
87
98
|
|
|
88
99
|
| Инструмент | Назначение |
|
|
89
100
|
|---|---|
|
|
90
|
-
| `bitrix_help` | справка по
|
|
91
|
-
| `bitrix_status` | какие порталы сконфигурированы и
|
|
92
|
-
| `bitrix_call` | любой разрешённый вызов из каталога по имени (в т.ч. мутирующий) |
|
|
101
|
+
| `bitrix_help` | справка по инструментам и params (= `docs/api-notes.md`) |
|
|
102
|
+
| `bitrix_status` | какие порталы сконфигурированы и подключены, разрешены ли мутации |
|
|
93
103
|
| *Задачи* | |
|
|
94
104
|
| `bitrix_tasks_list` / `bitrix_task_get` | список задач / карточка |
|
|
95
105
|
| `bitrix_task_get_v2` | карточка через v2-подсистему (JSON) |
|
|
@@ -97,6 +107,28 @@ daemon после любой правки, затрагивающей конфи
|
|
|
97
107
|
| `bitrix_task_files` | файлы задачи |
|
|
98
108
|
| `bitrix_task_views_count` | счётчик просмотров |
|
|
99
109
|
| `bitrix_task_subtasks` / `bitrix_task_related` | подзадачи / связанные задачи |
|
|
110
|
+
| `bitrix_task_comments` | старые комментарии задачи (форум, до чатов задач) |
|
|
111
|
+
| `bitrix_task_description_set` ⚠ / `bitrix_task_description_append` ⚠ | заменить описание задачи / дописать в его конец |
|
|
112
|
+
| `bitrix_task_description_replace` ⚠ | точечная правка фрагмента описания |
|
|
113
|
+
| `bitrix_task_tags` ⚠ | добавить / убрать теги (пакетно) |
|
|
114
|
+
| `bitrix_task_checklist` / `bitrix_task_checklist_edit` ⚠ | чек-лист задачи / его правка |
|
|
115
|
+
| `bitrix_task_plan` ⚠ | планируемые даты начала и завершения |
|
|
116
|
+
| `bitrix_task_priority` ⚠ / `bitrix_task_deadline` ⚠ | важность / крайний срок (пакетно) |
|
|
117
|
+
| `bitrix_task_close` ⚠ / `bitrix_task_reopen` ⚠ | закрыть задачу (через Definition of Done, в два шага) / возобновить (пакетно) |
|
|
118
|
+
| `bitrix_task_result_add` ⚠ | добавить результат задачам (пакетно, `taskIds`) |
|
|
119
|
+
| `bitrix_task_file_attach` ⚠ | прикрепить локальный файл (через Диск пользователя) |
|
|
120
|
+
| `bitrix_task_mute` ⚠ | выключить / включить свои уведомления по задаче |
|
|
121
|
+
| `bitrix_task_reminders` / `bitrix_task_reminder_set` ⚠ / `bitrix_task_reminder_delete` ⚠ | свои напоминания по задаче |
|
|
122
|
+
| *Участники и связи задач* | |
|
|
123
|
+
| `bitrix_task_delegate` ⚠ | сменить ответственного (пакетно) |
|
|
124
|
+
| `bitrix_task_accomplices` ⚠ / `bitrix_task_auditors` ⚠ | добавить / убрать соисполнителей / наблюдателей (пакетно) |
|
|
125
|
+
| `bitrix_user_find` | найти пользователей по фамилии |
|
|
126
|
+
| `bitrix_task_related_edit` ⚠ / `bitrix_task_parent` ⚠ / `bitrix_task_gantt_link` ⚠ | связанные задачи / родительская задача / связь на диаграмме Ганта |
|
|
127
|
+
| *Scrum* | |
|
|
128
|
+
| `bitrix_sprint_columns` | колонки доски активного спринта проекта |
|
|
129
|
+
| `bitrix_task_move` ⚠ | перенести задачи в колонку спринта (пакетно, `taskIds`) |
|
|
130
|
+
| `bitrix_task_to_sprint` ⚠ / `bitrix_task_to_backlog` ⚠ | поставить задачи на доску активного спринта / вернуть в бэклог (пакетно) |
|
|
131
|
+
| `bitrix_task_create` ⚠ | создать задачу на доске активного спринта |
|
|
100
132
|
| *Проекты* | |
|
|
101
133
|
| `bitrix_projects_list` / `bitrix_project_get` | рабочие группы / проекты |
|
|
102
134
|
| *Чаты* | |
|
|
@@ -107,14 +139,52 @@ daemon после любой правки, затрагивающей конфи
|
|
|
107
139
|
| `bitrix_chat_history` | листать историю вглубь |
|
|
108
140
|
| `bitrix_chat_get_dialog_id` | резолв dialogId по externalId |
|
|
109
141
|
| `bitrix_chat_mark_read` ⚠ / `bitrix_chat_read_all` ⚠ | пометить сообщения / все чаты прочитанными |
|
|
142
|
+
| `bitrix_chat_send` ⚠ | отправить сообщение в чат (в т.ч. ответом на сообщение) |
|
|
143
|
+
| `bitrix_chat_message_edit` ⚠ / `bitrix_chat_reaction` ⚠ | изменить своё сообщение / поставить реакцию |
|
|
144
|
+
| `bitrix_task_chat_post` ⚠ | написать в чаты задач (пакетно) |
|
|
110
145
|
| *Люди / поиск* | |
|
|
111
146
|
| `bitrix_user_get` | карточка пользователя |
|
|
112
147
|
| `bitrix_entity_selector` / `bitrix_entity_search` | загрузка селектора / текстовый поиск сущностей |
|
|
113
148
|
| `bitrix_entity_chat` | chatId чата связанного объекта (задача/группа/CRM) через `im.chat.get` |
|
|
149
|
+
| *Созвоны и файлы* | |
|
|
150
|
+
| `bitrix_chat_calls` | звонки в чате (callId + резюме) |
|
|
151
|
+
| `bitrix_call_detail` | всё по звонку: участники, решения, задачи, расшифровка |
|
|
152
|
+
| `bitrix_call_recording` | скачать аудиозапись звонка на диск |
|
|
153
|
+
| `bitrix_file_download` | скачать файл портала на диск (только ссылки на файлы, см. ниже) |
|
|
114
154
|
|
|
115
155
|
`bitrix_help` — единственный источник конвенций params (select/filter/order/пагинация,
|
|
116
156
|
имена полей). Он отдаёт `docs/api-notes.md`, так что любому агенту не нужен доступ к репозиторию.
|
|
117
157
|
|
|
158
|
+
### Переключатель мутаций
|
|
159
|
+
|
|
160
|
+
Мутирующие операции — все помеченные ⚠ в таблице выше (полный список — `bitrix_help` /
|
|
161
|
+
[`docs/api-notes.md`](docs/api-notes.md) §3, «Мутирующие операции») — по умолчанию **разрешены**. Они действуют от имени
|
|
162
|
+
пользователя: другие участники видят изменения и получают уведомления Bitrix24 (кто именно — там же).
|
|
163
|
+
Запретить их можно тремя способами (побеждает верхний):
|
|
164
|
+
|
|
165
|
+
1. env `BITRIX_MCP_MUTATIONS=off` (или `on`) у процесса daemon;
|
|
166
|
+
2. `"mutations": false` в `~/.bitrix24-mcp-bridge/config.json`;
|
|
167
|
+
3. `setup` → `[m]` — переключает то же поле и перезапускает daemon; открытые сессии агентов
|
|
168
|
+
переподключаются к новому daemon сами на следующем вызове.
|
|
169
|
+
|
|
170
|
+
Текущее состояние видно в `bitrix_status` (поле `mutations`). Политику применяет daemon: запрещённая операция не уходит в Bitrix24, агент получает ошибку
|
|
171
|
+
`operation <имя> changes data, but mutations are disabled…`. Операции чтения переключатель не трогает.
|
|
172
|
+
|
|
173
|
+
### Скачивание файлов
|
|
174
|
+
|
|
175
|
+
`bitrix_file_download` принимает только ссылки на файлы сконфигурированного портала — иначе
|
|
176
|
+
произвольный URL стал бы аутентифицированным GET к любому эндпоинту портала. Разрешены:
|
|
177
|
+
|
|
178
|
+
- `/bitrix/services/main/ajax.php` с `action` = `disk.api.file.download`,
|
|
179
|
+
`disk.attachedObject.download` или `call.Track.download`;
|
|
180
|
+
- `/bitrix/tools/disk/uf.php` с `action` = `download`, `show` или `downloadArchiveByEntity`.
|
|
181
|
+
|
|
182
|
+
Повторённый (`action=…&action=…`) или массивный (`action[]=…`) `action` отклоняется: PHP читает
|
|
183
|
+
другое значение, чем проверка. Файлы ложатся в `~/.bitrix24-mcp-bridge/downloads/`.
|
|
184
|
+
|
|
185
|
+
Известное ограничение: другие формы ссылок портала на файлы (например, `/disk/downloadFile/…` из
|
|
186
|
+
интерфейса Диска или публичные `/docs/pub/…`) отклоняются — бери ссылку из ответа моста.
|
|
187
|
+
|
|
118
188
|
## Архитектура
|
|
119
189
|
|
|
120
190
|
Модель — **один долгоживущий daemon + N тонких клиентов**:
|
|
@@ -144,12 +214,11 @@ daemon после любой правки, затрагивающей конфи
|
|
|
144
214
|
### Конфигурация
|
|
145
215
|
|
|
146
216
|
Runtime-домашняя папка — `~/.bitrix24-mcp-bridge/` (или `$BITRIX24_MCP_BRIDGE_HOME`).
|
|
147
|
-
В ней: `config.json`, `
|
|
217
|
+
В ней: `config.json`, `bridge.sock`, `extension/`, `downloads/`.
|
|
148
218
|
|
|
149
219
|
Разрешение настроек слоями (побеждает верхний): **env → `.env` (только для разработки)
|
|
150
|
-
→ `~/.bitrix24-mcp-bridge/config.json`**.
|
|
151
|
-
|
|
152
|
-
по-прежнему поддержан.
|
|
220
|
+
→ `~/.bitrix24-mcp-bridge/config.json`**. Ключи `config.json`: `token`, `port`, `portals`,
|
|
221
|
+
`defaultPortal`, `mutations` (см. «Переключатель мутаций»).
|
|
153
222
|
|
|
154
223
|
## Безопасность и модель доверия
|
|
155
224
|
|
|
@@ -160,13 +229,15 @@ Runtime-домашняя папка — `~/.bitrix24-mcp-bridge/` (или `$BITR
|
|
|
160
229
|
привилегия — живая аутентифицированная сессия Bitrix24 — физически в расширении, а не в
|
|
161
230
|
сервере. Отсюда:
|
|
162
231
|
|
|
163
|
-
- **Граница —
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
232
|
+
- **Граница — набор встроенных операций и переключатель мутаций.** Мост выполняет только
|
|
233
|
+
операции из `src/ops/`; запрос к Bitrix24 строит daemon, произвольный метод по имени вызвать
|
|
234
|
+
нельзя. Значения `params` не инспектируются — агент управляет выборкой в рамках этого
|
|
235
|
+
метода; отклоняются только ключи `action`, `c`, `mode`, `sessid` (и их `[…]`-формы): они
|
|
236
|
+
выбирают контроллер или несут CSRF-токен, и их задаёт сама операция. Мутирующие операции выполняются, пока не выключены
|
|
237
|
+
(`"mutations": false`). Общий локальный токен (риск G7) означает: процесс, знающий токен и
|
|
238
|
+
порт демона, может выполнять эти операции в объёме прав пользователя.
|
|
239
|
+
- **Скачивание — только ссылки на файлы портала** (allowlist путей и `action`, см.
|
|
240
|
+
«Скачивание файлов»): `bitrix_file_download` не превращается в произвольный GET.
|
|
170
241
|
- **Токен — единственная защита loopback-WS.** Генерируйте длинный и случайный —
|
|
171
242
|
`setup` использует `crypto.randomBytes(32)`. Токен отсекает случайные подключения, но
|
|
172
243
|
не является границей против локального атакующего: любой локальный процесс, знающий
|
|
@@ -196,26 +267,32 @@ bun run src/index.ts setup # интерактивная настройка
|
|
|
196
267
|
bun test # юнит-тесты (bun:test)
|
|
197
268
|
bun run typecheck # tsc --noEmit (сервер + extension)
|
|
198
269
|
bun run build:dist # бандл сервера → dist/cli.js
|
|
199
|
-
bun run build:ext
|
|
200
|
-
bun run sync:runtime # применить репо-изменения к живому daemon (см. ниже)
|
|
270
|
+
bun run build:ext:static # статичные бандлы расширения → extension/dist/
|
|
271
|
+
bun run sync:runtime # применить репо-изменения к живому daemon и расширению (см. ниже)
|
|
201
272
|
```
|
|
202
273
|
|
|
203
274
|
`.env` — **только dev-оверрайды** (gitignored). Токен / origin / порт берутся из общего
|
|
204
275
|
`~/.bitrix24-mcp-bridge/config.json` (через `loadConfig`) — дублировать их в `.env` не нужно, иначе
|
|
205
|
-
dev-токен разойдётся с daemon. Осмысленно держать там
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
276
|
+
dev-токен разойдётся с daemon. Осмысленно держать там разве что `BITRIX_MCP_MUTATIONS`. В проде
|
|
277
|
+
весь конфиг — в `~/.bitrix24-mcp-bridge/config.json`, который пишет `setup`.
|
|
278
|
+
|
|
279
|
+
**Репо ≠ живой daemon.** Daemon, к которому ходят агенты, исполняет собранный `dist/cli.js`, а не
|
|
280
|
+
исходники репозитория. После правки кода сервера (операции в `src/ops/`, регистрация инструментов)
|
|
281
|
+
или расширения (`extension/src/`) выполни **`bun run sync:runtime`**: она пересоберёт бандл и
|
|
282
|
+
статичные бандлы расширения, обновит расширение, развёрнутое `setup` в
|
|
283
|
+
`~/.bitrix24-mcp-bridge/extension/` (если его там нет — пропустит), и погасит daemon (следующий вызов
|
|
284
|
+
агента поднимет свежий). Затем перезагрузи расширение на `chrome://extensions` и вкладку портала. Без
|
|
285
|
+
этого новые операции агенту не видны. Как добавить операцию —
|
|
286
|
+
[docs/reconnaissance.md](docs/reconnaissance.md).
|
|
287
|
+
|
|
288
|
+
Запуск из исходников (`bun run src/index.ts`) не знает своей версии, поэтому не заменяет daemon
|
|
289
|
+
другой версии и не чистит устаревшие файлы — это делает только собранный `dist/cli.js`, чтобы
|
|
290
|
+
dev-запуск не трогал установленный мост.
|
|
214
291
|
|
|
215
292
|
Дистрибуция: `bin` `bitrix24-bridge` → `dist/cli.js`; npm-хук `prepare` при установке
|
|
216
293
|
собирает и `dist/cli.js`, и статичные бандлы расширения (`extension/dist/`), которые
|
|
217
294
|
`setup` затем копирует в runtime-домашнюю папку. Публикуемые файлы перечислены в `files`
|
|
218
|
-
(`dist`, `extension/dist`, `docs/api-notes.md
|
|
295
|
+
(`dist`, `extension/dist`, `docs/api-notes.md`).
|
|
219
296
|
|
|
220
297
|
### Релизы
|
|
221
298
|
|
|
@@ -229,6 +306,6 @@ Trusted Publisher** (с provenance, без токенов). CI ([`.github/workfl
|
|
|
229
306
|
## Документация
|
|
230
307
|
|
|
231
308
|
- [docs/RUNBOOK.md](docs/RUNBOOK.md) — установка, настройка, повседневная работа, диагностика
|
|
232
|
-
- [docs/api-notes.md](docs/api-notes.md) —
|
|
233
|
-
- [docs/reconnaissance.md](docs/reconnaissance.md) —
|
|
309
|
+
- [docs/api-notes.md](docs/api-notes.md) — справка по инструментам для агента (единый источник для `bitrix_help`)
|
|
310
|
+
- [docs/reconnaissance.md](docs/reconnaissance.md) — для мейнтейнера: как добавить операцию, транспорт, Bitrix-методы операций
|
|
234
311
|
- [extension/README.md](extension/README.md) — устройство расширения и модель доверия
|