Skip to main content
代理面板、手機 App,以及任何與正在執行的工作階段配對的工具,都對協調器 的配對監聽器說同一種小型 WebSocket 協定第三方主機是你在那套協定上構建的任何 用戶端 —— Blender 面板、瀏覽器擴充、CLI、另一個編輯器 —— 它附著到一個即時桌面分頁 並驅動那個代理工作階段。同一個代理,同一段上下文,沒有第二個 Claude Code 行程,使用者 也不用額外安裝任何東西。
這正是手機 App 建在上面的那一面。只要你能開啟 WebSocket 並發送 JSON,就能構建主機。

運作原理

1

桌面已經在聽

代理面板開啟時,協調器會在區域網上跑一個權杖把門的配對監聽器(請看 端點)。每個開啟的面板分頁都是一個帶穩定 tab_id 和即時代理工作階段的 桌面分頁
2

你的主機帶著配對權杖連線

用查詢字串裡的權杖開啟到配對 URL 的 WebSocket。沒有有效權杖,連線會被拒絕 —— 配對就是整條安全邊界。
3

列出並附著到一個分頁

傳送 list_tabs 發現開啟的桌面分頁,再發 attach_tab 鏡像其中一個。你的主機現在 接收那個分頁的活動(流式),並且可以驅動它
4

驅動共享工作階段

傳送 user_message 幀。附著期間,伺服器把它們路由到被鏡像的分頁 —— 於是你的 訊息進入桌面代理所在的同一段對話。這才是「一個代理、共享上下文」,而不是第二個 工作階段。

端點

配對監聽器從橋接連接埠派生(COMFYUI_MCP_BRIDGE_PORT,預設 9180): 配對 URL:
  • 權杖要麼由使用者透過 COMFYUI_MCP_PAIR_TOKEN 釘死(始終開啟配對),要麼按工作階段 鑄造並透過面板的二維碼 / 配對流程發出。你的主機拿到它的方式和手機 App 一樣: 使用者配對一次。
  • 預設綁在區域網上,但使用者要求時也內建了公網暴露:面板的配對對話框提供 Internet 模式,開啟一條加密的 cloudflared 快速通道;企業也可以把它走自架中繼 (COMFYUI_MCP_TUNNEL_BACKEND=relay)。無論哪種,權杖都把門。

訊息形狀

所有幀都是帶 type 的 JSON 物件。請求 / 響應幀攜帶一個你自己選的 cid(關聯 id), 在對應回覆上原樣回顯。

入站 —— 主機 → 協調器

附著期間你傳送的任何其他面板事件,同樣會路由到被鏡像的分頁。

出站 —— 協調器 → 主機

再加上被鏡像分頁的即時代理活動(流式回覆、狀態、卡片),由你的主機來算圖。
attach_tab 是權威的 —— 你不能偽造目標。 伺服器會用你實際附著到的分頁覆寫你 在出站幀上放的任何 tab_id。主機永遠只能驅動它顯式附著過的分頁。這是故意的;見下。

安全不變量 —— 主機必須守住這些

這些保證讓配對是安全的。構建一個尊重它們的主機就是整份合約;試圖繞過它們的主機,正是 監聽器設計來拒絕的東西。
守住這些不是對你主機的約束 —— 它就是功能本身。它們擋下用戶端劫持它從未配對過的 工作階段。
  1. 權杖門。 監聽器拒絕任何沒有有效配對權杖的連線(verifyClient)。永遠不要做 自動下發或內嵌權杖的流程 —— 使用者配對,一次,故意的。
  2. 權威的 attach_tab 蓋戳。 決定你的幀打向哪個分頁的是伺服器,不是用戶端。 不要相依用戶端提供的 tab_id 做路由;先附著,再發送。
  3. 只允許非無頭目標。 你可以附著到真實桌面分頁,永遠不能附著到另一個無頭用戶端 (你不能映像檔另一部手機 / 主機)。
  4. 一次一個分頁。 附著到 B 會丟掉你對 A 的訂閱。按每個連線一個活動鏡像來建模。
  5. 釘死的通訊端種類。 連線的種類(無頭 vs 桌面)在第一次 hello 時固定;不要試圖 翻轉它來逃過接管護欄。

最小參考用戶端

教 LLM 構建你的轉接器

把下面的提示粘進 Claude、ChatGPT 或你的編碼代理,讓它為你的平台搭一份主機轉接器 腳手架。它帶著完整的協定合約,模型不用猜。
Copy this into your LLM

登記你的整合

做出了什麼?登記它,這樣它可以被列出,我們也能在協定變更發貨前通知你:

登記第三方主機

在 GitHub 上開啟登記模板 —— 名稱、平台、儲存庫,以及你對照構建的協定版本。
穩定性: 上面的幀是手機 App 發貨時用的,但這還不是一份凍結、帶版本的合約 —— 以原始碼(src/services/ui-bridge.ts) 為準,並登記你的主機,形狀變動時你會收到通知。