TUTORIALAI & dataFETCHED

MCP 协议

MCP 协议 MCP(Model Context Protocol,模型上下文协议)是一种开放协议,旨在实现 大型语言模型(LLM) 应用与外部数据源、工具和服务之间的无缝集成,类似于网络中的 HTTP 协议或邮件中的 SMTP 协议。 MCP 协议通过标准化模型与外部资源的交互方式,提升 LLM 应用的功能性、灵活性和可扩展性。 MCP 通过标准化人工智能应用生态系统中的通信规则,为开发者提供了一个统一、高效且可互操作的开发..

Updated 7/16/2026

Tutorial detail pages default to noindex.

MCP 协议

MCP(Model Context Protocol,模型上下文协议)是一种开放协议,旨在实现 大型语言模型(LLM) 应用与外部数据源、工具和服务之间的无缝集成,类似于网络中的 HTTP 协议或邮件中的 SMTP 协议。

MCP 协议通过标准化模型与外部资源的交互方式,提升 LLM 应用的功能性、灵活性和可扩展性。

MCP 通过标准化人工智能应用生态系统中的通信规则,为开发者提供了一个统一、高效且可互操作的开发环境。


MCP 的核心概念

MCP 的核心是 模型上下文,即 LLM 在运行过程中所需的所有外部信息和工具。

MCP 通过定义标准化的接口和协议,使 LLM 能够动态访问和集成以下内容:

  1. 外部数据源:如数据库、API、文档库等,为 LLM 提供实时或历史数据。
  2. 工具和服务:如计算工具、搜索引擎、第三方服务等,扩展 LLM 的功能。
  3. 上下文管理:动态维护 LLM 的对话上下文,确保连贯性和一致性。

MCP 的架构

MCP 的架构由四个关键部分组成:

  1. 主机(Host):主机是期望从服务器获取数据的人工智能应用,例如一个集成开发环境(IDE)、聊天机器人等。主机负责初始化和管理客户端、处理用户授权、管理上下文聚合等。
  2. 客户端(Client):客户端是主机与服务器之间的桥梁。它与服务器保持一对一的连接,负责消息路由、能力管理、协议协商和订阅管理等。客户端确保主机和服务器之间的通信清晰、安全且高效。
  3. 服务器(Server):服务器是提供外部数据和工具的组件。它通过工具、资源和提示模板为大型语言模型提供额外的上下文和功能。例如,一个服务器可以提供与Gmail、Slack等外部服务的API调用。
  4. 基础协议(Base Protocol):基础协议定义了主机、客户端和服务器之间如何通信。它包括消息格式、生命周期管理和传输机制等。

MCP 就像 USB-C 一样,可以让不同设备能够通过相同的接口连接在一起。


MCP 的工作原理

MCP 通过定义标准化的数据格式和通信协议,实现 LLM 与外部资源的交互。

MCP 使用 JSON-RPC 2.0 作为消息格式,通过标准的请求、响应和通知消息进行通信。

MCP 支持多种传输机制,包括本地的标准输入/输出(Stdio)和基于HTTP的服务器发送事件(SSE)。

MCP的生命周期包括初始化、运行和关闭三个阶段,确保连接的建立、通信和终止都符合协议规范。

以下是其工作流程:

1. 上下文请求

LLM 应用向外部资源发送上下文请求,包含所需的数据或服务类型。

  • LLM 应用根据任务需求,向外部资源发送请求。
  • 外部资源返回所需的数据或服务结果。

2. 上下文集成

LLM 应用将外部资源返回的上下文数据集成到模型中,用于生成响应或执行任务。

  • LLM 应用将外部数据与模型内部知识结合,生成更准确或更丰富的响应。

3. 上下文管理

MCP 支持动态管理 LLM 的对话上下文,确保多轮对话的连贯性。

  • 上下文管理器维护对话的历史记录和状态。
  • LLM 应用根据上下文生成连贯的响应。

协议的关键部分 - 消息

