@hubex/mcp 0.2.0 → 0.3.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.
Files changed (3) hide show
  1. package/CONNECTING.md +4 -6
  2. package/README.md +170 -197
  3. package/package.json +1 -1
package/CONNECTING.md CHANGED
@@ -21,11 +21,9 @@ npm install -g @hubex/mcp
21
21
  Без установки — `npx -y @hubex/mcp`; тогда в конфигах вместо `"command": "hubex-mcp"`
22
22
  пишут `"command": "npx"` и `"args": ["-y", "@hubex/mcp"]`.
23
23
 
24
- Патч-часть версии — дата сборки схем по UTC (`0.2.20260827`), так что по версии
25
- установленного пакета сразу видно, насколько свежий в нём кэш swagger.
26
-
27
- > Первый релиз выпускается вручную, и до него этот вариант вернёт 404 —
28
- > пользуйтесь вариантом Б.
24
+ Патч-часть версии — дата сборки схем по UTC (`0.3.20260901`), так что по версии
25
+ установленного пакета сразу видно, насколько свежий в нём кэш swagger. Нулевой патч
26
+ (`0.3.0`) означает ручной выпуск.
29
27
 
30
28
  ### Вариант Б — готовый пакет (для тех, кому его передали)
31
29
 
@@ -33,7 +31,7 @@ npm install -g @hubex/mcp
33
31
  `@hubex/mcp` в `hubex-mcp`). Установка:
34
32
 
35
33
  ```bash
36
- npm install -g ./hubex-mcp-0.2.0.tgz
34
+ npm install -g ./hubex-mcp-0.3.0.tgz
37
35
  ```
38
36
 
39
37
  Дальше всё как в варианте А: в `PATH` появляется команда `hubex-mcp`, абсолютные пути
package/README.md CHANGED
@@ -1,122 +1,59 @@
1
1
  # HubEx MCP
2
2
 
3
- MCP-сервер для управления **тестовыми данными** в HubEx (создание, редактирование, удаление
4
- заявок, объектов, компаний, пользователей) прямо из Claude.
3
+ Помощник, который позволяет Claude работать с данными HubEx: заводить и править
4
+ заявки, объекты, компании и пользователей обычными словами — «создай тестовую
5
+ заявку по объекту X», «покажи, что в заявке 12345». Программировать для этого
6
+ ничего не нужно, достаточно один раз вписать настройку в вашу программу.
5
7
 
6
- Окружение задаётся в `HUBEX_ENV`: `dev`, `stg` или `prod`. На проде базовый URL — без префикса
7
- (`https://api.hubex.ru/fsm`); ограничить его чтением можно через `HUBEX_READONLY=true`.
8
+ Работает с **Claude Desktop**, **Claude Code**, **Cursor** и **Codex CLI**.
8
9
 
9
- ## Что внутри
10
+ ---
10
11
 
