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 untype. 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.
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ó.
- 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. - Sellado autoritativo de
attach_tab. El servidor, no el cliente, decide a qué pestaña apuntan tus tramas. No te fíes de untab_idsuministrado por el cliente para el enrutado; adjunta primero, luego envía. - 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).
- Una pestaña a la vez. Adjuntarte a B suelta tu suscripción a A. Modela un solo espejo activo por conexión.
- 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.