/v1/* サーフェスと同様に、共有シークレットの bearer 認証は、Gateway 全体に対する信頼済みオペレーターアクセスとして扱われます。
POST /tools/invoke- Gateway と同じポート(WS + HTTP マルチプレックス):
http://<gateway-host>:<port>/tools/invoke - デフォルトの最大リクエスト本文サイズ: 2 MB
認証
Gateway 認証設定を使用します。 一般的な HTTP 認証パス:- 共有シークレット認証(
gateway.auth.mode="token"または"password"):Authorization: Bearer <token-or-password> - 信頼済み ID 付き HTTP 認証(
gateway.auth.mode="trusted-proxy"): 設定済みの ID 対応プロキシ経由でルーティングし、必要な ID ヘッダーを注入させます - プライベート ingress のオープン認証(
gateway.auth.mode="none"): 認証ヘッダーは不要です
mode="token"はgateway.auth.token(またはOPENCLAW_GATEWAY_TOKEN)を使用します。mode="password"はgateway.auth.password(またはOPENCLAW_GATEWAY_PASSWORD)を使用します。mode="trusted-proxy"では、HTTP リクエストが設定済みの信頼済みプロキシソースから来る必要があります。同一ホストの loopback プロキシには、明示的なgateway.auth.trustedProxy.allowLoopback = trueが必要です。- プロキシを迂回する内部の同一ホスト呼び出し元は、ローカル直接フォールバックとして
gateway.auth.password/OPENCLAW_GATEWAY_PASSWORDを使用できます。Forwarded、X-Forwarded-*、またはX-Real-IPヘッダーの証拠がある場合、代わりにリクエストは trusted-proxy パスに留まります。 gateway.auth.rateLimitが設定されていて認証失敗が多すぎる場合、エンドポイントはRetry-After付きで429を返します。
セキュリティ境界(重要)
このエンドポイントは、Gateway インスタンスに対する完全なオペレーターアクセスサーフェスとして扱ってください。- ここでの HTTP bearer 認証は、狭いユーザー別スコープモデルではありません。
- このエンドポイント用の有効な Gateway トークン/パスワードは、所有者/オペレーターの認証情報と同様に扱うべきです。
- 共有シークレット認証モード(
tokenとpassword)では、呼び出し元がより狭いx-openclaw-scopesヘッダーを送信した場合でも、エンドポイントは通常の完全なオペレーター既定値を復元します。 - 共有シークレット認証では、このエンドポイントでの直接ツール呼び出しも owner-sender ターンとして扱います。
- 信頼済み ID 付き HTTP モード(trusted proxy 認証、またはプライベート ingress 上の
gateway.auth.mode="none")では、x-openclaw-scopesが存在する場合はそれを尊重し、存在しない場合は通常のオペレーター既定スコープセットにフォールバックします。 - このエンドポイントは loopback/tailnet/プライベート ingress のみに置いてください。公開インターネットへ直接公開しないでください。
| 認証モード | 動作 |
|---|---|
token または password + Authorization: Bearer ... | 共有 Gateway オペレーターシークレットの所持を証明します。より狭い x-openclaw-scopes は無視します。完全な既定オペレータースコープセット operator.admin、operator.approvals、operator.pairing、operator.read、operator.talk.secrets、operator.write を復元します。直接ツール呼び出しを owner-sender ターンとして扱います。 |
信頼済み ID 付き HTTP(trusted proxy 認証、またはプライベート ingress 上の mode="none") | 外側の信頼済み ID またはデプロイ境界を認証します。x-openclaw-scopes が存在する場合はそれを尊重します。ヘッダーがない場合は、通常のオペレーター既定スコープセットにフォールバックします。呼び出し元が明示的にスコープを狭め、operator.admin を省略した場合にのみ所有者セマンティクスを失います。 |
リクエスト本文
tool/name(文字列、必須): 呼び出すツール名。両方が送信された場合はnameが優先されます。action(文字列、省略可): ツールスキーマがactionプロパティをサポートし、argsがまだ設定していない場合、args.actionにマージされます。args(オブジェクト、省略可): ツール固有の引数。sessionKey(文字列、省略可): 対象セッションキー。省略された場合、または"main"の場合、Gateway は設定済みのメインセッションキーを使用します(session.mainKeyと既定のエージェント、またはグローバルセッションスコープ内のglobalを尊重します)。agentId(文字列、省略可): そのエージェントのセッションキーを解決します。すでに別のエージェントにマップされている明示的なsessionKeyと競合する場合は400でエラーになります。idempotencyKey(文字列、省略可): 呼び出し用の安定したツール呼び出し ID を導出するために使用されます。dryRun(ブール値、省略可): 将来の使用のために予約されています。現在は無視されます。
ポリシー + ルーティング動作
ツールの可用性は、Gateway エージェントが使用するものと同じポリシーチェーンを通じてフィルタリングされます。tools.profile/tools.byProvider.profiletools.allow/tools.byProvider.allowagents.<id>.tools.allow/agents.<id>.tools.byProvider.allow- グループポリシー(セッションキーがグループまたはチャンネルにマップされる場合)
- サブエージェントポリシー(サブエージェントセッションキーで呼び出す場合)
- Exec 承認はオペレーターのガードレールであり、この HTTP エンドポイントの別個の認可境界ではありません。Gateway 認証 + ツールポリシーを通じてここでツールに到達できる場合、
/tools/invokeは呼び出しごとの追加承認プロンプトを追加しません。 - ここで
execに到達できる場合、それは変更を伴うシェルサーフェスとして扱ってください。write、edit、apply_patch、または HTTP ファイルシステム書き込みツールを拒否しても、シェル実行が読み取り専用になるわけではありません。 - Gateway bearer 認証情報を信頼できない呼び出し元と共有しないでください。信頼境界をまたいだ分離が必要な場合は、別々の Gateway を実行してください(理想的には別々の OS ユーザー/ホスト上)。
| ツール | 理由 |
|---|---|
exec | 直接コマンド実行(RCE サーフェス) |
spawn | 任意の子プロセス作成(RCE サーフェス) |
shell | シェルコマンド実行(RCE サーフェス) |
fs_write | ホスト上の任意ファイル変更 |
fs_delete | ホスト上の任意ファイル削除 |
fs_move | ホスト上の任意ファイル移動/名前変更 |
apply_patch | パッチ適用により任意ファイルを書き換え可能 |
sessions_spawn | セッションオーケストレーション。リモートでのエージェント生成は RCE |
sessions_send | セッション間メッセージ注入 |
cron | 永続的な自動化コントロールプレーン |
gateway | Gateway コントロールプレーン。HTTP 経由の再設定を防止 |
nodes | Node コマンドリレーはペアリング済みホスト上の system.run に到達可能 |
cron、gateway、nodes は owner-only でもあります。このデフォルト拒否リストの外であっても、所有者でない呼び出し元はこのサーフェスでそれらを呼び出せません。
一般的な拒否リストは gateway.tools でカスタマイズします。
gateway.tools.allow は公開オーバーライドであり、スコープ昇格ではありません。ID 付き HTTP モードでは、cron、gateway、nodes は、gateway.tools.allow に記載されていても、owner/admin ID(operator.admin)を持たない呼び出し元には引き続き利用できません。共有シークレット bearer 認証は、引き続き上記の完全な信頼済みオペレータールールに従います。
グループポリシーがコンテキストを解決しやすくするため、任意で次を設定できます。
x-openclaw-message-channel: <channel>(例:slack、telegram)x-openclaw-account-id: <accountId>(複数アカウントが存在する場合)x-openclaw-message-to: <target>(メッセージツールポリシー用の配信対象)x-openclaw-thread-id: <threadId>(メッセージツールポリシー用のスレッドコンテキスト)
レスポンス
| ステータス | 意味 |
|---|---|
200 | { ok: true, result } |
400 | { ok: false, error: { type, message } }(無効なリクエストまたはツール入力エラー) |
401 | 未認可 |
403 | { ok: false, error: { type, message, requiresApproval? } }(ポリシーによりツール呼び出しがブロック) |
404 | ツールを利用できません(見つからない、または allowlist に含まれていない) |
405 | メソッドは許可されていません |
408 | リクエスト本文の読み取りがタイムアウトしました |
413 | リクエスト本文が最大ペイロードサイズを超えました |
429 | 認証がレート制限されています(Retry-After が設定済み) |
500 | { ok: false, error: { type, message } }(予期しないツール実行エラー。メッセージはサニタイズ済み) |