Skip to main content
Glama

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)

  1. Откройте TauriTavern → верхний抽屉 «Расширения» → Управление расширениямиУстановить расширение

  2. Введите Git-адрес этого репозитория (TauriTavern принимает только анонимные https Git-remote), например: https://github.com/<你的用户名>/tt-agent-bridge.git

  3. После установки в правом нижнем углу появится статус-бейдж «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)

Диагностические (чтение)

Инструмент

Назначение

tt_status

возможности / текущий персонаж / длина чата / ключи chatMetadata

tt_read_messages

сообщения этажа (включая swipe, опциональные переменные этажа, имена iframe статус-бара этого этажа)

tt_get_variables

переменные уровня чата или указанного этажа (MVU stat_data, разбор по swipe_id)

tt_get_character

карточка персонажа: summary / full / секционное чтение regexes / scripts / character_book

tt_worldinfo_last

последняя пачка активаций World Info

tt_llm_logs

список запросов к AI / превью / исходная нагрузка

tt_logs

логи фронтенда (включая перехват console) / бэкенда

tt_iframes

полный список iframe + маппинг этаж→iframe (same-origin/скрипты/Vue/видимость)

tt_mvu_stat

быстрый просмотр MVU: последний stat_data / этаж initvar / исходный текст последнего <UpdateVariable>

tt_search_chat

полнотекстовый поиск по чату на стороне хоста

tt_find_message

поиск последнего подходящего сообщения по структурным условиям (имя ключа/роль)

Операционные (запись)

Инструмент

Назначение

tt_exec_stscript

выполнить STScript

tt_send_message

отправить сообщение (может запустить генерацию)

tt_set_variables

записать переменные chat / global

tt_switch_character

сменить персонажа

tt_worldinfo_open

открыть редактор записи World Info внутри хоста

tt_llm_keep

прочитать/установить лимит хранения логов AI (увеличить для долгих отладочных сессий)

tt_console_capture

включить/выключить полный перехват console на хосте (предусловие для попадания ошибок iframe в tt_logs)

Отладочные

Инструмент

Назначение

tt_eval

выполнение произвольного JS в основном документе или в указанном iframe (параметр frame=) — getAllVariables/Mvu/eventOn есть только в iframe сообщений, для чтения рантайма статус-бара обязательно указывать frame

Локальные для bridge

Инструмент

Назначение

tt_poll_events

получение потока событий (новые сообщения/активация World Info/ошибки фронтенда и бэкенда/завершение запроса LLM/логи расширения)

tt_bridge_status

статус bridge (режим owned/attached, соединение с расширением, список инструментов)

Типичные сценарии отладки (таверн-карточки)

  1. Пустой статус-бар / переменные не читаются: 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-сущностей).

  2. Интерактивность сломана (таб не нажимается / кнопки не реагируют): в tt_eval frame=... читать исходники скриптов, проверить монтирование Vue (el.__vue_app__), имитировать клики через dispatchEvent для контрольных экспериментов.

  3. World Info не срабатывает: tt_worldinfo_last — посмотреть пачку активаций → tt_llm_logs raw — увидеть, что реально попало в промпт → tt_worldinfo_open — перейти сразу к нужной записи.

  4. Проверка после редактирования карточки: tt_exec_stscript — запустить перезагрузку через /gott_read_messages — проверить отрисованный результат.

  5. Аудит структуры карточки: tt_get_character section=regexes|scripts|character_book — читать встроенные компоненты по секциям, не заливая в контекст MB-размерный JSON всей карточки.

dev-скрипты (bridge/scripts/)

Скрипт

Назначение

lib/agent.mjs

клиент прямого подключения агента (приоритет attach; если daemon отсутствует — fallback через spawn)

tteval.mjs <file.js>

выполнить содержимое файла как тело кода tt_eval (поддерживает несколько файлов)

ttdiag.mjs inspect|switch

встроенная диагностическая последовательность

regress.mjs

регрессионный набор: daemon/attach/21 инструмент/два агента конкурентно

cdp-reload.mjs

перезагрузка страницы TT через WebView2 CDP (9222)

pngscan.cjs <png> [unpack <dir>]

распаковка и проверка PNG карточки персонажа / полная выгрузка на диск

smoke.mjs

сквозной smoke-тест MCP stdio

Границы безопасности

  • WS слушает только 127.0.0.1; рукопожатие обязательно с токеном (--token / TTAB_TOKEN, по умолчанию генерируется случайно).

  • Нет произвольного файлового/командного проксирования — файловые операции агент выполняет своими локальными инструментами.

  • Операции записи и tt_eval помечены как destructive; решение подтверждает агент.

  • Токен хранится в открытом виде в localStorage расширения и в .bridge-token bridge — оба файла локальные.

Известные ограничения

  • Текст /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 сможет подтянуть изменения.

F
license - not found
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

View all related MCP servers

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,

View all MCP Connectors

Latest Blog Posts

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