CLI commands

MCP

openclaw mcp 有兩個工作:

  • 使用 openclaw mcp serve 將 OpenClaw 作為 MCP 伺服器執行
  • 使用 listshowsetunset 管理 OpenClaw 擁有的對外 MCP 伺服器定義

換句話說:

  • serve 是 OpenClaw 作為 MCP 伺服器運作
  • list / show / set / unset 是 OpenClaw 作為 MCP 用戶端側登錄檔,供其執行階段之後可取用的其他 MCP 伺服器使用

當 OpenClaw 應自行託管編碼工具鏈工作階段,並透過 ACP 路由該執行階段時,請使用 openclaw acp

OpenClaw 作為 MCP 伺服器

這是 openclaw mcp serve 路徑。

何時使用 serve

在下列情況使用 openclaw mcp serve

  • Codex、Claude Code 或另一個 MCP 用戶端應直接與 OpenClaw 支援的頻道對話溝通
  • 你已經有本機或遠端 OpenClaw Gateway,且有已路由的工作階段
  • 你想要一個可跨 OpenClaw 頻道後端運作的 MCP 伺服器,而不是為每個頻道各自執行橋接器

當 OpenClaw 應自行託管編碼執行階段,並將代理工作階段保留在 OpenClaw 內時,請改用 openclaw acp

運作方式

