層の分離
クライアントは、どの抽出パスを使うかを決める前に
isError を確認しなければなりません(MUST)。isError: true のレスポンスは、非エラーデータを持つ structuredContent を含んでいても、成功レスポンスとして処理してはなりません(MUST NOT)。
抽出アルゴリズム
クライアントは、この順序で MCP ツール結果から AdCP データを抽出しなければなりません(MUST):- ガード: エラーレスポンスを拒否。
isErrorが truthy なら null を返す。エラー抽出は別のパス。 structuredContent— 存在し非配列オブジェクトなら、それを返す。唯一のキーがadcp_errorなら null を返す(これはisErrorフラグを欠くエラーレスポンス)。- Text フォールバック —
content[]アイテムを配列順で反復。type === 'text'の各アイテムについて、1MB サイズ制限を強制し、次にJSON.parseを試みる。結果が非配列オブジェクトなら、それを返す。パースに失敗する、非オブジェクトとしてパースされる、またはadcp_errorキーのみを含むアイテムはスキップ。 - 構造化データが見つからない — null を返す。レスポンスは機械可読な AdCP データのないプレーンテキスト。
抽出パス
structuredContent(推奨)
MCP 2025-03-26 は型付きツール結果のためstructuredContent を導入しました。AdCP サーバーは完全なレスポンスペイロードをここに返します:
structuredContent オブジェクトが AdCP レスポンスそのものです — タスク固有のフィールド(products、media_buy_id、status など)はネストではなくトップレベルにあります。
Text フォールバック
古い MCP サーバー(2025-03-26 以前)はレスポンスをcontent[].text に JSON としてシリアライズします:
structuredContent とテキスト JSON の両方が存在するとき、structuredContent が優先します。
エラー抽出との関係
成功とエラーの抽出は補完的です:セキュリティ考慮事項
セラー制御データ
structuredContent と content[].text のすべてのデータはセラー制御です。Transport Error Mapping の同じプロンプトインジェクションとデータ境界要件が適用されます。
サイズ制限
クライアントは処理前に最大ペイロードサイズを強制すべきです(SHOULD)。推奨制限はstructuredContent に 1MB。text フォールバックについては、過大なペイロードからのメモリ枯渇を防ぐため JSON.parse の前に制限を適用します。
プロトタイプ汚染
クライアントは、キーをフィルターせずに抽出されたレスポンスオブジェクトをObject.assign やスプレッド経由でアプリケーション状態にマージしてはなりません(MUST NOT)。__proto__ や constructor のようなセラー制御のキーはプロトタイプ汚染をトリガーできます。マージ前に期待されるタスクレスポンススキーマに対して検証してください。
型混乱
クライアントは成功抽出の前にisError を確認しなければなりません(MUST)。このガードなしでは、クライアントはエラーレスポンスを成功データとして処理し、誤ったビジネスロジック(例: RATE_LIMITED エラーをプロダクトデータとして扱う)につながる可能性があります。
クライアントライブラリ要件
この仕様を実装するクライアントライブラリは次をしなければなりません(MUST):- 抽出前に
isErrorを確認。 エラーレスポンスに null を返す。 structuredContentを優先。structuredContentが欠如するときのみテキストパースにフォールバック。- パースされたテキストを検証。
JSON.parseから非配列オブジェクトのみを受け入れる。配列、文字列、数値、boolean、null を拒否。 adcp_errorのみのstructuredContentを扱う。structuredContentがadcp_errorキーのみを含むとき、null を返す — これはisErrorフラグを欠くかもしれないエラーレスポンス。
テストベクター
機械可読なテストベクターは/static/test-vectors/mcp-response-extraction.json で利用可能です。各ベクターは次を含みます:
path: 抽出パス(structuredContentまたはtext_fallback)response: MCP ツール結果エンベロープexpected_data: 抽出されるべき AdCP データ(またはnull)
関連項目
- Transport Error Mapping — MCP と A2A からのエラー抽出
- A2A Response Extraction — A2A の同等仕様
- MCP Guide — MCP トランスポート統合