Anthropic 公司在 2024 年 11 月发布了模型上下文协议 (Model Context Protocol, MCP)。开发者社区最初对此反应积极,但很少有人意识到它的全部潜力。 快进到 2025 年 3 月,MCP 突然成为了人工智能领域最热门的话题。
当流行的消费级 IDE,如 Cursor、Cline 和 Goose 官方宣布支持 MCP 时,这种转变变得显而易见。随着越来越多的客户端应用采用 MCP,服务器端集成变得愈发重要,进一步放大了其影响力。
然而,尽管 MCP 备受瞩目,许多开发者仍然心存疑问:“MCP 到底是什么?我应该关注它吗?这真的是下一个重大技术趋势,还是又一个 AI 炒作?”这些困惑是真实存在的,也是可以理解的。
在本文中,我们将揭开 MCP 的神秘面纱,阐明其用途,并剖析它为何重要(或不重要)。
为了更清晰地说明,MCP 既不是像 LangChain 这样的框架,也不是一个工具;它是一种协议,类似于 Web 的 HTTP 协议或消息传递的 SMTP 协议。
一个更相关的例子是语言服务器协议 (Language Server Protocol, LSP),它规范了在开发工具生态系统中添加对编程语言支持的方式。 类似地,MCP 规范了将额外的上下文和工具集成到 AI 应用生态系统中的方式。
它提供了一套通用规则,允许任何客户端与任何服务器通信,而无需考虑组件的构建者,从而为多样化和可互操作的 AI 生态系统奠定基础。Anthropic 公司将 MCP 定义为智能代理系统的 USB-C 端口。它标准化了 AI 应用、大型语言模型 (LLM) 和外部数据源(数据库、Gmail、Slack 等)之间的连接。
机器是客户端,外围设备是工具,而 MCP 就是 Type-C 端口。因此,无论设备或外围设备由谁制造,它们都可以无缝协作。
图片来源:https://www.linkedin.com/in/norah-klintberg-sakal
MCP 定义了客户端应如何与服务器通信,以及服务器应如何处理工具(API、函数等)和资源(只读文件,如日志、数据库记录等)。 稍后将对此进行详细介绍。
简短的回答:不。
即使没有 MCP,你也能正常生活。它并不具有革命性,但为原本混乱的智能代理开发领域带来了标准化。如果你的应用符合 MCP 客户端规范,你就可以连接到任何符合 MCP 客户端规范的服务器。在另一种情况下,作为客户端开发者,你必须根据自己的需求定制服务器,其他人也无法为你的平台构建应用。服务器开发者的情况也是如此。
例如,在 Cursor 内部,如果 MCP 服务器遵循协议,你就可以连接到任何 MCP 服务器。
至此,你或多或少应该清楚 MCP 的用途了。现在,让我们更深入地了解 MCP,以获得更清晰的认识。
模型上下文协议 (MCP) 包含几个协同工作的关键组件。以下是 Matt Pocock 在 Twitter 上发布的高级架构图。
完整的 MCP 架构包含四个部分:
在上面的图表中,客户端和宿主被合并在一起;为了更清晰地说明,我们将它们分开。接下来,让我们详细了解每个组件,从内部理解 MCP。
宿主是期望从服务器获取数据的 LLM 应用。宿主可以是 IDE、聊天机器人或任何 LLM 应用。它们负责:
示例包括 Claude Desktop、Cursor IDE、Windsurf IDE 等。
每个客户端都有以下关键职责:
服务器是丰富 LLM 外部数据和上下文的基本构建块。关键的服务器原语包括:
LIST_FILES
的工具,以目录名作为参数,将获取目录中的文件并将它们发送回客户端。工具也可以是对外部服务(如 Gmail、Slack、Notion 等)的 API 调用。工具由模型控制,而资源和提示词由用户控制。模型可以根据给定的上下文自动发现和调用工具。
协议构成了模型上下文协议 (MCP) 架构的基础。它定义了不同组件(宿主、客户端和服务器)之间的通信方式。有关更深入的信息,请参阅官方的 MCP 规范。
该协议由几个关键层组成:
在以上五个层中,基础协议,即 JSON-RPC 消息类型和生命周期管理,对于每个 MCP 实现都至关重要。其他组件可以根据特定应用的需求来实现。
MCP 的核心是使用 JSON-RPC 2.0 作为其消息传递格式,为客户端和服务器之间的通信提供了一种标准化的方式。基础协议定义了三种基本的消息类型:
{
"jsonrpc": "2.0",
"id": "string | number",
"method": "string",
"params"?: {
"[key: string]": "unknown"
}
}
{
"jsonrpc": "2.0",
"id": "string | number",
"result"?: {
"[key: string]": "unknown"
},
"error"?: {
"code": "number",
"message": "string",
"data"?: "unknown"
}
}
{"jsonrpc": "2.0",
"method": "string",
"params"?: {
"[key: string]": "unknown"
}
}
该协议可以基于不同的传输层实现,具体取决于部署需求:
基础协议为客户端和服务器之间的连接实现了结构化的生命周期:
让我们通过一个简单的例子来理解我们目前所学的内容。其中:
以下是 MCP 交互生命周期过程的详细工作流程:
initialize
请求,其中包含其功能(它支持的功能)。tools/list
)。create_ticket
、assign_ticket
、add_comment
等。initialized
通知,表明它已准备好开始正常操作。
tools/call
请求,调用 create_ticket
工具,并附带适当的参数。tools/call
请求。ping
请求,以确保连接仍然存活。shutdown
请求。exit
通知。这种标准化的生命周期确保了任何 MCP 宿主和服务器之间可靠、可预测的交互,而无需考虑它们的具体实现。无论是 Cursor 连接到 Linear 进行工单管理,还是连接到 Slack 进行消息传递,都应用相同的协议模式,从而使集成保持一致性和互操作性。
MCP 当前的局限性之一是缺乏标准化的身份验证机制。协议本身没有规定应如何处理身份验证,而是留给实现者创建自己的解决方案。这可能会导致不同 MCP 服务器和客户端之间的安全实践不一致。
作为一个相对较新的协议,MCP 的生态系统仍在发展中。服务器数量较少,并且许多应用程序没有官方的 MCP 服务器。
LangChain 是一个框架,而 MCP 是一种协议。使用框架,你可能会面临供应商锁定的风险,但协议则不会。只要你遵循协议指南,就不会有问题。即使是 LangChain 也可以采用 MCP 作为构建有状态智能代理的标准。
直接调用工具不是更容易吗,为什么还要绕圈子使用 MCP 服务器? 是的,但是协议确保开发者以统一的方式定义和调用工具,从而更容易开发客户端(宿主应用)和服务器(集成)。
同样,目标是尽可能减少开发开销。例如,Cursor 开发者只需关心客户端实现,而 Linear 只需关心服务器实现。只要两者都符合基础协议标准(我们在上面详细描述过),就万事大吉。
不会,但随着 MCP 客户端的增长,对 MCP 服务器的需求将会猛增。
下一篇我们将会从零手动实现MCP
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有