MCP 的核心是使用 JSON-RPC 2.0 作为消息格式,为客户端和服务器之间的通信提供了一种标准化的方式。

基础协议定义了三种基本消息类型,分别是请求(Requests)、响应(Responses)和通知(Notifications)。

以下是这三种消息类型的详细说明:

1. 请求(Requests)

请求消息用于从客户端向服务器发起操作,或者从服务器向客户端发起操作。

请求消息的结构如下:

{
  "jsonrpc": "2.0",
  "id": "string | number",
  "method": "string",
  "params": {
    "[key: string]": "unknown"
  }
}
  • jsonrpc:协议版本,固定为"2.0"。
  • id:请求的唯一标识符,可以是字符串或数字。
  • method:要调用的方法名称,是一个字符串。
  • params:方法的参数,是一个可选的键值对对象,其中键是字符串,值可以是任意类型。

2. 响应(Responses)

响应消息是对请求的答复,从服务器发送到客户端,或者从客户端发送到服务器。

响应消息的结构如下:

{
  "jsonrpc": "2.0",
  "id": "string | number",
  "result": {
    "[key: string]": "unknown"
  },
  "error": {
    "code": "number",
    "message": "string",
    "data": "unknown"
  }
}
  • jsonrpc:协议版本,固定为"2.0"。
  • id:与请求中的id相对应,用于标识响应所对应的请求。
  • result:如果请求成功,result字段包含操作的结果,是一个键值对对象。
  • error:如果请求失败,error字段包含错误信息,其中:
    • code:错误代码,是一个数字。
    • message:错误描述,是一个字符串。
    • data:可选的附加错误信息,可以是任意类型。

3. 通知(Notifications)

通知消息是一种单向消息,不需要接收方回复。

通知消息的结构如下:

{
  "jsonrpc": "2.0",
  "method": "string",
  "params": {
    "[key: string]": "unknown"
  }
}
  • jsonrpc:协议版本,固定为"2.0"。
  • method:要调用的方法名称,是一个字符串。
  • params:方法的参数,是一个可选的键值对对象,其中键是字符串,值可以是任意类型。

说明

  • 请求和响应:请求和响应是一对一的,客户端发送请求后,服务器会返回一个响应。id字段用于关联请求和响应。
  • 通知:通知是单向的,发送方不需要等待接收方的回复。通知通常用于事件推送或状态更新等场景。
  • 错误处理:如果请求失败,响应中会包含error字段,提供错误代码和描述,帮助开发者快速定位问题。

MCP 的关键特性

  1. 标准化接口:定义统一的接口和协议,确保 LLM 与外部资源的兼容性。
  2. 动态集成:支持 LLM 动态访问和集成外部数据源和工具。
  3. 上下文感知:支持动态管理对话上下文,提升多轮对话的连贯性。
  4. 开放性和可扩展性:支持第三方开发者为 LLM 应用扩展功能和资源。

MCP 的应用场景

MCP 广泛应用于以下场景:

  1. 增强型问答系统:通过集成外部数据源,提供实时、准确的答案。
  2. 智能助手:通过集成工具和服务,执行复杂任务(如预订、计算、搜索等)。
  3. 知识管理:通过集成文档库和数据库,提供专业领域的知识支持。
  4. 多轮对话:通过上下文管理,实现连贯的多轮对话。

MCP 的优缺点

优点:

  1. 功能扩展:通过集成外部资源,显著扩展 LLM 应用的功能。
  2. 灵活性:支持动态访问和集成多种数据源和工具。
  3. 开放性:标准化协议支持第三方开发和集成。

缺点:

  1. 复杂性:需要设计和维护与外部资源的交互逻辑。
  2. 性能开销:访问外部资源可能引入额外的延迟。

MCP 的替代方案

在某些场景下,可以使用以下替代方案:

  1. 自定义 API:为 LLM 应用开发自定义的 API 接口。
  2. 插件机制:使用插件机制扩展 LLM 应用的功能。
  3. 知识图谱:通过知识图谱集成外部知识。