MCP原理与实践1-原理部分(详细)
一、MCP是啥
MCP是一个协议,是模型上下文协议“Model Context Protocol”的简称。作用简单理解就是一个中介,专门给大模型和外部工具或数据源传递信息。
二、MCP来源
MCP是由Anthropic(Claude提供商)在2024年11月底 提出了来的一个协议,并在Claude 客户端支持了MCP。
MCP协议,全称为“Model Context Protocol”,提供了一种将LLM连接到不同数据源(resouce)和工具(tool)的标准化方法,旨在统一大模型与外部数据源和工具之间的沟通通信协议。
三、MCP架构
MCP 采用客户端-服务端架构,如下展示的架构:
具体客户客户端与服务端区别如下:
维度 | MCP Client | MCP Server |
主动/被动 | 主动发起请求 | 被动响应请求 |
功能定位 | 模型/Agent 的“调用者” | 工具/服务的“提供者” |
协议角色 | 请求发起方(Requester) | 服务执行方(Provider) |
典型实现 | LLM 推理框架、Agent 运行时 | 工具插件、微服务、数据库适配器等 |
数据流向 | 发送请求 → 接收响应 | 接收请求 → 返回响应 |
官方架构图:

四、MCP工作机制
如上图所示,一次基于MCP的调用,一共有6个核心的步骤,假设我们的需求是:
- 要开发一个获取时间的AI Agent,用户在使用这个AI Agent时,需要问类似“现在几点?”即可。
- 处理时间的Time MCP Server 里有2个MCP Tool,一个负责获取当前时区,一个负责获取当前时间。
调用步骤解析:
- 第一步:用户向AI Agent提问“现在几点了?”,此时AI Agent就是MCP Client,它会把用户的问题和处理时间的MCP Server以及MCP Tool的信息一起发送给LLM。
- 第二步:LLM拿到信息后开始推理,基于用户的问题和MCP Server的信息,选出解决用户问题最合适的MCP Server和MCP Tool,然后返回给AI Agent(MCP Client)。
- LLM返回给AI Agent的信息是:“你可以使用time这个MCP Server里的get_current_time这个MCP Tool,它可以解决用户的问题”。
第三步:AI Agent(MCP Client)现在知道应该使用哪个MCP Server里的哪个MCP Tool了,直接调用该MCP Tool,获取结果。
调用名称为time的MCP Server里的get_current_time MCP Tool。
- 第四步:Time MCP Server返回结果(当前的时间)给AI Agent(MCP Client)。
- 第五步:AI Agent(MCP Client)把用户的问题和从Time MCP Server处拿到的结果再一次给了LLM,目的是让LLM结合问题和答案再规整一下内容。
- 第六步:LLM把整理后的内容返回给AI Agent(MCP Client),最后AI Agent(MCP Client)再原封不动地返回给用户。
在MCP的整个调用过程中有一个非常关键之处就是MCP Server 以及 MCP Tool 的信息。从第一步、第二步可以看出,这个信息非常关键,是它让LLM知道了该如何解决用户的问题,这个信息就是MCP中最重要的System Prompt,本质上就是优化提示词。
可以将 MCP 想象成智能体应用程序的 USB-C 接口,它为连接 AI 模型与不同的数据源和工具提供了标准化的方法。
五、连接生命周期
MCP的连接生命周期分为初始化、消息交换和终止三个阶段:
5.1 初始化阶段
- 客户端发送初始化请求 :客户端向服务器发送一个初始化请求,该请求中包含协议版本和客户端的能力信息。这是建立连接的第一步,用于告知服务器客户端支持的协议版本以及自身具备的功能和特性。
- 服务器响应初始化请求 :服务器接收到客户端的初始化请求后,会回复自己的协议版本和能力信息。通过这种方式,双方能够确认彼此支持的协议版本是否兼容,并了解对方的功能特性,为后续的通信做好准备。
- 客户端发送初始化完成通知 :客户端收到服务器的响应后,会发送一个初始化完成通知作为确认。这标志着初始化过程结束,双方已经准备好开始正常的通信。
5.2 消息交换阶段
请求 - 响应模式 :客户端或服务器可以发送请求,另一方则需要对请求进行响应。这种模式适用于需要交互的场景,例如客户端请求服务器执行某个操作或获取某些数据,服务器处理完成后返回结果。
通知模式 :客户端或服务器可以发送单向通知,这种通知不需要对方回复。通知通常用于告知对方一些状态信息或事件,例如服务器通知客户端某个资源的状态发生了变化,或者客户端通知服务器用户的一些操作行为等。
5.3 终止阶段
- 正常关闭 :双方中的任意一方都可以通过调用 close() 方法来正常关闭连接。这种情况下,双方会按照协议规定的流程,完成一些必要的清理工作,然后断开连接。
- 传输层断开连接 :如果传输层(例如网络连接)出现问题,导致连接中断,那么连接也会终止。这种情况可能是由于网络故障、服务器或客户端的意外关闭等原因引起的。
- 错误条件 :如果在通信过程中出现错误,例如请求格式错误、服务器内部错误等,也可能会导致连接终止。根据错误的严重程度和协议的规定,可能会尝试重新建立连接,或者直接断开连接并记录错误信息。
六、MCP与传统API应用场景对比
以下三个应用场景示例,比较了使用 MCP 和使用传统 API的区别:
场景 | 传统API | MCP |
旅行规划助手 | 需要为日历、电子邮件、航空公司预订 API编写单独的代码,每个 API都有自定义的身份验证、上下文传递和错误处理逻辑 | AI助手可以全部通过 MCP服务器实现,无需为每个工具进行自定义集成。可以顺畅地检査日程安排以确认空档时间,预订机票,并通过电子邮件发送确认信息。 |
高级 IDE(智能代码编辑器) | 需要手动将 IDE 与文件系统、版本控制、包管理器和文档集成 | IDE通过单一的 MCP 协议连接到外部系统,实现更丰富的上下文感知和更强大的建议 |
复杂数据分析 | 需要手动管理与每个数据库和数据可视化工具的连接。 | 智能分析平台通过统一的 MCP 层自主发现并与多个数据库、可视化工具和模拟工具进行交互。 |
七、MCP优势
- 简化开发:一次编写,多次集成,无需为每次集成重写自定义代码。
- 灵活性:切换 AI模型或工具无需复杂重新配置。
- 实时响应能力:MCP 连接保持活跃,实现实时上下文更新和交互。
- 安全性和合规性:内置访问控制和标准化安全实践。