tt-agent-bridge
TT Agent Bridge
Позволяет внешним CLI-агентам (ZCode / Claude Code и т.п.) через MCP напрямую управлять TauriTavern: читать рантайм-данные (чат / переменные / активацию World Info / логи / исходные запросы к LLM / рантайм статус-бара iframe), выполнять действия (STScript / отправка сообщения / запись переменных / смена персонажа / переход к записи World Info), а также запускать произвольные JS-диагностики таверн-карточек в основном документе или внутри iframe сообщений.
Архитектура
外部 Agent(ZCode / Claude Code) dev 脚本(tteval / ttdiag / regress)
↕ MCP over stdio ↕ agent 角色直连(ws + JSON)
bridge server(Node,仅监听 127.0.0.1,token 鉴权,支持常驻 daemon)
↕ WebSocket(扩展/agent 主动连出,多 agent 并存)
TauriTavern 扩展「TT Agent Bridge」
├─→ window.__TAURITAVERN__.api 检测:日志 / 世界书激活 / LLM 请求 / 聊天搜索 / console 捕获
└─→ SillyTavern.getContext() 操作:STScript / 变量 / 消息 / 事件Единый источник истины контракта протокола:
src/core/protocol.ts(bridge импортирует напрямую, не копировать).Расширение использует только публичные границы (ABI хоста TT + публичные члены вышестоящего
getContext()), не касаясь внутренних модулей.bind-or-attach: при запуске MCP-сервера, если на порту уже есть живой hub (daemon) с тем же токеном, сервер автоматически монтируется как агент — множественные MCP-клиенты больше не конфликтуют за порт.
Related MCP server: WebMCP
Установка расширения (в TauriTavern)
Откройте TauriTavern → верхний抽屉 «Расширения» → Управление расширениями → Установить расширение
Введите Git-адрес этого репозитория (TauriTavern принимает только анонимные https Git-remote), например:
https://github.com/<你的用户名>/tt-agent-bridge.gitПосле установки в правом нижнем углу появится статус-бейдж «Bridge» (зеленеет после принятия hello)
Ручное размещение каталога (
data/extensions/third-party/tt-agent-bridge/) тоже возможно, но рекомендуется установка через Git для последующих обновлений. Внимание по обновлению: версия протокола развивается вместе с репозиторием (сейчас v2); расширение и bridge выпускаются из одного репозитория — после подтягивания нового репозитория нужно одновременно обновить расширение внутри TT (Git-обновление или синхронизацияdist/+manifest.jsonс последующей перезагрузкой страницы), иначе расширение будет отклонено с ошибкой 4003 (красный бейдж, периодические повторы).
Запуск
Рекомендуется: постоянный daemon (расширение держит длинное соединение, скрипты/MCP монтируются за секунды, больше не нужно ждать переподключения расширения каждый раз):
cd bridge
npm install
npm run daemon -- --port 18789 --token <你的token> # 或 TTAB_PORT / TTAB_TOKEN 环境变量Или запустить MCP-сервер напрямую (при отсутствии daemon — автоматический bind; при наличии daemon — автоматический attach):
npm run start # 随机 token,打印在 stderr,并写入 .bridge-token
# 或固定 token:
npm run start -- --port 18789 --token <你的token>Парный токен
Нажмите на бейдж Bridge в правом нижнем углу TT → вставьте токен (token: ... из логов запуска сервера) → нажмите «Переподключить» → бейдж стал зелёным, значит соединение установлено. При отклонении токена (4001) расширение сохраняет медленный повтор в течение 30 секунд и самовосстанавливается после исправления токена.
Подключение к агенту (ZCode / Claude Code)
Регистрация через stdio MCP (примеры команд, адаптируйте под синтаксис вашего клиента):
zcode mcp add tt-agent-bridge -- npm run start --prefix <bridge目录绝对路径>Обзор MCP-инструментов (21)
Диагностические (чтение)
Инструмент | Назначение |
| возможности / текущий персонаж / длина чата / ключи chatMetadata |
| сообщения этажа (включая swipe, опциональные переменные этажа, имена iframe статус-бара этого этажа) |
| переменные уровня чата или указанного этажа (MVU stat_data, разбор по swipe_id) |
| карточка персонажа: summary / full / секционное чтение regexes / scripts / character_book |
| последняя пачка активаций World Info |
| список запросов к AI / превью / исходная нагрузка |
| логи фронтенда (включая перехват console) / бэкенда |
| полный список iframe + маппинг этаж→iframe (same-origin/скрипты/Vue/видимость) |
| быстрый просмотр MVU: последний stat_data / этаж initvar / исходный текст последнего |
| полнотекстовый поиск по чату на стороне хоста |
| поиск последнего подходящего сообщения по структурным условиям (имя ключа/роль) |
Операционные (запись)
Инструмент | Назначение |
| выполнить STScript |
| отправить сообщение (может запустить генерацию) |
| записать переменные chat / global |
| сменить персонажа |
| открыть редактор записи World Info внутри хоста |
| прочитать/установить лимит хранения логов AI (увеличить для долгих отладочных сессий) |
| включить/выключить полный перехват console на хосте (предусловие для попадания ошибок iframe в |
Отладочные
Инструмент | Назначение |
| выполнение произвольного JS в основном документе или в указанном iframe (параметр |
Локальные для bridge
Инструмент | Назначение |
| получение потока событий (новые сообщения/активация World Info/ошибки фронтенда и бэкенда/завершение запроса LLM/логи расширения) |
| статус bridge (режим owned/attached, соединение с расширением, список инструментов) |
Типичные сценарии отладки (таверн-карточки)
Пустой статус-бар / переменные не читаются:
tt_mvu_stat— проверить, существует ли stat_data →tt_iframes— найти frame статус-бара →tt_eval frame=TH-message--0--2— внутри iframe посмотретьgetAllVariables()и DOM →tt_console_capture {enabled:true}, затемtt_logs kind=frontend— увидеть ошибки (SyntaxErrorчаще всего из-за двойного декодирования HTML-сущностей).Интерактивность сломана (таб не нажимается / кнопки не реагируют): в
tt_eval frame=...читать исходники скриптов, проверить монтирование Vue (el.__vue_app__), имитировать клики черезdispatchEventдля контрольных экспериментов.World Info не срабатывает:
tt_worldinfo_last— посмотреть пачку активаций →tt_llm_logsraw — увидеть, что реально попало в промпт →tt_worldinfo_open— перейти сразу к нужной записи.Проверка после редактирования карточки:
tt_exec_stscript— запустить перезагрузку через/go→tt_read_messages— проверить отрисованный результат.Аудит структуры карточки:
tt_get_character section=regexes|scripts|character_book— читать встроенные компоненты по секциям, не заливая в контекст MB-размерный JSON всей карточки.
dev-скрипты (bridge/scripts/)
Скрипт | Назначение |
| клиент прямого подключения агента (приоритет attach; если daemon отсутствует — fallback через spawn) |
| выполнить содержимое файла как тело кода |
| встроенная диагностическая последовательность |
| регрессионный набор: daemon/attach/21 инструмент/два агента конкурентно |
| перезагрузка страницы TT через WebView2 CDP (9222) |
| распаковка и проверка PNG карточки персонажа / полная выгрузка на диск |
| сквозной smoke-тест MCP stdio |
Границы безопасности
WS слушает только
127.0.0.1; рукопожатие обязательно с токеном (--token/TTAB_TOKEN, по умолчанию генерируется случайно).Нет произвольного файлового/командного проксирования — файловые операции агент выполняет своими локальными инструментами.
Операции записи и
tt_evalпомечены как destructive; решение подтверждает агент.Токен хранится в открытом виде в localStorage расширения и в
.bridge-tokenbridge — оба файла локальные.
Известные ограничения
Текст
/sendпередаётся с экранированием через пайп; при экстремальных символах — fallback черезtt_evalс прямым управлением контекстом.set_variables scope=globalзависит от поведения сериализации объектов в/setvar scope=global.В режиме attached
tt_poll_eventsсодержит только события после attach (исторические события — в ring buffer daemon, через MCP attach-путь не воспроизводятся);extConnectedвtt_bridge_status— снимок на момент attach.context.characterIdв TauriTavern по факту — числовая строка (в вышестоящем ST — number), bridge внутренне это учитывает.При смерти daemon вызовы attached MCP-сервера завершаются ошибкой (сообщение явно указывает перезапустить daemon), автоматического отката к bind нет.
Разработка
npm install && npm run build # 构建扩展(typecheck + vite -> dist/)
cd bridge && npm install # bridge 依赖
cd bridge && npm run typecheck # bridge 侧类型检查Корень репозитория — это и есть расширение (manifest.json + dist/), артефакты сборки dist фиксируются в репозитории, TT после Git-установки загружает их напрямую; после изменения исходников выполните npm run build и закоммитьте — обновление расширения в TT сможет подтянуть изменения.
This server cannot be deployed
Maintenance
Related MCP Connectors
Remote MCP server exposing your Node Command fleet (files, shell, processes, browser) to AI hosts.
Remote MCP server for AI.TV creators — delegate account operations to your AI agent over MCP.
Secure and manage MCP servers through the Speakeasy AI Control Plane from your agent.
Host any HTTP API as a standard MCP server; auto-distribute to 12+ mainstream agent platforms.
Related MCP Servers
- FlicenseNot gradedqualityAmaintenanceEnables MCP-compatible AI clients to invoke CLI-driven agent tools over Streamable HTTP, including shell execution, file operations, patching, image viewing, web search, and nested agent tasks, with permission modes and real-time progress streaming.-
- AlicenseNot gradedqualityBmaintenanceEnables browser-based AI chat interfaces to use local MCP tools by injecting a tool-call protocol into the page and executing approved filesystem, shell, and downstream MCP tool calls from a local daemon.465 npmMIT
- AlicenseBqualityCmaintenanceEnables AI agents to control SillyTavern through MCP tools for managing characters, chats, worldbooks, prompt assembly, extensions, plugins, snapshots, and runtime state.601MIT
- AlicenseAqualityAmaintenanceEnables external agents to list T3 environments and projects, start coding threads, monitor progress, send follow-up instructions, and interrupt running turns via MCP.7MIT