MCP(Model Context Protocol)协议旨在解决大模型与多工具对接的适配问题,通过统一接口实现工具的自动发现和调用。文章详细解析了MCP的四方角色、协议消息格式、工作流程及其与传统Function Calling的区别。MCP能显著降低开发复杂度,但其生态尚处早期,存在局限性。文章最后提供了新手接入MCP的步骤及未来展望,适合想要学习大模型开发的程序员参考。
你有没有数过,做一个 Agent 到底要对接多少种工具?
数据库、搜索引擎、邮件系统、日历、GitHub、企业微信、飞书、内部 API、第三方 SaaS……每个工具都有自己的调用方式、认证方式、返回格式。你每加一个工具,就要写一堆适配代码。更可怕的是,如果换了 Agent 框架,比如从 LangChain 换到 LlamaIndex,这些适配代码可能又要重写。
这就好比你的手机充电器是 Lightning,耳机接口是 3.5mm,充电宝接口是 Micro-USB,每个设备都不一样,出门得带三条线。
MCP(Model Context Protocol)就是想解决这个问题。它的目标是:给 Agent 和工具之间设计一个通用接口,像 USB-C 一样,一根线通吃所有设备。 这一篇,我把 MCP 拆开讲:它是什么、怎么工作的、优点在哪、坑在哪、你什么时候该用它。
MCP 到底是什么
MCP 是 Anthropic 在 2024 年底推出的一个开放协议,全称 Model Context Protocol,翻译过来叫"模型上下文协议"。
名字听起来很抽象,其实它的核心特别简单:让大模型(或者 Agent)能够以统一的方式访问外部工具和数据源。
在 MCP 之前,你让 Agent 查天气、读邮件、调数据库,每个功能都要单独写适配。MCP 出现后,这些工具只要按照 MCP 协议暴露自己的能力,Agent 就能自动发现、调用它们,而不需要为每个工具单独写代码。
MCP 不是一种新的模型,也不是一种新的 Agent 框架。它是一套通信协议,定义了"Agent 怎么跟外部世界说话"的标准。
你可以把它理解为 HTTP。HTTP 出现之前,每个网站都有自己的通信方式;HTTP 之后,浏览器用一个协议就能访问所有网站。MCP 也想做 Agent 世界的 HTTP。
为什么 Agent 需要一个 USB-C
要理解 MCP 的价值,得先看没有它的时候有多痛苦。
痛苦一:每个工具都要手写适配。
你想让 Agent 查天气,得去找天气 API 文档,看它的认证方式、请求格式、返回字段。然后写一段代码封装成"天气工具"。第二天你又要加一个新工具,比如查股票,又得重复一遍。工具越多,适配代码越多。
痛苦二:工具描述不一致。
Agent 要调用工具,得先知道"这个工具能干什么"“需要什么参数”。不同框架的描述格式不一样:有的用 JSON Schema,有的用自然语言,有的用框架自带的类。你换一个框架,描述格式就变了。
痛苦三:上下文无法共享。
Agent 工作时,经常需要把外部数据作为上下文喂给模型。比如查完数据库,把查询结果塞进提示词。传统方式里,每个工具的返回格式不同,你得单独处理"怎么把它转成模型能看懂的上下文"。
痛苦四:生态碎片化。
一家公司如果用了三个 Agent 框架、两套自研工具、五个第三方 SaaS,那组合起来的适配工作量是惊人的。而且很多功能是重复的:大家都在写"读邮件工具"“查日历工具”“调 Slack 工具”。
MCP 的思路是:让工具提供者按统一协议暴露能力,让 Agent 按统一协议消费能力。 工具提供者只需要写一次 MCP Server,Agent 只要接入 MCP 就能用所有 Server。这跟 USB-C 的思路一模一样:线只需要一根,设备爱换哪个换哪个。
MCP 的四方角色
MCP 定义了四个核心角色,你把这四个角色搞清楚,基本就理解了它的架构。
第一个角色:Host。
Host 是"宿主",也就是运行 Agent 的应用。比如 Claude Desktop、Cursor、一个你自己写的 AI 应用。Host 负责加载 MCP Client、管理用户会话、把 Agent 和外部世界连接起来。
第二个角色:Client。
Client 是 Host 里的一个连接模块,负责跟 MCP Server 通信。一个 Host 里可以有多个 Client,每个 Client 连一个 Server。Client 理解 MCP 协议,知道怎么发现工具、怎么调用工具、怎么处理返回结果。
第三个角色:Server。
Server 是工具或数据源的提供方。比如一个"天气 MCP Server"“邮件 MCP Server”“公司内部数据库 MCP Server”。Server 按照 MCP 协议暴露自己的能力,告诉 Client:“我能做这些事,参数是什么,返回什么。”
第四个角色:Tool / Resource / Prompt。
这三个是 Server 暴露的具体内容。
- Tool:工具,Agent 可以调用它来执行动作。比如"发送邮件"“查询数据库”“创建 GitHub Issue”。
- Resource:资源,只读的数据。比如"某份文件的内容"“某个网页的 HTML”“某条数据库记录”。
- Prompt:提示词模板,Server 可以提供给 Agent 一些预置提示词,帮助 Agent 更好地使用这个 Server。