11
- - **13 инструментов** (список — в разделе [«Инструменты»](#инструменты)): поиск и исполнение
12
- работают через тонкий индекс, а не через по-эндпоинтную генерацию, поэтому их число не растёт
13
- вместе с количеством эндпоинтов HubEx (~1100 в 22 сервисах).
14
- - Единый HTTP-клиент с авторизацией (Bearer + `X-Application-ID`) и понятными сообщениями об ошибках.
15
- - Два режима авторизации: готовый токен или логин/пароль (Basic → JWT через сервис AUTHN, авто-refresh).
16
- - Три независимых рубежа ограничения доступа: список HTTP-методов на сервере, тумблеры инструментов
17
- в MCP-клиенте, проверка метода на исполнении.
12
+ ## Что понадобится
18
13
 
19
- ## Установка
14
+ 1. **Node.js версии 20 или новее** — бесплатная программа с сайта
15
+ [nodejs.org](https://nodejs.org) (берите кнопку **LTS**). Проверить, установлен ли
16
+ он: откройте Терминал, введите `node -v` и нажмите Enter. Ответ вида `v20.11.0`
17
+ или больше — всё в порядке.
18
+ 2. **Доступ в HubEx** — токен или логин с паролем, тот же, с которым вы заходите
19
+ в систему.
20
20
 
21
- ```bash
22
- npm install
23
- npm run build
24
- ```
25
-
26
- ## Инструменты
27
-
28
- 13 инструментов, число не зависит от количества эндпоинтов HubEx (~1100 в 22 сервисах).
29
-
30
- | Инструмент | Назначение |
31
- |---|---|
32
- | `hubex_whoami` | окружение, tenant, срок действия токена |
33
- | `hubex_get_guide` | гайд по процессу, топики сгруппированы по областям: база — `start`, `dictionaries`; заявки — `taskcreate`, `taskedit`, `taskchecklists`; объекты и контрагенты — `assets`, `companies`, `users`, `materials`; настройка тенанта — `lifecycle`, `tasktypes`, `roles`, `notifications`, `sla`, `attributes`, `checklisttemplates` |
34
- | `hubex_list_scopes` | карта сервисов; с `service` — ресурсы внутри |
35
- | `hubex_search_read_endpoints` | поиск GET-эндпоинтов |
36
- | `hubex_search_write_endpoints` | поиск POST/PUT/PATCH-эндпоинтов |
37
- | `hubex_search_delete_endpoints` | поиск DELETE-эндпоинтов |
38
- | `hubex_search_head_endpoints` | поиск HEAD-эндпоинтов |
39
- | `hubex_describe_endpoint` | полная схема параметров и тела (до 5 идентификаторов за вызов) |
40
- | `hubex_request_read` | выполнить GET |
41
- | `hubex_request_write` | выполнить POST/PUT/PATCH |
42
- | `hubex_request_delete` | выполнить DELETE (принимает `body`: часть эндпоинтов удаляет пачкой по списку) |
43
- | `hubex_request_head` | выполнить HEAD |
44
- | `hubex_create_test_task` | создать тестовую заявку с дефолтами и префиксом `[MCP-TEST]` |
45
-
46
- ### Как этим пользоваться
47
-
48
- Типичный путь модели:
49
-
50
- 1. `hubex_get_guide` с нужным топиком — понять порядок вызовов.
51
- 2. `hubex_list_scopes` — увидеть сервисы; с `service=WORK` — ресурсы внутри.
52
- 3. `hubex_search_read_endpoints` со `scope`/`tag`/`query` — найти эндпоинт.
53
- 4. `hubex_describe_endpoint` — получить схему только для того, что будет вызвано.
54
- 5. `hubex_request_*` — выполнить.
55
-
56
- Ступени необязательны: зная идентификатор из гайда, можно идти сразу к шагу 4.
57
-
58
- ### Ограничение доступных методов
21
+ Сам сервер скачивать и устанавливать не нужно: он загрузится автоматически при
22
+ первом запуске и будет обновляться сам.
59
23
 
60
- Три независимых рубежа:
24
+ ---
61
25
 
62
- 1. `HUBEX_METHODS` на сервере — запрещённые группы не регистрируются и не видны агенту.
63
- 2. Тумблеры инструментов в MCP-клиенте — можно выключить пару `search_delete` + `request_delete`.
64
- 3. Проверка на исполнении — `request_*` принимает только `endpointId` и отклоняет чужой метод.
26
+ ## Шаг 1. Найти файл настроек
65
27
 
66
- Поэтому поиск и исполнение разделены по методам симметрично: выключения только
67
- поискового инструмента было бы недостаточно.
28
+ У каждой программы он свой:
68
29
 
69
- ## Миграция с 0.1.x
70
-
71
- Это ломающее изменение: все инструменты v1 вида `hubex_work_tasks_list`, `hubex_es_assets_get`
72
- и подобные (по одному на каждый сгенерированный эндпоинт) больше не существуют. Взамен —
73
- лестница `hubex_list_scopes hubex_search_*_endpoints → hubex_describe_endpoint → hubex_request_*`,
74
- описанная выше. `hubex_whoami` и `hubex_create_test_task` не изменились. Если в сохранённых
75
- промптах или конфигурации использовались v1-имена инструментов — замените их на новую лестницу.
30
+ | Программа | Файл настроек |
31
+ |---|---|
32
+ | Claude Desktop (macOS) | `~/Library/Application Support/Claude/claude_desktop_config.json` |
33
+ | Claude Desktop (Windows) | `%APPDATA%\Claude\claude_desktop_config.json` |
34
+ | Cursor | `~/.cursor/mcp.json` |
35
+ | Codex CLI | `~/.codex/config.toml` |
76
36
 
77
- ## Конфигурация
37
+ Значок `~` означает вашу домашнюю папку. В Claude Desktop файл можно открыть, не
38
+ разыскивая вручную: **Settings → Developer → Edit Config**. Если файла нет,
39
+ создайте пустой.
78
40
 
79
- Переменные окружения (см. `.env.example`):
41
+ Для **Claude Code** файл не нужен — там всё делается одной командой, см. шаг 2.
80
42
 
81
- | Переменная | Обязательна | Описание |
82
- |---|---|---|
83
- | `HUBEX_ENV` | да | `dev`, `stg` или `prod` |
84
- | `HUBEX_APPLICATION_ID` | да | заголовок `X-Application-ID` (для dev-тенанта — `5`) |
85
- | `HUBEX_AUTH_MODE` | да | `token`, `login` или `service` |
86
- | `HUBEX_USERNAME` / `HUBEX_PASSWORD` | для `login` | учётные данные |
87
- | `HUBEX_SERVICE_TOKEN` | для `service` | долгоживущий интеграционный токен |
88
- | `HUBEX_TENANT_ID` | нет | tenant явно; иначе берётся из JWT (`TenantID`) |
89
- | `HUBEX_METHODS` | нет | список доступных HTTP-методов через запятую (по умолчанию — все шесть) |
90
- | `HUBEX_READONLY` | нет | `true` — эквивалент `HUBEX_METHODS=GET,HEAD` |
91
- | `HUBEX_MASK_PII` | нет | по умолчанию `true` — маскирует ПДн (ФИО, телефоны, email и т.п.) в ответах; `false` отключает маскирование |
92
- | `HUBEX_SERVICES` | нет | ограничить поиск и исполнение списком сервисов (по умолчанию — все 22) |
93
- | `HUBEX_DEFAULT_REQUEST_METHOD_ID` | нет | значение по умолчанию для тела write-запросов |
94
- | `HUBEX_DEFAULT_TASK_TYPE_ID` | нет | значение по умолчанию для тела write-запросов |
95
- | `HUBEX_DEFAULT_COMPANY_ID` | нет | значение по умолчанию для тела write-запросов |
96
-
97
- Режим `token` переменных не требует: при первом обращении сервер сам попросит
98
- access-токен (через MCP elicitation, а если клиент этого не умеет — через
99
- инструмент `hubex_set_token`). По введённому токену запрашивается refresh, и
100
- дальше сессия продлевается сама. Токены хранятся только в памяти процесса — после
101
- перезапуска сервер спросит токен заново.
102
-
103
- ## Подключение
104
-
105
- Полное руководство для **Claude Code, Claude Desktop, Codex CLI и Cursor** — в [CONNECTING.md](CONNECTING.md).
106
-
107
- Кратко. Соберите пакет (`npm pack`) и установите его — появится команда `hubex-mcp`:
43
+ ---
108
44
 
109
- ```bash
110
- npm install -g ./hubex-mcp-0.2.0.tgz
111
- ```
45
+ ## Шаг 2. Вписать настройку
112
46
 
113
- Claude Desktop (`claude_desktop_config.json`):
47
+ **Claude Desktop и Cursor.** Вставьте это в файл целиком. Если в файле уже
48
+ что-то есть, добавьте только блок `"hubex": { ... }` внутрь существующего
49
+ `"mcpServers"`:
114
50
 
115
51
  ```json
116
52
  {
117
53
  "mcpServers": {
118
54
  "hubex": {
119
- "command": "hubex-mcp",
55
+ "command": "npx",
56
+ "args": ["-y", "@hubex/mcp"],
120
57
  "env": {
121
58
  "HUBEX_ENV": "dev",
122
59
  "HUBEX_APPLICATION_ID": "5",
@@ -127,140 +64,176 @@ Claude Desktop (`claude_desktop_config.json`):
127
64
  }
128
65
  ```
129
66
 
130
- Для Claude Code (во всех проектах): `claude mcp add hubex --scope user -- hubex-mcp`
131
- (переменные окружения задайте через `--env` или в `.env` окружении процесса).
67
+ **Codex CLI** формат другой:
132
68
 
133
- ## Разработка
69
+ ```toml
70
+ [mcp_servers.hubex]
71
+ command = "npx"
72
+ args = ["-y", "@hubex/mcp"]
73
+
74
+ [mcp_servers.hubex.env]
75
+ HUBEX_ENV = "dev"
76
+ HUBEX_APPLICATION_ID = "5"
77
+ HUBEX_AUTH_MODE = "token"
78
+ ```
79
+
80
+ **Claude Code** — одна команда в Терминале, файл править не нужно:
134
81
 
135
82
  ```bash
136
- npm run generate # перегенерировать оба индекса из swagger/{dev,prod}/*.json
137
- npm run refresh-swagger # скачать swagger обоих контуров заново и перегенерировать индексы
138
- npm run check-swagger # CI: обновить swagger и упасть, если индекс разошёлся
139
- npm run release-swagger # обновить схемы и, при изменениях, выпустить релиз в npm
140
- npm run typecheck # проверка типов (src, scripts и test)
141
- npm test # unit-тесты (vitest)
142
- npm run check-guides # сверить источники гайдов с первоисточниками
143
- npm run dev # запуск из исходников (tsx)
83
+ claude mcp add hubex --scope user \
84
+ --env HUBEX_ENV=dev \
85
+ --env HUBEX_APPLICATION_ID=5 \
86
+ --env HUBEX_AUTH_MODE=token \
87
+ -- npx -y @hubex/mcp
144
88
  ```
145
89
 
146
- `npm run check-guides -- /path/to/HubEx.Wiki [/path/to/HubEx.Frontend.AdminApp]`
147
- сверяет `sources` во фронтматтере каждого гайда с первоисточником: страницы вики
148
- (`admin/...`) — по полю `content_hash` самой страницы, файлы AdminApp
149
- (`adminapp/...`) — по sha256 содержимого. Без второго пути источники AdminApp
150
- пропускаются. Ненулевой код возврата означает, что первоисточник изменился и
151
- гайд пора перечитать.
90
+ ### Что означают три строки в настройке
152
91
 
153
- ### Контуры swagger: dev и prod
92
+ | Строка | Что это |
93
+ |---|---|
94
+ | `HUBEX_ENV` | с каким контуром работать: `dev` — тестовый, `prod` — боевой |
95
+ | `HUBEX_APPLICATION_ID` | номер приложения, для тестового контура — `5` |
96
+ | `HUBEX_AUTH_MODE` | как входить: `token` — сервер сам попросит токен при первом обращении |
154
97
 
155
- Схемы хранятся раздельно, по каталогу на контур, и индекс собирается для каждого:
98
+ Если работаете с боевым контуром, добавьте туда же `"HUBEX_READONLY": "true"`
99
+ тогда сервер сможет только читать данные и ничего не изменит.
156
100
 
157
- | Контур | Кэш схем | Индекс | Источник |
158
- | ------ | -------------- | --------------------------- | ------------------------------------------------------------ |
159
- | `dev` | `swagger/dev/` | `generated/index.dev.json` | `https://dev-api.hubex.ru/fsm/{SERVICE}/swagger/{версия}/swagger.json` |
160
- | `prod` | `swagger/prod/` | `generated/index.prod.json` | `https://api.hubex.ru/fsm/{SERVICE}/swagger/{версия}/swagger.json` (то же, что раздаёт [doc.hubex.ru](https://doc.hubex.ru/#/)) |
101
+ Это необходимый минимум. Остальные настройки ограничение прав, вход по логину,
102
+ значения по умолчанию собраны ниже в разделе [«Все настройки»](#все-настройки);
103
+ для первого запуска они не нужны.
161
104
 
162
- Контур выбирается на старте сервера по `HUBEX_ENV`: `prod` читает prod-каталог,
163
- `dev` и `stg` — dev-каталог (отдельного стенда документации у stg нет). Поиск,
164
- `hubex_describe_endpoint` и валидация тел запросов работают по схемам выбранного
165
- контура, так что на проде агент не увидит эндпоинтов, которых там ещё нет.
105
+ ---
166
106
 
167
- `npm run generate` всегда пересобирает оба индекса — оба каталога должны быть на месте.
107
+ ## Шаг 3. Перезапустить программу
168
108
 
169
- Список сервисов берётся со страницы документации контура `doc.hubex.ru` для prod
170
- и `dev-doc.hubex.ru` для dev. Каталог `swagger/` источником быть не может: по нему
171
- не узнать о сервисе, которого там ещё нет. Со страницы берутся только ссылки на
172
- хост своего контура — dev-страница перечисляет заодно и stg.
109
+ Именно **полностью закрыть и открыть заново**, а не свернуть окно. Claude Desktop
110
+ на macOS удобно закрывать через ⌘Q.
173
111
 
174
- `npm run refresh-swagger` без аргументов обновляет оба контура. Ограничения:
112
+ ---
175
113
 
176
- ```bash
177
- npm run refresh-swagger -- --catalog=prod # только prod
178
- npm run refresh-swagger -- --catalog=dev WORK ES ADM # отдельные сервисы одного контура
114
+ ## Шаг 4. Ввести токен
115
+
116
+ При первом обращении к HubEx сервер попросит access-токен появится поле ввода,
117
+ куда его нужно вставить. Токен хранится только в памяти: после перезапуска
118
+ программы сервер спросит его снова.
119
+
120
+ Если вы предпочитаете входить по логину и паролю, замените в настройке строку
121
+ `"HUBEX_AUTH_MODE": "token"` на три строки:
122
+
123
+ ```json
124
+ "HUBEX_AUTH_MODE": "login",
125
+ "HUBEX_USERNAME": "ваш@логин.ru",
126
+ "HUBEX_PASSWORD": "ваш пароль"
179
127
  ```
180
128
 
181
- Список сервисов допустим только вместе с `--catalog`, а индекс после загрузки всё
182
- равно строится по всему каталогу контура. Версия схем — `v1.0.0.0`, меняется через
183
- `HUBEX_SWAGGER_VERSION`.
129
+ Тогда ничего вводить не придётся сервер получит и будет продлевать токен сам.
184
130
 
185
- ### Проверка расхождений в пайплайне
131
+ ---
186
132
 
187
- `npm run check-swagger` обновляет схемы и сравнивает результат с тем, что лежит в
188
- репозитории. Сравнение идёт в два слоя, потому что индекс хранит только сигнатуры:
133
+ ## Шаг 5. Проверить, что всё работает
189
134
 
190
- - **файлы схем** по sha256: какой `swagger/<контур>/*.json` появился, пропал или
191
- изменился. Этот слой ловит правки внутри схем тел запросов и ответов — новое
192
- поле, изменившийся тип, — которых в индексе нет вовсе;
193
- - **индекс** — какие эндпоинты появились, пропали и у каких изменилась сигнатура
194
- (`summary`, `tags`, path/query-параметры, наличие и обязательность тела). Порядок
195
- тегов и параметров сравнивается как множество, поэтому перестановка внутри
196
- swagger расхождением не считается.
135
+ Напишите в чате: **«Спроси у HubEx, кто я»**. В ответ придёт окружение, тенант и
136
+ срок действия токена значит, связь есть.
197
137
 
198
- Если файл изменился, а сигнатуры нет, отчёт говорит об этом прямо — значит правка
199
- внутри тела или ответа.
138
+ В Claude Code то же самое проверяется командой `claude mcp list`: напротив
139
+ `hubex` должно стоять `✓ connected`.
200
140
 
201
- Коды возврата разводят дрейф и поломку — пайплайну есть на что реагировать:
141
+ ---
202
142
 
203
- | Код | Значение |
204
- | --- | ---------------------------------------------------------- |
205
- | `0` | расхождений нет, индексы в репозитории актуальны |
206
- | `1` | схемы разошлись: появились, пропали или изменились эндпоинты |
207
- | `2` | проверку выполнить не удалось: сеть, HTTP != 200, битый JSON |
143
+ ## Все настройки
208
144
 
209
- Если страница документации недоступна, `refresh-swagger` предупреждает и берёт
210
- список сервисов из каталога, а `check-swagger` завершается кодом `2`: запасной
211
- список вернул бы слепое пятно на новый сервис, ради которого проверка и нужна.
145
+ Всё перечисленное вписывается в тот же блок `"env"` из шага 2 (в Codex — в секцию
146
+ `[mcp_servers.hubex.env]`). Значения всегда пишутся в кавычках, даже числа.
212
147
 
213
- Как и `refresh-swagger`, принимает `--catalog=dev|prod|all` (по умолчанию оба).
214
- Схемы и индексы после запуска остаются **обновлёнными**, поэтому в пайплайне
215
- `git diff` можно опубликовать артефактом, а локально — сразу закоммитить.
216
- Загрузка атомарна: при обрыве сети рабочий каталог остаётся нетронутым, и код `2`
217
- не будет спутан с реальным расхождением.
148
+ ### Обязательная одна
218
149
 
219
- ### Ежедневная сборка
150
+ | Настройка | Что делает |
151
+ |---|---|
152
+ | `HUBEX_APPLICATION_ID` | Номер приложения, который HubEx требует в каждом запросе. Для тестового контура — `5`. Без неё сервер не запустится. |
220
153
 
221
- Вся логика лежит в `scripts/release-swagger.ts` и запускается одной командой —
222
- `npm run release-swagger`. Пайплайн `azure-pipelines-swagger.yml` только вызывает
223
- её по расписанию, поэтому тот же сценарий целиком прогоняется локально:
154
+ ### Куда подключаться
224
155
 
225
- ```bash
226
- npm run release-swagger -- --dry-run # без коммита, push и публикации
156
+ | Настройка | Что делает | По умолчанию |
157
+ |---|---|---|
158
+ | `HUBEX_ENV` | Контур: `dev` — тестовый, `stg` — предбоевой, `prod` — боевой | `dev` |
159
+ | `HUBEX_TENANT_ID` | Номер тенанта. Обычно не нужен: сервер сам берёт его из вашего токена. Пригодится, только если у вас доступ сразу к нескольким тенантам | берётся из токена |
160
+
161
+ ### Как входить
162
+
163
+ | Настройка | Что делает | По умолчанию |
164
+ |---|---|---|
165
+ | `HUBEX_AUTH_MODE` | Способ входа: `token` — сервер спросит токен при первом обращении, `login` — вход по логину и паролю, `service` — по долгоживущему служебному токену | `token` |
166
+ | `HUBEX_USERNAME` | Логин. Нужен только при `HUBEX_AUTH_MODE=login` | — |
167
+ | `HUBEX_PASSWORD` | Пароль. Нужен только при `HUBEX_AUTH_MODE=login` | — |
168
+ | `HUBEX_SERVICE_TOKEN` | Служебный токен, который выдаёт администратор HubEx. Нужен только при `HUBEX_AUTH_MODE=service`. Удобен, когда сервер работает сам по себе и спросить токен не у кого | — |
169
+
170
+ ### Что помощнику разрешено делать
171
+
172
+ | Настройка | Что делает | По умолчанию |
173
+ |---|---|---|
174
+ | `HUBEX_READONLY` | `"true"` — помощник может только смотреть данные и ничего не изменит. Самый простой способ обезопасить боевой контур | `"false"` |
175
+ | `HUBEX_METHODS` | Точный список разрешённых действий через запятую: `GET` — чтение, `POST`/`PUT`/`PATCH` — создание и правка, `DELETE` — удаление, `HEAD` — проверка наличия. Например `"GET,POST,PUT"` — можно создавать и править, но не удалять. Запрещённое исчезает из списка инструментов, так что помощник об этом даже не узнает | все шесть |
176
+ | `HUBEX_SERVICES` | Ограничить круг систем, с которыми работает помощник, например `"WORK,ES,ADM"` — заявки, объекты и администрирование | все 22 |
177
+ | `HUBEX_MASK_PII` | Скрывает персональные данные (ФИО, телефоны, почту) в ответах. `"false"` отключает, если ПДн нужны в работе | `"true"` |
178
+
179
+ ### Чтобы меньше уточнять при создании заявок
180
+
181
+ Эти три подставляются автоматически, когда помощник создаёт заявку и значение не
182
+ указано явно. Полезно, если вы всегда работаете с одной компанией или одним типом
183
+ заявок. Номера подскажет администратор HubEx.
184
+
185
+ | Настройка | Что делает |
186
+ |---|---|
187
+ | `HUBEX_DEFAULT_COMPANY_ID` | Компания по умолчанию |
188
+ | `HUBEX_DEFAULT_TASK_TYPE_ID` | Тип заявки по умолчанию |
189
+ | `HUBEX_DEFAULT_REQUEST_METHOD_ID` | Способ обращения по умолчанию (например, «звонок» или «почта») |
190
+
191
+ ### Пример: строгая настройка для боевого контура
192
+
193
+ Помощник видит только заявки и объекты, ничего не меняет, персональные данные
194
+ скрыты:
195
+
196
+ ```json
197
+ "env": {
198
+ "HUBEX_ENV": "prod",
199
+ "HUBEX_APPLICATION_ID": "5",
200
+ "HUBEX_AUTH_MODE": "token",
201
+ "HUBEX_READONLY": "true",
202
+ "HUBEX_SERVICES": "WORK,ES"
203
+ }
227
204
  ```
228
205
 
229
- Скрипт обновляет схемы обоих контуров и, если что-то изменилось, прогоняет
230
- typecheck, тесты и сборку, поднимает версию, коммитит, пушит и публикует пакет.
231
- Работает **только в ветке `swagger-daily`**, `main` не трогает.
206
+ Про `"true"` и `"false"`: сервер считает настройку выключенной, если написано
207
+ `"false"`, `"0"`, `"no"` или пусто. Любое другое слово он поймёт как «включено»,
208
+ поэтому пишите ровно `"true"` или `"false"`.
232
209
 
233
- Релиз выпускается только из чистого рабочего дерева: свои пути (`swagger/`,
234
- `generated/`, `package.json`) скрипт коммитит целиком, и чужая незакоммиченная
235
- правка в них уехала бы в автоматический коммит.
210
+ ---
236
211
 
237
- CI-триггера у пайплайна нет, только расписание: ручные слияния `main` →
238
- `swagger-daily` ничего не запускают, публикация происходит исключительно после
239
- автоматического обновления схем. Синхронизация ветки с `main` делается руками.
212
+ ## Если что-то пошло не так
240
213
 
241
- Версия релиза `0.2.YYYYMMDD`. Если при повторном дрейфе за сутки такая версия
242
- уже в реестре, схемы коммитятся, а публикация пропускается: следующая уедет назавтра.
214
+ | Что видите | Что делать |
215
+ |---|---|
216
+ | `command not found: npx` | Node.js не установлен — вернитесь к разделу «Что понадобится» |
217
+ | Сервер не появился в списке | Программа не была перезапущена полностью; закройте её целиком и откройте снова |
218
+ | Ошибка 401 или «токен истёк» | Введите токен заново либо перейдите на вход по логину и паролю |
219
+ | Ошибка про JSON-файл | Скорее всего лишняя или пропущенная запятая; проверьте файл в любом онлайн-валидаторе JSON |
243
220
 
244
- Перед первым запуском нужно:
221
+ Отдельная тонкость для разработчиков: внутри папки с исходниками самого проекта
222
+ команда `npx @hubex/mcp` не сработает — запускайте её из любого другого каталога
223
+ или используйте `npm run dev`.
245
224
 
246
- 1. создать ветку `swagger-daily` из `main` — файл пайплайна должен быть в ней;
247
- 2. дать Build Service право **Contribute** на репозиторий, иначе push не пройдёт;
248
- 3. убедиться, что на `swagger-daily` нет branch policies;
249
- 4. завести секретную переменную `NPM_TOKEN` с токеном публикации npm.
225
+ ---
250
226
 
251
- ### Как добавить сервис
227
+ ## Что дальше
252
228
 
253
- 1. Передайте новый сервис команде `npm run refresh-swagger -- --catalog=<dev|prod> <SERVICE>`
254
- либо положите его swagger в `swagger/<dev|prod>/<SERVICE>.json`.
255
- 2. `npm run generate` индексы перестраиваются по всем файлам обоих каталогов
256
- автоматически (при использовании `refresh-swagger` этот шаг уже выполнен),
257
- курировать список эндпоинтов не нужно.
258
- 3. `npm run build`.
229
+ - [CONNECTING.md](CONNECTING.md) подробные инструкции по каждой программе,
230
+ все способы входа, полный список настроек.
231
+ - [DEVELOPMENT.md](DEVELOPMENT.md)гайд для разработчика: устройство сервера,
232
+ список инструментов, кэш swagger, команды сборки и релиза.
259
233
 
260
234
  ## Безопасность
261
235
 
262
- - На проде используется отдельный кэш схем `swagger/prod/`: эндпоинты, которых на
263
- проде ещё нет, агенту не видны.
264
- - Все мутационные инструменты помечены «(изменяет данные)» в описании.
265
- - `HUBEX_READONLY=true` полностью отключает изменение данных.
266
- - Тестовые заявки из `hubex_create_test_task` помечаются префиксом `[MCP-TEST]`.
236
+ - Тестовые заявки, созданные помощником, помечаются префиксом `[MCP-TEST]`.
237
+ - Персональные данные в ответах (ФИО, телефоны, почта) скрываются автоматически.
238
+ - `HUBEX_READONLY=true` полностью запрещает любые изменения данных.
239
+ - Не публикуйте файл настроек с паролем или токеном.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hubex/mcp",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "type": "module",
5
5
  "description": "MCP server for managing HubEx test data (tasks, assets, companies, users) via the HubEx REST API",
6
6
  "author": "HubEx Team",