MCP与A2A协议概述及技术生态

5/3/2025 MCP协议大模型上下文协议Function-CallingMCP-InspectorCursorA2A协议Agent-Card

# 1. MCP基本介绍

# 1.1 MCP产生背景

近一年来,尽管GPT-4、Claude Sonnet 3.7和Deepseek R1等AI模型持续取得突破,但市场上大多数AI应用依然以独立服务形式存在,与传统系统缺乏有效融合。这种局面一方面源于企业对敏感数据安全的严格管控和复杂审批流程,另一方面则反映了技术层面上缺乏一个开放、通用且广受共识的协议标准,使得诸如联网搜索、发送邮件和发布博客等多功能集成变得异常困难。

在这样的背景下,Claude团队提出了MCP(Model Context Protocol),旨在建立统一的协议标准,推动AI应用与现有服务的高效整合。它的推出促进了大模型与传统系统间的互联融合,吸引了众多企业与开源社区的积极响应,共同探索打造更紧密的数字生态体系。

MCP简介

# 1.2 MCP协议概述

# 1.2.1 MCP是什么

模型上下文协议(MCP):一种标准化接口,旨在实现AI模型与外部工具和资源之间的无缝交互,打破数据孤岛,促进不同系统之间的互操作性。在MCP出现之前,AI应用与外部工具的交互依赖于手动API连接、插件接口和Agent框架等方法,这些方法存在复杂性高、可扩展性差等问题。

MCP的必要性

# 1.2.2 MCP工作流程

由3个核心组件构成:MCP主机、MCP客户端和MCP服务器。这些组件协同工作,实现AI应用与外部工具和数据源之间的无缝通信。

  • MCP主机:提供执行AI任务的环境,并运行MCP客户端。
  • MCP客户端:作为主机环境的中介,与MCP服务端保持1:1连接,与服务端进行通信。
  • MCP服务端:提供外部系统和操作的访问权限,具备工具、资源和提示三种核心能力。

MCP整体架构

传输层是MCP架构中的关键组成部分,负责在MCP客户端和MCP服务器之间实现安全、双向的通信,通信流程的具体步骤:

  • 初始请求:MCP客户端向MCP服务器发送初始请求,查询服务器的功能和可用工具。
  • 初始响应:MCP服务器接收到请求后,返回一个初始响应,列出其提供的工具、资源和提示,供客户端使用。
  • 持续通知:建立连接后,MCP服务器持续向客户端发送通知,实时更新服务器状态或任务进度,确保客户端能及时获取最新信息。

MCP工作流程

MCP服务端生命周期包含以下3个阶段:

  • 创建阶段:涉及服务器注册、安装程序部署和代码完整性验证。此阶段面临的风险包括名称冲突、安装程序伪造和代码注入/后门。
  • 运行阶段:服务器在此阶段处理请求、执行工具调用,并与外部资源进行交互。风险包括工具名称冲突、斜杠命令重叠和沙箱逃逸。
  • 更新阶段:确保服务器保持安全、最新,并适应不断变化的需求。风险包括更新后权限持续、版本控制问题和旧版本配置漂移。

MCP服务端生命周期

# 1.2.3 MCP与函数调用对比

这两种技术都旨在增强 AI 模型与外部数据的交互能力,但 MCP 不止可以增强 AI 模型,还可以是其他的应用系统。

  • MCP(Model Context Protocol),模型上下文协议
  • Function Calling,函数调用
类别 MCP(Model Context Protocol) Function Calling
性质 协议 功能
范围 通用(多数据源、多功能) 特定场景(单一数据源或功能)
目标 统一接口,实现互操作 扩展模型能力
实现 基于标准协议 依赖于特定模型实现
开发复杂度 低:通过统一协议实现多源兼容 高:需要为每个任务单独开发函数
复用性 高:一次开发,可多场景使用 低:函数通常为特定任务设计
灵活性 高:支持动态适配和扩展 低:功能扩展需额外开发
常见场景 复杂场景,如跨平台数据访问与整合 简单任务,如个人助手、单模型大纲

