C’est exactement la surface sur laquelle l’appli mobile est construite. Si
vous pouvez ouvrir un WebSocket et envoyer du JSON, vous pouvez construire
un hôte.
Comment ça marche
1
Le bureau écoute déjà
Quand le panneau agent est ouvert, l’orchestrateur fait tourner un
écouteur d’appairage filtré par jeton sur le LAN (voir
Endpoints). Chaque onglet de panneau ouvert est un onglet
bureau avec un
tab_id stable et une session d’agent en direct.2
Votre hôte se connecte avec le jeton d'appairage
Ouvrez un WebSocket vers l’URL d’appairage avec le jeton dans la query
string. Sans jeton valide la connexion est refusée — l’appairage est toute
la frontière de sécurité.
3
Lister et s'attacher à un onglet
Envoyez
list_tabs pour découvrir les onglets bureau ouverts, puis
attach_tab pour en mirorer un. Votre hôte reçoit maintenant l’activité
de cet onglet (en flux) et peut le piloter.4
Piloter la session partagée
Envoyez des trames
user_message. Tant que vous êtes attaché, le serveur
les route vers l’onglet miroré — donc votre message entre dans la
même conversation que l’agent de bureau. C’est ce qui en fait « un
agent, un contexte partagé » plutôt qu’une seconde session.Endpoints
L’écouteur d’appairage est dérivé du port du pont (COMFYUI_MCP_BRIDGE_PORT,
défaut 9180) :
URL d’appairage :
- Le jeton est soit épinglé par l’utilisateur via
COMFYUI_MCP_PAIR_TOKEN(appairage toujours actif) soit frappé par session et remis via le flux QR / appairage du panneau. Votre hôte l’obtient de la même façon que l’appli mobile : l’utilisateur l’appaire une fois. - Lié au LAN par défaut, mais l’exposition publique est intégrée quand
l’utilisateur la demande : la fenêtre d’appairage du panneau propose un
mode Internet qui ouvre un quick tunnel cloudflared chiffré, et les
entreprises peuvent le router via un relais auto-hébergé
(
COMFYUI_MCP_TUNNEL_BACKEND=relay). Le jeton le filtre dans les deux cas.
Formes de messages
Toutes les trames sont des objets JSON avec untype. Les trames
requête/réponse portent un cid (id de corrélation) que vous choisissez,
répété sur la réponse correspondante.
Entrant — hôte → orchestrateur
Tout autre événement de panneau que vous envoyez tant que vous êtes attaché
est de même routé vers l’onglet miroré.
Sortant — orchestrateur → hôte
Plus l’activité agent en direct de l’onglet miroré (réponses en flux, statut,
cartes), que votre hôte rend.
Invariants de sécurité — un hôte DOIT les préserver
Ce sont les garanties qui rendent l’appairage sûr. Construire un hôte qui les respecte est tout le contrat ; un hôte qui essaie de les contourner est exactement ce que l’écouteur est conçu pour rejeter.Préserver ces invariants n’est pas une contrainte sur votre hôte — c’est
la fonctionnalité. Ils empêchent un client de détourner une session à
laquelle il ne s’est jamais appairé.
- Barrière de jeton. L’écouteur refuse toute connexion sans un jeton
d’appairage valide (
verifyClient). Ne construisez jamais un flux qui livre ou embarque le jeton automatiquement — l’utilisateur appairé, une fois, délibérément. - Tamponnage autoritaire de
attach_tab. Le serveur, pas le client, décide quel onglet vos trames ciblent. Ne vous fiez pas autab_idfourni par le client pour le routage ; attachez d’abord, puis envoyez. - Cibles non-headless seulement. Vous pouvez vous attacher à un vrai onglet bureau, jamais à un autre client headless (vous ne pouvez pas mirorer un autre téléphone/hôte).
- Un onglet à la fois. S’attacher à B abandonne votre abonnement à A. Modélisez un seul miroir actif par connexion.
- Genre de socket épinglé. Le genre d’une connexion (headless vs
bureau) est fixé à son premier
hello; n’essayez pas de le basculer pour échapper aux gardes de prise de contrôle.
Client de référence minimal
Apprendre à un LLM à construire votre adaptateur
Collez le prompt ci-dessous dans Claude, ChatGPT, ou votre agent de code pour qu’il échafaude un adaptateur d’hôte pour votre plateforme. Il porte le contrat de protocole complet, donc le modèle n’a pas à deviner.Copy this into your LLM
Enregistrer votre intégration
Vous avez construit quelque chose ? Enregistrez-le pour qu’il puisse être listé et pour que nous puissions vous signaler les changements de protocole avant qu’ils se livrent :Enregistrer un hôte tiers
Ouvrez le modèle d’enregistrement sur GitHub — nom, plateforme, dépôt, et
contre quelle version de protocole vous avez construit.
Stabilité : les trames ci-dessus sont celles sur lesquelles l’appli
mobile se livre, mais ce n’est pas encore un contrat figé et versionné —
lisez le source
(
src/services/ui-bridge.ts)
comme autorité, et enregistrez votre hôte pour être prévenu quand les
formes bougent.