クイック比較
| Aspect | MCP | A2A |
|---|---|---|
| Request Style | Tool calls | Task messages |
| Response Style | Direct JSON | Artifacts |
| Status System | Unified status field | Unified status field |
| Async Handling | Polling with tasks/get | SSE streaming |
| Webhooks | Protocol wrapper extension | Native PushNotificationConfig |
| Task Management | tasks/list, tasks/get tools | Native tasks/list, tasks/get |
| Context | Manual (pass context_id) | Automatic (protocol-managed) |
| Best For | Claude, AI assistants | Agent workflows |
統一ステータスシステム
両プロトコルは同じステータスフィールドを同じ値で使用します。ステータス処理(両プロトコル)
すべてのレスポンスに、次に取るべき行動を示すステータスフィールドが含まれます:| Status | What It Means | Your Action |
|---|---|---|
completed | Task finished | Process data, show success |
input-required | Need user input | Read message, prompt user, follow up |
working | Processing (< 120s) | Poll frequently, show progress |
submitted | Long-running (hours to days) | Provide webhook or poll less frequently |
failed | Error occurred | Show error, handle gracefully |
auth-required | Need auth | Prompt for credentials |
トランスポート形式の違い
ステータスとデータは同じで、パッケージングが異なります:MCP レスポンス形式
A2A レスポンス形式
非同期処理の違い
両プロトコルは同じステータス遷移で非同期処理を扱います:submitted → working → completed/failed
MCP の非同期パターン
A2A の非同期パターン
コンテキスト管理
MCP: 手動コンテキスト
A2A: 自動コンテキスト
確認・追加情報の扱い
両プロトコルは同じstatus: "input-required" パターンを使用します:
エラーハンドリング
両者ともstatus: "failed" と同じエラー構造を使用します:
プロトコルを選ぶには
MCP を選ぶ場合:
- Claude Desktop または Claude Code を使用
- MCP 対応の AI アシスタントを利用
- シンプルなツールベース統合が必要
- 直接 JSON のレスポンスが欲しい
A2A を選ぶ場合:
- Google AI agents または Agent Engine を利用
- マルチモーダル(テキスト + ファイル)なワークフロー
- リアルタイムなストリーミング更新
- アーティファクトベースのデータ処理
両プロトコルが提供するもの:
- 同じ AdCP タスクと機能
- クライアントロジックを明確にする統一ステータスシステム
- 会話のためのコンテキスト管理
- 非同期処理のサポート
- Human-in-the-loop ワークフロー
- エラーハンドリングと復旧