MCP 与 Function Calling 是具有一定联系,但侧重点不同的两个技术概念。前者则侧重于描述函数的规范化执行,后者侧重于描述 LLM 本身具有的结构化函数调用能力,二者是分配与执行的关系。

  • Function Calling 帮助 LLM 决定它想要做什么。
  • MCP 确保工具可靠可用、可发现和可执行,而无需自定义集成所有内容。

例如,Agent 可能会使用函数调用说“我需要搜索 Web”。该请求可以通过 MCP 进行路由,以便从可用的 Web 搜索工具中进行选择,调用正确的工具,并以标准格式返回结果。

MCP与Function-Calling的区别

# 1.3 MCP相关资源

如果只是作为使用者,可以去社区寻找现成的MCP服务端和客户端来用。

# 1.4 MCP原生支持

Qwen3优化了模型的Agent和代码能力,同时也对MCP做了原生支持。下面是官方示例,展示Qwen3是如何思考并进行交互的。

Qwen3使用MCP示例

# 2. MCP实践应用

# 2.1 MCP的Python SDK

MCP提供了多种语言的官方SDK,以下是官方的Python SDK,可用于开发服务端和客户端程序。

MCP提供了多种语言的官方SDK

# 2.2 开发MCP服务端

实验环境:Macbook Pro 2021,M1 pro芯片,16G内存,1024G存储,macOS Sonoma 14.5系统,Python3.10.9环境

# 2.2.1 准备MCP服务端

MCP的Python SDK最低支持到3.10版本,官方建议使用 uv (opens new window) 来管理 Python 项目。

$ curl -LsSf https://astral.sh/uv/install.sh | sh
$ uv init weather
$ cd weather
$ uv add "mcp[cli]" httpx
$ touch weather.py
1
2
3
4
5

写入代码如下:

from typing import Any
import httpx
from mcp.server.fastmcp import FastMCP

# Initialize FastMCP server
mcp = FastMCP("weather")

# Constants
NWS_API_BASE = "https://api.weather.gov"
USER_AGENT = "weather-app/1.0"

async def make_nws_request(url: str) -> dict[str, Any] | None:
    """Make a request to the NWS API with proper error handling."""
    headers = {
        "User-Agent": USER_AGENT,
        "Accept": "application/geo+json"
    }
    async with httpx.AsyncClient() as client:
        try:
            response = await client.get(url, headers=headers, timeout=30.0)
            response.raise_for_status()
            return response.json()
        except Exception:
            return None

def format_alert(feature: dict) -> str:
    """Format an alert feature into a readable string."""
    props = feature["properties"]
    return f"""
Event: {props.get('event', 'Unknown')}
Area: {props.get('areaDesc', 'Unknown')}
Severity: {props.get('severity', 'Unknown')}
Description: {props.get('description', 'No description available')}
Instructions: {props.get('instruction', 'No specific instructions provided')}
"""

@mcp.tool()
async def get_alerts(state: str) -> str:
    """Get weather alerts for a US state.

    Args:
        state: Two-letter US state code (e.g. CA, NY)
    """
    url = f"{NWS_API_BASE}/alerts/active/area/{state}"
    data = await make_nws_request(url)

    if not data or "features" not in data:
        return "Unable to fetch alerts or no alerts found."

    if not data["features"]:
        return "No active alerts for this state."

    alerts = [format_alert(feature) for feature in data["features"]]
    return "\n---\n".join(alerts)

@mcp.tool()
async def get_forecast(latitude: float, longitude: float) -> str:
    """Get weather forecast for a location.

    Args:
        latitude: Latitude of the location
        longitude: Longitude of the location
    """
    # First get the forecast grid endpoint
    points_url = f"{NWS_API_BASE}/points/{latitude},{longitude}"
    points_data = await make_nws_request(points_url)

    if not points_data:
        return "Unable to fetch forecast data for this location."

    # Get the forecast URL from the points response
    forecast_url = points_data["properties"]["forecast"]
    forecast_data = await make_nws_request(forecast_url)

    if not forecast_data:
        return "Unable to fetch detailed forecast."

    # Format the periods into a readable forecast
    periods = forecast_data["properties"]["periods"]
    forecasts = []
    for period in periods[:5]:  # Only show next 5 periods
        forecast = f"""
{period['name']}:
Temperature: {period['temperature']}°{period['temperatureUnit']}
Wind: {period['windSpeed']} {period['windDirection']}
Forecast: {period['detailedForecast']}
"""
        forecasts.append(forecast)

    return "\n---\n".join(forecasts)

