A2A と MCP は何が違う?エージェント間通信プロトコルの設計思想を整理してみた
MCPだけではエージェント間通信に足りない理由を、対等性と拒否・Agent Cardによる能力発見・タスク管理から整理し、A2A v1.0がgRPCを加えMCPがHTTPに留まる理由まで解説します。

目次
はじめに
「エージェント同士を連携させたいけど、MCP でつなげばいいのでは?」
AIエージェントの開発が進む中、こんな疑問を持ったことはないでしょうか。MCP(Model Context Protocol)がツール連携の標準として広がる一方で、Google が提唱する A2A(Agent-to-Agent)プロトコルという別の規格も登場しています。
先に結論を書くと、両者は守備範囲が違います。MCP はエージェントの「手と目」であり、A2A はその「口」です。ツール用のプロトコルがエージェント用の代わりにならないのは、ツールは依頼を断れないのに対し、エージェントは断れるからです。
なぜ2つのプロトコルが必要なのか、MCP だけでは何が足りないのか、そしてなぜ A2A だけが gRPC を加え、MCP は HTTP のままなのか。この記事では、A2A v1.0 と MCP の 2026-07-28 版仕様をもとに、これらの疑問を順に掘り下げていきます。
A2A と MCP — それぞれの守備範囲
まず、両者の役割を整理します。
| MCP | A2A | |
|---|---|---|
| 正式名称 | Model Context Protocol | Agent-to-Agent Protocol |
| 担当領域 | エージェント ↔ ツール/データソース | エージェント ↔ エージェント |
| 関係性 | クライアント-サーバー(主従) | 対等・双方向 |
| 典型的な操作 | tools/call, resources/read | SendMessage, GetTask |
| 提唱元 | Anthropic |
一言でまとめると、MCP はエージェントの「手と目」(ツールを使う・データを読む)であり、A2A はエージェントの「口」(他のエージェントと会話・交渉する)です。
物流 × 在庫管理の具体例
組織をまたいだエージェント連携の例で見てみましょう。
企業の境界を越えるのは A2A のリンクだけで、どちらのエージェントも相手のツールには触れません。
- 在庫エージェントが MCP で在庫 DB を照会 →「商品 X が残り10個、補充必要」と判断
- 在庫エージェントが A2A で配送エージェントに依頼 →「商品 X 500個、倉庫 A へ明日配送可能?」
- 配送エージェントが MCP で GPS API やルート最適化ツールを呼び出し、空き枠を確認
- 配送エージェントが A2A で回答 →「明日14時に配送可能。トラック B-12 割当済」
このように、ツール操作(MCP)とエージェント間の交渉(A2A)は明確に役割が分かれています。
なぜ MCP だけではエージェント間通信に不十分なのか
「相手のエージェントを MCP のツールとして登録すればいいのでは?」という発想は自然です。しかし、いくつかの根本的な問題があります。
1. 対等性の欠如
MCP はクライアント-サーバーモデルです。片方がクライアント(呼び出す側)、もう片方がサーバー(呼び出される側)になります。
MCP: エージェント(client) → 相手エージェント(server=ツール扱い)A2A: エージェント ←→ エージェント(対等)エージェントは自律的に判断する存在です。ツールとして従属させると、「その条件では受けられない」と断る能力といった相手の自律性を無視することになります。
A2A は、この「断る」をプロトコルに組み込んでいます。TASK_STATE_REJECTED は、エージェントがタスクを実行しないと決めたことを表す終了状態で、タスクの作成時点でも、処理を進めた後に続けられない、あるいは続けないと判断した時点でも使えます。
MCP にはこれに相当するものがありません。2026-07-28 版の仕様は呼び出しの向きを明記しています。サーバーから JSON-RPC リクエストを始めることはなく、呼ばれる側は常に答えるだけです。
2. 能力発見の仕組みがない
MCP はツールのスキーマ(入力と出力の型定義)を公開する仕組みはありますが、エージェントの「できること」「ポリシー」「現在の状態」を表現するには不十分です。
A2A では Agent Card という仕組みで、各エージェントが自分の能力やポリシーを /.well-known/agent-card.json として公開します。相手が何をできるか、どういう条件で受け付けるかを事前に発見できます。
3. 非同期タスク管理
MCP のコアはリクエスト-レスポンスです。「配送手配中、3時間後に確定します」のような長時間の処理は、オプトインの Tasks 拡張で扱います。サーバーは結果の代わりにタスクのハンドルを返し、クライアントは tasks/get でポーリングするか、状態通知を購読します。
A2A では、タスクはプロトコルのコアの一部です。タスクは TASK_STATE_SUBMITTED から TASK_STATE_WORKING に進み、TASK_STATE_COMPLETED、TASK_STATE_FAILED、TASK_STATE_CANCELED、TASK_STATE_REJECTED のいずれかで終わります。途中で止まる状態も2つあり、TASK_STATE_INPUT_REQUIRED はエージェントが追加情報を求めている状態、TASK_STATE_AUTH_REQUIRED は認証を待っている状態です。進捗は SSE のストリーミング、Webhook によるプッシュ通知、ポーリングのいずれかで受け取れます。
状態名は TASK_STATE_ プレフィックスを省略しています。エージェント自身が仕事を断ったことを記録するのは REJECTED だけです。
4. 組織間の認証・信頼
組織の境界を越える場合、エージェント同士の身元確認や権限の交渉が必要です。MCP の認可は HTTP トランスポート向けのオプションの OAuth 2.1 フローで、クライアントがリソースオーナーに代わってサーバーを呼び出す形を前提にしています。
A2A は、この要件を Agent Card に載せます。securitySchemes フィールドで API キー、HTTP 認証、OAuth 2、OpenID Connect、相互 TLS のどれを求めるかを宣言します。呼び出す側のエージェントは、最初のリクエストを送る前に相手組織の要件を知ることができます。
まとめると
MCP: 「このツール実行して」→ 結果 (主従関係)A2A: 「これお願いできる?」→ 交渉 → 合意 → 実行 → 報告 (対等関係)トランスポートの選択 — gRPC をめぐって分かれた A2A と MCP
どちらのプロトコルも、HTTP 上の JSON-RPC 2.0 と、ストリーミング用の SSE から始まりました。A2A は v0.3 で gRPC をバインディングとして追加し、v1.0 では Protocol Buffers の定義を正規のデータモデルにしました。すべてのバインディングは、このデータモデルを表現できなければなりません。MCP は逆の方向を選び、2026 年のロードマップには「we are not adding more official transports this cycle」(今回のサイクルでは公式トランスポートを追加しない)とあります。
| MCP(2026-07-28) | A2A(v1.0) | |
|---|---|---|
| メッセージ形式 | JSON-RPC 2.0 | Protocol Buffers のデータモデル。JSON-RPC 2.0、gRPC、HTTP+JSON で運ぶ |
| ローカル通信 | stdio | —(組織間前提) |
| リモート通信 | Streamable HTTP。メッセージごとに HTTP POST を送り、応答は JSON か SSE ストリームで返る | HTTP 上の JSON-RPC、HTTP+JSON(REST)、gRPC |
| gRPC | 公式トランスポートではない。SEP-1352 で提案中で、カスタムトランスポートとしてのみ使える | v0.3 からオプションのバインディング |
MCP のロードマップは、トランスポートを少数に絞るのは設計原則に基づく意図的な判断だと説明しています。このサイクルで力を入れているのは、サーバーが状態を持たずに水平スケールできるようにすることです。
組織間通信で gRPC が標準にならない理由
A2A の主戦場は組織間通信です。社内 LAN のマイクロサービス間通信とは前提が異なります。
| 技術 | 標準にならない理由 |
|---|---|
| gRPC | ブラウザから直接呼べない。ファイアウォールやプロキシとの相性が HTTP ほど良くない |
| WebSocket | 企業プロキシで切断されがち。常時接続によるサーバーリソース消費。ロードバランサーでのルーティングが複雑。接続断からの再接続ハンドリングが必要 |
A2A v1.0 は正規の a2a.proto を1つ公開しているので、組織同士で Proto 定義をすり合わせる必要はなくなりました。ただし、ネットワーク面での gRPC の弱点は残ったままです。
A2A が HTTP を手放さずに gRPC を提供する仕組み
Agent Card は、エージェントが話せるバインディングをすべて supportedInterfaces に列挙します。各エントリには protocolBinding(JSONRPC、GRPC、HTTP+JSON)と URL が入っています。クライアントは双方が対応していれば gRPC を使い、それ以外では HTTP を使います。
| HTTP のメリット | 説明 |
|---|---|
| インフラ互換性 | 企業のファイアウォール、プロキシ、ロードバランサーは HTTP 前提で構築済み |
| エコシステム | OAuth 認証、レート制限、監査ログ、API Gateway など成熟したツール群がそのまま使える |
| 発見性 | Agent Card を /.well-known/agent-card.json として HTTP GET で取得できる |
| スケーラビリティ | ステートレスで各リクエストが自己完結。スケールアウトが容易 |
| ストリーミング | SSE でリアルタイム通知も可能。プロキシも通過できる |
組織間の相互運用性を最大化することが設計の最優先事項であり、HTTP はその目的に最も摩擦が少ない選択です。その後の通信にどのバインディングを使う場合でも、Agent Card 自体は HTTP で取得します。
同一組織内でネットワークを双方が管理しているなら、エージェントは JSON-RPC と並べて gRPC も公開できます。対応しているクライアントは、そちらの速い経路を使えます。
まとめ
| 観点 | MCP | A2A |
|---|---|---|
| 役割 | エージェントがツール/データにアクセス | エージェント同士が通信・交渉 |
| 関係 | 主従(client → server) | 対等(双方向)。タスクを拒否できる |
| トランスポート | Streamable HTTP / stdio。gRPC はカスタムトランスポートのみ | JSON-RPC、HTTP+JSON、gRPC。Agent Card に列挙 |
| 能力発見 | ツールスキーマ(入出力の型定義) | Agent Card(/.well-known/agent-card.json) |
| メッセージ形式 | JSON-RPC 2.0 | Protocol Buffers のデータモデル。JSON-RPC バインディングでは JSON-RPC 2.0 |
| 長時間の処理 | オプトインの Tasks 拡張 | タスクのライフサイクルがコアに含まれる |
- MCP と A2A は競合ではなく相補的。MCP がエージェントの「手と目」なら、A2A は「口」
- エージェントはツールではない。自律的に判断する存在だからこそ、ツール用プロトコル(MCP)とは別にエージェント用プロトコル(A2A)が必要
- HTTP は互換性のための基盤で、A2A は速度のために gRPC を選択肢に加えた。MCP は gRPC を公式トランスポートの外に置いている
マルチエージェントシステムの設計では、「どのエージェントにどのツールを MCP で接続するか」と「どのエージェント間を A2A で連携させるか」を分けて考えることが重要です。




