找回密码
 立即注册
首页 业界区 安全 Model Context Protocol (MCP) 通信过程详解

Model Context Protocol (MCP) 通信过程详解

慷规扣 2025-9-22 20:13:03
1. MCP 简介

Model Context Protocol (MCP) 是一种开放标准,用于在 AI 应用程序和外部系统之间建立安全的双向连接。它允许 AI 应用(如 Claude 或 ChatGPT)连接到数据源(如本地文件、数据库)、工具(如搜索引擎、计算器)和工作流(如专用提示),使它们能够访问关键信息并执行任务。
可以把 MCP 理解为 AI 应用的"USB-C 接口",就像 USB-C 为电子设备提供标准化连接方式一样,MCP 为 AI 应用提供了一种标准化的方式来连接外部系统。
2. MCP 架构

MCP 采用客户端-服务器架构,其中:

  • MCP Host:AI 应用程序,协调和管理一个或多个 MCP 客户端
  • MCP Client:维护与 MCP 服务器连接的组件,并从 MCP 服务器获取上下文供 MCP Host 使用
  • MCP Server:提供上下文给 MCP 客户端的程序
MCP 架构包含两个层次:

  • 数据层:定义基于 JSON-RPC 的客户端-服务器通信协议,包括生命周期管理、核心原语(如工具、资源、提示)等
  • 传输层:定义客户端和服务器之间数据交换的通信机制和通道,包括传输特定的连接建立、消息帧和授权
3. MCP 通信流程

MCP 通信遵循严格的生命周期管理,确保正确的功能协商和状态管理。整个通信过程分为三个阶段:
3.1 初始化阶段

初始化阶段是客户端和服务器之间的第一次交互,主要完成协议版本协商和功能能力交换。
sequenceDiagram    participant C as MCP Client (AI应用)    participant S as MCP Server        C->>S: initialize 请求    Note right of C: 包含协议版本、
客户端功能和支持的实现信息        S->>C: initialize 响应    Note left of S: 返回协议版本、
服务器功能和支持的实现信息        C->>S: initialized 通知    Note right of C: 表示客户端已准备好开始正常操作初始化过程详细步骤:

  • 客户端发送 initialize 请求,包含协议版本、客户端功能和支持的实现信息
  • 服务器响应 initialize 请求,返回协议版本、服务器功能和支持的实现信息
  • 客户端发送 initialized 通知,表示已准备好开始正常操作
3.2 操作阶段

在操作阶段,客户端和服务器根据协商的功能进行消息交换。
MCP 定义了三种核心原语,服务器可以暴露这些原语供客户端使用:

  • 工具 (Tools):AI 应用可以调用的可执行函数(如文件操作、API 调用、数据库查询)
  • 资源 (Resources):为 AI 应用提供上下文信息的数据源(如文件内容、数据库记录、API 响应)
  • 提示 (Prompts):帮助构建与语言模型交互的可重用模板(如系统提示、少量示例)
sequenceDiagram    participant C as MCP Client (AI应用)    participant S as MCP Server        note over C,S: 工具发现和调用流程        C->>S: tools/list 请求    S->>C: 工具列表响应        C->>S: tools/call 请求    Note right of C: 调用具体工具,
传递参数    S->>C: 工具调用结果        note over C,S: 资源访问流程        C->>S: resources/list 请求    S->>C: 资源列表响应        C->>S: resources/read 请求    Note right of C: 读取具体资源内容    S->>C: 资源内容响应        note over C,S: 提示使用流程        C->>S: prompts/list 请求    S->>C: 提示列表响应        C->>S: prompts/get 请求    Note right of C: 获取具体提示内容    S->>C: 提示内容响应3.3 关闭阶段

关闭阶段是一方(通常是客户端)正常终止协议连接的过程。
对于不同的传输机制,关闭方式有所不同:

  • Stdio 传输:通过关闭输入/输出流来关闭连接
  • HTTP 传输:通过关闭相关 HTTP 连接来关闭连接
4. MCP 核心原语详解

4.1 工具 (Tools) 原语

工具是 AI 应用可以调用的可执行函数,允许模型与外部系统交互。工具通常用于执行操作,如文件操作、API 调用或数据库查询。
示例:
  1. {
  2.   "name": "get_weather",
  3.   "title": "Weather Information Provider",
  4.   "description": "Get current weather information for a location",
  5.   "inputSchema": {
  6.     "type": "object",
  7.     "properties": {
  8.       "location": {
  9.         "type": "string",
  10.         "description": "City name or zip code"
  11.       }
  12.     },
  13.     "required": ["location"]
  14.   }
  15. }
复制代码
当 AI 模型需要获取天气信息时,它可以调用这个工具,传入位置参数,服务器会执行相应的操作并返回结果。
4.2 资源 (Resources) 原语