这张图展示了 MCP 的四方关系:Host 是应用,Client 是连接层,Server 是工具/数据提供方,Server 内部包含 Tool、Resource、Prompt。Agent 通过 Host → Client → Server 这条链路访问外部世界。
MCP 协议的消息长什么样
你可能会好奇:MCP 协议具体规定了什么样的消息?是不是特别复杂?
其实并没有。MCP 的消息结构跟 JSON-RPC 很像,核心是几种消息类型:
请求(Request)。 比如 Client 向 Server 请求"列出你的工具",消息大概长这样:
{
"jsonrpc":"2.0",
"method":"tools/list",
"id":1
}
响应(Response)。 Server 返回自己有哪些工具:
{
"jsonrpc":"2.0",
"id":1,
"result":{
"tools":[
{
"name":"get_weather",
"description":"查询指定城市的天气",
"inputSchema":{
"type":"object",
"properties":{
"city":{"type":"string"},
"date":{"type":"string"}
},
"required":["city"]
}
}
]
}
}
调用(Call)。 Agent 要查天气时,Client 发:
{
"jsonrpc":"2.0",
"method":"tools/call",
"params":{
"name":"get_weather",
"arguments":{
"city":"北京",
"date":"明天"
}
},
"id":2
}
通知(Notification)。 一些不需要响应的消息,比如 Server 状态变更时通知 Client。
你看,消息格式并不复杂,但关键在于统一。每个 Server 都按这个格式返回工具列表、接收调用请求、返回结果。Agent 不需要关心底层实现。
协议还规定了生命周期:初始化、能力协商、正常运行、关闭。初始化时 Host 和 Server 会交换"你支持什么"“我支持什么”,避免后面出现"我以为你能做,其实你不能"的尴尬。
MCP 和传统 Function Calling 的区别
你可能已经接触过 Function Calling。OpenAI、Claude 都支持让模型输出函数调用请求,然后你写代码执行函数、再把结果返回给模型。MCP 和 Function Calling 有什么关系?
关系是:MCP 是 Function Calling 的"上层标准化"。
Function Calling 定义的是"模型怎么表达调用意图"——比如输出一段 JSON,包含函数名和参数。但它没说这些函数从哪来、怎么管理、认证怎么做、返回格式怎么统一。这些你都要自己实现。
MCP 把这些都补齐了:
- 函数从哪来?从 MCP Server 来,Server 自动注册。
- 怎么管理?Host 通过 Client 管理多个 Server。
- 认证怎么做?MCP 协议里有标准的认证机制。
- 返回格式怎么统一?MCP 规定了返回的数据结构和错误格式。
我打个比方:Function Calling 像是"给电器规定了电压"。你只要电器是 220V,插上就能用。但插头形状没规定,所以各国插头还不一样。MCP 就像是"统一了插头形状",让你走到哪都能插。

这张图对比了两种方式:
- 左边是传统方式,Agent 直接面对一堆工具,每个工具格式不同、认证不同,Agent 要记一堆适配。
- 右边是 MCP 方式,中间加了一个 MCP Server 层,Agent 只需要懂 MCP 协议,Server 负责翻译给具体工具。
MCP 的工作流程
一条完整的 MCP 调用链路大概是这样的:
1. **Host 启动,加载配置好的 MCP Server**
2. **MCP Server 向 Client 宣告自己的能力:有哪些 Tool、Resource、Prompt**
3. **用户向 Agent 提问:"帮我查一下明天北京的天气"**
4. **Agent 判断需要调用天气工具**
5. **Agent 通过 Client 向天气 MCP Server 发起调用请求**
6. **Server 执行实际查询,返回天气数据**
7. **Client 把数据按 MCP 格式返回给 Agent**
8. **Agent 把数据作为上下文,生成最终回答**
这个流程和 Function Calling 很像,但 MCP 的标准化体现在几个细节:
第一,工具发现是自动的。
传统 Function Calling 里,你要把每个工具的 JSON Schema 提前写好,硬编码进 Agent。MCP 里,Server 启动时会自动告诉 Client:"我有这些工具,参数是什么。"Agent 不用提前知道,运行时动态发现就行。
第二,调用是标准化的。
不管是查天气、读邮件、还是调数据库,调用方式都一样:发一个 MCP 消息,里面包含工具名和参数。Client 负责把这个消息翻译成 Server 能懂的语言。
第三,返回格式是统一的。
Server 返回的结果,统一按 MCP 的格式包装。Agent 拿到后不需要做特殊解析,直接当成上下文塞给模型。

