Agentic IDE 智能体协议解析与自定义
2026 年,智能体(Agent)已成为开发者的标配工具。但单一智能体的能力有限——它可能擅长写代码,却不了解你的项目结构;能运行测试,却无法调用外部 API。要构建真正高效的 AI 开发流程,你需要让多个智能体协作,并让它们能访问你的工具和数据。
MCP(Model Context Protocol) 和 A2A(Agent2Agent) 就是解决这两个问题的开放协议。本教程将带你从零开始,搭建一个基于这两个协议的多智能体协作系统。
理解核心协议:MCP 与 A2A
在动手之前,我们先搞懂两个核心概念。
MCP(Model Context Protocol) 由 Anthropic 提出,目标是让大模型能够标准化地访问外部工具和数据源。可以把它想象成"智能体的 USB-C 接口"——无论是文件系统、数据库还是第三方 API,只要封装成 MCP Server,任何支持 MCP 的 IDE 或智能体都能直接调用。
A2A(Agent2Agent) 由 Google 推出,解决的是智能体之间的互操作问题。每个 A2A 智能体都有一个"Agent Card",声明自己的能力、输入输出格式和通信方式。这样,不同框架、不同团队构建的智能体可以像微服务一样协作。
两者的关系:MCP 管"智能体如何访问外部世界",A2A 管"智能体之间如何对话"。结合起来,就是完整的多智能体协作架构。
💡 可以把 MCP 理解成"智能体的驱动层",A2A 理解成"智能体的网络层"。一个负责纵向打通能力,一个负责横向连接协作。
环境准备:安装支持 Agentic 协议的 IDE
要使用这些协议,你需要一个支持 Agentic 协议的 IDE。目前主流的选择包括:
- Claude Code — Anthropic 官方 CLI,内置 MCP 支持
- Windsurf — Codeium 推出的 Agentic IDE,Cascade 功能支持多步任务
- Cursor — 支持 MCP Server 集成
本教程以 Claude Code 为例,安装步骤如下:
安装 Claude Code
# 1. 安装 Node.js(如果尚未安装)
brew install node@22
# 2. 安装 Claude Code CLI
npm install -g @anthropic-ai/claude-code
# 3. 配置 API 密钥
export ANTHROPIC_API_KEY="sk-ant-..."
# 4. 验证安装
claude --version
编写第一个 MCP Server
MCP Server 的核心是一个简单的 HTTP 或 stdio 服务,遵循 MCP 协议格式。我们用 Python + FastMCP 快速搭建一个"公司信息查询"Server。
FastMCP 是一个轻量级框架,让你用几行代码就能定义 MCP 工具。
安装 FastMCP
# 创建项目目录
mkdir company-mcp && cd company-mcp
# 使用 uv 初始化项目
uv init
# 安装 fastmcp
uv add fastmcp
mcp_server.py — 公司信息查询 MCP
from fastmcp import FastMCP
import requests
mcp = FastMCP("Company Info MCP")
@mcp.tool()
def get_company_info(symbol: str) -> dict:
"""获取美股公司基本信息
Args:
symbol: 股票代码,如 AAPL、GOOGL
Returns:
公司名称、行业、市值等信息
"""
url = f"https://api.example.com/stocks/{symbol}"
response = requests.get(url)
data = response.json()
return {
"name": data["name"],
"sector": data["sector"],
"marketCap": data["marketCap"],
"employees": data["employees"]
}
@mcp.tool()
def search_companies(keyword: str) -> list:
"""按关键词搜索公司
Args:
keyword: 搜索关键词
Returns:
匹配的公司列表
"""
url = f"https://api.example.com/search?q={keyword}"
response = requests.get(url)
return response.json()["results"]
if __name__ == "__main__":
mcp.run()
配置 MCP Server 到 Claude Code
编写好 MCP Server 后,需要在 Claude Code 的配置文件中注册它。配置文件位于 ~/.claude/settings.json 或项目根目录的 .claude/settings.json。
~/.claude/settings.json
{
"mcpServers": {
"company-info": {
"command": "uv",
"args": ["run", "--directory", "/path/to/company-mcp", "python", "mcp_server.py"],
"cwd": "/path/to/company-mcp"
}
}
}
💡 配置完成后,运行 claude 命令,输入 "/mcp" 可以查看已注册的 MCP Server 列表和可用工具。
测试 MCP Server 功能
现在可以测试你注册的 MCP Server 了。启动 Claude Code,尝试用自然语言调用工具。
测试对话示例
$ claude
> 帮我查一下苹果公司的基本信息
[Claude Code 调用 get_company_info("AAPL")]
苹果公司的基本信息如下:
- 公司名称:Apple Inc.
- 所属行业:Technology
- 市值:2.8 万亿美元
- 员工数:164,000
> 再搜索一下所有 AI 相关的公司
[Claude Code 调用 search_companies("AI")]
找到以下公司:
1. OpenAI
2. Anthropic
3. Cohere
4. Hugging Face
构建 A2A 多智能体协作系统
接下来我们搭建一个多智能体系统,包含三个角色:
1. Search Agent — 负责搜索网络信息
2. Analysis Agent — 负责分析数据、生成报告
3. Writer Agent — 负责撰写文章
这三个智能体通过 A2A 协议通信,每个智能体都有自己的"Agent Card"声明能力。
agent_card.json — Search Agent 的能力声明
{
"name": "Search Agent",
"description": "负责网络搜索和信息提取",
"version": "1.0.0",
"capabilities": {
"search": {
"description": "搜索网络获取信息",
"inputSchema": {
"query": { "type": "string" }
},
"outputSchema": {
"results": { "type": "array" }
}
},
"readUrl": {
"description": "读取指定 URL 的内容",
"inputSchema": {
"url": { "type": "string" }
},
"outputSchema": {
"content": { "type": "string" }
}
}
},
"endpoints": [
{
"url": "http://localhost:8001",
"transport": "http"
}
]
}
search_agent.py — Search Agent 实现
from fastapi import FastAPI
from pydantic import BaseModel
import httpx
app = FastAPI()
class SearchRequest(BaseModel):
query: str
class ReadUrlRequest(BaseModel):
url: str
@app.post("/search")
async def search(req: SearchRequest):
"""调用搜索 API"""
async with httpx.AsyncClient() as client:
resp = await client.get(
"https://api.exa.ai/search",
params={"query": req.query, "numResults": 5},
headers={"Authorization": "Bearer YOUR_API_KEY"}
)
return {"results": resp.json()["results"]}
@app.post("/readUrl")
async def read_url(req: ReadUrlRequest):
"""读取网页内容"""
async with httpx.AsyncClient() as client:
resp = await client.get(req.url)
return {"content": resp.text}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8001)
实现智能体编排器(Orchestrator)
编排器负责协调多个智能体的工作流。它接收用户任务,分解成子任务,分发给合适的智能体,最后汇总结果。
orchestrator.py — 智能体编排器
import httpx
import asyncio
class AgentOrchestrator:
"""智能体编排器"""
def __init__(self):
self.agents = {
"search": "http://localhost:8001",
"analysis": "http://localhost:8002",
"writer": "http://localhost:8003"
}
async def call_agent(self, agent: str, action: str, data: dict):
"""调用指定智能体"""
url = f"{self.agents[agent]}/{action}"
async with httpx.AsyncClient() as client:
resp = await client.post(url, json=data)
return resp.json()
async def generate_report(self, topic: str):
"""生成报告的完整工作流"""
# Step 1: 搜索信息
search_result = await self.call_agent(
"search", "search", {"query": topic}
)
# Step 2: 读取关键网页
content_results = []
for item in search_result["results"][:3]:
content = await self.call_agent(
"search", "readUrl", {"url": item["url"]}
)
content_results.append(content["content"])
# Step 3: 分析数据
analysis = await self.call_agent(
"analysis", "analyze", {"content": content_results}
)
# Step 4: 生成报告
report = await self.call_agent(
"writer", "write", {"analysis": analysis, "topic": topic}
)
return report
# 使用示例
async def main():
orchestrator = AgentOrchestrator()
report = await orchestrator.generate_report("AI Agent 发展趋势")
print(report["content"])
if __name__ == "__main__":
asyncio.run(main())
实战:搭建完整的研究报告生成系统
现在我们整合所有组件,搭建一个能自动生成行业研究报告的系统。
完整的工作流程如下:
1. 用户输入研究主题
2. Search Agent 搜索相关资料
3. Analysis Agent 提取关键信息
4. Writer Agent 撰写报告
5. 输出 Markdown 格式的研究报告
完整系统启动脚本 start.sh
#!/bin/bash
# 启动 Search Agent
uvicorn search_agent:app --port 8001 &
SEARCH_PID=$!
# 启动 Analysis Agent
uvicorn analysis_agent:app --port 8002 &
ANALYSIS_PID=$!
# 启动 Writer Agent
uvicorn writer_agent:app --port 8003 &
WRITER_PID=$!
# 启动编排器
python orchestrator.py
# 清理进程
kill $SEARCH_PID $ANALYSIS_PID $WRITER_PID
⚠️ 注意:生产环境请使用进程管理器(如 systemd 或 supervisor),并配置健康检查和自动重启。
核心要点
- MCP 是智能体访问外部工具的标准化协议,类似"USB-C 接口"
- A2A 是智能体间通信的协议,通过 Agent Card 声明能力
- FastMCP 让 Python 开发者用几行代码就能创建 MCP Server
- 编排器负责分解任务、分发请求、汇总结果
- 多智能体系统可以并行执行独立子任务,提升效率
单智能体 vs 多智能体系统对比
| 对比项 | 方案 A | 方案 B |
|---|---|---|
| 任务复杂度 | 适合单一任务 | 适合多步骤复杂工作流 |
| 可维护性 | 代码集中,易调试 | 模块清晰,职责分离 |
| 扩展性 | 添加功能需修改核心 | 新增 Agent 即可扩展 |
| 执行效率 | 串行执行 | 可并行执行 |
| 开发成本 | 低 | 中(需设计协议) |
常见问题
协议采用数据
总结
本教程从零开始,带你理解了 MCP 和 A2A 协议的核心概念,并实际搭建了一个多智能体协作系统。 关键要点:MCP 解决工具接入问题,A2A 解决智能体协作问题。通过 FastMCP 等框架,你可以快速创建自定义 MCP Server;通过编排器模式,你可以构建复杂的多智能体工作流。 下一步:尝试为你常用的工具(如 Notion、Slack、GitHub)编写 MCP Server,或者设计一个完整的自动化开发流程(需求分析 → 代码生成 → 测试 → 部署)。