@x0333/bitrix24-mcp-server 2.3.0 → 2.3.1

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.
@@ -0,0 +1,50 @@
1
+ name: Publish to npm
2
+
3
+ on:
4
+ push:
5
+ branches: [main, master]
6
+ paths:
7
+ - "package.json"
8
+ workflow_dispatch:
9
+
10
+ concurrency:
11
+ group: npm-publish-${{ github.repository }}
12
+ cancel-in-progress: false
13
+
14
+ jobs:
15
+ publish:
16
+ runs-on: ubuntu-latest
17
+ permissions:
18
+ contents: read
19
+ steps:
20
+ - uses: actions/checkout@v4
21
+
22
+ - uses: actions/setup-node@v4
23
+ with:
24
+ node-version: "20"
25
+ registry-url: "https://registry.npmjs.org"
26
+
27
+ - name: Compare local version with npm latest
28
+ id: version
29
+ run: |
30
+ set -euo pipefail
31
+ LOCAL=$(node -p "require('./package.json').version")
32
+ NAME=$(node -p "require('./package.json').name")
33
+ NPM_VER=$(npm view "$NAME" version 2>/dev/null || echo "0.0.0")
34
+ echo "Package: $NAME"
35
+ echo "Local version: $LOCAL"
36
+ echo "npm latest: $NPM_VER"
37
+ MATCH=$(npx -y semver@7 -r ">$NPM_VER" "$LOCAL" 2>/dev/null || true)
38
+ if [ "$MATCH" = "$LOCAL" ]; then
39
+ echo "should_publish=true" >> "$GITHUB_OUTPUT"
40
+ echo "Will publish: $LOCAL is newer than $NPM_VER"
41
+ else
42
+ echo "should_publish=false" >> "$GITHUB_OUTPUT"
43
+ echo "Skip publish: $LOCAL is not newer than $NPM_VER"
44
+ fi
45
+
46
+ - name: npm publish
47
+ if: steps.version.outputs.should_publish == 'true'
48
+ run: npm publish --access public
49
+ env:
50
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
package/README.md CHANGED
@@ -19,6 +19,12 @@ MCP-сервер для работы с Bitrix24 через входящий в
19
19
  - **search_groups** — рабочие группы и проекты по подстроке имени (`sonet_group.get.json`, фильтр `%NAME`).
20
20
  - **get_group** — данные группы или проекта по ID (`sonet_group.get.json`, фильтр `ID`).
21
21
  - **get_kanban_stages_by_group** — стадии канбана задач для группы по её ID (`task.stages.get`, в теле запроса `entityId` = ID группы).
22
+ - **get_task_comments** — «комментарии» задачи в **новой карточке задач** (чат задачи): цепочка `tasks.task.get` → `im.dialog.messages.get`. Сначала **самые свежие** сообщения, если не передавать курсоры пагинации.
23
+ - Параметры: **`task_id`** (обязательно), **`limit`** (1–50, по умолчанию 20), опционально **`first_id`** (Bitrix `FIRST_ID`, следующая страница **старее**) или **`last_id`** (`LAST_ID`, сообщения **новее** id) — оба курсора одновременно нельзя.
24
+ - В ответе урезанные массивы: **`messages`** — только `id`, `author_id`, `text`, `date`; **`users`** — только `id`, `name`, `work_position`, `email`. Есть **`agent_instructions`** для модели и **`pagination`** с подсказками `suggested_next_first_id` / `suggested_next_last_id`.
25
+ - **`author_id === 0`** — системные сообщения чата (смена стадии, учёт времени и т.п.), это **не** пользовательский комментарий; в **`users`** для них строки обычно нет. Для **`author_id > 0`** сопоставляй с **`users[].id`**.
26
+
27
+ Если в `tasks.task.get` на обычном URL `.../rest/USER/WEBHOOK/` нет **`chatId`**, сервер **сам** повторит запрос к `.../rest/api/USER/WEBHOOK/` (тот же вебхук, другой префикс пути).
22
28
 
23
29
  Все вызовы к Bitrix24 идут как `POST` на `{B24_BASE}/{метод}` с JSON-телом, как в документации REST.
24
30
 
@@ -65,7 +71,8 @@ B24_BASE="https://your-domain.bitrix24.ru/rest/USER_ID/WEBHOOK_CODE/" npx -y @x0
65
71
  4. Выдайте вебхуку нужные права (минимум для текущих инструментов):
66
72
  - задачи (в т.ч. стадии канбана групповых задач);
67
73
  - рабочие группы / проекты;
68
- - пользователи (для профиля).
74
+ - пользователи (для профиля);
75
+ - **чаты и мессенджер (im)** — для **`get_task_comments`** (`im.dialog.messages.get`).
69
76
  5. Скопируйте **URL для вызова REST API**.
70
77
 
71
78
  Обычно он выглядит примерно так:
package/index.js CHANGED
@@ -24,6 +24,21 @@ if (!B24_BASE) {
24
24
  process.exit(1);
25
25
  }
26
26
 
27
+ function bitrixPortalUrlFromBase(base) {
28
+ try {
29
+ const u = new URL(String(base).trim());
30
+ if (!u.host) return null;
31
+ return `${u.protocol}//${u.host}`;
32
+ } catch {
33
+ return null;
34
+ }
35
+ }
36
+
37
+ const B24_PORTAL_URL = bitrixPortalUrlFromBase(B24_BASE);
38
+ const mcpInstructions = B24_PORTAL_URL
39
+ ? `Bitrix24 address: ${B24_PORTAL_URL}`
40
+ : "Bitrix24 address: take scheme and host from B24_BASE (the part before /rest/ in the webhook URL).";
41
+
27
42
  const server = new Server(
28
43
  {
29
44
  name: "bitrix24-mcp-server",
@@ -33,6 +48,7 @@ const server = new Server(
33
48
  capabilities: {
34
49
  tools: {},
35
50
  },
51
+ instructions: mcpInstructions,
36
52
  }
37
53
  );
38
54
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@x0333/bitrix24-mcp-server",
3
- "version": "2.3.0",
3
+ "version": "2.3.1",
4
4
  "description": "Bitrix24 MCP Server for AI Agent Integration.",
5
5
  "main": "index.js",
6
6
  "bin": {