MCP (Model Context Protocol,模型上下文协议)是一个标准化协议,定义了应用程序和 AI 模型之间交换上下文信息的方式。这使得开发者能够以一致的方式将各种数据源、工具和功能连接到 AI 模型(一个中间协议层),就像 USB-C 让不同设备能够通过相同的接口连接一样。MCP 的目标是创建一个通用标准,使 AI 应用程序的开发和集成变得更加简单和统一。
如上图所示,在MCP架构体系中,包含MCP Server、MCP Client和MCP Host几个核心组件,及组件间交互协议。
MCP Server是一个通过MCP协议实现对外提供服务的轻量级应用,它对外提供工具执行、资源访问、预定义Prompt等一系列资源。
○ 资源(Resources):类似文件的数据,可以被客户端读取,如 API 响应或文件内容 ○ 工具(Tools):可以被 LLM 调用的函数 ○ 提示(Prompts):预先编写的模板,帮助用户完成特定任务
下面是一个文件系统操作的MCP Server示例,它提供了对文件、目录的读写操作。
在Host应用内部,MCP Client 与 MCP server 保持 1:1 的连接。MCP Client 充当 LLM 和 MCP Server 之间的桥梁。简单理解就是MCP Client SDK,用于实现Host应用使其能够与MCP Server交互。
发起请求的 LLM 应用程序(例如 Claude Desktop、IDE 或 AI 工具)。通常像Claude Desktop 和Cursor这类智能助手应用和IDE,它们都是MCP Host应用,通过MCP client来连接某个MCP Server,并调用其提供的工具。
另外值得注意的是,运行MCP Host应用所在的主机也属于MCP Host的一部分,主机的文件系统、浏览器等都可能成为MCP Server在运行时操作的对象。
MCP采用JSON-RPC来编码消息,在Sever和Client之间通过标准输入输出和Streamable HTTP进行消息交换。
采用标准输入/输出流进行传输,适用于在同一台机器上运行的客户端和服务器之间的通信。
Server
Client
远程通信:利用 SSE 与 HTTP 结合,实现跨网络的实时数据传输,适用于需要访问远程资源或分布式部署的场景。
Server
Client
在使用MCP协议之前,开发智能应用的开发者(如Cursor)如果要使用外部服务的能力,每个应用开发需要各自开发对接外部服务的程序来实现能力集成。使用MCP后,服务提供者(如Slack、Google Drive)会以MCP标准协议对外提供MCP Server,服务的工具和资源将统一汇聚到市场上,应用以标准化的接口对接资源和工具,从而提升资源和工具的标准化和复用率。
当用户在Host应用中输入一个Query后,Host应用是如何在LLM, MCP Client和MCP Server之间交互的呢?下图描述了Query请求处理的完整流程:
Host将用户Query和Tools一起发给LLM。
大模型通过Query和提供的工具进行推理,确定完成用户任务需要执行的工具,如果LLM返回结果中如果需要执行tool_calls,则在会话中调用MCP Server。
Host将MCP Server执行的结果和Message一并发给LLM,如果不需要再调用其他工具,那么调用LLM做最后润色后返回最终结果。
LLM Agents是专为生成需要推理和执行任务的高级人工智能系统。它们能够通过推理思考、回忆过往对话,并通过调用外部工具,根据上下文和用户要求动态规划和执行任务,最终自动完成用户问题。
形象来讲,LLM是一个强大的文本处理大脑,但其本身不具备执行任务的能力,因此需要借助工具,使其能够调用外部工具和服务,从而代理人工完成复杂任务的规划和执行。
OpenAI最初通过Function Calling来给大模型装上“手脚”,让其能够调用外部工具和服务,从而代理人工完成复杂任务的规划和执行。
通过精妙的Prompt设计,可以让模型根据用户Query和可用的Function描述来进行任务分解和推理,从而选择合适的工具进行执行,并通过多次迭代完成用户任务。
Function Calling的问题显而易见,对于Function的描述各厂商存在差异,模型迁移成本高;另外Fucntion Call存在效果不稳定、容错性低等问题。而MCP标准化了Agent与外部资源和工具交互的接口、协议及实现。从而为构建更为健壮的Agent应用和推动生态的协作起到了关键作用。
方面 | MCP | Function Calling |
---|---|---|
定义 | 开放标准协议,标准化AI应用与数据源/工具的连接 | LLM生成外部函数调用的功能,通常由供应商定义 |
标准化程度 | 高,统一框架,跨工具和供应商一致 | 低,依赖供应商实现,可能碎片化 |
控制与责任 | 应用通过MCP服务器管理连接,LLM通过标准化请求交互 | LLM生成函数调用,应用执行,模型对操作有更多控制 |
主要用途 | 提供上下文和数据访问,适合大规模集成 | 执行特定任务,例如API调用或代码执行,灵活性较高 |
灵活性 | 较低,依赖预定义的MCP服务器能力 | 较高,可自定义函数签名 |
示例场景 | 访问Google Drive数据、数据库查询、工具自动化(如Puppeteer) | 调用天气API、执行数据库查询、运行自定义代码 |
随着Manus的发布,MCP协议得以快速普及,MCP应用、MCP Server服务以及MCP应用市场的蓬勃发展,使得MCP技术生态迅速繁荣起来。
几个主要的MCP Server Marketplace上Host的MCP Server数量在短短20天内(2025/3/28 - 2025/4/18)有了大幅的增长。这进一步说明了其技术生态的繁荣程度。
MCP Marketplace | 发布MCP Server数量****3/28 - 4/18 | 类型 |
---|---|---|
Smithery | 2978 - 4792 | 综合MCP资源 |
mcp.so | 4831 - 8990 | 综合MCP资源 |
PulseMCP | 3189 - 3864 | 综合MCP资源 |
Cursor Directory | 1800+ | Cursor生态,专注代码开发场景 |
Glama | 3390 - 3640 | 跨模型协作的场景 |
modelcontextprotocol | 331 | Anthropic官方热门 MCP Server 源码 |
Cline | 90 | VSCode插件市场 |
我们可以在PulseMCP上看到200多个应用支持了MCP,你可以在上面找到适合自己的MCP应用。
以mcp.so上的MCP Server目录为例,我们看到MCP Server的范围已经涵盖数据、研究、云平台、数据库、Chatbot、文件系统、自动化等多个领域。
除此之外,在开发者支持方面,除了官方的SDK以外,FastMCP、Spring AI、mcp-agent等技术框架也进一步降低了MCP的开发成本。
作为一个新兴的技术规范,我们应该以审慎而积极的态度来看待,以下是个人对MCP可能带来的变化和其局限的分析判断。
正如WebService和WSDL定义了系统间服务调用的基本协议,推动了SOA架构的广泛发展,从此单应用系统逐渐发展成为多应用系统,企业内部的各个系统实现了数据交换和服务集成。REST轻量级服务风格进一步降低了数据传输中的Schema复杂度,而之后的微服务又使得服务进一步解耦和原子化,结合容器编排技术提升了服务的治理能力。任何一种技术和协议都是在不断迭代中进行发展、升级及迭代的。
在此,我们不妨大胆预测MCP带来的变化:
MCP OpenAPI化
MCP将成为软件对外开放和集成的新协议,SaaS、应用服务将会以MCP方式提供对外服务,MCP将成为与OpenAPI类似的对外服务协议。
应用交互重构
本文系作者在时代Java发表,未经许可,不得转载。
如有侵权,请联系nowjava@qq.com删除。