> ## Documentation Index
> Fetch the complete documentation index at: https://adcp-docs-ja.pier1.co.jp/llms.txt
> Use this file to discover all available pages before exploring further.

# A2B: 最初のエージェント呼び出しのテスト

> モジュール A2B: ハンズオンラボ — MCP セッションを初期化し、get_products を呼び、メディアバイを配置し、クリエイティブを添付し、コピペ可能な curl の例で実際のレスポンス形状を処理します。

# A2B: 最初のエージェント呼び出しのテスト

<Info>
  **無料モジュール** — アカウント不要。Addie と約 20 分。前提条件: [A2](/docs/learning/foundations/a2-protocol-architecture)。
</Info>

## 学習目標

* AdCP テストエージェントに対してステートフルな MCP セッションを初期化する
* 自然言語ブリーフで `get_products` を呼び、製品レスポンスを読む
* `create_media_buy` でメディアバイを配置し、3 つのレスポンス形状すべてを処理する
* `sync_creatives` でクリエイティブを添付し、`get_media_buys` でバイステータスをチェックする
* 認証失敗、スキーマ不一致、非同期ポーリング遅延を診断し解決する

## 読書リスト

<CardGroup cols={2}>
  <Card title="AdCP クイックスタート" icon="rocket" href="/docs/quickstart">
    セットアップから配信までのエンドツーエンドバイヤーワークフロー。
  </Card>

  <Card title="メディアバイライフサイクル" icon="circle-nodes" href="/docs/media-buy/media-buys">
    メディアバイのステータス状態 — pending\_creatives、pending\_start、active、paused、completed — と各がバイヤーにとって何を意味するか。
  </Card>

  <Card title="Create media buy タスク" icon="cart-shopping" href="/docs/media-buy/task-reference/create_media_buy">
    完全なフィールドリファレンス、必須フィールド、3 つのレスポンス形状すべて。
  </Card>

  <Card title="Sync creatives タスク" icon="paintbrush" href="/docs/creative/task-reference/sync_creatives">
    アセットをバイに添付する方法、ドライラン検証、割り当てパターン。
  </Card>

  <Card title="エラー処理" icon="triangle-exclamation" href="/docs/building/by-layer/L3/error-handling">
    エラーコード、リトライ動作、`errors[]` 配列の読み方。
  </Card>

  <Card title="MCP 統合ガイド" icon="plug" href="/docs/building/by-layer/L0/mcp-guide">
    セッション初期化、`mcp-session-id` ヘッダー、ツール呼び出しフォーマット。
  </Card>
</CardGroup>

## テストエージェント

以下のすべての curl の例は AdCP トレーニングエージェントをターゲットします:

```
https://test-agent.adcontextprotocol.org/mcp
```

