慷规扣 发表于 2025-9-22 20:13:03

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

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 调用或数据库查询。
示例:
{
"name": "get_weather",
"title": "Weather Information Provider",
"description": "Get current weather information for a location",
"inputSchema": {
    "type": "object",
    "properties": {
      "location": {
      "type": "string",
      "description": "City name or zip code"
      }
    },
    "required": ["location"]
}
}当 AI 模型需要获取天气信息时,它可以调用这个工具,传入位置参数,服务器会执行相应的操作并返回结果。
4.2 资源 (Resources) 原语

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

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

提示是可重用的模板,有助于构建与语言模型的交互。它们通常由用户主动选择使用,可以是系统提示、少量示例或其他预定义的对话模板。
示例:
{
"name": "code_review",
"title": "Request Code Review",
"description": "Asks the LLM to analyze code quality and suggest improvements",
"arguments": [
    {
      "name": "code",
      "description": "The code to review",
      "required": true
    }
]
}当用户想要对代码进行审查时,可以选择这个提示模板,传入需要审查的代码,系统会生成一个结构化的请求发送给 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 能够支持各种不同的使用场景,从简单的工具调用到复杂的上下文管理和对话流程控制。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: Model Context Protocol (MCP) 通信过程详解