MCP 経由で AdCP をテスト
testing.adcontextprotocol.org のリファレンス実装で AdCP タスクをテストできます。このエンドポイントはすべての AdCP タスクを MCP ツールとして実装しており、開発や統合テストに有用です。ツールコールパターン
基本のツール呼び出し
フィルター付きツール呼び出し
アプリケーションレベルのコンテキスト付き呼び出し
MCP レスポンス形式
AdCP 1.6.0 の新機能: すべてのレスポンスに統一ステータスフィールドが含まれます。 MCP レスポンスは フラット構造 で、タスク固有フィールドがプロトコルフィールドと同じトップレベルに配置されます:MCP 固有フィールド
- context_id: 手動で管理するセッション ID
- context: 呼び出し元が提供し、エージェントがそのまま返す不透明メタデータ
- status: 一貫性のため A2A と同じ値
- タスク固有フィールド(例:
products,media_buy_id,creatives)はdataにラップされずトップレベルに配置
利用可能なツール
すべての AdCP タスクは MCP ツールとして利用できます:プロトコルツール
Media Buy ツール
タスク管理ツール
Signals ツール
コンテキスト管理(MCP 固有)
重要: MCP はコンテキストを手動管理する必要があります。会話状態を保つにはcontext_id を渡してください。
コンテキストセッションパターン
使用例
基本的なコンテキスト付きセッション
Webhook を用いた非同期処理
MCP はプッシュ通知を定義していません。AdCP は Webhook 設定(pushNotificationConfig)とペイロード形式(mcp-webhook-payload.json)を規定することでこのギャップを埋めます。Webhook を設定すると、サーバーはポーリング不要でタスク更新を URL に POST します。
Webhook Envelope: mcp-webhook-payload.json
ベストプラクティス: URL ベースのルーティング
推奨: ルーティング情報(task_type, operation_id)はペイロードではなく Webhook URL に含める。
理由
- ✅ 業界標準パターン - 多くの API で採用
- ✅ 関心の分離 - ルーティングは URL、データはペイロード
- ✅ プロトコル非依存 - MCP/A2A/REST などで共通に利用可能
- ✅ ハンドラー簡素化 - ペイロード解析ではなく URL でルーティング
task_type と operation_id を URL に載せる推奨パターン(例: /webhooks/adcp/create_media_buy/op_456)に従っています。後方互換のためペイロード内のフィールドもスキーマ上はサポートしていますが非推奨です。
result フィールドには AdCP のデータペイロードが入ります。completed/failed ではタスクレスポンス全体(例: create-media-buy-response.json)、それ以外のステータスではステータス別スキーマ(例: create-media-buy-async-response-working.json)を使用します。
MCP Webhook のエンベロープフィールド
mcp-webhook-payload.json には以下が含まれます:
必須フィールド:
task_id— 相関用の一意なタスク IDstatus— 現在のタスクステータス(completed, failed, working, input-required など)timestamp— Webhook 生成時の ISO 8601 タイムスタンプ
domain— AdCP ドメイン(“media-buy” または “signals”)context_id— 会話/セッション IDmessage— ステータス変更に関する人間向けコンテキスト
task_type— タスク名(例: “create_media_buy”, “sync_creatives”)- ⚠️ 非推奨: URL ベースのルーティング を参照operation_id— 同一オペレーションの更新を関連付ける - ⚠️ 非推奨: 同上
result— タスク固有の AdCP ペイロード(下記のデータスキーマ検証を参照)
Webhook が送信される条件
Webhook は次の すべて を満たす場合に送信されます:- タスクが非同期をサポート(例:
create_media_buy,sync_creatives,get_products) - リクエストに
pushNotificationConfigが指定 されている - タスクが非同期実行 — 初回レスポンスが
workingまたはsubmitted
completed, failed, rejected)なら、結果が手元にあるため Webhook は送信されません。
Webhook を送るステータス変化:
working→ 進捗更新(処理中)input-required→ 人による入力が必要completed→ 最終結果failed→ エラー詳細
データスキーマの検証
MCP Webhook のresult フィールドはステータス別スキーマを使用します:
| Status | Schema | Contents |
|---|---|---|
completed | [task]-response.json | 成功ブランチの完全なタスクレスポンス |
failed | [task]-response.json | エラーブランチの完全なタスクレスポンス |
working | [task]-async-response-working.json | 進捗情報(percentage, step) |
input-required | [task]-async-response-input-required.json | 必要事項、承認情報 |
submitted | [task]-async-response-submitted.json | 受領通知(通常は最小限) |
async-response-data.json
Webhook Handler Example
タスク管理とポーリング
コンテキスト期限切れの扱い
context_id を明示的に扱う必要があります。
非同期処理の扱い
タスクがworking または submitted を返す場合、更新を受け取る方法は 2 つあります:
| Approach | Best For | Trade-offs |
|---|---|---|
| Polling | シンプルな統合、短時間タスク | 実装が簡単だが長時間待機に非効率 |
| Webhooks | 本番システム、長時間タスク | 効率的だが公開エンドポイントが必要 |
オプション 1: ポーリング
tasks/get を使って定期的にステータスを確認します:
オプション 2: Webhook
Webhook URL を設定すると、サーバーが直接更新を POST します。ポーリング不要なので長時間タスクで効率的です。ステータス別の扱い
統合の例
MCP 固有の考慮点
ツールディスカバリー
MCP サーバーカードによる AdCP 拡張
推奨: 実行時の機能発見には
get_adcp_capabilities を使用してください。サーバーカード拡張はツールカタログやレジストリ向けの静的メタデータを提供します。/.well-known/mcp.json(または /.well-known/server.json)のサーバーカードで AdCP 対応を宣言できます。AdCP 固有メタデータは adcontextprotocol.org 名前空間の _meta フィールドに記載します。
- テストコールなしで AdCP の対応状況を把握できる
- 実装しているプロトコルドメイン(media_buy, creative, signals)を宣言できる
- サポートする拡張を宣言できる(Context & Sessions 参照)
- バージョンに基づく互換性チェックが可能
_meta フィールドは MCP server.json spec に従い逆 DNS の名前空間を使用します。/.well-known/mcp.json と /.well-known/server.json の両方をサポートしてください。
パラメータバリデーション
エラーハンドリング
ベストプラクティス
- セッションラッパーを利用 してコンテキストを自動管理
- レスポンス処理前に status フィールド を確認
- コンテキスト期限切れ はリトライで丁寧に処理
- ステータス処理パターンは Core Concepts を参照
- 利用可能なら MCP ツールスキーマで パラメータ検証
次のステップ
- Core Concepts: ステータス処理とワークフローは Task Lifecycle を参照
- Task Reference: Media Buy Tasks と Signals
- Protocol Comparison: A2A integration と比較
- Examples: 完全なワークフロー例は Core Concepts に掲載