openclaw mcp には2つの役割があります。
openclaw mcp serveで OpenClaw を MCP サーバーとして実行するlist、show、status、doctor、probe、add、set、configure、tools、login、logout、reload、unsetで、OpenClaw管理のアウトバウンド MCP サーバー定義を管理する
serve は、OpenClaw が MCP サーバーとして動作するものです。その他のサブコマンドは、OpenClaw 自身のランタイムが後で利用する可能性があるサーバー向けの MCP クライアント側レジストリとして OpenClaw が動作するものです。
list、show、set、unset は、OpenClaw 設定内の OpenClaw管理 mcp.servers エントリだけを読み書きします。config/mcporter.json の mcporter サーバーは含まれません。そのレジストリには mcporter list を使用してください。openclaw acp を使用してください。
適切な MCP パスを選ぶ
| 目的 | 使用するもの | 理由 |
|---|---|---|
| 外部 MCP クライアントに OpenClaw チャネル会話の読み取り/送信を許可する | openclaw mcp serve | OpenClaw が MCP サーバーになり、Gateway に支えられた会話を stdio 経由で公開します。 |
| OpenClaw管理のエージェント実行用にサードパーティ MCP サーバーを保存する | openclaw mcp add, set, configure, tools, login | OpenClaw が MCP クライアント側レジストリになり、後で対象ランタイムへそれらのサーバーを投影します。 |
| エージェントターンを実行せずに保存済みサーバーを確認する | openclaw mcp status, doctor, probe | status と doctor は設定を検査します。probe はライブ MCP 接続を開き、ケイパビリティを一覧表示します。 |
| ブラウザから MCP 設定を編集する | Control UI /mcp | このページには、インベントリ、有効化状態、OAuth/フィルター概要、コマンドヒント、スコープ付き mcp エディターが表示されます。 |
| Codex app-server にスコープ付きネイティブ MCP サーバーを渡す | mcp.servers.<name>.codex | codex ブロックは Codex app-server スレッド投影にのみ影響し、ネイティブ設定への引き渡し前に取り除かれます。 |
| ACPホストのハーネスセッションを実行する | openclaw acp と ACP Agents | ACP ブリッジモードはセッション単位の MCP サーバー注入を受け付けません。代わりに gateway/plugin ブリッジを設定してください。 |
MCP サーバーとしての OpenClaw
これはopenclaw mcp serve のパスです。
serve を使う場面
次の場合にopenclaw mcp serve を使用します。
- Codex、Claude Code、または別の MCP クライアントが、OpenClaw に支えられたチャネル会話と直接やり取りする必要がある
- ルーティング済みセッションを持つローカルまたはリモートの OpenClaw Gateway がすでにある
- チャネルごとに個別のブリッジを実行する代わりに、OpenClaw のチャネルバックエンド全体で機能する1つの MCP サーバーが必要である
openclaw acp を使用してください。
仕組み
openclaw mcp serve は stdio MCP サーバーを開始します。MCP クライアントがそのプロセスを所有します。クライアントが stdio セッションを開いたままにしている間、ブリッジは WebSocket 経由でローカルまたはリモートの OpenClaw Gateway に接続し、ルーティング済みチャネル会話を MCP 経由で公開します。
重要な動作
重要な動作
- ライブキュー状態はブリッジ接続時に開始します
- 古いトランスクリプト履歴は
messages_readで読み取ります - Claude プッシュ通知は MCP セッションが存続している間だけ存在します
- クライアントが切断すると、ブリッジは終了し、ライブキューは失われます
openclaw agentやopenclaw infer model runなどの単発エージェントエントリポイントは、応答完了時に、それらが開いたバンドル済み MCP ランタイムをすべて終了するため、スクリプト化された反復実行で stdio MCP 子プロセスが蓄積されません- OpenClaw によって起動された stdio MCP サーバー(バンドル済みまたはユーザー設定)は、シャットダウン時にプロセスツリーとして終了されるため、サーバーが開始した子サブプロセスは親 stdio クライアント終了後に残りません
- セッションを削除またはリセットすると、共有ランタイムクリーンアップパスを通じてそのセッションの MCP クライアントが破棄されるため、削除済みセッションに紐づく stdio 接続は残りません
クライアントモードを選ぶ
- 汎用 MCP クライアント
- Claude Code
標準 MCP ツールのみです。
conversations_list、messages_read、events_poll、events_wait、messages_send、承認ツールを使用します。現在、
auto は on と同じように動作します。クライアントケイパビリティ検出はまだありません。serve が公開するもの
ブリッジは既存の Gateway セッションルートメタデータを使用して、チャネルに支えられた会話を公開します。OpenClaw に次のような既知のルートを持つセッション状態がすでにある場合、会話が表示されます。channel- 受信者または宛先メタデータ
- 任意の
accountId - 任意の
threadId
- 最近のルーティング済み会話を一覧表示する
- 最近のトランスクリプト履歴を読む
- 新しい受信イベントを待つ
- 同じルートを通じて返信を送り返す
- ブリッジ接続中に到着した承認リクエストを確認する
使い方
- ローカル Gateway
- リモート Gateway(トークン)
- リモート Gateway(パスワード)
- 詳細 / Claude オフ
ブリッジツール
conversations_list
conversations_list
Gateway セッション状態にルートメタデータがすでにある、最近のセッションに支えられた会話を一覧表示します。フィルター:
limit(最大 500)、search、channel、includeDerivedTitles、includeLastMessage。conversation_get
conversation_get
直接の Gateway セッション検索を使用して、
session_key で1つの会話を返します。messages_read
messages_read
1つのセッションに支えられた会話について、最近のトランスクリプトメッセージを読み取ります。
limit のデフォルトは 20、最大は 200 です。attachments_fetch
attachments_fetch
1つのトランスクリプトメッセージから非テキストメッセージコンテンツブロックを抽出します。これはトランスクリプトコンテンツ上のメタデータビューであり、単独の永続的な添付ファイル blob ストアではありません。
events_poll
events_poll
数値カーソル以降のキュー済みライブイベントを読み取ります。
limit は最大 200 です。events_wait
events_wait
次に一致するキュー済みイベントが到着するか、タイムアウトが切れるまでロングポーリングします(デフォルト 30s、最大 300s)。Claude 固有のプッシュプロトコルなしで、汎用 MCP クライアントがほぼリアルタイムの配信を必要とする場合に使用します。
messages_send
messages_send
セッションにすでに記録されている同じルートを通じてテキストを送り返します。現在の動作:
- 既存の会話ルートが必要です
- セッションのチャネル、受信者、アカウント ID、スレッド ID を使用します
- テキストのみ送信します
permissions_list_open
permissions_list_open
ブリッジが Gateway に接続してから観測した、保留中の exec/plugin 承認リクエストを一覧表示します。
permissions_respond
permissions_respond
次のいずれかで、保留中の exec/plugin 承認リクエストを1つ解決します。
allow-onceallow-alwaysdeny
イベントモデル
ブリッジは接続中、メモリ内イベントキューを保持します。 現在のイベントタイプ:messageexec_approval_requestedexec_approval_resolvedplugin_approval_requestedplugin_approval_resolvedclaude_permission_request
Claude チャネル通知
ブリッジは Claude 固有のチャネル通知も公開できます。これは Claude Code チャネルアダプターに相当する OpenClaw の機能です。標準 MCP ツールは引き続き利用でき、ライブ受信メッセージは Claude 固有の MCP 通知としても到着できます。- off
- on
- auto(デフォルト)
--claude-channel-mode off: 標準 MCP ツールのみ。notifications/claude/channelnotifications/claude/channel/permission
- 受信
userトランスクリプトメッセージはnotifications/claude/channelとして転送されます - MCP 経由で受信した Claude 権限リクエストはメモリ内で追跡されます
- 紐づく会話のコマンド所有者が後で
yes <id>またはno <id>を送信した場合(<id>はlを除く5文字のリクエスト ID)、ブリッジはそれをnotifications/claude/channel/permissionに変換します - これらの通知はライブセッション専用です。MCP クライアントが切断すると、プッシュ先はありません
MCP クライアント設定
stdio クライアント設定の例:オプション
openclaw mcp serve は次をサポートします。
Gateway WebSocket URL。設定されている場合はデフォルトで
gateway.remote.url になります。Gateway トークン。
ファイルからトークンを読み取ります。
Gateway パスワード。
ファイルからパスワードを読み取ります。
Claude 通知モード。デフォルトは
auto。stderr に詳細ログを出力します。
セキュリティと信頼境界
ブリッジはルーティングを作り出しません。Gateway がすでにルーティング方法を知っている会話だけを公開します。 つまり、次のようになります。- 送信者の許可リスト、ペアリング、チャネルレベルの信頼は、引き続き基盤となる OpenClaw チャネル設定に属します
messages_sendは、既存の保存済みルート経由でのみ返信できます- 承認状態は、現在のブリッジセッションについてのみライブ/インメモリです
- ブリッジ認証には、他のリモート Gateway クライアントに信頼して使うものと同じ Gateway トークンまたはパスワード制御を使用してください
conversations_list に存在しない場合、通常の原因は MCP 設定ではありません。基盤となる Gateway セッションで、ルートメタデータが欠落しているか不完全です。
テスト
OpenClaw は、このブリッジ向けに決定的な Docker スモークを同梱しています。openclaw mcp serve を生成し、MCP クライアントとして操作します。会話検出、トランスクリプト読み取り、添付ファイルメタデータ読み取り、ライブイベントキューの挙動、実際の stdio MCP ブリッジ越しの Claude 形式のチャネル通知と権限通知を検証します。送信ルーティング(保存済み会話ルートを再利用する messages_send)は、src/mcp/channel-server.test.ts の単体テストで別途カバーされています。
これは、実際の Telegram、Discord、iMessage アカウントをテスト実行に接続せずに、ブリッジが動作することを証明する最速の方法です。
より広いテストの文脈については、テスト を参照してください。
トラブルシューティング
会話が返されない
会話が返されない
通常は、Gateway セッションがまだルーティング可能ではないことを意味します。基盤となるセッションに、保存済みのチャネル/プロバイダー、受信者、および任意のアカウント/スレッドルートメタデータがあることを確認してください。
events_poll または events_wait が古いメッセージを取り逃がす
events_poll または events_wait が古いメッセージを取り逃がす
想定どおりです。ライブキューはブリッジが接続した時点で開始されます。古いトランスクリプト履歴は
messages_read で読み取ってください。Claude 通知が表示されない
Claude 通知が表示されない
次のすべてを確認してください。
- クライアントが stdio MCP セッションを開いたままにしていた
--claude-channel-modeがonまたはautoである- クライアントが Claude 固有の通知メソッドを実際に理解している
- インバウンドメッセージが、ブリッジ接続後に発生した
承認が見つからない
承認が見つからない
permissions_list_open は、ブリッジが接続されている間に観測された承認リクエストのみを表示します。永続的な承認履歴 API ではありません。MCP クライアントレジストリとしての OpenClaw
これはopenclaw mcp list、show、status、doctor、probe、add、set、
configure、tools、login、logout、reload、unset のパスです。
これらのコマンドは、MCP 越しに OpenClaw を公開しません。OpenClaw 設定内の mcp.servers 配下にある、OpenClaw 管理の MCP サーバー定義を管理します。config/mcporter.json から mcporter サーバーを読み取りません。
保存されたこれらの定義は、埋め込み OpenClaw や他のランタイムアダプターなど、OpenClaw が後で起動または設定するランタイム向けです。OpenClaw は定義を中央に保存するため、それらのランタイムが独自の重複した MCP サーバーリストを保持する必要はありません。
重要な挙動
重要な挙動
- これらのコマンドは OpenClaw 設定の読み書きのみを行います
status、list、show、--probeなしのdoctor、set、configure、tools、logout、reload、unsetは、対象の MCP サーバーに接続しませんloginは、設定済み HTTP サーバーに対して MCP OAuth ネットワークフローを実行し、結果のローカル認証情報を保存しますstatus --verboseは、接続せずに、解決済みのトランスポート、認証、タイムアウト、フィルター、並列ツール呼び出しヒントを出力しますdoctorは、stdio コマンドの欠落、無効な作業ディレクトリ、TLS ファイルの欠落、無効化されたサーバー、リテラルの機密ヘッダー/env 値、不完全な OAuth 認可など、ローカルセットアップ上の問題について保存済み定義をチェックしますdoctor --probeは、静的チェックが通った後にprobeと同じライブ接続証明を追加しますprobeは、選択したサーバーまたは設定済みの全サーバーに接続し、ツールを一覧表示して、機能/診断を報告しますaddは、--no-probeが設定されている場合、または OAuth 認可が先に必要な場合を除き、保存前にフラグから定義を構築してプローブします- ランタイムアダプターは、実行時に実際にサポートするトランスポート形状を決定します
enabled: falseはサーバーを保存したままにしますが、埋め込みランタイム検出からは除外しますtimeoutとconnectTimeoutは、サーバーごとのリクエストタイムアウトと接続タイムアウトを秒単位で設定しますsupportsParallelToolCalls: trueは、アダプターが同時に呼び出せるサーバーを示します- HTTP サーバーは、静的ヘッダー、OAuth ログイン、TLS 検証制御、mTLS 証明書/鍵パスを使用できます
- 埋め込み OpenClaw は、設定済み MCP ツールを通常の
codingおよびmessagingツールプロファイルで公開します。minimalでは引き続き非表示になり、tools.deny: ["bundle-mcp"]によって明示的に無効化されます - サーバーごとの
toolFilter.includeとtoolFilter.excludeは、検出された MCP ツールが OpenClaw ツールになる前にフィルターします - リソースまたはプロンプトを広告するサーバーは、リソースの一覧/読み取り、およびプロンプトの一覧/取得用のユーティリティツールも公開します。生成されたこれらのユーティリティ名(
resources_list、resources_read、prompts_list、prompts_get)には、同じ include/exclude フィルターが適用されます - 動的な MCP ツールリスト変更は、そのセッションのキャッシュ済みカタログを無効化します。次回の検出/使用時にサーバーから更新されます
- MCP ツールリクエスト/プロトコルの失敗が繰り返されると、そのサーバーは短時間一時停止され、壊れたサーバー 1 つがターン全体を消費しないようにします
- セッションスコープの同梱 MCP ランタイムは、
mcp.sessionIdleTtlMsミリ秒のアイドル時間後に回収されます(デフォルトは 10 分、無効化するには0を設定)。ワンショットの埋め込み実行では、実行終了時にクリーンアップされます
transport 値を直接消費しますが、Claude Code と Gemini は http、sse、stdio などの CLI ネイティブな type 値を受け取ります。
Codex app-server も、各サーバーの任意の codex ブロックを尊重します。これは
Codex app-server スレッド専用の OpenClaw 投影メタデータです。ACP セッション、汎用 Codex ハーネス設定、または他のランタイムアダプターは変更しません。
サーバーを特定の OpenClaw エージェント ID にのみ投影するには、空でない codex.agents を使用します。空、空白、または無効なエージェントリストは設定検証で拒否され、グローバルになる代わりにランタイム投影パスで省略されます。信頼済みサーバー向けに Codex のネイティブな default_tools_approval_mode を出力するには、codex.defaultToolsApprovalMode(auto、prompt、または approve)を使用します。
OpenClaw はネイティブの mcp_servers 設定を Codex に渡す前に、codex メタデータを取り除きます。
保存済み MCP サーバー定義
コマンド:openclaw mcp listopenclaw mcp show [name]openclaw mcp status [--verbose]openclaw mcp doctor [name] [--probe]openclaw mcp probe [name]openclaw mcp add <name> [flags]openclaw mcp set <name> <json>openclaw mcp configure <name> [flags]openclaw mcp tools <name> [--include csv] [--exclude csv] [--clear]openclaw mcp login <name> [--code code]openclaw mcp logout <name>openclaw mcp reloadopenclaw mcp unset <name>
listはサーバー名をソートします。- 名前なしの
showは、設定済み MCP サーバーオブジェクト全体を出力します。 statusは、接続せずに設定済みトランスポートを分類します。--verboseには、解決済みの起動、タイムアウト、OAuth、フィルター、並列呼び出しの詳細が含まれます。doctorは、接続せずに静的チェックを実行します。有効なサーバーが接続できることも検証する必要がある場合は、--probeを追加します。probeは接続し、ツール数、リソース/プロンプトのサポート、リスト変更サポート、診断を報告します。addは、--command、--arg、--env、--cwdなどの stdio フラグ、または--url、--transport、--header、--auth oauth、TLS、タイムアウト、ツール選択フラグなどの HTTP フラグを受け付けます。setは、コマンドライン上で 1 つの JSON オブジェクト値を想定します。configureは、サーバー定義全体を置き換えずに、有効化、ツールフィルター、タイムアウト、OAuth、TLS、並列ツール呼び出しヒントを更新します。保存前に更新後のサーバーを検証するには、--probeを追加します。toolsは、サーバーごとのツールフィルターを更新します。include/exclude エントリは MCP ツール名と単純な*glob です。loginは、auth: "oauth"で設定された HTTP サーバーに対して OAuth フローを実行します。初回実行時に認可 URL が出力されます。承認後に--codeを付けて再実行してください。logoutは、保存済みサーバー定義を削除せずに、指定されたサーバーの保存済み OAuth 認証情報を消去します。reloadは、現在の CLI プロセスについてのみ、キャッシュ済みのインプロセス MCP ランタイムを破棄します。別プロセス内の Gateway またはエージェントプロセスには、引き続き独自の再読み込みまたは再起動パスが必要です。- Streamable HTTP MCP サーバーには
transport: "streamable-http"を使用してください。openclaw mcp setは、互換性のために CLI ネイティブなtype: "http"も同じ正規設定形状に正規化します。 - 指定されたサーバーが存在しない場合、
unsetは失敗します。
一般的なサーバーレシピ
これらの例はサーバー定義のみを保存します。その後、openclaw mcp doctor --probe を実行して、サーバーが起動しツールを公開することを証明してください。
- ファイルシステム
- メモリ
- ローカルスクリプト
- Remote HTTP
- Desktop/CUA
JSON 出力形状
スクリプトとダッシュボードには--json を使用します。フィールドセットは時間とともに増える可能性があるため、コンシューマーは不明なキーを無視してください。
status --json
status --json
doctor --json
doctor --json
doctor --json は、有効化されチェックされたサーバーのいずれかに error レベルの問題がある場合、非ゼロで終了します。warning と info の問題は報告されますが、それだけでコマンドが失敗することはありません。probe --json
probe --json
probe --json はライブ MCP クライアントセッションを開き、その結果を直接出力します。status/doctor とは異なり、出力にトップレベルの path フィールドはありません。resources と prompts キーは、サーバーがその機能を実際に公開している場合にのみ存在します(プロンプトを持たないサーバーは、false を報告するのではなく prompts キーを省略します)。静的な設定監査ではなく、到達性と機能の証明には probe を使用してください。Stdio トランスポート
ローカルの子プロセスを起動し、stdin/stdout 経由で通信します。| フィールド | 説明 |
|---|---|
command | 起動する実行可能ファイル(必須) |
args | コマンドライン引数の配列 |
env | 追加の環境変数 |
cwd / workingDirectory | プロセスの作業ディレクトリ |
SSE / HTTP トランスポート
HTTP Server-Sent Events 経由でリモート MCP サーバーに接続します。| フィールド | 説明 |
|---|---|
url | リモートサーバーの HTTP または HTTPS URL(必須) |
headers | HTTP ヘッダーの任意のキー値マップ(例: 認証トークン) |
connectionTimeoutMs | サーバーごとの接続タイムアウト(ミリ秒、任意) |
connectTimeout | サーバーごとの接続タイムアウト(秒、任意) |
timeout / requestTimeoutMs | サーバーごとの MCP リクエストタイムアウト(秒またはミリ秒) |
auth: "oauth" | MCP OAuth トークンストレージと openclaw mcp login を使用 |
sslVerify | 明示的に信頼されたプライベート HTTPS エンドポイントでのみ false に設定 |
clientCert / clientKey | mTLS クライアント証明書とキーのパス |
supportsParallelToolCalls | このサーバーで同時呼び出しが安全であることを示すヒント |
url(userinfo)と headers 内の機密値は、ログとステータス出力で秘匿されます。openclaw mcp doctor は、機密に見える headers または env エントリにリテラル値が含まれている場合に警告するため、運用者はそれらの値をコミット済み設定の外へ移動できます。
OAuth ワークフロー
OAuth は、MCP OAuth フローを公開する HTTP MCP サーバー向けです。auth: "oauth" が有効な間、そのサーバーの静的な Authorization ヘッダーは無視されます。
Start login
ログインを実行して認可リクエストを作成します。OpenClaw は認可 URL を出力し、一時的な OAuth 検証状態を OpenClaw 状態ディレクトリの下に保存します。
openclaw mcp logout <name> を実行してから login を繰り返します。サーバー名と URL が認証情報ストアのエントリを引き続き識別できる限り、auth: "oauth" が設定から削除された後でも、logout は保存済み HTTP サーバーの認証情報を消去できます。
Streamable HTTP トランスポート
streamable-http は、sse および stdio と並ぶ追加のトランスポートオプションです。リモート MCP サーバーとの双方向通信に HTTP ストリーミングを使用します。
| フィールド | 説明 |
|---|---|
url | リモートサーバーの HTTP または HTTPS URL(必須) |
transport | このトランスポートを選択するには "streamable-http" に設定。省略時、OpenClaw は sse を使用 |
headers | HTTP ヘッダーの任意のキー値マップ(例: 認証トークン) |
connectionTimeoutMs | サーバーごとの接続タイムアウト(ミリ秒、任意) |
connectTimeout | サーバーごとの接続タイムアウト(秒、任意) |
timeout / requestTimeoutMs | サーバーごとの MCP リクエストタイムアウト(秒またはミリ秒) |
auth: "oauth" | MCP OAuth トークンストレージと openclaw mcp login を使用 |
sslVerify | 明示的に信頼されたプライベート HTTPS エンドポイントでのみ false に設定 |
clientCert / clientKey | mTLS クライアント証明書とキーのパス |
supportsParallelToolCalls | このサーバーで同時呼び出しが安全であることを示すヒント |
transport: "streamable-http" を使用します。CLI ネイティブ MCP の type: "http" 値は、openclaw mcp set 経由で保存された場合に受け入れられ、既存の設定では openclaw doctor --fix によって修復されますが、埋め込み OpenClaw が直接消費するのは transport です。
例:
レジストリコマンドはチャネルブリッジを起動しません。
probe と doctor --probe だけがライブ MCP クライアントセッションを開き、ターゲットサーバーに到達できることを証明します。コントロール UI
ブラウザーの Control UI には、/mcp に専用の MCP 設定ページがあります。設定済みサーバー数、有効化/OAuth/フィルターの概要、サーバーごとのトランスポート行、有効化/無効化コントロール、一般的な CLI コマンド、mcp 設定セクション用のスコープ付きエディターが表示されます。
オペレーターによる編集と簡易インベントリにはこのページを使用します。ライブサーバーの証明が必要な場合は、openclaw mcp doctor --probe または openclaw mcp probe を使用します。
オペレーターワークフロー:
- Control UI を開き、MCP を選択します。
- 合計、有効、OAuth、フィルター済みサーバーのサマリーカードを確認します。
- 各サーバー行で、トランスポート、認証、フィルター、タイムアウト、コマンドのヒントを確認します。
- 定義を保持しつつランタイム検出から除外したい場合は、有効化を切り替えます。
- 新しいサーバー、ヘッダー、TLS、OAuth メタデータ、ツールフィルターなどの構造的な変更には、スコープ付きの
mcp設定セクションを編集します。 - 設定のみを永続化するには Save を選択し、Gateway 設定パスを通じて適用するには Save & Publish を選択します。
- 編集したサーバーが起動してツールを一覧表示することのライブ証明が必要な場合は、
openclaw mcp doctor --probeを実行します。
- コマンドスニペットではサーバー名を引用符で囲むため、通常と異なる名前でもシェルにコピーできます
- 表示される URL 風の値に埋め込み認証情報が含まれる場合は、レンダリング前に伏せられます
- このページ自体は MCP トランスポートを起動しません
- アクティブなランタイムでは、MCP クライアントを所有するプロセスに応じて、
openclaw mcp reload、Gateway 設定の公開、またはプロセス再起動が必要になる場合があります
現在の制限
このページは、現在出荷されているブリッジについて説明します。 現在の制限:- 会話の検出は既存の Gateway セッションルートメタデータに依存します
- Claude 固有のアダプター以外に汎用プッシュプロトコルはありません
- メッセージ編集ツールやリアクションツールはまだありません
- HTTP/SSE/streamable-http トランスポートは単一のリモートサーバーに接続します。多重化されたアップストリームはまだありません
permissions_list_openには、ブリッジ接続中に観測された承認のみが含まれます