openclaw mcp serve 會啟動一個 stdio MCP 伺服器。MCP 用戶端擁有該程序。只要用戶端保持 stdio 工作階段開啟,橋接器就會透過 WebSocket 連線到本機或遠端 OpenClaw Gateway,並透過 MCP 公開已路由的頻道對話。

  • 用戶端產生橋接器

    MCP 用戶端會產生 openclaw mcp serve

  • 橋接器連線到 Gateway

    橋接器會透過 WebSocket 連線到 OpenClaw Gateway。

  • 工作階段成為 MCP 對話

    已路由的工作階段會成為 MCP 對話和文字記錄/歷史工具。

  • 即時事件佇列

    橋接器連線期間,即時事件會排入記憶體佇列。

  • 選用 Claude 推送

    如果啟用 Claude 頻道模式,同一個工作階段也可以接收 Claude 專屬的推送通知。

  • 重要行為
    • 即時佇列狀態會在橋接器連線時開始
    • 較舊的文字記錄歷史會透過 messages_read 讀取
    • Claude 推送通知只會在 MCP 工作階段存活時存在
    • 當用戶端中斷連線時,橋接器會結束,且即時佇列會消失
    • openclaw agentopenclaw infer model run 等一次性代理進入點,會在回覆完成時退役其開啟的任何隨附 MCP 執行階段,因此重複的指令碼執行不會累積 stdio MCP 子程序
    • OpenClaw 啟動的 stdio MCP 伺服器(隨附或由使用者設定)會在關機時以程序樹形式拆除,因此伺服器啟動的子程序不會在父 stdio 用戶端結束後存活
    • 刪除或重設工作階段會透過共用執行階段清理路徑釋放該工作階段的 MCP 用戶端,因此不會有連結到已移除工作階段的殘留 stdio 連線

    選擇用戶端模式

    以兩種不同方式使用同一個橋接器:

    通用 MCP 用戶端

    只有標準 MCP 工具。使用 conversations_listmessages_readevents_pollevents_waitmessages_send 和核准工具。

    Claude Code

    標準 MCP 工具加上 Claude 專屬頻道配接器。啟用 --claude-channel-mode on,或保留預設值 auto

    serve 公開的內容

    橋接器會使用現有 Gateway 工作階段路由中繼資料來公開由頻道支援的對話。當 OpenClaw 已有具備已知路由的工作階段狀態時,對話就會出現,例如:

    • channel
    • 收件者或目的地中繼資料
    • 選用 accountId
    • 選用 threadId

    這讓 MCP 用戶端可以在一處:

    • 列出最近的已路由對話
    • 讀取最近的文字記錄歷史
    • 等待新的傳入事件
    • 透過相同路由傳回回覆
    • 查看橋接器連線期間到達的核准要求

    使用方式

    本機 Gateway

    openclaw mcp serve
    

    遠端 Gateway(權杖)

    openclaw mcp serve --url wss://gateway-host:18789 --token-file ~/.openclaw/gateway.token
    

    遠端 Gateway(密碼)

    openclaw mcp serve --url wss://gateway-host:18789 --password-file ~/.openclaw/gateway.password
    

    詳細 / 關閉 Claude

    openclaw mcp serve --verbose
    openclaw mcp serve --claude-channel-mode off
    

    橋接器工具

    目前的橋接器公開這些 MCP 工具:

    conversations_list

    列出最近由工作階段支援、且 Gateway 工作階段狀態中已具備路由中繼資料的對話。

    實用篩選器:

    • limit
    • search
    • channel
    • includeDerivedTitles
    • includeLastMessage
    conversation_get

    使用直接 Gateway 工作階段查詢,依 session_key 傳回一個對話。

    messages_read

    讀取一個由工作階段支援的對話最近的文字記錄訊息。

    attachments_fetch

    從一則文字記錄訊息中擷取非文字訊息內容區塊。這是文字記錄內容上的中繼資料檢視,不是獨立且持久的附件 Blob 儲存區。

    events_poll

    讀取自數值游標之後排入佇列的即時事件。

    events_wait

    長輪詢,直到下一個相符的佇列事件到達或逾時。

    當通用 MCP 用戶端需要近即時傳遞,而不使用 Claude 專屬推送協定時,請使用此工具。

    messages_send

    透過工作階段中已記錄的相同路由傳回文字。

    目前行為:

    • 需要既有對話路由
    • 使用工作階段的頻道、收件者、帳號 ID 和執行緒 ID
    • 只傳送文字
    permissions_list_open

    列出橋接器自連線到 Gateway 起觀察到的待處理 exec/Plugin 核准要求。

    permissions_respond

    以以下選項解析一個待處理 exec/Plugin 核准要求:

    • allow-once
    • allow-always
    • deny

    事件模型

    橋接器會在連線期間保留一個記憶體內事件佇列。

    目前事件類型:

    • message
    • exec_approval_requested
    • exec_approval_resolved
    • plugin_approval_requested
    • plugin_approval_resolved
    • claude_permission_request

    Claude 頻道通知

    橋接器也可以公開 Claude 專屬頻道通知。這是 OpenClaw 等同於 Claude Code 頻道配接器的功能:標準 MCP 工具仍可使用,但即時傳入訊息也可以作為 Claude 專屬 MCP 通知到達。

    off

    --claude-channel-mode off:僅使用標準 MCP 工具。

    on

    --claude-channel-mode on:啟用 Claude 頻道通知。

    auto(預設)

    --claude-channel-mode auto:目前預設值;橋接器行為與 on 相同。

    啟用 Claude 頻道模式時,伺服器會宣告 Claude 實驗性能力,並可發出:

    • notifications/claude/channel
    • notifications/claude/channel/permission

    目前橋接器行為:

    • 傳入的 user 文字記錄訊息會轉發為 notifications/claude/channel
    • 透過 MCP 收到的 Claude 權限要求會在記憶體中追蹤
    • 如果連結的對話之後傳送 yes abcdeno abcde,橋接器會將其轉換為 notifications/claude/channel/permission
    • 這些通知僅限即時工作階段;如果 MCP 用戶端中斷連線,就沒有推送目標

    這是刻意為特定用戶端設計的功能。通用 MCP 用戶端應依賴標準輪詢工具。

    MCP 用戶端設定

    stdio 用戶端設定範例:

    {
      "mcpServers": {
        "openclaw": {
          "command": "openclaw",
          "args": [
            "mcp",
            "serve",
            "--url",
            "wss://gateway-host:18789",
            "--token-file",
            "/path/to/gateway.token"
          ]
        }
      }
    }
    

    對於大多數通用 MCP 用戶端,請從標準工具介面開始,並忽略 Claude 模式。只有在用戶端確實理解 Claude 專屬通知方法時,才開啟 Claude 模式。

    選項

    openclaw mcp serve 支援:

    --urlstring

    Gateway WebSocket URL。

    --tokenstring

    Gateway 權杖。

    --token-filestring

    從檔案讀取權杖。

    --passwordstring

    Gateway 密碼。

    --password-filestring

    從檔案讀取密碼。

    --claude-channel-mode"auto" | "on" | "off"

    Claude 通知模式。

    -v, --verboseboolean

    stderr 上的詳細記錄。

    安全性與信任邊界

    橋接器不會自行發明路由。它只公開 Gateway 已知道如何路由的對話。

    這表示:

    • 傳送者允許清單、配對和頻道層級信任仍屬於底層 OpenClaw 頻道設定
    • messages_send 只能透過既有已儲存路由回覆
    • 核准狀態只在目前橋接器工作階段中即時/記憶體內存在
    • 橋接器驗證應使用你會信任給任何其他遠端 Gateway 用戶端的相同 Gateway 權杖或密碼控制

    如果某個對話未出現在 conversations_list 中,通常原因不是 MCP 設定,而是底層 Gateway 工作階段中缺少或不完整的路由中繼資料。

    測試

    OpenClaw 為此橋接器提供確定性的 Docker 煙霧測試:

    pnpm test:docker:mcp-channels
    

    該煙霧測試會:

    • 啟動一個已植入資料的 Gateway 容器
    • 啟動第二個會產生 openclaw mcp serve 的容器
    • 驗證對話探索、文字記錄讀取、附件中繼資料讀取、即時事件佇列行為和對外傳送路由
    • 透過真實的 stdio MCP 橋接器驗證 Claude 風格的頻道與權限通知

    這是在不將真實 Telegram、Discord 或 iMessage 帳號接入測試執行的情況下,證明橋接器可正常運作的最快方式。

    如需更廣泛的測試背景,請參閱 測試

    疑難排解

    未傳回任何對話

    通常表示 Gateway 工作階段尚不可路由。確認底層工作階段已儲存頻道/提供者、收件者,以及選用的帳號/執行緒路由中繼資料。

    events_poll 或 events_wait 漏掉較舊訊息

    這是預期行為。即時佇列會在橋接器連線時開始。使用 messages_read 讀取較舊的文字記錄歷史。

    Claude 通知沒有出現

    檢查以下所有項目:

    • 用戶端保持 stdio MCP 工作階段開啟
    • --claude-channel-modeonauto
    • 用戶端確實理解 Claude 專屬通知方法
    • 傳入訊息發生在橋接器連線之後
    核准遺失

    permissions_list_open 只顯示橋接器連線期間觀察到的核准要求。它不是持久的核准歷史 API。

    OpenClaw 作為 MCP 用戶端登錄檔

    這是 openclaw mcp listshowsetunset 路徑。

    這些命令不會透過 MCP 暴露 OpenClaw。它們會管理 OpenClaw 設定中 mcp.servers 底下由 OpenClaw 擁有的 MCP 伺服器定義。

    這些已儲存的定義供 OpenClaw 稍後啟動或設定的執行階段使用,例如嵌入式 Pi 和其他執行階段配接器。OpenClaw 會集中儲存這些定義,因此那些執行階段不需要維護自己的重複 MCP 伺服器清單。

    重要行為
    • 這些命令只會讀取或寫入 OpenClaw 設定
    • 它們不會連線到目標 MCP 伺服器
    • 它們不會驗證命令、URL 或遠端傳輸目前是否可連線
    • 執行階段配接器會在執行時決定實際支援哪些傳輸形狀
    • 嵌入式 Pi 會在一般 codingmessaging 工具設定檔中暴露已設定的 MCP 工具;minimal 仍會隱藏它們,而 tools.deny: ["bundle-mcp"] 會明確停用它們
    • 工作階段範圍的 bundled MCP 執行階段會在閒置 mcp.sessionIdleTtlMs 毫秒後被回收(預設 10 分鐘;設為 0 可停用),而一次性嵌入式執行會在執行結束時清理它們

    執行階段配接器可能會將這個共享登錄正規化成其下游用戶端預期的形狀。例如,嵌入式 Pi 會直接使用 OpenClaw 的 transport 值,而 Claude Code 和 Gemini 會收到 CLI 原生的 type 值,例如 httpssestdio

    已儲存的 MCP 伺服器定義

    OpenClaw 也會在設定中儲存輕量 MCP 伺服器登錄,供需要 OpenClaw 管理 MCP 定義的介面使用。

    命令:

    • openclaw mcp list
    • openclaw mcp show [name]
    • openclaw mcp set <name> <json>
    • openclaw mcp unset <name>

    注意事項:

    • list 會排序伺服器名稱。
    • 不帶名稱的 show 會印出完整設定的 MCP 伺服器物件。
    • set 預期命令列上有一個 JSON 物件值。
    • 對 Streamable HTTP MCP 伺服器使用 transport: "streamable-http"openclaw mcp set 也會將 CLI 原生的 type: "http" 正規化成相同的標準設定形狀,以維持相容性。
    • 如果指定名稱的伺服器不存在,unset 會失敗。

    範例:

    openclaw mcp list
    openclaw mcp show context7 --json
    openclaw mcp set context7 '{"command":"uvx","args":["context7-mcp"]}'
    openclaw mcp set docs '{"url":"https://mcp.example.com","transport":"streamable-http"}'
    openclaw mcp unset context7
    

    設定形狀範例:

    {
      "mcp": {
        "servers": {
          "context7": {
            "command": "uvx",
            "args": ["context7-mcp"]
          },
          "docs": {
            "url": "https://mcp.example.com",
            "transport": "streamable-http"
          }
        }
      }
    }
    

    Stdio 傳輸

    啟動本機子處理程序,並透過 stdin/stdout 通訊。

    欄位 說明
    command 要產生的可執行檔(必要)
    args 命令列引數陣列
    env 額外環境變數
    cwd / workingDirectory 處理程序的工作目錄

    SSE / HTTP 傳輸

    透過 HTTP Server-Sent Events 連線到遠端 MCP 伺服器。

    欄位 說明
    url 遠端伺服器的 HTTP 或 HTTPS URL(必要)
    headers 選用的 HTTP 標頭鍵值對應表(例如驗證權杖)
    connectionTimeoutMs 每個伺服器的連線逾時,以 ms 為單位(選用)

    範例:

    {
      "mcp": {
        "servers": {
          "remote-tools": {
            "url": "https://mcp.example.com",
            "headers": {
              "Authorization": "Bearer <token>"
            }
          }
        }
      }
    }
    

    url(userinfo)和 headers 中的敏感值會在記錄與狀態輸出中被遮蔽。

    Streamable HTTP 傳輸

    streamable-httpssestdio 之外的額外傳輸選項。它使用 HTTP 串流與遠端 MCP 伺服器進行雙向通訊。

    欄位 說明
    url 遠端伺服器的 HTTP 或 HTTPS URL(必要)
    transport 設為 "streamable-http" 以選取此傳輸;省略時,OpenClaw 會使用 sse
    headers 選用的 HTTP 標頭鍵值對應表(例如驗證權杖)
    connectionTimeoutMs 每個伺服器的連線逾時,以 ms 為單位(選用)

    OpenClaw 設定使用 transport: "streamable-http" 作為標準寫法。透過 openclaw mcp set 儲存時,會接受 CLI 原生的 MCP type: "http" 值,並且在既有設定中由 openclaw doctor --fix 修復,但 transport 是嵌入式 Pi 會直接使用的內容。

    範例:

    {
      "mcp": {
        "servers": {
          "streaming-tools": {
            "url": "https://mcp.example.com/stream",
            "transport": "streamable-http",
            "connectionTimeoutMs": 10000,
            "headers": {
              "Authorization": "Bearer <token>"
            }
          }
        }
      }
    }
    

    目前限制

    本頁記錄目前已出貨的橋接器。

    目前限制:

    • 對話探索依賴既有 Gateway 工作階段路由中繼資料
    • 除 Claude 專用配接器外,沒有通用推送協定
    • 尚無訊息編輯或回應工具
    • HTTP/SSE/streamable-http 傳輸會連線到單一遠端伺服器;尚無多工上游
    • permissions_list_open 只包含橋接器連線期間觀察到的核准

    相關