Это ровно та поверхность, на которой построено мобильное приложение. Если вы
умеете открыть WebSocket и отправить JSON, вы можете построить хост.
Как это работает
1
Рабочий стол уже слушает
Когда панель агента открыта, оркестратор запускает слушатель сопряжения с
гейтингом по токену в LAN (см. Эндпоинты). Каждая открытая
вкладка панели — это вкладка рабочего стола со стабильным
tab_id и живой
сессией агента.2
Ваш хост подключается с токеном сопряжения
Откройте WebSocket к URL сопряжения с токеном в query string. Без валидного
токена соединение отклоняется — сопряжение и есть вся граница безопасности.
3
Перечислите вкладки и присоединитесь
Отправьте
list_tabs, чтобы узнать открытые вкладки рабочего стола, затем
attach_tab, чтобы зеркалировать одну. Ваш хост теперь получает активность
этой вкладки (стримом) и может ею управлять.4
Управляйте общей сессией
Отправляйте кадры
user_message. Пока вы присоединены, сервер направляет их
на зеркалируемую вкладку — так что ваше сообщение входит в тот же
разговор, в котором находится агент рабочего стола. Именно это делает это
«один агент, общий контекст», а не второй сессией.Эндпоинты
Слушатель сопряжения выводится из порта моста (COMFYUI_MCP_BRIDGE_PORT,
по умолчанию 9180):
URL сопряжения:
- Токен либо закреплён пользователем через
COMFYUI_MCP_PAIR_TOKEN(сопряжение всегда включено), либо чеканится на сессию и раздаётся через QR / поток сопряжения панели. Ваш хост получает его так же, как мобильное приложение: пользователь сопрягает его один раз. - По умолчанию в LAN, но публичная экспозиция встроена, когда пользователь
её просит: модальное окно сопряжения панели предлагает режим «Интернет»,
который открывает зашифрованный быстрый туннель cloudflared, а предприятия
могут направить его через собственный релей
(
COMFYUI_MCP_TUNNEL_BACKEND=relay). Токен гейтит в любом случае.
Формы сообщений
Все кадры — JSON-объекты сtype. Кадры запрос/ответ несут cid
(correlation id), который выбираете вы, и который эхом возвращается в
соответствующем ответе.
Входящие — хост → оркестратор
Любое другое событие панели, которое вы отправляете, пока присоединены,
точно так же направляется на зеркалируемую вкладку.
Исходящие — оркестратор → хост
Плюс живая активность агента зеркалируемой вкладки (стриминг ответов, статус,
карточки), которую ваш хост отрисовывает.
Инварианты безопасности — хост ДОЛЖЕН их сохранять
Это гарантии, которые делают сопряжение безопасным. Построить хост, который их соблюдает, и есть весь контракт; хост, который пытается их обойти, — ровно то, что слушатель спроектирован отвергать.Сохранять их — не ограничение вашего хоста: это и есть возможность. Они
останавливают клиента от захвата сессии, с которой он никогда не сопрягался.
- Гейт токена. Слушатель отклоняет любое соединение без валидного токена
сопряжения (
verifyClient). Никогда не стройте поток, который сам возит или встраивает токен — пользователь сопрягает, один раз, намеренно. - Авторитетный штамп
attach_tab. Сервер, а не клиент, решает, на какую вкладку целятся ваши кадры. Не полагайтесь на клиентскийtab_idдля маршрутизации; сначала присоединитесь, потом отправляйте. - Только не-headless цели. Можно присоединиться к настоящей вкладке рабочего стола, никогда к другому headless-клиенту (нельзя зеркалировать другой телефон/хост).
- Одна вкладка за раз. Присоединение к B сбрасывает подписку на A. Моделируйте одно активное зеркало на соединение.
- Закреплённый вид сокета. Вид соединения (headless vs рабочий стол)
фиксируется на первом
hello; не пытайтесь его перевернуть, чтобы обойти защиту от захвата.
Минимальный эталонный клиент
Научите LLM собрать ваш адаптер
Вставьте промпт ниже в Claude, ChatGPT или вашего агента для кода, чтобы он собрал каркас хост-адаптера для вашей платформы. Он несёт полный контракт протокола, так что модели не нужно гадать.Copy this into your LLM
Зарегистрируйте свою интеграцию
Построили что-то? Зарегистрируйте — чтобы её можно было перечислить и чтобы мы могли предупреждать вас об изменениях протокола до выпуска:Зарегистрировать сторонний хост
Откройте шаблон регистрации на GitHub — имя, платформа, репозиторий и против
какой версии протокола вы строили.
Стабильность: кадры выше — то, на чём едет мобильное приложение, но это
ещё не замороженный, версионированный контракт — читайте исходник
(
src/services/ui-bridge.ts)
как авторитет и регистрируйте хост, чтобы вас уведомляли, когда формы
сдвинутся.