Skip to main content
Glama

TT Agent Bridge

외부 CLI agent(ZCode / Claude Code 등)가 MCP를 통해 TauriTavern을 직접 조작할 수 있게 합니다: 런타임 데이터(채팅 / 변수 / 월드북 활성화 / 로그 / LLM 요청 원문 / iframe 상태 표시줄 러타임)를 읽고, 조작(STScript / 메시지 보내기 / 변수 쓰기 / 캐릭터 전환 / 월드북 항목 이동)을 실헹하며, 메인 문서 또는 메시지 iframe 안에서 임의 JS를 실헹해 Tavern 카드를 진단할 수 있습니다.

아키텍처

外部 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가 직접 import하며, 복사하지 말 것).

  • 확장은 공개 경계(TT 호스트 ABI + 업스트림 getContext() 공개 멤버)만 사용하며 내부 모듈을 건드리지 않습니다.

  • bind-or-attach: MCP server가 시각될 때 포트에 같은 token의 살아있는 hub(daemon)가 이미 있으면 자동으로 agent로 attach합니다 — 여러 MCP 클라이언트가 동시에 실헹되어도 더 이상 포트 충돌이 없습니다.

Related MCP server: WebMCP

확장 설치(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가 초 단위로 attach, 더 이상 매번 확장 재연결을 기다릴 필요 없음):

cd bridge
npm install
npm run daemon -- --port 18789 --token <你的token>   # 或 TTAB_PORT / TTAB_TOKEN 环境变量

또는 MCP server를 직접 실행(daemon이 없으면 자동 bind, daemon이 있으면 자동 attach):

npm run start                          # 随机 token,打印在 stderr,并写入 .bridge-token
# 或固定 token:
npm run start -- --port 18789 --token <你的token>

페어링 token

TT 오른쪽 아래 Bridge 배지를 클릭 → token(server 시작 로그의 token: ...)을 붙여넣고 → '재연결' 클릭 → 배지가 초록색이 되면 연결 성공입니다. token이 거부(4001)되면 확장은 30초 간 느린 재시도를 유지하며, token을 고치면 자동으로 회복됩니다.

agent(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

가장 최근 월드북 활성화 배치

tt_llm_logs

AI 요청 목록 / 미리보기 / 원시 페이로드

tt_logs

프런트엔드(console 캡처 포함)/ 백엔드 로그

tt_iframes

전체 iframe 목록 + 메시지→iframe 매핑(동일 출처/스크립트 수/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

호스트 내에서 월드북 항목 편집기 열기

tt_llm_keep

AI 로그 보존 상한 읽기/설정(긴 디버깅 세션에서 늘리기)

tt_console_capture

호스트 전체 console 캡처 켜기/끄기(iframe 오류가 tt_logs로 들어가기 위한 전제)

디버깅류

도구

용도

tt_eval

메인 문서또는 지정 iframe(frame= 인자)에서 임의 JS 실행 — getAllVariables/Mvu/eventOn은 메시지 iframe 안에만 있으므로, 상태 표시줄 런타임을 읽으려면 반드시 frame을 지정해야 합니다

bridge 로컬

도구

용도

tt_poll_events

이벤트 스트림 가져오기(새 메시지/월드북 활성화/프런트·백엔드 오류/LLM 요청 완료/확장 로그)

tt_bridge_status

bridge 상태(owned/attached 모드, 확장 연결, 도구 목록)

일반적인 debug 시나리오(Tavern 카드)

  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. 상호작용 불가(tab이 클릭되지 않거나 / 버튼이 반응 없음): tt_eval frame=...에서 스크립트 소스를 읽고, Vue 마운트(el.__vue_app__)를 확인하며, dispatchEvent로 클릭을 시뮬레이션해 대조 실험을 합니다.

  3. 월드북이 적용되지 않음: tt_worldinfo_last로 활성화 배치 확인 → tt_llm_logs raw로 prompt에 실제로 무엇이 조립되었는지 확인 → tt_worldinfo_open으로 해당 항목으로 바로 이동.

  4. 카드 수정 후 검증: tt_exec_stscript로 /go 리로드 트리거 → tt_read_messages로 렌더링 결과 확인.

  5. 카드 구조 검토: tt_get_character section=regexes|scripts|character_book로 내장 구성 요소를 부분별로 읽어, 카드 전체의 MB급 JSON이 context에 넘치지 않도록 합니다.

dev 스크립트(bridge/scripts/)

스크립트

용도

lib/agent.mjs

agent 직접 연결 클라이언트(attach 우선, daemon이 없으면 spawn으로 대체)

tteval.mjs <file.js>

파일 내용을 tt_eval 코드 본문으로 실헹(여러 파일 지원)

`ttdiag.mjs inspect

switch`

내장 진단 시스

regress.mjs

회귀 테스트 스위트:daemon/attach/21개 도구/두 agent 동시

cdp-reload.mjs

WebView2 CDP(9222)로 TT 페이지 리로드

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

캐릭터 카드 PNG 언팩 검사 / 전체 로컬 저장

smoke.mjs

MCP stdio 전 구간 스모크 테스트

보안 경계

  • WS는 127.0.0.1만 리슨합니다; 핸드셰이크에 반드시 token이 필요합니다(--token / TTAB_TOKEN, 기본값은 임의 생생).

  • 임의 파일 시스템 / 명령 프록시는 제공하지 않습니다 — 파일 작업은 agent가 로컬 도구로 직접 수행합니다.

  • 쓰기류와 tt_eval은 destructive로 표시되며, agent 측 확인 정책에 의존합니다.

  • token은 확장 localStorage와 bridge의 .bridge-token에 평문으로 저장되며, 모두 로컬 파일입니다.

알려진 제한 사항

  • /send 텡스트는 파이프 이스케이프로 전달되며, 극단 문자가 포함되면 tt_eval로 context를 직접 조작해 폴백합니다.

  • set_variables scope=global은 /setvar scope=global의 객체 직렬화 동작에 의존합니다.

  • attached 모드에서 tt_poll_events는 attach 이후의 이벤트만 포함합니다(과거 이벤트는 daemon의 ring buffer에 있으며, MCP attach 경로에서는 재생되지 않습니다);tt_bridge_status의 extConneted는 attach 시점의 스냅샷입니다.

  • TauriTavern의 context.characterId는 실측상 숫자 문자열입니다(업스트림 ST는 number). bridge 내부는 이미 호환됩니다.

  • daemon이 죽으면 attached인 MCP server 호출이 실패합니다(오류 메시지에 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의 확장 업데이트가 가져갈 수 있습니다.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    A
    maintenance
    Enables 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.
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables 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.
    598 npm
    AGPL 3.0
  • A
    license
    B
    quality
    C
    maintenance
    Enables AI agents to control SillyTavern through MCP tools for managing characters, chats, worldbooks, prompt assembly, extensions, plugins, snapshots, and runtime state.
    60
    1
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables external agents to list T3 environments and projects, start coding threads, monitor progress, send follow-up instructions, and interrupt running turns via MCP.
    7
    1
    MIT