🔌 MCP:AI 世界的「USB-C」
一个开放协议,让 AI 应用连上所有工具。它和 Function Calling 到底是什么关系?
📚 本文目录
为什么 AI 需要「工具」?
🔌 模型的局限
大模型只会「想」,不会「做」——它没法读你的文件、查数据库、发邮件、调真实 API。
于是有了工具调用:让模型在需要时,请求调用某个外部函数。
🗣️ Function Calling 是什么
Function Calling 是模型厂商的私有机制,让模型识别意图、输出结构化的 JSON,说「我想调 get_weather("北京")」。
OpenAI、Anthropic、Gemini 各家格式都不同。
问题来了:各厂商的 Function Calling 格式互不通用——API 参数名、JSON 结构、返回处理逻辑都不一样,就像不同品牌的充电接口(Lightning vs USB-C)。
还有三大痛点:① 供应商锁定(换模型要重写代码)② 上下文膨胀(工具一多,每次请求都携带庞大的 Schema,烧 token)③ 动态性差(加工具要改代码重启)。
MCP 是什么:AI 世界的「USB-C」
🌐 开放标准
MCP(Model Context Protocol)由 Anthropic 提出,是开放标准协议,定义 AI 应用如何与各种数据源/工具标准化通信。
像 HTTP 一样,任何语言都能实现 Server 或 Client,解决了 Function Calling 的碎片化。
🔍 动态发现
「我有哪些工具?」在 MCP 里问 Server 就行——客户端启动时自动调 list_tools(),拉取全部可用工具的 Schema。
加工具、换工具都不用改客户端代码。
三个角色各管什么
🏠 Host:总指挥
AI 应用本体,比如 Claude Desktop、Cursor。负责路由、记忆、Prompt 管理,是用户和工具之间的调度中枢。
🔌 Client + Server:连接
Client 是 Host 内部的连接器;Server 是独立的工具进程,持有工具的实现、权限、状态。
通过 Stdio 或 SSE 通信,工具逻辑与模型完全解耦。
核心价值:模型只管「思考」,MCP Server 管「干活」。而且一个高质量的 Server(比如 GitHub 操作、数据库查询)可以被所有支持 MCP 的 AI 应用复用——生态一次写好,到处即插即用。
安全性也更好:敏感凭证(如数据库密码)只存在 Server 端,不需要传给模型 API。
一个例子:查天气的完整流程
MCP vs Function Calling:分层协作
MCP
连接万物
工具接入层
开放标准
Function Calling
连接大脑
模型调用层
厂商私有
注意:两者是分层协作,不是替代关系。最佳实践里,应用层先把 MCP Server 的工具列表动态转换成当前模型(比如 GPT-4)认得的 Function Calling Schema,发给模型;模型返回调用请求后,应用再通过 MCP Client 去执行。各司其职。
| 维度 | 🔌 MCP | 🧠 Function Calling |
|---|---|---|
| 本质 | 开放标准协议 | 厂商私有机制 |
| 工具发现 | 动态 list_tools() | 需预注册硬编码 Schema |
| 语言 | 语言无关 | 各厂商格式不同 |
| 运行 | Server 独立进程 | 依赖厂商 API |
| 解决/痛点 | 碎片化、锁定 | 上下文膨胀、动态性差 |
为什么模型自己从不「执行」代码
🚫 模型只出「调度意图」
模型永远只输出「我想调 get_weather("北京")」这个结构化请求,谁真正执行?不是模型。
是你的代码、框架或平台沙箱去跑。模型住在一个物理隔离的推理服务里,碰不到你的系统。
🔐 安全契约 tool-use contract
让模型在你机器上删库、退款、读隐私?不可能。
模型只输出意图,你校验 call_id、参数、权限、用户是否同意后再执行——这就是 tool-use contract。
| 🧠 Function Calling | 🛠️ Tool Calling | |
|---|---|---|
| 定位 | 早期/狭义:模型输出「调哪个函数+JSON参数」 | 现代/广义:工具箱选工具 + Agent loop |
| 关系 | 函数是工具的一种 | 函数、搜索、代码执行、MCP 都是工具 |
| 执行 | 模型侧不执行 | 模型侧也不执行,是应用/框架/平台跑 |
一句话:这套架构怎么落地
把「Function Calling 是模型的方言、MCP 是通用的连接层」焊死:
模型 = 只产出「我想调哪个工具 + 参数长啥样」的意图。
MCP = 用统一标准把 AI 应用连到所有工具。
你的代码/框架 = 收到意图后真正执行,再把结果回给模型。
MCP 做工具接入层
屏蔽差异:读文件、查库、发消息,对上层都是统一的 call_tool 接口,权限日志错误都在这层收敛。
Function Calling 做模型调用层
翻译官:把 MCP 的工具列表动态转成当前 LLM 认得的 Schema,再发给模型。
即插即用
要加「发邮件」功能?部署一个新 MCP Server 即可,主程序代码一行不用改。
安全隔离
敏感凭证只存 Server 端,模型拿不到;执行前你校验权限和用户同意。
MCP 是 AI 世界的「USB-C」——开放、标准、即插即用,负责连接万物;Function Calling 是模型说「我想干嘛」的方言。二者分层协作:MCP 连接工具,Function Calling 连接大脑。模型永远只出意图,真正执行的是你的代码。
MCP 是 Model Context Protocol,Anthropic 提出的一个开放标准协议,用来让 AI 应用和外部工具、数据源标准化通信。它解决了以前 Function Calling 各家格式不统一的问题,类似 USB-C 统一了充电接口。核心是动态发现——客户端启动时调 list_tools() 就能拿到所有工具,加工具不用改代码。
两者是分层协作,不是替代。Function Calling 是模型厂商的私有机制,模型输出“我想调哪个函数 + JSON 参数”,各家格式不通用,而且工具要预注册、会烧上下文。MCP 是开放的通用连接层,动态发现工具、Server 独立运行、语言无关。实践中通常是 MCP 连接工具,Function Calling 负责和模型通信,应用层做转换。
因为模型住在一个物理隔离的推理服务里,碰不到你的系统。它只负责输出“调度意图”,也就是建议调哪个工具、参数长什么样;真正执行的是你的代码、框架或平台沙箱。这是安全契约——你在执行前要校验参数、权限、用户是否同意。