@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.
- package/.github/workflows/publish-npm.yml +50 -0
- package/README.md +8 -1
- package/index.js +16 -0
- package/package.json +1 -1
|
@@ -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
|
|