Skip to main content
El panel del agente, la app móvil y cualquier herramienta que se empareje con una sesión en marcha hablan un protocolo WebSocket pequeño hacia el listener de emparejamiento del orquestador. Un host de terceros es cualquier cliente que construyas sobre ese protocolo — un panel de Blender, una extensión de navegador, un CLI, otro editor — que se adjunta a una pestaña de escritorio en vivo y controla su sesión de agente. Mismo agente, mismo contexto, ningún segundo proceso de Claude Code, nada extra que instalar para el usuario.
Esta es exactamente la superficie sobre la que está construida la app móvil. Si puedes abrir un WebSocket y enviar JSON, puedes construir un host.

Cómo funciona

1

El escritorio ya está escuchando

Cuando el panel del agente está abierto, el orquestador ejecuta un listener de emparejamiento filtrado por token en la LAN (consulta Endpoints). Cada pestaña abierta del panel es una pestaña de escritorio con un tab_id estable y una sesión de agente en vivo.
2

Tu host se conecta con el token de emparejamiento

Abre un WebSocket a la URL de emparejamiento con el token en la query string. Sin un token válido la conexión se rechaza — el emparejamiento es toda la frontera de seguridad.
3

Lista y adjunta a una pestaña

Envía list_tabs para descubrir las pestañas de escritorio abiertas, luego attach_tab para reflejar una. Tu host ahora recibe la actividad de esa pestaña (en flujo) y puede controlarla.
4

Controla la sesión compartida

Envía tramas user_message. Mientras estás adjunto, el servidor las enruta a la pestaña reflejada — así que tu mensaje entra en la misma conversación en la que está el agente de escritorio. Eso es lo que lo hace «un agente, contexto compartido» en lugar de una segunda sesión.

Endpoints

El listener de emparejamiento se deriva del puerto del puente (COMFYUI_MCP_BRIDGE_PORT, por defecto 9180): URL de emparejamiento:
  • El token o lo fija el usuario mediante COMFYUI_MCP_PAIR_TOKEN (emparejamiento siempre activo) o se acuña por sesión y se entrega a través del flujo QR / emparejamiento del panel. Tu host lo obtiene igual que la app móvil: el usuario lo empareja una vez.
  • Enlazado a la LAN por defecto, pero la exposición pública está integrada cuando el usuario la pide: el modal de emparejamiento del panel ofrece un modo Internet que abre un túnel rápido cifrado de cloudflared, y las empresas pueden enrutarlo a través de un relé autoalojado (COMFYUI_MCP_TUNNEL_BACKEND=relay). El token lo filtra de cualquiera de las dos formas.

Formas de los mensajes

Todas las tramas son objetos JSON con un type. Las tramas de petición/respuesta llevan un cid (id de correlación) que eliges tú, y se devuelve en la respuesta correspondiente.

Entrantes — host → orquestador

Cualquier otro evento de panel que envíes mientras estás adjunto se enruta igualmente a la pestaña reflejada.

Salientes — orquestador → host

Más la actividad en vivo del agente de la pestaña reflejada (respuestas en flujo, estado, tarjetas), que tu host pinta.
attach_tab es autoritativo — no puedes falsificar el destino. El servidor sobreescribe cualquier tab_id que pongas en una trama saliente con la pestaña a la que te adjuntaste de verdad. Un host solo puede controlar una pestaña a la que se ha adjuntado de forma explícita. Es deliberado; mira abajo.

Invariantes de seguridad — un host DEBE preservarlos

Estas son las garantías que hacen seguro el emparejamiento. Construir un host que las respete es todo el contrato; un host que intente saltárselas es exactamente lo que el listener está diseñado para rechazar.
Preservarlas no es una restricción sobre tu host — es la función. Impiden que un cliente secuestre una sesión con la que nunca se emparejó.
  1. Puerta de token. El listener rechaza cualquier conexión sin un token de emparejamiento válido (verifyClient). Nunca construyas un flujo que envíe o incruste el token de forma automática — el usuario se empareja, una vez, a propósito.
  2. Sellado autoritativo de attach_tab. El servidor, no el cliente, decide a qué pestaña apuntan tus tramas. No te fíes de un tab_id suministrado por el cliente para el enrutado; adjunta primero, luego envía.
  3. Solo destinos no headless. Puedes adjuntarte a una pestaña de escritorio real, nunca a otro cliente headless (no puedes reflejar otro teléfono/host).
  4. Una pestaña a la vez. Adjuntarte a B suelta tu suscripción a A. Modela un solo espejo activo por conexión.
  5. Tipo de socket fijado. El tipo de una conexión (headless vs escritorio) se fija en su primer hello; no intentes voltearlo para escapar de las guardas de toma de control.

Cliente de referencia mínimo

Enséñale a un LLM a construir tu adaptador

Pega el prompt de abajo en Claude, ChatGPT o tu agente de código para que andamie un adaptador de host para tu plataforma. Lleva el contrato completo del protocolo, así que el modelo no tiene que adivinar.
Copy this into your LLM

Registrar tu integración

¿Has construido algo? Regístralo para que se pueda listar y para que podamos avisarte de los cambios de protocolo antes de publicarlos:

Registrar un host de terceros

Abre la plantilla de registro en GitHub — nombre, plataforma, repo y contra qué versión del protocolo construiste.
Estabilidad: las tramas de arriba son las que usa la app móvil, pero esto aún no es un contrato congelado y versionado — lee el código fuente (src/services/ui-bridge.ts) como autoridad, y registra tu host para que te avisen cuando las formas se muevan.