zaytsv-bot-graph-mcp
Allows building and publishing bot automation funnels for Instagram, with triggers like comments, direct messages, story replies, and mentions, with specific constraints on node types and delays.
Allows building and publishing bot automation funnels for Telegram, including handling /start, commands, callbacks, text, and broadcasts, with full node types and validation.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@zaytsv-bot-graph-mcp Create a welcome funnel with three options and publish it to my bot."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
zaytsv-mcp
MCP-сервер (+ скилл для Claude Code) для сборки и публикации воронок/автоматизаций ботов (Telegram, MAX и Instagram) в сервисе zaytsv /bots: из текстового описания → валидный граф сценария → заливка и публикация через API.
🤖 30 инструментов сборки/публикации:
list_bots,list_graphs,list_channels,get_graph,create_graph,update_graph,edit_graph_live,patch_graph,dry_run,publish_graph,import_funnel,list_templates,create_graph_from_template,clone_graph,copy_graph,rename_graph,set_active_graph,delete_graph,upload_file,list_files,delete_file,graph_analytics,list_bot_users,list_links(+setup/set_token).📝 Статьи блога (тот же токен
zmcp_…):article_publish,article_update,article_list,article_get— публикация статей в Markdown (как README на GitHub) в раздел /articles.📎 Медиа:
upload_fileгрузит фото/видео/документы в библиотеку /bots/files (до 50 МБ) и возвращает публичный URL — его вставляешь в медиа-карточку сценария.🧠 Скилл
build-bot-funnel: учит агента собирать корректный граф (типы узлов, ветки, кнопки, задержки) и проверять его перед публикацией. Поддерживает Telegram, MAX и Instagram.📦 Без зависимостей — чистый Node ≥18, ставится и запускается сразу.
Поддерживаемые платформы
Платформа | Онбординг | Триггеры входа | Ограничения |
Telegram | Токен бота (BotFather) |
| Полный функционал |
MAX | Токен бота (MAX Developer) | Команды, callback, текст | Без SUBSCRIBED/reply-клавиатур (мягкие предупреждения) |
OAuth в | Комментарий/Direct/Ответ на историю/Упоминание | Ограниченный набор узлов; DELAY ≤ 24ч; ASK_QUESTION только TEXT/EMAIL/PHONE/NUMBER/CONTACT (CONTACT = ручной ввод номера); без рассылок |
Установка
Вариант A — как плагин Claude Code (рекомендуется)
/plugin marketplace add skiddgoddamn/zaytsv-mcp
/plugin install zaytsv-mcp@zaytsvПодтянутся и MCP-сервер bot-graph, и скилл build-bot-funnel. Проверить: /mcp и /plugin.
Вариант B — как обычный MCP-сервер (Claude Code / Cursor / Windsurf / любой MCP-клиент)
Через npx без установки. Пример конфига (.mcp.json / настройки клиента):
{
"mcpServers": {
"zaytsv-mcp": {
"command": "npx",
"args": ["-y", "zaytsv-mcp"],
"env": {
"ZAYTSV_BASE_URL": "https://zaytsv.ru",
"ZAYTSV_MCP_TOKEN": "zmcp_ваш_токен"
}
}
}
}См. также examples/.mcp.json.
Related MCP server: telegram-api-mcp
Авторизация — персональный токен
Токен даёт полный доступ к управлению твоими ботами (как вход в аккаунт).
Залогинься на https://zaytsv.ru → открой
/bots/mcp-tokens.Создай токен → скопируй секрет
zmcp_...(показывается один раз).Передай токен любым способом:
просто пришли его агенту в чат — он вызовет инструмент
set_tokenи сохранит токен в~/.zaytsv-bot-graph/token(применяется сразу, без рестарта), илиenvв.mcp.json(Вариант B), илипеременной окружения: PowerShell
setx ZAYTSV_MCP_TOKEN "zmcp_...", bashexport ZAYTSV_MCP_TOKEN="zmcp_...".
Отозвать токен можно там же — доступ блокируется мгновенно.
Не знаешь, что делать? Скажи агенту «настрой подключение» — он вызовет
setup, объяснит шаги и попросит токен. Любой инструмент при отсутствии токена тоже вернёт пошаговую инструкцию.
Дев-окружение:
ZAYTSV_BASE_URL=http://localhost:8066. Fallback без токена:ZAYTSV_SESSION_COOKIE= значение кукиSESSIONиз браузера.
Использование
Опиши воронку словами — агент соберёт граф и (через MCP) опубликует:
«Собери бота:
/start→ приветствие с кнопкой подписки на канал → вопрос с 3 кнопками (бизнес / эксперт / просто смотрю) → для каждой свою цепочку из 2 сообщений с задержкой 1 день → финал с регистрацией на вебинар. Залей в бота и опубликуй.»
Под капотом скилл соберёт nodes/edges, прогонит локальную проверку и вызовет import_funnel → создаст граф, зальёт узлы, прогонит dry-run /start, опубликует. При ошибках публикации — разберёт по code/nodeId, починит, повторит.
Инструменты
Tool | Назначение |
| статус авторизации + пошаговая инструкция подключения |
| сохранить присланный токен |
| список ботов |
| графы (сценарии) бота |
| каналы/группы, подключённые к боту (chatId для условия SUBSCRIBED) |
| получить граф; |
| создать пустой граф (DRAFT) |
| залить узлы/рёбра (PUT); |
| правка живого графа НА МЕСТЕ + авто-бэкап (рекомендуется для прода) |
| строковые замены в JSON графа на сервере (для больших/живых графов) |
| прогон без публикации |
| публикация (вернёт |
| всё за раз: create → update → dry-run → publish |
| готовые шаблоны воронок |
| граф из шаблона (DRAFT) |
| копия графа в новый DRAFT |
| переименовать сценарий |
| переключить активный (живой) граф бота |
| удалить граф (активный — нельзя, 409) |
| загрузить файл в /bots/files → публичный |
| файлы библиотеки /bots/files + использовано/лимит байт |
| удалить файл из /bots/files |
| прохождение сценария по узлам (где отваливается воронка) |
| подписчики/лиды бота (постранично, поиск |
| стартовые трекинговые ссылки бота с UTM |
| свои статьи блога (id, slug, title, просмотры) |
| статья по slug (Markdown content, excerpt, обложка) |
| новая статья (Markdown; title из |
| обновить свою статью по id |
Формат графа и проверка
Граф — контейнер zaytsv-bot-graph (nodes[] + edges[]). Полная схема узлов/хэндлов и правила валидатора — в скилле:
Локальная проверка графа перед заливкой:
# Telegram (по умолчанию)
node skills/build-bot-funnel/validate.mjs path/to/import.json
# Instagram-бот
node skills/build-bot-funnel/validate.mjs path/to/import.json --platform=INSTAGRAM
# MAX-бот
node skills/build-bot-funnel/validate.mjs path/to/import.json --platform=MAXРазработка
git clone https://github.com/skiddgoddamn/zaytsv-mcp
cd zaytsv-mcp
ZAYTSV_MCP_TOKEN=zmcp_... node src/index.mjs # стартует stdio MCP-серверЗависимостей нет — это голый JSON-RPC по stdio (протокол MCP 2024-11-05).
Безопасность
Токен = доступ к аккаунту по API. Не коммить его; держи в env. В конфигах храни ссылку ${ZAYTSV_MCP_TOKEN}, не само значение.
Лицензия
MIT — см. LICENSE.
Available Tools
30 toolsarticle_getA
Получить статью блога по slug (GET /api/articles/by-slug/{slug}) — публичное чтение, в т.ч. чужие. Возвращает title, content (Markdown), excerpt, coverImage, viewCount.
Inputs: slug (required).
article_listA
Список СВОИХ статей блога zaytsv (GET /api/articles/my): id, slug, title, viewCount, даты. id нужен для article_update, slug — публичный адрес /articles/{slug}. Read-only.
Inputs: no named parameters.
article_publishA
Опубликовать НОВУЮ статью блога zaytsv (POST /api/articles). content — Markdown (как README на GitHub: заголовки, списки, таблицы, код, картинки по URL). title необязателен: если не передать, заголовком станет первая строка вида «# Заголовок», и она убирается из текста. Обложку можно задать явно через cover (URL картинки) — иначе берётся первая картинка из текста; excerpt (SEO-описание) тоже можно задать явно, иначе генерируется из текста. Возвращает статью с id и slug + публичный URL.
Inputs: content (required), cover, title, excerpt.
article_updateA
Обновить СВОЮ статью по id (PUT /api/articles/{id}; id бери из article_list). content — Markdown; title необязателен (как в article_publish, иначе берётся из «# ...»). Только владелец — чужую вернёт 403.
Inputs: id (required), content (required), title.
clone_graphA
Склонировать граф в новый DRAFT «… (copy)» — безопасно итерировать поверх опубликованного.
Inputs: graphId (required).
copy_graphA
Скопировать граф в ДРУГОГО бота (в т.ч. на другую платформу). Возвращает {graphId, sourcePlatform, targetPlatform, notes[]}. notes[] помечают, что адаптировано (severity=TRANSFORM, напр. вопрос-контакт → ввод телефона текстом), что требует ручной правки (MANUAL, напр. условие SUBSCRIBED в MAX) и особенности платформы (INFO). Авто-адаптация узлов реализована для Telegram⇄MAX; при копировании в/из Instagram-бота граф копируется без трансформаций — несовместимые узлы будут отмечены при публикации (IG-allowlist). preview=true — только проверка совместимости, без копирования. Тот же бот запрещён (для дублирования есть clone_graph).
Inputs: graphId (required), targetBotId (required), preview.
create_graphB
Создать пустой граф (DRAFT) в боте. Возвращает граф с id.
Inputs: name (required), botId (required).
create_graph_from_templateA
Создать граф (DRAFT) из шаблона (см. list_templates). Возвращает граф с id — дальше правь через update_graph.
Inputs: botId (required), templateId (required), name.
delete_fileB
Удалить файл из библиотеки /bots/files по id (DELETE /api/bots/media/{id}). Освобождает место в хранилище тарифа.
Inputs: id (required).
delete_graphA
Удалить граф. Активный (опубликованный и назначенный боту) удалить нельзя — будет 409; сначала переключи активный через set_active_graph.
Inputs: graphId (required).
dry_runB
Прогнать сценарий без публикации. kind: command|callback|text.
Inputs: kind (required), value (required), graphId (required), presetTags, +2 more.
edit_graph_liveA
РЕКОМЕНДОВАННЫЙ способ правки СУЩЕСТВУЮЩЕГО (часто живого/опубликованного) сценария: редактирует ТОТ ЖЕ graphId НА МЕСТЕ (id не меняется) и сначала снимает авто-бэкап текущего состояния в один rolling-граф «🔙 Авто-бэкап». НЕ клонирует и НЕ создаёт новый активный граф. Открытые редакторы перечитают граф вживую (external_update), бот применит изменения сразу (читает активный граф заново из БД). Используй ВМЕСТО clone+publish, когда нужно поправить сценарий, который уже открыт/в проде. ВАЖНО: PUT не валидирует — перед вызовом прогони offline validate.mjs и dry_run.
Inputs: graphId (required), name, edges, graph, +4 more.
get_graphA
Получить граф по graphId. Для БОЛЬШИХ графов (десятки узлов JSON может превысить лимит токенов) используй summary:true (компактная сводка: id/type/title/позиции + рёбра) или saveToFile (записать полный граф на диск и вернуть сводку+путь — потом правь файл и заливай через update_graph/edit_graph_live с graphFile).
Inputs: graphId (required), summary, saveToFile.
graph_analyticsA
Аналитика прохождения сценария по узлам (GET /api/bots/graphs/{graphId}/analytics): сколько пользователей дошло до каждого узла — видно, где отваливается воронка. Read-only.
Inputs: graphId (required).
import_funnelA
Всё за раз: создать граф, залить узлы/рёбра, (опц.) dry-run /start, опубликовать. Граф можно передать инлайном (graph) или файлом (graphFile).
Inputs: botId (required), name, graph, dryRun, +2 more.
list_botsA
Список ботов пользователя (id, имя, статус).
Inputs: no named parameters.
list_bot_usersA
Пользователи (подписчики/лиды) бота, постранично (GET /api/bots/{botId}/users). Опц. page (с 0), size (по умолч. 25), query (поиск по имени/username/id). Read-only.
Inputs: botId (required), page, size, query.
list_channelsB
Список каналов/групп, подключённых к боту (chatId, title, type, статус бота, дата). chatId — числовой id для условия SUBSCRIBED («Подписан на канал»).
Inputs: botId (required).
list_filesA
Список файлов в библиотеке /bots/files (GET /api/bots/media) + использовано/лимит байт. Бери готовые url отсюда, чтобы не загружать одно и то же повторно.
Inputs: no named parameters.
list_graphsC
Список графов (сценариев) бота.
Inputs: botId (required).
list_linksA
Стартовые (трекинговые) ссылки бота с UTM (GET /api/bots/{botId}/links): code, метки, число стартов. Это точки входа в воронку. Read-only.
Inputs: botId (required).
list_templatesA
Список готовых шаблонов воронок (id, имя, описание). Можно стартовать граф из шаблона вместо сборки с нуля.
Inputs: no named parameters.
patch_graphA
Точечная правка БОЛЬШОГО/живого графа без отправки графа целиком: сервер сам берёт граф по graphId, делает строковые замены в его JSON, проверяет валидность и заливает обратно НА МЕСТЕ (с авто-бэкапом). Идеально, когда граф слишком велик, чтобы передавать его целиком через update_graph/edit_graph_live — напр. сменить id канала в условиях SUBSCRIBED, ссылки кнопок, тексты. replacements: [{find, replace}] — заменяются ВСЕ вхождения; делай find максимально специфичным, чтобы не задеть лишнее. preview=true — только показать число совпадений, ничего не сохраняя. Бот применит изменения сразу (читает активный граф заново из БД).
Inputs: graphId (required), replacements (required), backup, preview.
publish_graphB
Опубликовать граф. Вернёт publishedGraphId или errors[] (code, nodeId, message).
Inputs: graphId (required).
rename_graphA
Переименовать сценарий (работает и для опубликованных — имя не влияет на исполнение).
Inputs: name (required), graphId (required).
set_active_graphA
Назначить, какой опубликованный граф активен у бота (переключение живого сценария без перепубликации).
Inputs: botId (required), graphId (required).
set_tokenA
Сохранить персональный токен (zmcp_...), который пользователь создал на /bots/mcp-tokens. Применяется сразу, без рестарта.
Inputs: token (required).
setupA
Показать статус авторизации и пошаговую инструкцию подключения. Вызывай первым, если пользователь не знает, что делать, или при ошибке доступа.
Inputs: no named parameters.
update_graphA
Залить узлы/рёбра в граф (PUT, сырой replace без бэкапа). Для правок СУЩЕСТВУЮЩЕГО/живого сценария используй edit_graph_live. Принимает graphFile (путь к локальному файлу — НЕ нужно слать граф инлайном, удобно для больших графов), graph-контейнер или nodes/edges.
Inputs: graphId (required), name, edges, graph, +3 more.
upload_fileA
Загрузить файл в библиотеку /bots/files (POST /api/bots/media) и получить публичный URL для вставки в сценарий. Передай path (локальный файл) ИЛИ url (перезалить файл по ссылке в своё хранилище). Возвращает {id, url, mediaType, sizeBytes, originalName}. Полученный url ставь в медиа-карточку SEND_MESSAGE (image/video/audio/file/voice/videonote → поле url; gallery → urls[]) или в SEND_PHOTO.photoUrl. Лимит 50 МБ; типы: image/video/audio/pdf/zip/doc(x)/xlsx/pptx/txt (SVG запрещён); при нехватке места — HTTP 402.
Inputs: url, path, filename.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 30 tools
Most tools have clearly distinct purposes (e.g., list_graphs, create_graph, publish_graph), but there is overlap among graph modification tools (update_graph, edit_graph_live, patch_graph) and creation tools (create_graph, create_graph_from_template, import_funnel). Detailed descriptions help, but an agent must read carefully to choose the right one.
The majority follow a consistent verb_noun pattern (list_graphs, create_graph, delete_graph, rename_graph), but there are exceptions like article_list instead of list_articles, graph_analytics, and dry_run that break the convention. Overall, naming is readable and mostly predictable.
With 30 tools, the server is over-scoped. The core graph management could be handled in fewer tools, and the inclusion of blog article tools (article_list, article_get, article_publish, article_update) is unrelated to bot graphs. Many operations are fragmented, making the toolkit feel bloated.
The graph lifecycle is thoroughly covered: create, get, update, delete, publish, clone, copy, rename, set active, dry run, and template creation. File and bot management are also present. Minor gaps exist (e.g., no article_delete, no single-file retrieval), but these do not affect the core domain.
Maintenance
Related MCP Connectors
MCP server for building and testing AI agents with multi-model experimentation and insights.
MCP server for Russian books search, details, and recommendation candidates.
MCP server for Gainium — manage trading bots, deals, and balances via AI assistants
Open-source Zapier/n8n alternative as an MCP server: agents build, run and debug your workflows.
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server that exposes a Telegram bot, enabling sending messages and retrieving updates through natural language.342 PyPI1MIT
- AlicenseCqualityCmaintenanceUltimate MCP server for Telegram Bot API — 169 methods, full v9.6 coverage, meta-mode, rate limiting, and circuit breaker, enabling AI to control Telegram bots with natural language.10034MIT
- AlicenseNot gradedqualityDmaintenanceMCP server that enables Telegram bot interaction via Telegraf, providing tools for sending, replying, reacting, editing, deleting, forwarding messages, and receiving Telegram events over an optional notification channel.60 npm4MIT
- FlicenseAqualityDmaintenanceMCP server for publishing posts and retrieving metrics on social platforms like Telegram, with planned support for YouTube and Instagram.3-