GoogleのA2AとAnthropicのMCP


## はじめに

2025年4月9日、Googleは**Agent2Agent (A2A)** と呼ばれる新しいオープンプロトコルを発表しました。このプロトコルは、異なるフレームワークやベンダーによって構築されたAIエージェント間の通信と相互運用性を実現するもので、Atlassian、Box、Cohere、Intuit、Langchain、MongoDB、PayPal、Salesforce、SAP、ServiceNowなど50社以上の技術パートナーの支援を受けて開発されたとのことです。

この記事では、GoogleのA2Aプロトコルと、Anthropicの**Model Context Protocol (MCP)** の関係性に焦点を当て、これらのプロトコルがどのように連携してAIエージェントエコシステムを構築するのか解説します。

## A2AとMCPの関係性

GoogleのA2AとAnthropicのMCPは、競合するプロトコルではなく、**相互補完する関係**にあると説明されており、両者の連携によって強力なAIエージェントエコシステムが実現できるとされています。

![A2AとMCPの関係](https://www.maginative.com/content/images/2025/04/a2a_mcp_readme.png)




### それぞれの役割

- **MCP（Model Context Protocol）**：LLMがツールやデータにアクセスするための標準プロトコル
  - LLMが利用するデータ、リソース、ツールの記述法を規定
  - 異なるモデルやフレームワーク間で「関数呼び出し」を標準化
  - エージェントがツールやデータに接続する複雑さを軽減

- **A2A（Agent2Agent）**：AIエージェント同士が通信するための標準
  - アプリケーションレベルのプロトコル
  - エージェントが自然なモダリティで連携可能
  - LLMがエージェントとして（ユーザーのように）通信

簡潔に言えば：
- **MCPは「LLMがツールを使う方法」を定義**
- **A2Aは「エージェント同士が話す方法」を定義**

## 例：自動車修理工場

公式ドキュメントでは、自動車修理工場の例を使って両プロトコルの関係を説明しています：

> 自動車を修理する修理工場があるとします。その工場には自律的な作業員がおり、特殊なツール（車両ジャッキ、マルチメーター、ソケットレンチなど）を使用して問題を診断・修理します。作業員は以前に見たことのない問題を診断・修理することも多く、修理プロセスには顧客との広範な会話、調査、部品サプライヤーとの連携が含まれることがあります。
>
> これを AI エージェントとしてモデル化すると：
>
> - **MCP** は、これらのエージェントを構造化されたツール（例：プラットフォームを2メートル上げる、レンチを右に4mm回すなど）と接続するためのプロトコルです。
>
> - **A2A** は、エンドユーザーや他のエージェントが作業員と連携するためのプロトコルです。A2Aは継続的なやり取りと、結果を達成するためのプランを可能にします（「左の車輪の写真を送ってください」、「液体が漏れているのに気づきました。それはどのくらい続いていますか？」）。A2A はまた、自動車修理工場の従業員が部品サプライヤーなどの他のエージェントと連携するのにも役立ちます。

## 統合アプローチ

![A2AとMCPの組み合わせ](https://google.github.io/A2A/images/a2a_mcp.png)

GoogleはA2AとMCPの統合に関して下記のような方法を推奨しています：

> 我々は、アプリケーションがA2AエージェントをMCPの**リソース**（エージェントカードで表現）としてモデル化することを推奨します。これにより、フレームワークはA2Aを使用してユーザー、リモートエージェント、他のエージェントと通信できます。

1. MCPサーバーの`resources`機能で他のA2Aエージェントの「エージェントカード」を取得
2. エージェントカードに含まれる情報に基づいて、A2Aプロトコルを使用してエージェント間通信を確立

**エージェントカード**については次のセクションで触れます。

## A2Aプロトコルの主要コンセプト

A2Aプロトコルの主要コンセプトを理解することで、MCPとの連携がどのように機能するかがより明確になります：

### 1. エージェントカード

公開メタデータファイル（通常は `/.well-known/agent.json` に配置）で、エージェントの機能、スキル、エンドポイントURL、認証要件などを記述します。クライアントはこれを取得してエージェントを理解します。

以下は公式ドキュメントに基づくエージェントカードの例です：

```json
{
  "name": "Currency Converter",
  "description": "Converts between various currencies",
  "version": "1.0.0",
  "capabilities": ["streaming"],
  "skills": [
    {
      "name": "currency-conversion",
      "description": "Convert amounts between currencies"
    }
  ],
  "url": "https://example.com/a2a"
}
```

### 2. タスクとメッセージ

タスクはA2Aの中心的な作業単位で、クライアントがメッセージを送信することで開始されます。タスクは以下の状態を遷移します：
- `submitted`（送信済み）
- `working`（作業中）
- `input-required`（入力待ち）
- `completed`（完了）
- `failed`（失敗）
- `canceled`（キャンセル）

メッセージはクライアント（`role: "user"`）とエージェント（`role: "agent"`）間のやり取りを表し、複数の「パート」を含みます。

### 3. パートとアーティファクト

- **パート**: メッセージやアーティファクト内の基本的なコンテンツ単位
  - `TextPart`（テキスト）
  - `FilePart`（インラインバイトまたはURIのファイル）
  - `DataPart`（JSON構造データ）

- **アーティファクト**: タスク実行中にエージェントによって生成された出力（生成ファイル、最終的な構造化データなど）

## 今後の展望

Googleは「MCPを補完するプロトコルとしてA2Aの採用が進むことを期待している」と述べているので、今後両プロトコルを活用した、強力なAIエージェントエコシステムが登場するかもしれません。

## 感想

MCPの登場で、ユーザー（人間）はLLMを通じて様々なツールを簡単に利用できるようになりました。A2AとMCPを組み合わせることで、AIエージェントがツールやデータにアクセスできる世界が実現するかもしれませんね。

## 参考リンク

- [Google A2A GitHub リポジトリ](https://github.com/google/A2A)
- [Google Developers Blog の A2A 発表](https://developers.googleblog.com/en/a2a-a-new-era-of-agent-interoperability/)
- [A2AとMCPの関係についての公式説明](https://google.github.io/A2A/#/topics/a2a_and_mcp)
- [A2A のサンプルコードと詳細情報](https://github.com/google/A2A/tree/main/samples)
- [Model Context Protocol (MCP) リポジトリ](https://github.com/modelcontextprotocol)