@retensy/mcp 0.12.0 → 0.12.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.
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "retensy-mcp",
|
|
3
3
|
"displayName": "Retensy MCP",
|
|
4
|
-
"version": "0.12.
|
|
4
|
+
"version": "0.12.1",
|
|
5
5
|
"description": "MCP-сервер + скилл для Retensy Bots: сборка и публикация воронок ботов (Telegram/MAX/Instagram) и публикация статей блога в Markdown — всё одним токеном zmcp_.",
|
|
6
6
|
"author": { "name": "retensy", "url": "https://bots.retensy.com" },
|
|
7
7
|
"homepage": "https://bots.retensy.com/bots",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@retensy/mcp",
|
|
3
|
-
"version": "0.12.
|
|
3
|
+
"version": "0.12.1",
|
|
4
4
|
"description": "MCP server to build and publish Telegram, MAX and Instagram bot funnels/automations — and publish Markdown blog articles — in the Retensy Bots service. Zero dependencies.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": { "retensy-mcp": "src/index.mjs" },
|
|
@@ -33,7 +33,7 @@ description: Собрать воронку (сценарий) бота для с
|
|
|
33
33
|
- Пакет `ACTIONS` — до 30 действий (метки, профиль, HTTP, уведомления, интеграции GetCourse/amoCRM/Битрикс24/Google Sheets/Я.Метрика, приём оплат, модерация группы). Список — в schema.md. **Интеграции РАБОТАЮТ** (это не заглушки), но каждой нужен `connectionId` — возьми его через **`list_integrations`**; без него действие упадёт «не выбрано подключение». Для Google Таблиц вместо `connectionId` нужен `googleEmail` (аккаунт подключается в вебе).
|
|
34
34
|
- `AI_REPLY` («AI-агент») — два режима, поле `mode` (`"simple"`/не задан, либо `"agent"`). Платный узел в обоих режимах (`PREMIUM_NODE_FORBIDDEN` на бесплатном тарифе) и недоступен в Instagram-графах (нет в IG-allowlist). Тратит месячный AI-бюджет тарифа — он в токенах, не в рублях.
|
|
35
35
|
- **`mode` не задан или `"simple"`** — ответ модели по `systemPrompt`/`userPromptTemplate` (обязателен, иначе выход `error`). Исчерпание бюджета — не ошибка: узел шлёт `quotaFallbackText` (если задан) и идёт дальше по `next`, как обычно.
|
|
36
|
-
- **`mode: "agent"`** — поиск по подключённой базе знаний (`knowledgeBaseId`), ветки-действия (`actions[]`, каждому — своё ребро `action_<id>`), извлечение переменных из разговора (`extract[]`, значения — слова клиента, не проверенный факт) и готовая сводка на действии в `{{var.ai_summary}}` без отдельной настройки. Без найденных в базе фрагментов (нет базы, либо релевантность ниже порога) агент в ЛЮБОМ режиме (строгом и нет) уходит в `unknown` — модель даже не вызывается; нестрогий режим лишь разрешает модели дополнять УЖЕ найденные фрагменты общими знаниями (кроме цен/сроков/обещаний), а не отвечать вовсе без базы. **У узла нет выхода `next`** — только `answered`/`action_<id>`/`unknown`/`budget_exhausted`/`error` (`error` — сбой модели/поиска, ИИ не настроен, headless-вебхук или исчерпанный бюджет без ветки `budget_exhausted`). Исчерпание бюджета — своя ветка `budget_exhausted` (если подключена) либо `error`, `quotaFallbackText` отправляется в обоих случаях. Если собираешь агента этим скиллом — обязательно веди себя по этому списку выходов, старый одиночный `AI_REPLY` без `mode` для агента не годится. `systemPrompt`: мягкая норма 10 000 символов (у бэкенда для неё нет отдельного предупреждения, только `validate.mjs` этого скилла warn'ит явно), жёсткий потолок 30 000 (`AGENT_PROMPT_TOO_LONG`, блокирует публикацию) — платформа сама добавляет защиту от инъекций/вытягивания инструкции, запрет обещать несделанное и формат под мессенджер, дублировать это в `systemPrompt` не нужно. Подробности всех полей и кодов ошибок (`AGENT_*`) — в schema.md/validation.md.
|
|
36
|
+
- **`mode: "agent"`** — поиск по подключённой базе знаний (`knowledgeBaseId`), ветки-действия (`actions[]`, каждому — своё ребро `action_<id>`), извлечение переменных из разговора (`extract[]`, значения — слова клиента, не проверенный факт) и готовая сводка на действии в `{{var.ai_summary}}` без отдельной настройки. Без найденных в базе фрагментов (нет базы, либо релевантность ниже порога) агент в ЛЮБОМ режиме (строгом и нет) уходит в `unknown` — модель даже не вызывается; исключение — узел с непустым `actions[]`: он и без фрагментов зовёт модель, чтобы та могла выбрать действие («запишите меня на завтра» слов из базы не содержит), а её ответ без фрагментов в любом режиме (и в нестрогом тоже) уходит в `unknown`; нестрогий режим лишь разрешает модели дополнять УЖЕ найденные фрагменты общими знаниями (кроме цен/сроков/обещаний), а не отвечать вовсе без базы. **У узла нет выхода `next`** — только `answered`/`action_<id>`/`unknown`/`budget_exhausted`/`error` (`error` — сбой модели/поиска, ИИ не настроен, headless-вебхук или исчерпанный бюджет без ветки `budget_exhausted`). Исчерпание бюджета — своя ветка `budget_exhausted` (если подключена) либо `error`, `quotaFallbackText` отправляется в обоих случаях. Если собираешь агента этим скиллом — обязательно веди себя по этому списку выходов, старый одиночный `AI_REPLY` без `mode` для агента не годится. `systemPrompt`: мягкая норма 10 000 символов (у бэкенда для неё нет отдельного предупреждения, только `validate.mjs` этого скилла warn'ит явно), жёсткий потолок 30 000 (`AGENT_PROMPT_TOO_LONG`, блокирует публикацию) — платформа сама добавляет защиту от инъекций/вытягивания инструкции, запрет обещать несделанное и формат под мессенджер, дублировать это в `systemPrompt` не нужно. Подробности всех полей и кодов ошибок (`AGENT_*`) — в schema.md/validation.md.
|
|
37
37
|
- **Приём оплат** — действие `issue_invoice` внутри `ACTIONS` (НЕ отдельный узел: `YOOKASSA_PAYMENT` устарел). Деньги идут на кассу владельца бота; `connectionId` — подключение `provider=YOOKASSA` из `list_integrations`. Два режима, выбирай по задаче:
|
|
38
38
|
- **дождаться оплаты прямо в диалоге** — протяни от блока ветку `paid` (появятся выходы `paid`/`timeout`); сценарий встанет на паузу до подтверждения кассой;
|
|
39
39
|
- **не ждать** — ветку `paid` не рисуй, блок просто пришлёт счёт и пойдёт по `next`; выдать доступ потом сможет отдельный сценарий с триггером `TRIGGER_PAYMENT`.
|
|
@@ -206,7 +206,8 @@ IG-боты не поддерживают команды (`/start`). Вход
|
|
|
206
206
|
пустой, если прогона ещё не было). Температура задаётся глобально на сервере — поле
|
|
207
207
|
`temperature` в конфиге рантайм не читает.
|
|
208
208
|
|
|
209
|
-
**`mode: "agent"`** — поиск по базе знаний + ветки-действия + память диалога на этом
|
|
209
|
+
**`mode: "agent"`** — поиск по базе знаний + ветки-действия + память диалога на этом узле. Температура
|
|
210
|
+
агента своя, серверная (`botbuilder.ai.agent-temperature`, по умолчанию 0.3), `temperature` узла не читается
|
|
210
211
|
(спека `docs/superpowers/specs/2026-09-21-ai-agent-node-design.md`, раздел 10). У узла-агента
|
|
211
212
|
**нет выхода `next`** — вместо него именованные ветки ниже.
|
|
212
213
|
```json
|
|
@@ -225,12 +226,16 @@ IG-боты не поддерживают команды (`/start`). Вход
|
|
|
225
226
|
- **Без найденных в базе фрагментов агент уходит в `unknown` в ЛЮБОМ режиме** — если хитов нет
|
|
226
227
|
или лучший скор ниже `minScore`, до вызова модели дело не доходит вообще (нестрогий режим
|
|
227
228
|
агента без базы или без совпадений не «отвечает по общим знаниям», он так же уходит в
|
|
228
|
-
`unknown`).
|
|
229
|
+
`unknown`). **Исключение — узел с непустым `actions[]`:** он и без фрагментов зовёт модель
|
|
230
|
+
(платно), чтобы та могла выбрать действие — «запишите меня на завтра» слов из базы не содержит;
|
|
231
|
+
её ответ без фрагментов в любом режиме (и в нестрогом) уходит в `unknown` — только действие. Узел только с
|
|
232
|
+
`extract[]` выходит рано, как раньше. `strict` решает только то, что делает модель, когда релевантные фрагменты уже
|
|
229
233
|
нашлись: в строгом режиме — отвечает исключительно по ним; без строгого режима — может
|
|
230
234
|
дополнить их общими знаниями модели, но не про цены/сроки/обещания — это всегда только из
|
|
231
235
|
базы и инструкции.
|
|
232
236
|
- `directAnswer` (по умолчанию `false`) — прямой ответ готовой парой вопрос-ответ БЕЗ обращения
|
|
233
|
-
к модели (бесплатно), когда совпадение по базе ≥ `directAnswerThreshold`.
|
|
237
|
+
к модели (бесплатно), когда совпадение по базе ≥ `directAnswerThreshold`. Пара ищется по вектору
|
|
238
|
+
своего вопроса, так что порог 0.88 проходят почти дословные формулировки. Работает только для
|
|
234
239
|
документов-пар вопрос-ответ (не для кусков файлов/сайта) — кусок PDF, отданный дословно,
|
|
235
240
|
выглядел бы поломкой.
|
|
236
241
|
- `minScore` — порог релевантности фрагмента для решения «есть о чём отвечать»; ниже — выход
|
package/src/index.mjs
CHANGED
|
@@ -27,7 +27,7 @@ import os from "node:os";
|
|
|
27
27
|
import fs from "node:fs";
|
|
28
28
|
import path from "node:path";
|
|
29
29
|
|
|
30
|
-
const VERSION = "0.12.
|
|
30
|
+
const VERSION = "0.12.1";
|
|
31
31
|
const PKG_NAME = "@retensy/mcp";
|
|
32
32
|
const BASE = (process.env.RETENSY_BASE_URL || "https://bots.retensy.com").replace(/\/+$/, "");
|
|
33
33
|
const CONFIG_DIR = path.join(os.homedir(), ".retensy-bot-graph");
|