A2A vs MCP:違い・使い分け・組み合わせ方
A2A vs MCP を解説。MCP はエージェントをツールやデータにつなぎ、A2A はエージェント同士をつなぎます。比較表、実際のペイロード、どちらを使うべきかを紹介します。
MCP(Model Context Protocol) は、1 つの AI アプリケーションをツール・データ・プロンプトにつなぐプロトコルです。モデルが search_issues のような関数を呼び出し、構造化された結果を受け取ります。A2A(Agent2Agent) は、あるエージェントを別の独立したエージェントにつなぐプロトコルです。内部が見えない相手にタスク全体を任せ、相手が進捗と結果を返してきます。両者は競合しません。A2A を使う実際のシステムのほとんどは MCP も使っており、MCP は各エージェントの内側、A2A はエージェント同士の間で動きます。
A2A プロジェクト自身のドキュメントは一言でこうまとめています:MCP は縦方向、A2A は横方向。MCP は 1 つのエージェントをより有能にし、A2A はそのエージェントが他のチーム・ベンダー・企業のエージェントに手を伸ばせるようにします。MCP 自体が初めてなら、先に MCP とは? を読んでから戻ってきてください。
A2A vs MCP 早見表
| MCP | A2A | |
|---|---|---|
| 目的 | モデルにツール・リソース・プロンプトへのアクセスを与える | 独立したエージェント同士でタスクを委任し合う |
| 誰と誰が通信するか | ホストアプリ(クライアント)とツール/データサーバー | クライアントエージェントとリモートエージェント |
| 相手は何か | スキーマを持つ透明な機能 | 推論・計画し、自前のツールを使う不透明なエージェント |
| ディスカバリー | tools/list、resources/list、prompts/list、server/discover | /.well-known/agent-card.json の Agent Card |
| 作業単位 | ツール呼び出し(tools/call) | ライフサイクルを持つタスク(submitted、working、input required、completed など) |
| 状態 | 2026-07-28 リビジョン以降ステートレス。各リクエストは自己完結 | contextId でまとめられるステートフルなタスク。マルチターンが前提 |
| 長時間の処理 | オプションの Tasks 拡張、進捗通知 | ネイティブ対応:ストリーミング(SSE)、SubscribeToTask、Webhook へのプッシュ通知 |
| トランスポート | stdio(ローカル)、Streamable HTTP(リモート) | JSON-RPC、gRPC、HTTP+JSON/REST |
| 認証 | HTTP では OAuth 2.1 ベースの認可、stdio では環境変数の資格情報 | Agent Card で宣言するセキュリティスキーム:API キー、HTTP 認証、OAuth 2.0、OpenID Connect、mTLS |
| 始めたのは | Anthropic、2024 年 11 月 | Google、2025 年 4 月 |
| 現在のガバナンス | Agentic AI Foundation(Linux Foundation 傘下)、2025 年 12 月から | Linux Foundation、2025 年 6 月から |
| 現行バージョン | 仕様リビジョン 2026-07-28 | 仕様 1.0.0(2026 年 3 月リリース) |
最も重要なのは「相手は何か」の行です。MCP サーバーは入力スキーマ付きの関数を公開するので、モデルは自分が何を呼んでいるかを正確に把握できます。A2A エージェントは自然言語で記述された スキル を公開し、内部は非公開のままです。プロンプト、ツール、メモリ、さらにはどのモデルで動いているかさえ見せません。
MCP がすること
MCP は、AI アプリケーション(Claude Code、Cursor、ChatGPT などのホスト)が、コンテキストやアクションを提供するサーバーとどう通信するかを標準化します。サーバーが公開するプリミティブは 3 種類です。モデルが呼び出せる tools(ツール)、アプリがコンテキストとして読める resources(リソース)、ユーザーが起動できる prompts(プロンプト)。サーバー側については MCP サーバーとは?、メッセージ単位のライフサイクルは MCP はどう動くのか? を参照してください。
2026 年に押さえておくべき点は 2 つです:
- 現行仕様の 2026-07-28 リビジョン で MCP はステートレスになりました。
initializeハンドシェイクは廃止され、すべてのリクエストが_metaにプロトコルバージョンとクライアント機能を載せ、サーバーはserver/discoverで自身を通知します。 - Anthropic は 2025 年 12 月 9 日に、Linux Foundation 傘下の指定基金である Agentic AI Foundation に MCP を寄贈しました。
ツール呼び出しは次のようになります(公式アーキテクチャガイド より):
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "weather_current",
"arguments": { "location": "San Francisco", "units": "imperial" },
"_meta": {
"io.modelcontextprotocol/protocolVersion": "2026-07-28",
"io.modelcontextprotocol/clientInfo": {
"name": "example-client",
"version": "1.0.0"
},
"io.modelcontextprotocol/clientCapabilities": { "elicitation": {} }
}
}
}
結果は content 配列(任意で structuredContent)で、"resultType": "complete" が付きます。モデルがツールを選び、JSON Schema に沿って引数を埋め、データを受け取る。サーバー側にエージェント的な振る舞いは一切ありません。
A2A がすること
A2A は、あるエージェントが別のエージェントに仕事を頼む方法を標準化します。Google は 2025 年 4 月の Cloud Next で 50 社以上のパートナーとともに 発表し、2025 年 6 月に Linux Foundation へ寄贈しました。最初の安定版 1.0.0 は 2026 年 3 月 12 日にリリースされています。2025 年 8 月には IBM の Agent Communication Protocol(ACP)が A2A に統合され、Linux Foundation のエージェント間標準は 2 つではなく 1 つになりました。1 周年の時点で Linux Foundation は 150 以上の支援組織 を報告しています。
A2A 仕様 の中核オブジェクトは次のとおりです:
- Agent Card:エージェントの名前、スキル、対応インターフェース、機能(ストリーミング、プッシュ通知)、セキュリティスキームを記述した JSON ドキュメント。公開カードは
https://{domain}/.well-known/agent-card.jsonに置かれます。1.0 では署名付きカードにも対応しています。 - Task(タスク):作業単位。状態には
TASK_STATE_SUBMITTED、TASK_STATE_WORKING、TASK_STATE_INPUT_REQUIRED、TASK_STATE_AUTH_REQUIRED、TASK_STATE_COMPLETED、TASK_STATE_FAILED、TASK_STATE_CANCELED、TASK_STATE_REJECTEDがあります。 - Message と Part:テキスト・ファイル・データのパートで構成される会話のターン。
- Artifact:レポートやファイルなど、リモートエージェントが生成する成果物。
操作は SendMessage、SendStreamingMessage、GetTask、ListTasks、CancelTask、SubscribeToTask、プッシュ通知設定のメソッド群、そして GetExtendedAgentCard です。クライアントは各リクエストに A2A-Version ヘッダー(例:1.0)を付けます。
以下は仕様に載っている HTTP+JSON バインディングの例で、クライアントが質問し、完了済みのタスクを受け取ります。
POST /message:send HTTP/1.1
Host: agent.example.com
Content-Type: application/a2a+json
Authorization: Bearer token
{
"message": {
"role": "ROLE_USER",
"parts": [{"text": "What is the weather today?"}],
"messageId": "msg-uuid"
}
}
{
"task": {
"id": "task-uuid",
"contextId": "context-uuid",
"status": { "state": "TASK_STATE_COMPLETED" },
"artifacts": [
{
"artifactId": "artifact-uuid",
"name": "Weather Report",
"parts": [{ "text": "Today will be sunny with a high of 75°F" }]
}
]
}
}
2 つのペイロードを比べてみてください。MCP は関数名と型付き引数を送ります。A2A は 自然言語のメッセージ を送り、ID・コンテキスト・成果物を持つ タスク を受け取ります。どうやって答えを出すかはリモートエージェントが決めます。
MCP を使うとき、A2A を使うとき
MCP を使うべきケース:
- アシスタントやエージェントに何かを読ませたり変更させたりしたい:リポジトリ、データベース、チケット管理、ブラウザなど。代表例は GitHub MCP サーバー、Postgres MCP、Playwright MCP です。
- 機能の入出力が明確で、それ自体に推論が要らない。
- みんながすでに使っているクライアントで動かしたい。Claude、ChatGPT、Cursor、VS Code、Codex はすべて MCP に対応しています。クライアント一覧 を参照してください。
A2A を使うべきケース:
- 呼び出す相手自体が、独自のモデル・ツール・判断力を持つエージェントで、委任したいのが関数呼び出しではなく目標である。
- 相手のエージェントが別のチーム・ベンダー・企業のもので、内部を公開しない(すべきでない)。
- 処理が長時間またはマルチターンになる:リモートエージェントが追加入力(
TASK_STATE_INPUT_REQUIRED)や追加認証を必要としたり、完了まで数時間かかったりし、進捗はストリーミングまたは Webhook へのプッシュで返ってくる。
簡単な見分け方: その機能を関数シグネチャとして書けるなら MCP ツールです。「経理チームのエージェントに対応してもらう」と表現するなら A2A 呼び出しです。
A2A と MCP の組み合わせ方
A2A 仕様の MCP に関する付録 が標準パターンを説明しています。A2A クライアントエージェントが A2A サーバーエージェントに複雑なタスクを依頼し、サーバーエージェントは MCP を使って、タスクを完了するのに必要なツール・API・データにアクセスします。
旅行予約フローを例にします:
- ユーザーが旅行エージェント(任意のフレームワークで構築)に旅程の作成を頼む。
- 旅行エージェントは、パートナーが運営する航空券エージェントとホテルエージェントの Agent Card を読み、それぞれに A2A でタスクを送る。
- 内部では、航空券エージェントが MCP サーバー経由で航空会社の在庫 API と決済サービスを使う。ホテルエージェントも自前の MCP サーバーで同様に処理する。
- ホテルエージェントが
TASK_STATE_INPUT_REQUIRED(「朝食付きにしますか?」)になり、旅行エージェントが同じcontextIdで回答する。 - 両方のタスクが成果物(旅程表)付きで完了し、旅行エージェントがそれらをまとめてユーザーに渡す。
旅行エージェントは航空会社の API を一度も見ず、航空券エージェントもユーザーの会話を見ません。MCP は各エージェントに深さを、A2A はシステムに広がりを与えます。
逆方向も可能です。リモートエージェントを MCP ツールとしてラップすれば、IDE のような MCP 専用クライアントからも呼び出せます。単発の簡単なリクエストならこれで十分ですが、A2A のタスクライフサイクル、マルチターン入力、プッシュ通知は失われます。本格的な委任には A2A を直接使いましょう。
よくある誤解
- 「A2A は MCP を置き換える」 いいえ。Google は A2A を MCP を補完するものとして発表しており、現在はどちらも Linux Foundation のプロジェクトです。スコープはほとんど重なりません。
- 「MCP ではエージェント間通信ができない」 MCP サーバーの裏に LLM を置くことは できます し、MCP には elicitation や長時間ジョブ向けのオプションの Tasks 拡張もあります。しかし MCP には Agent Card も、ピア間のタスクライフサイクルも、スキルを持つ不透明なエージェントという概念もありません。ツールとコンテキストのために設計されています。
- 「最初から両方必要だ」 ほとんどのチームに必要なのは MCP だけです。異なる主体が所有する複数のエージェントが協調しなければならなくなったときに、A2A が重要になります。
- 「どちらも JSON-RPC だから同じものだ」 ワイヤーフォーマットが同じでも、それだけでは何も言えません。MCP はスキーマとモデル主導の呼び出しを中心に、A2A はピア間のタスク・メッセージ・成果物を中心に設計されています。
- 「ACP という 3 つ目の標準にも対応しなければならない」 IBM の ACP は 2025 年に A2A に統合されました。無関係の Agent Client Protocol(エディタとコーディングエージェントをつなぐ)も同じ略称なので、どちらの話か確認しましょう。
次のステップ
有能なエージェントを 1 つ作るなら、まず MCP から始めましょう。MCP.so のサーバーディレクトリ で既製のインテグレーションを探し、MCP vs RAG で MCP と検索拡張生成を比較し、MCP はどう動くのか? で根底にあるプロトコルを理解してください。エージェントが他者の運営するエージェントにタスク全体を任せる必要が出てきたら、A2A を追加しましょう。
よくある質問
A2A と MCP の違いは何ですか?
- MCP は型付きの関数呼び出しで AI アプリケーションをツール・データ・プロンプトにつなぎ、A2A は独立したエージェント同士をつないで、あるエージェントが別のエージェントにタスク全体を委任できるようにします。MCP はエージェントの内側、A2A はエージェント同士の間で働きます。
A2A は MCP を置き換えますか?
- いいえ。Google は A2A を MCP を補完するものとして発表しており、現在はどちらも Linux Foundation のプロジェクトです。一般的なシステムでは、エージェント間に A2A を使い、各エージェントの内部では MCP でツールにアクセスします。
A2A と MCP は併用できますか?
- はい、それが A2A 仕様が説明しているパターンです。クライアントエージェントが A2A でリモートエージェントにタスクを送り、リモートエージェントは MCP サーバーを使って必要な API やデータにアクセスします。
MCP と A2A のどちらを先に学ぶべきですか?
- MCP から始めましょう。Claude、ChatGPT、Cursor、VS Code などの主要クライアントが対応しており、ほとんどのプロジェクトは MCP だけで足ります。異なるチームや企業が所有する複数のエージェントが協調する必要が出てきたら A2A を追加します。