资源是为 AI 应用提供上下文信息的数据源。它们通常是只读的数据,可以是文件内容、数据库记录或 API 响应。资源通过 URI 进行唯一标识,客户端可以列出和读取这些资源。
示例:
  1. {
  2.   "uri": "file:///project/src/main.py",
  3.   "name": "main.py",
  4.   "title": "Python Application Main File",
  5.   "description": "Primary application entry point",
  6.   "mimeType": "text/x-python"
  7. }
复制代码
当 AI 模型需要了解项目代码结构时,它可以请求读取这些资源,获取文件内容作为上下文信息。
资源的特点:

  • 通过 URI 唯一标识
  • 可以是文本或二进制数据
  • 支持 MIME 类型标识
  • 可以包含元数据(如最后修改时间、重要性等)
4.3 提示 (Prompts) 原语

提示是可重用的模板,有助于构建与语言模型的交互。它们通常由用户主动选择使用,可以是系统提示、少量示例或其他预定义的对话模板。
示例:
  1. {
  2.   "name": "code_review",
  3.   "title": "Request Code Review",
  4.   "description": "Asks the LLM to analyze code quality and suggest improvements",
  5.   "arguments": [
  6.     {
  7.       "name": "code",
  8.       "description": "The code to review",
  9.       "required": true
  10.     }
  11.   ]
  12. }
复制代码
当用户想要对代码进行审查时,可以选择这个提示模板,传入需要审查的代码,系统会生成一个结构化的请求发送给 AI 模型。
提示的特点:

  • 由用户主动选择使用
  • 可以包含参数占位符
  • 支持多种内容类型(文本、图像、音频等)
  • 可以嵌入资源内容
5. 传输机制

MCP 支持两种标准传输机制:
5.1 Stdio 传输

在 Stdio 传输中:

  • 客户端将 MCP 服务器作为子进程启动
  • 服务器从标准输入 (stdin) 读取 JSON-RPC 消息,并向标准输出 (stdout) 发送消息
  • 消息通过换行符分隔,且不能包含嵌入的换行符
5.2 Streamable HTTP 传输

在 Streamable HTTP 传输中:

  • 服务器作为独立进程运行,可以处理多个客户端连接
  • 使用 HTTP POST 和 GET 请求进行通信
  • 服务器可以使用服务器发送事件 (SSE) 来流式传输多个服务器消息
sequenceDiagram    participant C as MCP Client    participant S as MCP Server        note over C,S: 建立 SSE 连接        C->>S: GET /sse (建立SSE连接)    S->>C: SSE 连接建立,返回消息端点        note over C,S: 客户端发送请求        C->>S: POST /messages (JSON-RPC请求)    S->>C: 202 Accepted        note over S: 服务器通过SSE
发送响应或通知        S->>C: SSE message 事件6. 工具调用示例

工具调用是 MCP 中最重要的功能之一,允许 AI 模型与外部系统交互:
sequenceDiagram    participant M as AI 模型 (LLM)    participant C as MCP Client    participant S as MCP Server        M->>C: 请求调用天气查询工具    C->>S: tools/list (发现可用工具)    S->>C: 返回工具列表        C->>S: tools/call (调用具体工具)    Note right of C: 参数: {location: "北京"}        S->>S: 调用外部API获取天气信息    S->>C: 返回天气信息        C->>M: 将天气信息传递给AI模型7. 安全考虑

MCP 实现需要考虑以下安全问题:

  • 服务器必须

    • 验证所有工具输入
    • 实现适当的访问控制
    • 限制工具调用频率
    • 清理工具输出

  • 客户端应该

    • 在敏感操作上提示用户确认
    • 在调用服务器前向用户显示工具输入,避免恶意或意外的数据泄露
    • 验证工具结果后再传递给 LLM
    • 实现工具调用超时机制
    • 记录工具使用情况用于审计

8. 错误处理

MCP 使用两种错误报告机制:

  • 协议错误:标准 JSON-RPC 错误,用于处理未知工具、无效参数、服务器错误等问题
  • 工具执行错误:在工具结果中使用 isError: true 标记,用于报告 API 失败、无效输入数据、业务逻辑错误等
9. 总结

MCP 通过标准化的协议为 AI 应用提供了一种强大的机制来访问外部系统和工具。其基于 JSON-RPC 的通信机制、严格的生命周期管理以及对多种传输方式的支持,使得 AI 应用可以安全、可靠地与各种外部资源进行交互。通过工具、资源和提示三种核心原语,MCP 为构建功能丰富的 AI 应用提供了坚实的基础。
工具、资源和提示这三种原语各有不同的用途和特点:

  • 工具:由 AI 模型主动调用,用于执行操作
  • 资源:由应用主动提供,作为上下文信息
  • 提示:由用户主动选择,用于引导对话流程
这种设计使得 MCP 能够支持各种不同的使用场景,从简单的工具调用到复杂的上下文管理和对话流程控制。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册