这张图把上面的流程可视化:Host 加载 Server → Server 宣告能力 → 用户提问 → Agent 决定调用 → Client 转发 → Server 执行 → 结果返回 → Agent 生成回答。整个链路的关键在于"标准化",每个环节的接口都是统一的。
MCP 和 Function Calling 的协作方式
很多人问:MCP 会取代 Function Calling 吗?
我的看法是:不会,它会和 Function Calling 长期共存。
Function Calling 是模型层面的能力,解决的是"模型怎么表达调用意图"。只要模型需要调用外部能力,就需要 Function Calling。MCP 是协议层面的标准,解决的是"调用意图发出去之后,由谁来执行、怎么执行"。
两者的协作关系是这样的:
- Agent 内部,模型还是通过 Function Calling 输出调用请求
- Agent 拿到调用请求后,发现目标工具是一个 MCP Server
- Agent 把请求翻译成 MCP 消息,通过 Client 发给 Server
- Server 执行完,返回结果
- Agent 再把结果作为上下文喂给模型
也就是说,Function Calling 是"内部语言",MCP 是"外部通用语"。Agent 用 Function Calling 思考,用 MCP 跟外部工具交流。
打一个不太准确的比方:Function Calling 像是你大脑里的"我想喝水"这个想法;MCP 像是你伸手去够水杯、拧开瓶盖、喝下去这套标准化动作。想法是内在的,动作是外在的,两者都需要。
MCP 现在能干什么
数据访问类: 读本地文件、查 SQLite/PostgreSQL 数据库、访问 GitHub、读网页内容。这些是最基础也是最实用的。
工具操作类: 发邮件、操作 Slack、创建日历事件、调用搜索引擎。这类 Server 让 Agent 能从"只能聊天"变成"能办事"。
开发辅助类: 读代码库、运行 shell 命令、操作 Git。这类在 AI 编程工具里很有用。
企业私有类: 公司内部 API、内部知识库、内部数据库。这类需要你自己按照 MCP 协议封装。
生态还在早期,但增长很快。 Anthropic 官方维护了一个 Server 列表,社区也在贡献各种开源实现。未来很可能出现一个"MCP 应用商店",就像现在的 Chrome 插件商店一样。
一个 MCP Server 的内部结构示例
为了让你不那么抽象,我画一个最简 MCP Server 的骨架。不需要你真正写出来,但能看懂它大概怎么组织。
class WeatherMCPServer:
def __init__(self):
self.tools = {
"get_weather": {
"description": "查询指定城市天气",
"input_schema": {...},
"handler": self.get_weather
}
}
def handle_request(self, request):
if request.method == "tools/list":
return {"tools": list(self.tools.values())}
if request.method == "tools/call":
tool = self.tools[request.params.name]
return tool["handler"](request.params.arguments)
def get_weather(self, args):
city = args["city"]
# 调用真实天气 API
data = call_real_weather_api(city)
return {
"content": [{"type": "text", "text": data}]
}
这个骨架的核心就两部分:
- 注册表
:列出所有工具、参数格式、处理函数
- 请求分发器
:根据 MCP 消息,路由到对应的处理函数
真正的 MCP SDK 会帮你封装协议细节,比如 JSON-RPC 解析、生命周期管理、错误处理。你只需要写"注册表"和"处理函数"这两块业务逻辑。
MCP 的局限和坑
MCP 听起来很美好,但不是银弹。我列几个现实问题。
局限一:生态还在早期。
虽然发展快,但相比 Function Calling 和传统 API 集成,MCP 的工具数量和成熟度还差得远。很多你想用的工具,可能还没有 MCP Server,你还得自己写。
局限二:Server 质量参差不齐。
MCP 协议只规定了接口标准,没规定 Server 内部实现质量。一个天气 Server 可能返回很干净的数据,另一个可能返回一堆噪声。你用的时候得自己评估。
局限三:安全问题。
MCP Server 通常运行在本地或被 Host 加载。如果加载了不可信的 Server,它可能读取你的本地文件、调用你的系统命令。这就像是浏览器插件,权限很大,来源要可控。
局限四:性能开销。
MCP 多了一层协议转换。Function Calling 是模型直接输出函数调用,你的代码直接执行。MCP 是模型输出 MCP 消息,Client 转发给 Server,Server 执行再返回。链路更长,延迟更高。对延迟敏感的场景,要评估一下这个开销能不能接受。
局限五:Prompt 工程还是省不掉。
MCP 解决了"Agent 怎么调用工具",但不解决"Agent 什么时候该调用哪个工具"“怎么组合多个工具”“怎么处理工具失败”。这些问题依然是 Agent 设计的核心难题。
MCP 和其他协议比怎么样
MCP 不是第一个想做"通用接口"的协议。之前还有 OpenAPI、Plugin API、Function Calling 等。简单对比一下。
OpenAPI。 它是 REST API 的描述规范,主要用于人与人之间的接口文档。理论上 Agent 也可以读 OpenAPI 文档然后调用 API,但 OpenAPI 没有定义"模型上下文"怎么传、工具结果怎么回喂、状态怎么管理。MCP 比它更面向 Agent 场景。
Plugin API(比如 ChatGPT Plugin)。 它要求开发者按平台特定格式注册工具,而且主要面向 OpenAI 生态。MCP 是协议层面的标准,不绑定某个平台,理论上任何支持 MCP 的 Host 都能用。
Function Calling。 这是模型输出调用意图的格式标准,但不解决"工具从哪来、怎么管理"的问题。MCP 在 Function Calling 基础上,加了服务发现、生命周期、上下文传递等一层。
所以 MCP 的定位更像是一个介于模型和外部世界之间的中间层协议。它不是要取代谁,而是要把大家粘连起来。
什么时候该用 MCP
给你一个简单的判断标准。
适合用 MCP 的场景:
- 你要对接多个外部工具,不想每个都手写适配
- 你用的 Agent 框架支持 MCP,生态里有你需要的 Server
- 你的应用是桌面端或本地运行,对安全可控性要求高
- 你希望工具能力可以复用、共享、插拔
不适合用 MCP 的场景:
- 你只有一个工具要接,写几行代码就能搞定
- 你对延迟极其敏感,不能承受额外的协议层开销
- 你需要高度定制化的调用流程,MCP 的标准化反而成了束缚
- 你用的框架还不支持 MCP
我的判断:如果你在做"通用型 Agent"或者"多工具 Agent",MCP 值得认真考虑。如果你只是给某个具体业务做一个小工具,传统 Function Calling 或 API 调用可能更直接。
具体场景:让 Agent 能查数据库
为了把 MCP 说得更具体,我举一个最常见的例子:让 Agent 能查你公司的内部数据库。
没有 MCP 的时候,你要做这些事:
- 在你的 Agent 代码里写 SQL 执行逻辑
- 处理数据库连接、权限、错误
- 把查询结果格式化成模型能看懂的样子
- 每次换框架都要重写一遍
用了 MCP 之后,流程变成:
- 你写一个"数据库 MCP Server",它暴露一个
query_sql工具 - Server 里封装了数据库连接、权限校验、结果格式化
- 你的 Agent 只要接入 MCP,自动就能发现
query_sql - 用户说"帮我查一下上个月销售额",Agent 调用
query_sql,Server 执行 SQL,返回结果 - Agent 把结果生成自然语言回答
数据库 MCP Server 还能做很多安全设计:比如只允许 SELECT,拒绝 DELETE 和 DROP;只能查特定表;返回结果超过 100 行就截断。这些安全逻辑都封装在 Server 里,Agent 不需要知道。
这个例子说明 MCP 的最大价值:把"工具的具体实现"和"Agent 怎么用工具"解耦。 Agent 只需要知道"有这么个工具",具体怎么连数据库、怎么做安全控制,交给 Server 去管。
新手怎么接入 MCP
如果你想试试 MCP,流程大概是这样:
第一步:选一个支持 MCP 的 Host。 比如 Claude Desktop、Cursor,或者自己用 SDK 写一个。
第二步:找一个现成的 MCP Server。 可以从官方列表或 GitHub 上找。比如先接一个简单的"文件读取 Server"练手。
第三步:配置 Server。 通常是在 Host 的配置文件里加一段 Server 的启动命令。比如指定 Server 的入口文件、环境变量、认证信息。
第四步:测试工具发现。 启动后,让 Agent 列出当前有哪些可用工具。如果能正确列出,说明连接成功。
第五步:测试调用。 让 Agent 用自然语言请求一个工具能做的事,看链路是否能跑通。
自己写 Server 也不难。核心就是实现 MCP 协议的几个标准接口:初始化、列出能力、调用工具、返回结果。很多语言都有 SDK 帮你封装好协议细节,你只需要写业务逻辑。
MCP 的未来可能性
MCP 现在还处于早期,但它可能带来几个有意思的变化。
第一,工具市场可能兴起。 如果 MCP 成为事实标准,会出现大量现成的 Server。开发者不需要自己写"读邮件工具"“查日历工具”,直接去市场下载一个就行。这会极大降低 Agent 的开发门槛。
第二,企业软件的形态可能改变。 现在的 SaaS 产品是给人用的,有复杂的 UI 和流程。未来 SaaS 可能同时暴露给 MCP Server,让 Agent 直接调用。软件从"人操作界面"变成"Agent 操作接口"。
第三,Agent 的迁移成本会降低。 今天你换 Agent 框架,工具适配代码要重写。如果大家都是 MCP,理论上你可以从 Claude Desktop 换到 Cursor,再换到自研应用,工具层几乎不用动。
当然,这些都建立在 MCP 能被广泛接受的前提下。标准化协议的成功,从来都不是技术问题,而是生态问题。足够多的 Host 支持、足够多的 Server 提供、足够多的开发者参与,MCP 才能真正变成"USB-C"。
总结
如果你现在对 MCP 感兴趣但还没动手,我的建议是分三步走。
第一步:先用现成的。 别急着写 Server,先在 Claude Desktop 或 Cursor 上接一个官方或社区的 MCP Server,看看体验。你不需要写代码,就能感受到"Agent 自动发现工具"是什么体验。
第二步:封装一个内部工具。 选一个你们团队最常用的内部工具或数据源,按 MCP 协议封装成一个 Server。选一个简单点的,比如"查内部订单状态"或"读 Wiki"。跑通之后,你会对协议有真实体感。
第三步:评估要不要大规模投入。 如果你团队有三个以上 Agent 应用、五个以上常用工具,MCP 的标准化价值会逐渐显现。但如果只有一个简单应用,投入产出比未必高。不要为了追新而用。
MCP 目前还不成熟,但它代表的方向是明确的。保持关注、小步试错,是比较稳妥的姿势。
MCP 是 Agent 生态里一个很重要的信号:大家开始意识到,Agent 真正的瓶颈不是模型能力,而是模型跟外部世界连接的标准化。
Function Calling 让模型"能调用工具",MCP 让工具"能被统一调用"。一个是表达能力,一个是连接能力。两者结合,Agent 才能从"聊天机器人"变成"能干活的助手"。
MCP 现在还在早期,生态、安全、性能都有不少问题。但它代表的方向是对的:未来的 Agent 应该像插 USB-C 一样,插上工具就能用,拔下来就能换。
最后
2026 年一晃已经过半,AI 大模型的热潮不仅没有降温,反而持续升温!
金融行业用大模型做风控、医疗依靠 AI 解析影像,电商、制造、教育各行各业,都在把 AI 融入日常业务。曾经热闹的 “百模大战”,早就告别单纯比拼模型参数,正式进入落地应用时代。
现在企业疯狂紧缺一类人才:懂业务、懂 AI、能做出可上线项目的大模型开发工程师,岗位缺口大,薪资待遇十分可观。

风口再好,不如手握高薪 offer 实在。行情火热,普通人、程序员该怎样从零入门大模型,抓住这波机会?
今天整理好【2026 最新版】AI 大模型全套免费学习资源,覆盖零基础入门、项目实战、理论知识、大厂面试,从基础一路进阶。所有资料分类归档,没有多余杂料,无套路免费分享给想要入局 AI 赛道的程序员与零基础小白!
👇👇扫码免费领取全部内容👇👇

1、大模型系统化完整学习路线

2、大模型经典书籍&文档

3、AI 大模型最新行业研究报告

4、企业级实战项目 + 完整配套源码

5、大厂大模型面试真题汇总

6、这些资料真的有用吗?
这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理,现任上海殷泊信息科技CEO,其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证,服务航天科工、国家电网等1000+企业,以第一作者在IEEE Transactions发表论文50+篇,获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。
资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的技术人员,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。


这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】


1370

被折叠的 条评论
为什么被折叠?



