MCP
ZeroClawはMCPクライアントです。外部のModel Context Protocolサーバーに接続し、それらのツールをエージェントに公開します。各MCPツールは<server>__<tool>という名前空間で管理されるため(例: filesystem__read_file)、異なるサーバーのツールが衝突することはありません。
MCP を構成する
MCP サポートはデフォルトで有効ですが、少なくとも 1 つのサーバーが mcp.servers に設定され、エージェントの mcp_bundles を通じてそのサーバーが付与されるまで、外部 MCP ツールは公開されません(下記のエージェントごとのサーバースコープを参照)。ゲートウェイ、zerocode、または zeroclaw config set で設定します:
zeroclaw config set mcp.servers.filesystem.command npx
サーバー定義を削除せずに MCP ツールの読み込みを無効にするには、mcp.enabled = false を設定します。
エージェントごとのサーバースコープ設定(mcp_bundles)
[[mcp.servers]] エントリはサーバーを 定義 するだけです。エージェントが実際に接続するサーバーは、そのエージェントの agents.<alias>.mcp_bundles によって決まり、モデルはデフォルトでセキュアです。省略は許可を意味しません。
mcp_bundlesのないエージェントは、mcp.serversが空でない場合でも no MCP サーバーに接続しません。- バンドル
[mcp_bundles.<alias>]は、付与するサーバーをそのmcp.serversのnameで指定し、オプションのexcludeリストを持ちます。エージェントの付与は、参照するすべてのバンドルにわたるサーバーの和集合から、それらのバンドルのいずれかで除外された名前を差し引いたものです(拒否が優先)。 - 未知のバンドルエイリアス、または設定済みのどのサーバーとも一致しないバンドルサーバー名は、何も許可しません。どちらもフェイルクローズとなり、設定検証によって非致命的な警告として報告されるため、タイプミスはエージェントのアクセスを拡大するのではなく狭めます。
[[mcp.servers]]
name = "filesystem"
command = "npx"
[mcp_bundles.files]
servers = ["filesystem"]
[agents.assistant]
mcp_bundles = ["files"] # `filesystem` に接続します。これを持たないエージェントは MCP サーバーを取得しません
- バンドルの変更は セッション再起動 で有効になります。リゾルバ(
Config::mcp_servers_for_agent)はセッション/エージェント構築時に実行されます。セッションが稼働中に[mcp_bundles.*]またはagents.<alias>.mcp_bundlesを編集しても、そのセッションの接続済みサーバーは変更されません。新しい付与を反映するには、影響を受けるセッションを終了して再起動してください。
これは 接続 の境界です(エージェントがそもそもどのサーバーと通信するか)。以下の allowed_tools / excluded_tools による制御は、許可されたサーバーが公開するツールに対して適用される、ツールごとの 機能 の境界です。
トランスポート
サーバーは3つのトランスポートのいずれか(transportフィールド)を介して接続されます:
| トランスポート | 使用タイミング | 必須フィールド |
|---|---|---|
stdio(デフォルト) | 起動するローカルプロセス(Node.jsまたはPython製のMCPサーバー) | command、オプションの args、env |
http | HTTP POST 経由で MCP を扱うリモートサーバー | url、オプションでheaders |
sse | HTTP + Server-Sent Events で MCP を通信するリモートサーバー | url、オプションでheaders |
env(stdio)と headers(http/sse)はシークレットとして保存されます。headers には通常、上流サーバー向けの Authorization: Bearer … トークンが含まれます。
ゲートウェイ、zerocode、または zeroclaw config set を使用してサーバーを追加します(例:zeroclaw config set mcp.servers.filesystem.command npx)。stdio サーバーには command とオプションの args/env が必要です。http/sse サーバーには url とオプションの headers が必要です。フィールドごとのコマンドは下記のフィールド表に記載されています。
並列検索
Parallel Search MCPは、Parallelアカウントや APIキーなしで公開Web検索とページ抽出を提供します。無料利用にはレート制限があります。そのStreamable HTTPエンドポイントは、ZeroClawのhttpトランスポートを使用します:
[[mcp.servers]]
name = "parallel"
transport = "http"
url = "https://search.parallel.ai/mcp"
headers = { "User-Agent" = "ZeroClaw" }
[mcp_bundles.web]
servers = ["parallel"]
[agents.assistant]
mcp_bundles = ["web"]
User-Agentは、ZeroClawプロジェクト全体を識別するためのものです。Parallelがこれにより統合の総利用状況を計測し、導入状況を把握してサポートに役立てられます。トランスポートが変わっても、HTTPリクエストにこのヘッダーを維持してください。既存のヘッダーは保持してください。すでにUser-Agentを設定している場合は、置き換えず、既存のプロジェクトおよびHTTPクライアントのトークンの後ろにZeroClawを追加してください。
付与したいエージェントのエイリアスを使って、既存のconfig.tomlにこれらのエントリをマージしてください。そのエージェントの既存のmcp_bundlesリストに"web"を追加してください。他の付与設定は置き換えないでください。webバンドルが既に存在する場合は、そのserversリストに"parallel"を追加してください。mcp.enabled = trueを維持し、付与を変更した後は影響を受けるセッションを再起動してください。
エージェントは、通常のツール認可および承認ポリシーに従って、parallel__web_search と parallel__web_fetch を使用できます。呼び出しでは、クエリ、要求された URL、および指定された objective またはコンテキストが Parallel に送信されます。アクセス権が付与されると、エージェントは作業中にこれらのツールを選択できます。アクセス権を取り消すには、そのエージェントに付与されたすべてのバンドルから "parallel" を削除するか、付与されたバンドルの exclude リストに "parallel" を追加してから、セッションを再起動します。
サーバーの編集
3つのサーフェスが同じ [[mcp.servers]] テーブルを編集します:
config.toml: 以下に記載されているキーを手動で編集します。完全なテーブルは保存時にラウンドトリップされます。- zerocode TUI (
/config->mcp.servers): フィールドごとの一級エディター。このセクションはサーバーごとに1行を表示し、各行にはサーバーのnameがラベルとして付きます。行に入るとtransport、command/url、headers、env、tool_timeout_secsを個別のフィールドとして編集できます。+ Addは指定した名前をシードとした新しいエントリーを作成し、エイリアスリストから削除するとそのエントリーが削除されます。nameフィールドはインラインで編集できません。これは、編集中に自然キーをリネームすると処理中の参照が無効になってしまうためです。リネームするには、当面はダッシュボードを使うかconfig.tomlを手動で編集してください。 - Web dashboard(Config -> MCP servers -> a server): TUI と同じフィールド単位の設定画面を、サーバーごとに 1 つのフォームとして提供します。
env と headers はキーと値のマップであるため、どちらの UI でもコンテナの行に続けて、エントリごとに 1 行ずつ表示されます(env.GITHUB_TOKEN、headers.Authorization、…):
- エントリを追加: zerocode で
[+ Add entry]と表示されているenv(またはheaders)行を選択し、Enter を押して名前を入力し、Enter を押してから値を入力(入力は非表示)して Enter を押します。ダッシュボードでは、マップの下にある名前/値の入力欄と Add entry を使用します。エントリは即座に保存され、保存時に暗号化されます。 - 値を変更: 他のシークレットと同様に、エントリ自身の行を編集してください。
- エントリを削除: エントリの行を削除します(zerocode の削除行キー、またはダッシュボードのゴミ箱ボタンを押してから保存)。
値は表示されず、コンテナ行にはエントリ名のみが表示されます。CLI からは zeroclaw config set mcp.servers.<name>.env.<KEY> でエントリを追加または置換でき、値を空にするとエントリが削除されます。マップのパスのみ(mcp.servers.<name>.env)は直接設定できません。同じエディタは、設定内のすべてのシークレットのキー/値マップに適用されます(例:プロバイダーの extra_headers)。
サーバーフィールド
サーバーごとのフィールド([[mcp.servers]])、スキーマから生成:
args
stdio トランスポートのコマンド引数。
任意のサーフェスに設定する場合:
ゲートウェイダッシュボード
/config/mcp.servers を開いて、mcp.servers.args フィールドを設定してください。
zerocode
Config ペインで mcp.servers.args フィールドを設定します。
zeroclaw config
zeroclaw config set mcp.servers.args <value>
環境変数
オーバーライドをエクスポートします(POSIXシェル用。~/.bashrc、~/.zshrc、.env、またはDockerfileに記述します)。<alias>を実際のエイリアスに置き換えてください。
export ZEROCLAW_mcp__servers__args=
command
stdio トランスポート用に起動する実行可能ファイル。
任意のサーフェスに設定する場合:
ゲートウェイダッシュボード
/config/mcp.servers を開いて、mcp.servers.command フィールドを設定してください。
zerocode
Configペインで、mcp.servers.commandフィールドを設定します。
zeroclaw config
zeroclaw config set mcp.servers.command <value>
環境変数
オーバーライドをエクスポートします(POSIXシェル用。~/.bashrc、~/.zshrc、.env、またはDockerfileに記述します)。<alias>を実際のエイリアスに置き換えてください。
export ZEROCLAW_mcp__servers__command=
env 🔑
stdio トランスポート用のオプション環境変数。
任意のサーフェスに設定する場合:
ゲートウェイダッシュボード
/config/mcp.servers を開き、mcp.servers.env フィールドを設定します。
zerocode
Config ペインで、mcp.servers.env フィールドを設定します。
zeroclaw config
zeroclaw config set mcp.servers.env.<KEY> # masked input, stored encrypted
zeroclaw config set mcp.servers.env.<KEY> # 空の値はエントリを削除します
環境変数
オーバーライドをエクスポートします(POSIXシェル用。~/.bashrc、~/.zshrc、.env、またはDockerfileに記述します)。<alias>を実際のエイリアスに置き換えてください。
export ZEROCLAW_mcp__servers__env=
headers 🔑
HTTP/SSE トランスポート用のオプションの HTTP ヘッダー。シークレットとして扱われます。値には通常、上流の MCP サーバー向けの Bearer トークンが含まれます。
任意のサーフェスに設定する場合:
ゲートウェイダッシュボード
/config/mcp.servers を開いて mcp.servers.headers フィールドを設定してください。
zerocode
Config ペインで、mcp.servers.headers フィールドを設定します。
zeroclaw config
zeroclaw config set mcp.servers.headers.<KEY> # masked input, stored encrypted
zeroclaw config set mcp.servers.headers.<KEY> # 空の値はエントリを削除します
環境変数
オーバーライドをエクスポートします(POSIXシェル用。~/.bashrc、~/.zshrc、.env、またはDockerfileに記述します)。<alias>を実際のエイリアスに置き換えてください。
export ZEROCLAW_mcp__servers__headers=
max_response_bytes
単一の HTTP/SSE JSON-RPC 応答本文で受け入れられる最大バイト数。本文の解析や埋め込まれたリソースのマテリアライズが行われる前に、読み取り時に適用されます。侵害された、または不正な動作をするサーバーによって、応答本文用の無制限のメモリ割り当てを強制されることはありません。これは エンコード済みワイヤー の上限であり、デコード後のマテリアライズ予算ではありません。None/0 は組み込みのデフォルト値である 16,078,168 バイトを使用します。この値は、完全な 10 MiB のデコード済み埋め込みリソース blob(base64 による展開分と JSON-RPC エンベロープの余裕を含む)が収まるように設定されています。別の 10 MiB の値は、解析後に適用されるデコード済み集合 blob の予算であり、このワイヤー上限ではありません。
任意のサーフェスに設定する場合:
ゲートウェイダッシュボード
/config/mcp.servers を開き、mcp.servers.max_response_bytes フィールドを設定します。
zerocode
Config ペインで、mcp.servers.max_response_bytes フィールドを設定します。
zeroclaw config
zeroclaw config set mcp.servers.max_response_bytes <value>
環境変数
オーバーライドをエクスポートします(POSIXシェル用。~/.bashrc、~/.zshrc、.env、またはDockerfileに記述します)。<alias>を実際のエイリアスに置き換えてください。
export ZEROCLAW_mcp__servers__max_response_bytes=
name
ツールのプレフィックスとして使用される表示名(<server>__<tool>)。create_map_key("mcp.servers", "<name>") を使用してエントリが作成される際、指定された map_key から埋め込まれます。#[serde(default)] を指定すると、名前が挿入される前にマクロが {} からデフォルト構築できるようになります。
任意のサーフェスに設定する場合:
ゲートウェイダッシュボード
/config/mcp.servers を開き、mcp.servers.name フィールドを設定してください。
zerocode
Config ペインで、mcp.servers.name フィールドを設定します。
zeroclaw config
zeroclaw config set mcp.servers.name <value>
環境変数
オーバーライドをエクスポートします(POSIXシェル用。~/.bashrc、~/.zshrc、.env、またはDockerfileに記述します)。<alias>を実際のエイリアスに置き換えてください。
export ZEROCLAW_mcp__servers__name=
pinned_resources
エージェント起動時に一度だけ読み込み、信頼されないサーバー由来のコンテキストとしてシステムプロンプトに注入するリソースURI。各URIはこのサーバー上で resources/read を介して読み込まれます。リソースをアドバタイズしていないサーバー、またはエージェントのツールポリシーが拒否するサーバー上のピンは、警告とともにスキップされます。実行ごとに一度だけ読み込まれます(更新されず、サブスクリプションもありません)。
任意のサーフェスに設定する場合:
ゲートウェイダッシュボード
/config/mcp.servers を開き、mcp.servers.pinned_resources フィールドを設定します。
zerocode
Config ペインで、mcp.servers.pinned_resources フィールドを設定します。
zeroclaw config
zeroclaw config set mcp.servers.pinned_resources <value>
環境変数
オーバーライドをエクスポートします(POSIXシェル用。~/.bashrc、~/.zshrc、.env、またはDockerfileに記述します)。<alias>を実際のエイリアスに置き換えてください。
export ZEROCLAW_mcp__servers__pinned_resources=
tls_ca_cert_path
このサーバーの HTTP/SSE トランスポートで、デフォルトのルート証明書に加えて信頼する PEM エンコード CA 証明書または証明書バンドルへの絶対パス。証明書とホスト名の検証は引き続き有効です。パスは 1 MiB 以下の通常ファイルを指定する必要があります。ファイルが存在しない、読み取り不能、空、サイズ超過、通常ファイルでない、または無効な場合は、デフォルトの信頼ストアにフォールバックせず、致命的な接続エラーになります。設定すると、構成された URL と通知された SSE メッセージエンドポイントは HTTPS を使用する必要があり、平文の URL とダウングレードリダイレクトは拒否されます。stdio では無視されます。
任意のサーフェスに設定する場合:
ゲートウェイダッシュボード
/config/mcp.servers を開き、mcp.servers.tls_ca_cert_path フィールドを設定します。
zerocode
Config ペインで、mcp.servers.tls_ca_cert_path フィールドを設定します。
zeroclaw config
zeroclaw config set mcp.servers.tls_ca_cert_path <value>
環境変数
オーバーライドをエクスポートします(POSIXシェル用。~/.bashrc、~/.zshrc、.env、またはDockerfileに記述します)。<alias>を実際のエイリアスに置き換えてください。
export ZEROCLAW_mcp__servers__tls_ca_cert_path=
tool_timeout_secs
呼び出しごとのオプションのタイムアウト(秒単位、検証で上限が設定されます)。
任意のサーフェスに設定する場合:
ゲートウェイダッシュボード
/config/mcp.servers を開いて mcp.servers.tool_timeout_secs フィールドを設定します。
zerocode
Config ペインで、mcp.servers.tool_timeout_secs フィールドを設定します。
zeroclaw config
zeroclaw config set mcp.servers.tool_timeout_secs <value>
環境変数
オーバーライドをエクスポートします(POSIXシェル用。~/.bashrc、~/.zshrc、.env、またはDockerfileに記述します)。<alias>を実際のエイリアスに置き換えてください。
export ZEROCLAW_mcp__servers__tool_timeout_secs=
transport
トランスポートタイプ(デフォルト: stdio)。
任意のサーフェスに設定する場合:
ゲートウェイダッシュボード
/config/mcp.servers を開いて、mcp.servers.transport フィールドを設定してください。
zerocode
Config ペインで、mcp.servers.transport フィールドを設定します。
zeroclaw config
zeroclaw config set mcp.servers.transport <value>
環境変数
オーバーライドをエクスポートします(POSIXシェル用。~/.bashrc、~/.zshrc、.env、またはDockerfileに記述します)。<alias>を実際のエイリアスに置き換えてください。
export ZEROCLAW_mcp__servers__transport=
url
HTTP/SSE トランスポートの URL。
任意のサーフェスに設定する場合:
ゲートウェイダッシュボード
/config/mcp.servers を開いて mcp.servers.url フィールドを設定してください。
zerocode
Config ペインで、mcp.servers.url フィールドを設定します。
zeroclaw config
zeroclaw config set mcp.servers.url <value>
環境変数
オーバーライドをエクスポートします(POSIXシェル用。~/.bashrc、~/.zshrc、.env、またはDockerfileに記述します)。<alias>を実際のエイリアスに置き換えてください。
export ZEROCLAW_mcp__servers__url=
tool_timeout_secs は呼び出しごとに設定できるオプションのタイムアウトです。0 より大きい値である必要があり、最大 600 秒に制限されます。
カスタム CA の信頼
プライベート CA によって発行された証明書を使用する HTTP または SSE サーバーの場合、PEM エンコードされた 1 つ以上の CA 証明書を含む絶対パスに tls_ca_cert_path を設定します。設定した証明書はデフォルトの信頼ストアに追加されます。証明書チェーン、有効期限、およびホスト名の検証は引き続き有効です。
相対パス、存在しない、読み取り不能、空、サイズ超過、通常ファイルでない、または無効な CA ファイルは、そのサーバーに対する致命的な接続エラーになります。パスは、サイズが 1 MiB 以下の通常ファイルを解決先として指さなければなりません。シンボリックリンクは追従されるため、証明書のローテーションや、シンボリックリンクを介してバンドルを公開するマウント済みシークレットのレイアウトも、設定どおりに機能します。解決先のファイルは開いた後に検証され、ディレクトリ、デバイス、または FIFO に解決されるシンボリックリンクは拒否されます。ZeroClaw は、このフィールドが設定されている場合、検証を無効にしたり、暗黙的にフォールバックしたりすることはありません。設定されたサーバー URL と、SSE サーバーが通知するメッセージエンドポイントは、https:// を使用しなければなりません。平文 URL とダウングレードリダイレクトは、リクエストヘッダーまたはコンテンツが送信される前に拒否されます。この値は MCP セッションの開始時に適用されます。変更後は、影響を受けるセッションを再起動してください。デフォルトのトラストストアに戻すには、このフィールドを削除してセッションを再起動します。Stdio サーバーでは無視されます。
トップレベルフィールド
deferred_loading
MCP ツールスキーマを LLM コンテキストウィンドウに事前に含めるのではなく、tool_search を介してオンデマンドで読み込みます。有効にすると、システムプロンプトにはツール名のみが一覧表示されます。LLM は遅延ツールを呼び出す前に、tool_search を呼び出して完全なスキーマを取得する必要があります。
任意のサーフェスに設定する場合:
ゲートウェイダッシュボード
/config/mcp を開いて mcp.deferred_loading フィールドを設定します。
zerocode
Config ペインで、mcp.deferred_loading フィールドを設定します。
zeroclaw config
zeroclaw config set mcp.deferred_loading <value>
環境変数
オーバーライドをエクスポートします(POSIXシェル用。~/.bashrc、~/.zshrc、.env、またはDockerfileに記述します)。<alias>を実際のエイリアスに置き換えてください。
export ZEROCLAW_mcp__deferred_loading=
servers
設定済みのMCPサーバー。#[nested]アノテーションにより、マクロはこれをmap_key_sections()内のListセクションとして公開するため、ダッシュボードの+ Add MCP server機能とPOST /api/config/map-key?path=mcp.servers&key=<name>エンドポイントがこれを自動的に取得します(ゲートウェイ側でのハンドテーブルは不要)。#[natural_key = "name"]は、Vecを要素ごとのプロパティルーティングにオプトインします(route_vec_pathおよびConfigurable派生の#[natural_key]アームを参照)。これにより、set_prop("mcp.servers.<name>.url", ...)およびget_prop("mcp.servers.<name>.transport")は、一致する要素自身のset_prop/get_propに解決され、mcp.serversセクションはダッシュボード/TUIの観点からHashMap<String, McpServerConfig>のように振る舞います。name自体はset_propを介して読み取り専用になります。リネームはrename_map_keyを通して行われ、これがnameフィールドをその場で変更します。
任意のサーフェスに設定する場合:
ゲートウェイダッシュボード
/config/mcp を開いて mcp.servers フィールドを設定してください。
zerocode
Config ペインで、mcp.servers フィールドを設定します。
zeroclaw config
zeroclaw config set mcp.servers <value>
環境変数
オーバーライドをエクスポートします(POSIXシェル用。~/.bashrc、~/.zshrc、.env、またはDockerfileに記述します)。<alias>を実際のエイリアスに置き換えてください。
export ZEROCLAW_mcp__servers=
遅延読み込み
mcp.deferred_loading はデフォルトで false のため、設定された MCP ツールはモデルコンテキストに即座に含まれます。true に設定すると、MCP ツールの名前のみがシステムプロンプトに配置されます。LLM は組み込みの tool_search ツールを呼び出して、ツールを実行する前にそのツールの完全なスキーマを取得します。これにより、サーバーが多数のツールを公開している場合でも、初期のコンテキストウィンドウを小さく保てます。
セキュリティと承認
MCPツールの呼び出しは、他のすべてのツールと同じ承認ゲートを通過し、エージェントのリスクプロファイル(risk_profiles.<alias>)によって制御されます。tool_searchの探索ステップは自動承認されるため、遅延MCPロードを非対話型セッションでも機能させることができますが、MCPサーバーから検出されたツールは依然として通常の承認ポリシーに従います。
- 自律性
level = fullでは、対象外のツール呼び出しは確認を求めません(MCP ツールを含む)。always_askに記載された名前(または"*")は、Full でも引き続き確認を求めます。 - それ以外の場合、MCPツールの呼び出しは、そのプレフィックス付きの名前(
<server>__<tool>)がプロファイルのauto_approveリストに含まれていない限り、承認を求めます。auto_approve = ["*"]はすべてを承認します。auto_approve = ["filesystem__read_file"]のような完全一致のエントリは、そのツールだけを承認します。 always_askは逆の働きをします。そこに名前(または"*")が指定されたものは、必ず確認を求めます。これはauto_approveや完全自律モードよりも優先されます。
認可: allowed_tools / excluded_tools
承認ゲートは、ツール呼び出しに人間のゴーサインが必要な_とき_を制御します。認可ゲートは、エージェントがそもそもツールを呼び出せる_かどうか_を制御します。この2つは独立しています。
3つのMCPツール制御をそれぞれ独立した軸で管理してください:
| コントロール | スコープ | それを使用する用途 |
|---|---|---|
tool_filter_groups | プロンプト/コンテキストの露出 | ターンごとにモデルから見えるMCPツールスキーマを決定します。 |
auto_approve / always_ask | 承認ポリシー | 選択された MCP ツール呼び出しにオペレーターの承認が必要かどうかを判断します。 |
allowed_tools / excluded_tools | ケーパビリティポリシー | リスクプロファイルが使用できる、プレフィックス付きツール名を決定します。 |
ランタイムで検出された MCP ツールの場合、ケーパビリティ契約には MCP 固有の例外があります:
- リスクプロファイルの
allowed_toolsが省略されているか空の場合、認可の制約は適用されません。検出されたすべてのツール(MCP ツールまたは組み込みツール)に到達できます。空のリストは従来の無制限状態であり、全拒否ではありません。明示的な全拒否ゲートにするには、同じ階層のdeny_all_tools = trueを設定してください。これは MCP ツールも拒否します(全拒否の下では__による自動許可はありません)。また、空でないallowed_toolsと併用することはできません。 allowed_toolsが空でない場合、名前に__を含む任意の MCP ツール(<server>__<tool>規約)は、個別にリストされていなくても有効な許可リストに自動的に追加されます。非 MCP の組み込みは引き続き正確なエントリが必要です。excluded_toolsは常に減算として機能し、自動的に許可された MCP セットからも除外します。filesystemサーバーの残りのツールにはアクセスできるようにしたまま、filesystem__write_fileのような単一の MCP ツールをブロックするには、それをexcluded_toolsに指定してください。
この理由は次のとおりです。この例外が導入される前は、組み込みの操作範囲を制限するために allowed_tools リストを固定していたすべてのエージェントが、オペレーターが明示的に設定したものも含め、あらゆる MCP ツールを暗黙的に失っていました。その代償として、許可リストで固定されたプロファイルにおいて破壊的な MCP 機能をブロックするための主要な手段は、拒否リストになりました。
この変更前の厳密なパターンが必要な場合(明示的にリストした MCP ツールのみを許可し、__ による自動許可がない場合)は、ブロックする必要のある破壊的な兄弟ごとに、明示的な allowed_tools エントリと excluded_tools エントリを組み合わせてください:
[risk_profiles.assistant]
allowed_tools = [
"file_read",
"filesystem__read_file",
]
# 上記の `__` 例外により自動的に許可されてしまう破壊的な兄弟ツールをブロックする。
excluded_tools = [
"filesystem__write_file",
]
auto_approve = [
"filesystem__read_file",
]
MCP の __ 自動許可の例外は、リスクプロファイルの allowed_tools のみに適用されます。cron ジョブの allowed_tools や、ランタイムに明示的なリストを渡すその他の絞り込まれた呼び出しなど、呼び出し元が指定した実行ごとの許可リストは、依然として厳密な明示的リストの積集合として扱われ、その上に __ の自動許可は行われません。自身を allowed_tools = ["cron_add"] に絞り込む cron ジョブは、エージェントのリスクプロファイルであれば __ 規約によって自動許可されるような場合であっても、filesystem__write_file をモデルに提供しません。実行ごとの絞り込みは、構成されている MCP サーバーの数に関係なく、信頼できる機能境界であり続けます。
auto_approve 単独ではモデルからツールを隠すことはできません。モデルがそのツールを選択した後に、承認の確認に応答するだけです。プロンプトのノイズを減らすには tool_filter_groups を、機能の境界を強制するには allowed_tools / excluded_tools を使用してください。
プロファイルごとのフィールド全体については 自律性レベル を、すべての MCP フィールドとデフォルト値については 設定リファレンス を参照してください。
MCP リソースとプロンプト
MCP の ツール に加えて、ZeroClaw は接続されたサーバーから MCP の リソース と プロンプト を公開します。
ツール
2 つの組み込みツールが利用可能です(エージェントのツールアクセスポリシーに従います):
mcp_resources:action: "list"(オプションでserver、cursor)はリソースを一覧表示します。action: "read"にuri(<server>__<uri>のプレフィックス付き)を指定すると内容を返します。mcp_prompts:action: "list"はプロンプトを一覧表示します。action: "get"にname(プレフィックス付き<server>__<name>)とオプションのargumentsを指定すると、レンダリングされたプロンプトメッセージを返します。
リソース/プロンプト機能を通知しないサーバーはスキップされ、それらに対する呼び出しは明確な「サポートされていません」というエラーを返します。
リソースをコンテキストにピン留めする
各 MCP サーバーエントリは、オプションの pinned_resources フィールドを受け付けます。これは起動時に一度読み込み、システムプロンプトに注入するリソース URI のリストです。サーバーを定義するのと同じ設定方法(ゲートウェイ、zerocode、または zeroclaw config set。MCP の設定 に示すとおり)で設定し、エージェントが常に手元に置いておきたいリソースを指定します。フィールドのデフォルトは空なので、このフィールドがないサーバーには影響しません。
ピン留めされたコンテンツは実行ごとに一度だけ読み込まれ(ライブ更新なし)、trust="untrusted-external" としてラベル付けされるため、モデルはこれを指示ではなくデータとして扱います。
ツール結果に埋め込まれたリソース BLOB
MCPのtools/call結果に、type: "resource"を持ち、ネストされたblob(base64)を含むコンテンツ項目が含まれる場合、ZeroClawはそのbase64をモデルのコンテキストにダンプしません。代わりに、セッションワークスペースのuploads/ディレクトリ配下にバイト列を実体化し(ACPの受信resource.blobと同じ共有ヘルパーおよび10 MBの上限を使用)、モデルに提示するツール出力からblobを削除して、materialized参照に置き換えます。非画像MIMEの場合は[Document: …]マーカー、画像MIMEの場合は保存先のプレーンなパスとなります。画像はテキスト中にマーカーとして書き込まれるのではなく、ツール結果の添付として宣言されます。これはツール名ではなくコンテンツの形状によってゲートされます。実体化しても、ファイルはACPクライアントへ自動的に配信されません。送信配信が必要な場合は、エージェントが引き続きdeliver_fileを呼び出します。詳細はACP session/prompt blob受信を参照してください。
MCP のその他の2種類のバイナリコンテンツ形式は、次のように対応付けられます。type: "image" のアイテム(base64 の data と mimeType)は同じ方法で実体化され、そのコンテンツアイテムは保存されたプレーンなパスを含むテキストアイテムに書き換えられます。画像はツール結果の添付ファイルとして宣言され、マルチモーダルパイプラインがこれをプロバイダーネイティブの画像パーツに変換します。アイテムの annotations/_meta およびその他の非バイナリフィールドは保持されます。実体化されるのは、ビジョンパイプラインが受け付けるラスター形式のみです:PNG、JPEG、WebP、GIF。ディスク上の拡張子は、宣言された mimeType がこれらの形式のいずれかを示している場合にはそこから導出されます(大文字小文字を区別しない正規化された本体のみを用い、パラメータは除去されます)。それ以外の場合は、デコードされたバイト列のシグネチャを判定して導出されます。ローダーはパスの拡張子をマジックバイトより優先するため、拡張子はバイト列と一致している必要があります。宣言された型も認識可能な対応シグネチャのいずれにも該当しない画像は、[attachment unavailable: …] にフォールバックし、書き込まれません。type: "audio" のアイテムは、この経路では実体化されません。現時点では、音声パスをコンテンツパーツに解決するプロバイダーが存在しないためです。そのため、その data は実体化しない [audio attachment: <mime>] プレースホルダーに置き換えられて除去されます。いかなる場合も、生の base64 がモデルに渡されることはありません。data が空の場合や文字列でない場合など、不正な image/audio アイテムについても同様です。
信頼できないサーバーから結果が返されるため、ペイロードのデコード、ハッシュ計算、書き込みの前に、呼び出しごとに2つの上限を適用します。tools/call の結果ごとに、実体化可能なバイナリ項目(リソースBLOBと有効な画像項目)は最大 64 個までです。また、すべての項目を合わせた推定デコード後サイズは最大 10 MiB までです。いずれかの上限を超えた結果では、そのような項目はすべて [attachment unavailable: …] マーカーに縮退され、ディスクへは何も書き込まれません。そのため、空または極めて小さい項目を多数含む配列によって項目ごとの処理を強制することはできません。個々のペイロードは、引き続き同じ 10 MB のファイルごとの上限に従います。
これらの デコード後 の予算とは別に、各 HTTP/SSE MCP サーバーにはトランスポートレベルのレスポンスボディ上限 max_response_bytes もあり、ボディが解析される前の生の エンコード済み ワイヤーバイトに対して適用されるため、サーバーが無制限の読み取りを強制できないようになっています。これは上記のデコード後の 10 MiB 制限ではありません。デフォルトは 16,078,168 バイト で、10 MiB のデコード後の合計サイズを base64 で拡張した値に JSON-RPC エンベロープの余裕を加えたものです。そのため、上限近くの有効な blob もマテリアライズまで到達できます。サーバーで max_response_bytes を設定すると、この値を上書きできます。0 にするか未設定のままにすると、そのデフォルト値が使用されます。
セキュリティ
リソースおよびプロンプトのコンテンツは、設定された MCP サーバーに由来し、信頼できないものとして扱われます。コンテキストに入る前に、来歴のラッピング、シークレットのスクラブ、長さの制限が行われます。mcp_resources / mcp_prompts および特定のサーバーへのアクセスは、エージェントのツールアクセスポリシー(リスクプロファイル)によって管理され、サブエージェントに委任する際には適切に絞り込まれます。
ビルドリモートエージェント (gbr)
Build Remote Agent は、ペアリング用のデバイスです。スマートフォンアプリから、この ZeroClaw ホストを観察(スペクテイト)でき、入力を注入することも可能です。これは無料の MIT ライセンスの gbr-agent を通じて行われます。プロトコルは gbr/1 です。Linespotting AB による独立した製品です。xAI および SpaceX とは提携していません。
gbr-agent をホスト上で実行してください。サンドボックスにはコピーしないでください。接続先はループバックの Bot API http://127.0.0.1:8788 または stdio の gbr-mcp のみにしてください。スマートフォンは観戦者であり、拒否権を持ちます。メールボックスキーを config.toml に平文で貼り付けてはいけません。ZeroClaw のチャットチャネルは gbr/1 ではありません。
ループバックが制限するのはネットワークへの公開範囲であり、プロセスの認証ではありません。そのため、GBR_BOT_REQUIRE_KEY=1 を設定し、ZeroClaw のシークレット管理された MCP env 経由で gbr-mcp に一致するメールボックスキーを渡さない限り、同じマシン上の別プロセスが :8788 を呼び出せてしまいます(config.toml に平文のメールボックスキーを書くのではなく)。
gbr-mcp は、ツール呼び出しの引数を info レベルで ~/.gbr/logs/gbr-mcp-YYYY-MM-DD.jsonl に記録します。デフォルトの保持期間は 7 日です。シークレットの秘匿化では、通常のインジェクションテキストは除去されません。安全なベースラインとして、ZeroCode Config の gbr サーバーの env に GBR_MCP_LOG_BODIES=0 を設定してください。ZeroClaw の履歴以外に永続化される領域を増やしたくない場合は、それらのログを削除するか、記録を無効にしてください。
mcp_bundles を省略しても許可とはみなされません: サーバーを定義し、かつ許可してください。
Node.js 20+ (mcp/gbr-mcp の engines.node >=20) が必要です。GitHub Release v0.6.2 を固定してください(まずインストーラーのチェックサムを確認し、次にバイナリを確認)。ライブサイトの curl | bash は貼り付けないでください。詳細は PINNED-INSTALL.md を参照してください。
Terminal 1(このプロセスは実行したままにしてください):
gbr-agent version # v0.6.2 が必要
export GBR_BOT_REQUIRE_KEY=1
gbr-agent pair
gbr-agent run
ペアリング後、電話機(設定 -> Bot API)またはホスト側のペアリングファイル ~/.gbr/device.json(mailbox_key)からmailbox keyを取得します。固定版のgbr-mcpクライアントは、オプションまたはプロセス環境変数のGBR_MAILBOX_KEYからキーを読み取り、そのペアリングファイルは読み込みません。GBR_BOT_REQUIRE_KEY=1が設定されている場合、キーを指定せずに新しいシェルを起動すると、未承認のBot APIリクエストが発生します。
Terminal 2 (MCP のインストールと診断。gbr-agent run が既に起動している必要があります)。値がシェル履歴に保存されないよう、サイレントプロンプトにキーを貼り付けてください:
git clone --branch v0.6.2 --depth 1 https://github.com/LinespottingOrg/GrokBuildRemote-Agents.git
cd GrokBuildRemote-Agents/mcp/gbr-mcp
node -v # v20+
npm install --ignore-scripts
IFS= read -rs GBR_MAILBOX_KEY # キーを貼り付けて Enter を押してください。エコーや履歴には残りません
export GBR_MAILBOX_KEY
export GBR_MCP_LOG_BODIES=0
node bin/gbr-mcp.js --diagnose
The source tag is pinned, but this release has no npm lockfile, so dependency versions are resolved at install time. --ignore-scripts prevents dependency lifecycle scripts from running during installation; it does not make the downloaded dependencies trusted or prevent their code from running when the MCP server starts.
上記のexport行は、この診断用シェルにのみ適用されます。これらはZeroClawが起動するgbrサーバーを設定するものではありません。サーバーを定義し、権限を付与してください:
[[mcp.servers]]
name = "gbr"
command = "node"
args = ["/absolute/path/to/GrokBuildRemote-Agents/mcp/gbr-mcp/bin/gbr-mcp.js"]
[mcp_bundles.gbr]
servers = ["gbr"]
[agents.assistant]
mcp_bundles = ["gbr"]
続いて、そのサーバーの env に GBR_MAILBOX_KEY と GBR_MCP_LOG_BODIES=0 の両方を、ZeroCode Config(/config -> mcp.servers -> gbr -> env)から設定します。メールボックスキーはシークレット項目です。マスク表示のプロンプト(暗号化されたシークレットストア)を使うか、1Password の op://vault/item/field 参照を使ってください。生のキーを config.toml に記述しないでください。CLI での同等の操作は次のとおりです:
zeroclaw config set mcp.servers.gbr.env.GBR_MAILBOX_KEY
zeroclaw config set mcp.servers.gbr.env.GBR_MCP_LOG_BODIES 0
All MCP環境変数の値はZeroClawのマスクされたシークレットプロンプトを使用するため、末尾の0は値として消費されません。そのプロンプトで0を入力してください。
バンドルやenvを変更した後は、影響を受けたセッションを再起動してください。GBR_BOT_REQUIRE_KEY=1を指定してgbr-agent runを実行した後のMCPなしHTTP:
IFS= read -rs GBR_MAILBOX_KEY
export GBR_MAILBOX_KEY
curl -sS -H X-GBR-Key: $GBR_MAILBOX_KEY http://127.0.0.1:8788/health
curl -sS -H X-GBR-Key: $GBR_MAILBOX_KEY http://127.0.0.1:8788/v1/sessions
ドキュメント: BOT-API.md