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]