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 が必要です。フィールドごとのコマンドは下記のフィールド表に記載されています。
サーバーの編集
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 ダッシュボード: 現在は
mcp.serversを JSON 配列エディターでレンダリングしています。TUI が使用しているのと同じフィールド単位のインターフェースへの移行が予定されていますが、それまではダッシュボードは使用可能ながらもより大まかなエディターのままです。
サーバーフィールド
サーバーごとのフィールド([[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 # マスクされた入力、暗号化して保存
環境変数
オーバーライドをエクスポートします(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 # マスクされた入力、暗号化して保存
環境変数
オーバーライドをエクスポートします(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 ツールを含む)。 - それ以外の場合、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 または組み込み)に到達可能です。TOML 設定は省略されたフィールドとallowed_tools = []を区別しません。どちらもリスクプロファイルレベルで同じ「認可の制約なし」状態にデシリアライズされます。明示的なすべて拒否ゲートが必要な場合は、呼び出し元が実行ごとに提供するallowed_tools(cron ジョブやその他のナロワーがそのリストを直接渡します)で行うか、ブロックしたい特定のツールをカバーするexcluded_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 結果に、ネストされた blob(base64)を含む type: "resource" 形式のコンテンツ項目が含まれている場合、ZeroClaw はその base64 をモデルコンテキストにダンプしません。代わりに、セッションワークスペースの uploads/ ディレクトリ下にバイト列を具体化します(ACP の受信 resource.blob と同じ共有ヘルパーおよび 10 MB の上限を使用)。そして、モデル向けのツール出力を、blob を含まないプロヴェナンステキストと [Document: …] または [IMAGE:…] マーカーに置き換えます。これはツール名ではなく、コンテンツの形状によって制御されます。具体化しても ACP クライアントにファイルが自動配信されるわけではありません。外部配信が必要な場合は、エージェントが引き続き deliver_file を呼び出します。ACP の session/prompt blob 取り込み を参照してください。
結果は信頼できないサーバーから返されるため、いずれかの blob がデコード、ハッシュ化、または書き込まれる前に、呼び出しごとに 2 つの上限が適用されます。tools/call の結果に含められるリソース blob は最大 64 個、また、それらすべてを合わせた推定デコード済みサイズは最大 10 MiB です。いずれかの上限を超える結果では、すべてのリソース blob が [attachment unavailable: …] マーカーに置き換えられ、ディスクには何も書き込まれません。そのため、空または極小の blob が多数含まれる配列によって、アイテムごとの処理を強制されることはありません。個々の blob についても、ファイルごとに同じ 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 および特定のサーバーへのアクセスは、エージェントのツールアクセスポリシー(リスクプロファイル)によって管理され、サブエージェントに委任する際には適切に絞り込まれます。