if __name__ == "__main__":
    # Initialize and run the server
    mcp.run(transport='stdio')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94

# 2.2.2 启动MCP服务端

下面将启动服务并使用MCP-Inspector进行调试。

$ mcp dev weather.py
1

看到如下日志,说明MCP服务端程序启动成功。

启动MCP服务端示例程序

访问 http://127.0.0.1:6274 地址即可进行功能测试。

MCP-Inspector调试示例程序

# 2.3 客户端接入MCP服务

可以通过一些支持 MCP Server 的客户端进行调试,比如Cursor。

  • 设置 ——> MCP ——> Add new MCP server
  • 类型选择 command,名称可以自定义,执行的命令如下,需要指定路径。
uv --directory /Users/yoyo/Workspace/test_workspace/weather run weather.py
1

接入成功后如下图所示:

Cursor接入MCP服务端

在Cursor里使用MCP服务端的效果如下:

在Cursor里使用MCP服务端

# 3. A2A基本介绍

# 3.1 A2A产生背景

AI Agent 在企业中应用越来越多,但大多独立运行,缺乏统一沟通机制。这种孤立模式导致信息难以流通,不同系统间无法直接协作,企业不得不额外开发接口或依赖人工传递数据,既增加了成本,也限制了智能化效能。

为破解这一瓶颈,Google Cloud 于 2025 年 4 月牵头联合多家技术伙伴推出 A2A(Agent-to-Agent)协议,通过建立开放标准,为不同 Agent 提供通用语言和通信规则,从而打破信息孤岛,推动智能体协作进入新的发展阶段。

A2A协议规范

# 3.2 A2A协议概述

# 3.2.1 A2A是什么

Agent-to-Agent 协议 (A2A协议) 是为了解决通信障碍而提出的,它为 AI Agent 之间的连接提供了一种标准化的方法。通过使用 A2A 协议,Agent 可以发现其他 Agent 的功能,安全地共享信息,并在不同的公司系统之间协调工作。

A2A协议的重要性

# 3.2.2 A2A工作原理

[1] 核心组件

A2A协议定义了几个关键的数据结构,作为智能体之间信息交换和任务管理的基础:

  • Agent Card(智能体名片) :智能体的自我描述文档,包含基本信息、API端点、支持的能力和认证方案等,是智能体被发现和交互的基础。
  • Task(任务) :协作的核心单元,代表一个智能体委托给另一个智能体的工作请求,包含任务描述、状态、优先级等信息。
  • Message(消息) :智能体之间交换的信息载体,可以包含多种类型的内容(如文本、图像、结构化数据等)。
  • Artifact(成果物) :任务执行的最终产出,可以是文档、数据集、分析结果等。

[2] 通信机制

A2A协议主要依赖以下技术实现智能体之间的通信:

  • HTTP(S) :所有交互通过标准的HTTP请求进行,生产环境强制使用HTTPS确保安全性。
  • JSON-RPC 2.0 :消息的封装格式采用简洁且易于解析的JSON-RPC标准。
  • Server-Sent Events (SSE) :用于实现服务器向客户端的单向事件流,支持异步通知和实时更新。

[3] 交互流程

A2A协议中的典型交互流程包括:

  1. 服务发现 :客户端智能体通过获取远程智能体的Agent Card了解其能力和接口。
  2. 任务创建 :客户端智能体向远程智能体发送任务请求,包含任务描述和必要参数。
  3. 任务执行 :远程智能体接收任务并开始处理,可能涉及多轮消息交换。
  4. 状态更新 :远程智能体定期或在关键节点向客户端智能体报告任务进展。
  5. 结果交付 :任务完成后,远程智能体将成果物返回给客户端智能体。

# 3.2.3 A2A与MCP的关系

A2A 和 MCP 协议是构建强大智能体应用的两类互补标准:

  • MCP(模型上下文协议):用于将智能体与工具、API 和资源连接起来,并通过结构化的输入/输出进行交互。可以理解为智能体获取能力的方式。
  • A2A(Agent-to-Agent 协议):用于不同智能体之间的动态、多模态通信,使它们能够作为平等个体进行协作、任务分派和共享任务管理。可以理解为智能体之间协作的方式。