[AgenticAdvertising.org ダッシュボード](https://agenticadvertising.org/dashboard) からの API キーが必要です。すべての例で `<your-api-key>` を置き換えてください。

## Addie と行うこと

5 つの呼び出しを順番にウォークスルーします。Addie は各呼び出しをデモンストレーションし、生のレスポンスを示し、次にあなた自身がそれを再現するのを導きます。

1. **初期化** — ステートフルな MCP セッションを開く; `mcp-session-id` ヘッダーを保存
2. **ディスカバリー** — ブリーフで `get_products`; 提案を読む
3. **購入** — `create_media_buy`; 3 つのレスポンス形状すべてを処理
4. **クリエイティブ添付** — `sync_creatives`; 最初にドライランで検証
5. **ステータスポール** — `valid_actions` がバイが配信中であることを示すまで `get_media_buys`

## ステップバイステップ curl リファレンス

Addie とモジュールを進める間のクイックリファレンスとして、または任意のステップを独立して再現するためにこれらを使います。

### ステップ 1 — セッションを初期化

すべてのシーケンスは `initialize` 呼び出しで始まります。レスポンスがプロトコルバージョンを設定し、`mcp-session-id` ヘッダーを返します — それを保存します。

```bash theme={null}
curl -X POST https://test-agent.adcontextprotocol.org/mcp \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <your-api-key>" \
  -d '{
    "jsonrpc": "2.0",
    "method": "initialize",
    "params": {
      "protocolVersion": "2024-11-05",
      "capabilities": {},
      "clientInfo": { "name": "my-buyer-agent", "version": "1.0" }
    },
    "id": 1
  }'
```

レスポンスはレスポンスヘッダーに `mcp-session-id` を含みます。後続のすべての呼び出しはそれを含まなければなりません:

```
mcp-session-id: <value-from-response-header>
```

### ステップ 2 — 製品をディスカバリー

`buying_mode: "brief"` とキャンペーンゴールの平易な英語の記述で `get_products` を呼びます。エージェントはキュレートされた `products[]` と実行準備完了の `proposals[]` を返します。

```bash theme={null}
curl -X POST https://test-agent.adcontextprotocol.org/mcp \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <your-api-key>" \
  -H "mcp-session-id: <session-id>" \
  -d '{
    "jsonrpc": "2.0",
    "method": "tools/call",
    "params": {
      "name": "get_products",
      "arguments": {
        "adcp_major_version": 3,
        "buying_mode": "brief",
        "brief": "CTV campaign, adults 25-54 in the US, $50K budget, brand safety required"
      }
    },
    "id": 2
  }'
```

結果は JSON として `content[0].text` にあります。`proposals[0].proposal_id` を探します — それを `create_media_buy` に渡します。

### ステップ 3 — メディアバイを配置

ステップ 2 からの `proposal_id` と `total_budget` を渡します。`idempotency_key` はネットワークが落ちた場合に安全にリトライできるようにします — リクエストごとに新しい UUID v4 を使います。

```bash theme={null}
curl -X POST https://test-agent.adcontextprotocol.org/mcp \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <your-api-key>" \
  -H "mcp-session-id: <session-id>" \
  -d '{
    "jsonrpc": "2.0",
    "method": "tools/call",
    "params": {
      "name": "create_media_buy",
      "arguments": {
        "adcp_major_version": 3,
        "idempotency_key": "mb-lab-20260428-001",
        "account": {
          "brand": { "domain": "nova-motors.com" },
          "operator": "pinnacle-media.com"
        },
        "proposal_id": "<proposal-id-from-step-2>",
        "total_budget": { "amount": 50000, "currency": "USD" }
      }
    },
    "id": 3
  }'
```

**3 つのレスポンス形状 — これらの 1 つが見えます:**

| Shape                                                     | 意味                        | 次のステップ                                                          |
| --------------------------------------------------------- | ------------------------- | --------------------------------------------------------------- |
| `media_buy_id` + `status: "pending_creatives"`            | バイ確認; クリエイティブを添付          | ステップ 4 へ                                                        |
| `media_buy_id` + `status: "pending_start"` または `"active"` | バイ確認・準備完了                 | クリエイティブは既に添付済みまたは不要                                             |
| `status: "submitted"` + `task_id`                         | バイが非同期処理のためキュー            | `task_id` で AdCP タスクをポール（下の [Async polling](#async-polling) 参照） |
| `errors[]` 存在、`media_buy_id` なし                           | 拒否 — `errors[0].code` を読む | リクエストを修正し、新しい `idempotency_key` でリトライ                           |

### ステップ 4 — クリエイティブを添付

`pending_creatives` 状態のバイは、`sync_creatives` を呼ぶまで配信できません。最初に `dry_run: true` を使い、何も書き込まずにクリエイティブ形状を検証します。

```bash theme={null}
curl -X POST https://test-agent.adcontextprotocol.org/mcp \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <your-api-key>" \
  -H "mcp-session-id: <session-id>" \
  -d '{
    "jsonrpc": "2.0",
    "method": "tools/call",
    "params": {
      "name": "sync_creatives",
      "arguments": {
        "adcp_major_version": 3,
        "idempotency_key": "sc-lab-20260428-001",
        "account": {
          "brand": { "domain": "nova-motors.com" },
          "operator": "pinnacle-media.com"
        },
        "creatives": [
          {
            "creative_id": "nova-ctv-30s-v1",
            "format_id": {
              "agent_url": "https://test-agent.adcontextprotocol.org",
              "id": "ctv_1920x1080_30s"
            },
            "assets": [
              {
                "asset_id": "video_url",
                "url": "https://cdn.example.com/nova-ctv-30s.mp4"
              }
            ]
          }
        ],
        "dry_run": true
      }
    },
    "id": 4
  }'
```

適用するには `"dry_run": true` を削除します。レスポンスは `creatives[].status` を含みます — `approved`、`pending_review`、または `rejected`。

### ステップ 5 — ステータスをチェック

ステップ 3 からの `media_buy_id` で `get_media_buys` をポールし、ライフサイクル状態と `valid_actions` を見ます。

```bash theme={null}
curl -X POST https://test-agent.adcontextprotocol.org/mcp \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <your-api-key>" \
  -H "mcp-session-id: <session-id>" \
  -d '{
    "jsonrpc": "2.0",
    "method": "tools/call",
    "params": {
      "name": "get_media_buys",
      "arguments": {
        "adcp_major_version": 3,
        "media_buy_ids": ["<media-buy-id-from-step-3>"]
      }
    },
    "id": 5
  }'
```

`media_buys[0].status` フィールドは `pending_creatives`、`pending_start`、`active`、`paused`、`completed`、`rejected`、または `canceled` のいずれかです。`valid_actions` 配列はバイヤーが次に何ができるかを教えます。

## Async polling

`create_media_buy` が `status: "submitted"` と `task_id` を返すとき、バイはキューに入っています。タスクが完了するまでポールします:

```bash theme={null}
curl -X POST https://test-agent.adcontextprotocol.org/mcp \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <your-api-key>" \
  -H "mcp-session-id: <session-id>" \
  -d '{
    "jsonrpc": "2.0",
    "method": "tools/call",
    "params": {
      "name": "get_task_status",
      "arguments": { "task_id": "<task-id-from-create>", "include_result": true }
    },
    "id": 6
  }'
```

<Note>
  `get_task_status` は AdCP アプリケーション層のタスクポーリングツールです。3.x では、このエイリアスを広告しないセラーも、同じ snake\_case ペイロードでレガシー AdCP `tasks/get` 表面を露出します。いずれの AdCP ポーリング表面も、独自のタスクワイヤ形状を使うトランスポートネイティブな MCP/A2A `tasks/*` メソッドと混同しないでください。
</Note>

2〜5 秒ごとにポールします。AdCP タスク `status` が `completed` のとき、`result` フィールドは `media_buy_id` を持つ完全な `create_media_buy` レスポンスを含みます。すべての AdCP タスクステータス値については [タスクライフサイクル](/docs/building/by-layer/L3/task-lifecycle) ドキュメントを参照。

## 一般的なエラー

| Symptom                               | 考えられる原因                | 修正                                                                                      |
| ------------------------------------- | ---------------------- | --------------------------------------------------------------------------------------- |
| HTTP 401 / `error: "invalid_token"`   | 期限切れまたは間違った API キー     | ダッシュボードからトークンを再発行; `Bearer` プレフィックスを確認                                                  |
| HTTP 401 / `error: "invalid_request"` | `Authorization` ヘッダー欠如 | すべての呼び出しに `-H "Authorization: Bearer <token>"` を追加                                      |
| ボディに `errors[]`、`media_buy_id` なし     | スキーマ検証失敗               | `errors[0].field` と `errors[0].code` を読む; フィールドを修正し **新しい** `idempotency_key` でリトライ     |
| `status: "submitted"` が無期限に留まる        | 非同期タスクが停滞              | `get_task_status` またはレガシー `tasks/get` で AdCP タスクステータスをチェック; `failed` なら拒否理由のためタスクエラーを読む |
| `mcp-session-id: invalid` エラー         | セッション期限切れまたはヘッダー欠如     | ステップ 1 を再実行して新しいセッション ID を取得                                                            |

## 評価

| Dimension | Weight | Addie が探すもの                                      |
| --------- | ------ | ------------------------------------------------ |
| 概念的理解     | 10%    | MCP セッションライフサイクルとなぜ `mcp-session-id` が必要か記述できるか? |
| 実践的知識     | 40%    | 正しいタスク名とリクエスト形状で 5 つの呼び出しすべてを順番にトレースできるか?        |
| 問題解決      | 30%    | 各ステップが失敗するか予期しないレスポンスを返すときに何が起こるか推論できるか?         |
| エラー回復     | 20%    | 認証失敗、スキーマエラー、非同期ポーリング遅延の正しい修正を識別できるか?            |

合格しきい値: 70%。

## このモジュールを始める

<Card title="Addie で A2B を始める" icon="play" href="https://agenticadvertising.org/chat">
  Addie を開いて「認定モジュール A2B を始めたい」と言ってください。
</Card>

**次:** [A3: AdCP ランドスケープ](/docs/learning/foundations/a3-ecosystem-governance)
