# 1. 什么是 MCP?
MCP,全称 Model Context Protocol(模型上下文协议),是一种标准化的协议,用于将 AI 模型与不同的数据源和工具进行连接。你可以把 MCP 理解为 AI 世界的“USB-C 接口”——就像 USB-C 让手机、U 盘、打印机等设备能方便地接入电脑并进行数据交互一样,MCP 也为 AI 模型与外部工具之间的协作提供了统一的“插口”。
# 2. MCP VS Function Call
说到 AI 调用工具,很多人第一时间会想到 OpenAI 在 2023 年 7 月 20 日发布的“函数调用及其他 API 更新 (opens new window)”功能。OpenAI 通过在 API 请求中传入 functions 参数,让大模型能够调用外部工具。例如:
curl https://api.openai.com/v1/chat/completions -u :$OPENAI_API_KEY -H 'Content-Type: application/json' -d '{
"model": "gpt-3.5-turbo-0613",
"messages": [
{"role": "user", "content": "What is the weather like in Boston?"}
],
"functions": [
{
"name": "get_current_weather",
"description": "Get the current weather in a given location",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA"
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"]
}
},
"required": ["location"]
}
}
]
}'
当时 GeekAI 也第一时间集成了函数调用,实现了如微博热搜、Dalle 绘画等功能。
事实上,有一些 MCP 客户端就是直接用的模型自带的 Function Call 功能去实现 MCP 协议的。我在使用 CherryStudio 的时候对软件发送给大模型的提示词进行了抓包,发现它最终发送的提示词是这样的:
{
"model": "deepseek/deepseek-v3-base:free",
"messages": [
{
"role": "user",
"content": "给我安装一个 filesystem MCP server"
},
{
"role": "user",
"content": "hello"
}
],
"stream": true,
"tools": [
{
"type": "function",
"name": "mcp_auto_install_getAvailableServers",
"function": {
"name": "fDjZNXZmUB8O62shf4juZD",
"description": "List all available MCP servers that can be installed. Returns a list of server names and their basic information. Use this to discover what MCP servers are available before installing or configuring them.",
"parameters": {
"type": "object",
"properties": {
"random_string": {
"type": "string"
}
}
}
}
},
......
]
}
我们可以看到,CheeryStudio 是把所有的 MCP 工具打包放在 tools
参数中传给大模型的。这需要大模型支持工具调用功能。在 CherryStudio 里,只有带有"工具"标识的大模型,MCP 工具服务才是可用状态。
Function Call 功能极大地提升了大模型的能力,但也存在两个问题:
- 不是所有大模型都支持 Function Call;
- 各家大模型对 Function Call 的触发精准度差异较大——同样的问题,有时会调用工具,有时不会。GPT-4o 和 Claude 的触发最为精准,其次是 Qwen。
为了解决这些问题,Anthropic 提出了 MCP 协议,并于 2024 年 11 月 25 日正式发布。MCP 协议与函数调用的原理类似,都是向大模型提供工具定义信息,让模型自主决定是否调用工具以及调用哪个工具。不同之处在于,MCP 是将工具的 JSON Schema 直接写入提示词(Prompt)中,而不是作为 API 参数传递。 例如,Cline 的 MCP 请求会把所有 MCP 工具的定义和用法写进提示词:
{
"model": "deepseek/deepseek-v3-base:free",
"messages": [
{
"role": "system",
"content": "You are Cline, a highly skilled software engineer with extensive knowledge in many programming languages, frameworks, design patterns, and best practices.\n\n\n====\n\nMCP SERVERS\n\nThe Model Context Protocol (MCP) enables communication between the system and locally running MCP servers that provide additional tools and resources to extend your capabilities.\n\n# Connected MCP Servers\n\nWhen a server is connected, you can use the server's tools via the `use_mcp_tool` tool, and access the server's resources via the `access_mcp_resource` tool.\n\n## baidu-maps (`undefined`)\n\n### Available Tools\n- map_geocode: \n Name:\n 地理编码服务\n \n Description:\n 将地址解析为对应的位置坐标。地址结构越完整,地址内容越准确,解析的坐标精度越高。\n \n Args:\n address: 待解析的地址。最多支持84个字节。可以输入两种样式的值,分别是:\n 1、标准的结构化地址信息,如北京市海淀区上地十街十号【推荐,地址结构越完整,解析精度越高】\n 2、支持\"*路与*路交叉口\"描述方式,如北一环路和阜阳路的交叉路口\n 第二种方式并不总是有返回结果,只有当地址库中存在该地址描述时才有返回。\n \n \n Input Schema:\n {\n \"type\": \"object\",\n \"properties\": {\n \"address\": {\n \"title\": \"Address\",\n \"type\": \"string\"\n },\n \"ak\": {\n \"title\": \"Ak\",\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"address\",\n \"ak\"\n ],\n \"title\": \"map_geocodeArguments\"\n }\n"
},
{
"role": "user",
"content": [
{
"type": "text",
"text": "<task>\n从东莞南城汽车站骑行到松山湖大概要多久?\n</task>"
},
{
"type": "text",
"text": "<environment_details>\n# VSCode Visible Files\n(No visible files)\n\n# VSCode Open Tabs\n(No open tabs)\n\n# Current Time\n2025/4/25 上午6:52:29 (Asia/Shanghai, UTC+8:00)\n\n# Current Working Directory (/Users/yangjian/Desktop) Files\n(Desktop files not shown automatically. Use list_files to explore if needed.)\n# Context Window Usage\n0 / 64K tokens used (0%)\n\n# Current Mode\nACT MODE\n</environment_details>"
}
]
}
],
"temperature": 0,
"stream": true,
"stream_options": {
"include_usage": true
}
}
我这里为了方便大家阅读做了精简,实际完整的请求很长,我放文末的参考链接了。
这里我们可以看到,cline 直接在提示词里面告诉 AI 有哪些 MCP 工具,每个工具的作用是什么,如何调用,让 AI 现学现用。AI 根据需要调用指定的 MCP tool,得到返回结果之后,再进行下一步操作,可能再调用另一个 MCP tool,直到完成当前任务为止。
下图是我用 Cline 调用 MCP 的整个过程,你看了也许会有更深的体会:
总的来说,Function Call 是在模型训练的时候就内置了工具调用功能,而 MCP 本质上则是一个提示词工程,它通过在提示词中加入了工具调用的规则让大模型现学现用,MCP 是利用了 AI 的“小样本学习”能力, 而这个能力几乎所有的 AI 大模型都具备的,所以说它是一个通用的协议。由于这个协议是写在模型的上下文提示词中的,所以又被称之为”模型上下文协议“。
值得一提的是,这种提示词工程的 MCP 实现非常费 Token,随便一个请求都是上万的 Token 输入,下图是我的 Cloudfare AI 网关的日志,基本上每次请求的输入 Token 都超过了 15000。
# 3. 什么是 A2A 协议
A2A 协议即 AI 智能体之间的协议。首先我们要了解什么是智能体,AI 智能体由三个部分组成:
- 感知模块
- 决策模块
- 执行模块
感知模块其实就是智能体的输入模块,可以是键盘输入,语音输入,也可以是其他各种传感器。
决策模块其实就大语言模型了。
执行模块其实由大量的 MCP 组成的一个工具池子,他们是智能体的”手脚“。
如果说,我们可以把大模型看做一个信息引擎的话,那么 AI Agent 本质上其实就是一个任务引擎,它能够自动编排,执行任务。
A2A 协议就是智能体之间的交互协议。智能体们通过这个协议实现”互帮互助“地完成任务。如果把智能体看做是一个小团队的话,A2A 协议就可以看做是一个“跨部门协作的准则”。 我们可以想象个场景:你们公司每个部门都有自己的软件系统。例如,销售部门用 CRM,财务部门用 ERP,客服部门用智能客服工单系统。过去,这些系统之间是各自独立的,数据也不会互通。你经常需要在不同系统之间来回复制粘贴,特别麻烦。
但现在公司推出了一套新方案,每个系统里都有一个强大的 AI 助手,而且它们之间建立了一套统一的通信协议。当销售部门的 AI 收到一个大订单时,它会直接通过这个协议通知财务 AI,让它记账和开票;然后财务 AI 再通知仓储系统的 AI,安排发货并跟踪物流,最后还会提醒客服部门的 AI 做好后续跟进。
所有这些沟通和协作,都是 AI 和 AI 之间的主动和私下沟通,最后我们人类只需要点头确认一下,整个流程就能顺利流转。这样不同部门的 AI 助手既各司其职,又能彼此配合。这就是 A2A 技术的核心——让不同平台、不同岗位的 AI 智能体,能够互相通信协作,突破信息孤岛,完成跨系统的复杂任务。
英伟达 CEO 黄仁勋在今年 CES 上曾说:
随着 AI 技术的发展,未来的 IT 部门将逐渐演变为 AI Agent 的人力资源部门,负责管理、培养和改进这些数字员工,让它们更好地为公司服务。
可以预见,A2A 协议将成为数字员工之间协作的标准。