A2A协议简介

# 3.3 A2A应用场景

A2A协议为多种应用场景提供了可能性,以下是几个典型例子:

  • 企业招聘流程自动化:通过A2A协议,招聘经理可以要求其智能体寻找符合职位要求的候选人。该智能体会与其他专业智能体(如人才搜索、背景调查等)协作,共同完成候选人筛选、面试安排和背景核查等任务,大大简化招聘流程。
  • 跨平台数据分析与决策支持:在企业环境中,不同部门可能使用不同的数据分析工具和平台。通过A2A协议,这些平台上的智能体可以协同工作,共享数据和分析结果,为管理层提供全面的决策支持。
  • 智能客服协作系统:当客户提出复杂问题时,前线客服智能体可以通过A2A协议与专业领域的智能体(如技术支持、财务、物流等)协作,共同解决客户问题,提供无缝的服务体验。
  • 智能制造与供应链优化:在制造业中,生产计划、物料采购、质量控制等环节的智能体可以通过A2A协议实现信息共享和协同决策,优化整个供应链的效率和响应速度。

A2A与MCP结合使用

# 4. 参考资料

[1] MCP 终极指南 from Guangzheng Li (opens new window)

[2] 一文看懂:MCP(大模型上下文协议) from 知乎 (opens new window)

[3] 一个专为中文用户打造的 MCP资源合集 from Github (opens new window)

[4] 精选的 MCP Server 列表 from Github (opens new window)

[5] 精选的 MCP Client 列表 from Github (opens new window)

[6] 从零开始教你打造一个MCP客户端 from 知乎 (opens new window)

[7] FastMCP快速构建MCP Server from Github (opens new window)

[8] MCP + 数据库,一种比 RAG 检索效果更好的新方式!from 微信公众号 (opens new window)

[9] 首篇MCP技术生态全面综述:核心组件、工作流程、生命周期 from 微信公众号 (opens new window)

[10] Claude MCP 简介 from Claude MCP (opens new window)

[11] MCP、function calling 这两者有什么区别?与AI Agent 是什么关系?from 知乎 (opens new window)

[12] LLMs的函数调用(Function Call)和MCP——直观的对比解释 from 知乎 (opens new window)

[13] Model Context Protocol(MCP) 编程极速入门 from Github (opens new window)

[14] 因为Manus爆火的 Claude MCP,90%人的认知可能都是错的 from 微信公众号 (opens new window)

[15] MCP Server 开发实战指南(Python版)from Ryan-ZOE (opens new window)

[16] Qwen3 MCP实测 from 微信公众号 (opens new window)

[17] 这 3 个 MCP 开源项目,牛逼哄哄 from 微信公众号 (opens new window)

[18] RAG-MCP:突破大模型工具调用瓶颈,告别Prompt膨胀 from 微信公众号 (opens new window)

[19] 所有AI工具共享持久私有记忆,OpenMemory MCP杀疯了 from 微信公众号 (opens new window)

[20] 为什么MCP传输机制要从SSE转到Streamable HTTP from 微信公众号 (opens new window)

[21] Inside Google’s Agent2Agent (A2A) Protocol: Teaching AI Agents to Talk to Each Other from towards data science (opens new window)

[22] 谷歌的A2A到底是什么东西?from 火山引擎 (opens new window)

[23] 谷歌Agent2Agent (A2A) 协议技术细节分析,包括其与 MCP 关系 from 知乎 (opens new window)

[24] A2A and MCP: Complementary Protocols for Agentic Systems from 官方文档 (opens new window)

[25] Agent2Agent (A2A) 协议发布 from Google Cloud (opens new window)

[26] 大模型应用中Agent2Agent(A2A)的应用场景 from CSDN (opens new window)

[27] 人工智能A2A协议:技术原理与应用场景解析 from 火山引擎 (opens new window)

[28] A2A协议引爆AI圈:谷歌联手50+巨头终结‘智能体孤岛’ ffrom 暴风如雪的博客 (opens new window)

Last Updated: 8/27/2025, 2:37:46 PM