AI Navigate

MCPはツールを扱う。A2Aはエージェントを扱う。人間を扱うのは誰だ?

Dev.to / 2026/3/15

💬 オピニオンDeveloper Stack & InfrastructureIdeas & Deep AnalysisTools & Practical Usage

要点

  • MCPは標準化されたツールアクセス層を提供し、エージェントが共通の契約を介して外部リソースを呼び出せるようにします。MCPサーバーは認証、入力検証、出力形式の整形を処理します。
  • A2Aは、エージェントがエージェントカードを公開し、コーディネーターが最も適切な専門エージェントにタスクを委任する協調層を定義します。
  • MCPは同期的で、プッシュ型機構が欠如しています。そのため、ツールや人間は自動的にエージェントへ結果をプッシュしません。
  • この記事は、総合的な視点にはツールだけでなく、エージェントと人間の相互作用にも対処する必要があると主張しています。

現在、AIエージェントを活用してチームを構築しているすべてのチームで、今まさに議論が起きています:MCPか、A2Aか?

良い議論です。両方のプロトコルは現実的で、よく定義され、ますます広くサポートされています。しかし、枠組みは不完全です。会話は2つの層—エージェントがツールにアクセスする方法とエージェント同士の対話方法—を扱い、3番目の層を完全に抜け落としています。それは、エージェントが人間とどのように対話するかです。

MCP: ツール層

Anthropicが開発したModel Context Protocolは、エージェントが外部リソースへアクセスする標準化された方法です。ツールをMCPサーバとして公開し、MCP互換のエージェントがそれを使用できます。

流れはシンプルです:

# An MCP server exposes tools in a standard format
# The agent discovers available tools, then calls one:

POST /mcp/call
{
  "tool": "query_database",
  "input": {
    "query": "SELECT * FROM orders WHERE status = 'pending' LIMIT 10"
  }
}

MCPサーバは認証を処理し、入力を検証し、クエリを実行し、構造化された出力を返します。エージェントはデータベースについて何も知る必要はなく、ツール契約だけを知っていればよいのです。

これは本当に有用です。エコシステムは成長しています。もし今日エージェントを構築していてMCPをまだ見ていないのなら、おそらく自分で手動でそれを再発明しようとしていることでしょう。

What MCP doesn't cover: it's synchronous request/response. The agent calls, the tool answers. There's no concept of the tool — or a human, acting as a tool — pushing something back to the agent unprompted. MCP is the agent's outbound interface to the world.

A2A: 協調層

Agent-to-Agent protocol, led by Google, handles how agents collaborate with each other. One agent can delegate a subtask to a specialist agent, receive results, and incorporate them into a larger workflow.

The core mechanism is the Agent Card — a self-description that each agent publishes: what it can do, what protocols it speaks, what kinds of requests it accepts. Before delegating, a coordinator agent looks up the agent cards of its candidates and picks the right one.

# A coordinator agent delegates a research subtask to a specialist
import requests

# 1. Discover the research agent
agent_card = requests.get"..."