最近MCP 这个词在开发AI 应用程式的生态圈中热度很高,基本上无一不讨论。 MCP 这个词最早出现在去年11月,它是由Anthropic 推出的开放协议。众所周知,互联网的世界上一直都充斥着各式各样的协议,协议最主要的目的就是规范化各系统/地方之间的数据交互格式和传送过程中的安全规格。 MCP 也不例外,它目的是建立各大模型与外部数据/系统交互时的规范。 MCP 的全称是Model Context Protocol。 从字面上的解译可知 Model 和Context 在当中的重要性。Model 是指业界中使用的大模型,如 ChatGPT,DeepSeek,Claude 等等。Context 是指提供给模型的资料,也就是模型需要处理的上下文脉络。在MCP 这个概念形成前,大语言模型调用外部的数据一直也存在,否则模型也不能应用在生活中。 只是先前使用的是一种叫function calling 的方式。简单来说就是函式的调用。但每个函式的调用定义并不统一。需要在代码编写时把整个输入/输出的方式和结构提给的模型,这意味着这个函式只是供特定的模型使用。当需要更换模型时,便面临着重复再制做轮子的风险。在这个大语言模型泛滥的时间,开发者绝对不希望绑死使用同模型,也不希望制作的函式只能被某一模型所使用。在这个环境下,MCP 的价值渐渐浮现。

下表是MCP 和 Function Calling 根本上的差异。

类别

MCPModel Context Protocol

Function Calling

性质    协议 功能
范围 通用场景 (可多数据源) 特定场景(单一数据源)

实现

基于协议的标准实现 与特定的LLM模型绑定

复杂度

低:基于协议实现多源兼容 高:需为每个任务开发,不多源兼容

复用性

高:一次开发后可多场景,多LLM模型使用 低:为特定LLM模型及任务设计

灵活性

高:支持动态配置和扩展 低:功能扩展需要额外开发

MCP 结构

阅读到这里,是不是感觉到MCP 就像在互联网开放数据时期掘起的API。
本质上的确是差不多,都是代码集成,重复使用,逻辑分隔等等。 为更好理解,下图为整个部署结构的示例图

从部署结构的流程可以看出,实际上核心的部份就是MCP Server 如何连接其他资源和返回适合LLM 使用的数据。 功能上,大致可一个完整的MCP 架构会有以下几个角色

1.    Host: 向LLM 发起请求的主程式,以Anthropic 为例,就是Claude Desktop应用程式。
2.    MCP Client: 负责管理与MCP伺服器的连接与交互,运行在Host内。
3.    MCP Server:向MCP client 提供可调用的工具、资源,提示词或数据接口等等。
4.    Resources:可以是本地资源(如本地伺服器上的文件/资料库)。也可以是远端资源(如调用Web API)

这根本就是Client/Server 的架构模式。如果把MCP Client和MCP Server合并为单一程式来看。整个MCP架构就是一个中间层。主要用来协调LLM和资源之间的整合。 Client和Server之间只不过是客户端协调LLM模型,伺服器端协调外部资源之别。 LLM 模型调过MCP Client 端把请求以MCP 协议约定的格式传送到MCP伺服器中。 MCP伺服器收到请求后将解释内容,执行相对应的操作后把运算结果传回MCP 客户端。

工作原理

以Claude 桌面版为例,一个完整的工作流程是这样的:
用户向Claude 提出问题-> Claude 模型 ->MCP client连接MCP Server –> 执行运算 -> 返回结果-> Claude根据返回的结果生成答案 -> 显示在LLM程式上。

这种设计的好处使Claude/其他LLM 模型更具弹性,能因应使用场景调用不同的工具和资源执行不同的工作。也使开发者专于MCP Client 和MCP Serer方面的开发。 LLM 模型的更替也不影响已开发的功能。

通信机制

MCP 协议支持主流的两种通信机制:基于标准输入输出的本地通信和SSE(Server-Sent Events)的远端通信。 无论是哪一种,都是使用JSON-RPC 2.0格式进行传输。
本地通信:通过stdio传输数据,适用于运行于同一部机器的客户端和服务端之间通信。
远端通信:利用SSE和HTTP相结合,实现不同网络间的数据传送,适用于远程资源调用或分步式场景。

总结

说到这𥚃,该说的理论也解译得七七八八。对于开发者来说,如何实现是重点,其实要实现MCP 架构一点也不复杂,因为现时开发用到的SDK 已支援Python、C#、Java、TypeScript 和Kotlin,而且GitHub上也不乏的开源项目。

可以说是开箱即用或复制改良也不是什么难事。唯一缺点就是MCP这种技术现时缺乏统一的官方教学,学习资源相对混乱,基本上要开发一个全新的服务只能自己钻研社区中类似的开源项目,对于自学能力不高的小白来说会有点吃力。
以上就是MCP 技术的介绍,至于如何实现,我会在下一篇文章中使用Python 展示一个简单的调用,并介绍整个SDK的常用功能。 最后,我会以一个现实生活中的例子作为MCP技术文章三部曲的结尾。

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