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: macOS Companion MCP Server
Установка расширения (в 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 installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables AI agents to execute Lua code, inspect scripts, spy on remotes, and interact with a running Roblox game client through an MCP interface.8221431MIT
- AlicenseBqualityAmaintenanceEnables AI agents to directly access native macOS services, media, system health, and administration tools through a local MCP server.40218MIT
- AlicenseNot gradedqualityAmaintenanceAn MCP server that enables AI assistants to build, test, and debug Tauri v2 applications through UI automation (screenshots, clicks, typing, element finding), IPC monitoring, log streaming, and mobile device management.MIT
- AlicenseNot gradedqualityBmaintenanceExposes SmartCLI's built-in agent tools (file operations, code search, shell commands, web search, memory, and snapshots) as MCP endpoints, allowing external clients to leverage them over stdio or HTTP.1MIT
Related MCP Connectors
MCP server exposing the Backtest360 engine API as tools for AI agents.
OCR, transcription, file extraction, and image generation for AI agents via MCP.
A paid remote MCP for AI agent browser DevTools MCP, built to return verdicts, receipts, usage logs,
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ywclgl258/tt-agent-bridge'
If you have feedback or need assistance with the MCP directory API, please join our Discord server