LLM+AI之MCP协议
文章目录
1. 官网
1. 官网
2. 中文网
2. MCP简介
1. MCP是什么
MCP (Model Context Protocol) 是一个开放协议,用于标准化应用程序如何向 LLM 提供上下文。可以将 MCP 想象成 AI 应用程序的 USB-C 接口。就像 USB-C 为设备连接各种外设和配件提供标准化方式一样,MCP 为 AI 模型连接不同的数据源和工具提供了标准化的方式。
2. 为什么选择 MCP?
MCP 帮助您在 LLM 之上构建代理和复杂工作流。LLM 经常需要与数据和工具集成,而 MCP 提供:
- 预构建集成列表,您的 LLM 可以直接接入
- 在不同 LLM 提供商和供应商之间切换的灵活性
- 在您的基础设施中保护数据的最佳实践
3. 总体架构
从本质上讲,MCP 遵循客户端-服务器架构,其中主机应用程序可以连接到多个服务器:
- MCP 主机: 像 Claude Desktop、IDE 或 AI 工具等想要通过 MCP 访问数据的程序
- MCP 客户端: 与服务器保持 1:1 连接的协议客户端
- MCP 服务器: 通过标准化的模型上下文协议暴露特定功能的轻量级程序
- 本地数据源: MCP 服务器可以安全访问的计算机文件、数据库和服务
- 远程服务: MCP 服务器可以连接的通过互联网提供的外部系统(例如通过 API)
3. 核心架构
模型上下文协议(MCP)建立在灵活、可扩展的架构之上,可以实现 LLM 应用程序和集成之间的无缝通信。本文档介绍核心架构组件和概念。
1.概述
MCP 遵循客户端-服务器架构,其中:
- 宿主 是启动连接的 LLM 应用程序(如 Claude Desktop 或 IDE)
- 客户端 在宿主应用程序内部与服务器保持 1:1 连接
- 服务器 为客户端提供上下文、工具和提示
2. 核心组件
1.协议层
协议层处理消息帧、请求/响应链接和高级通信模式。
TypeScrip
class Protocol<Request, Notification, Result> {
// Handle incoming requests
setRequestHandler<T>(schema: T, handler: (request: T, extra: RequestHandlerExtra) => Promise<Result>): void
// Handle incoming notifications
setNotificationHandler<T>(schema: T, handler: (notification: T) => Promise<void>): void
// Send requests and await responses
request<T>(request: Request, schema: T, options?: RequestOptions): Promise<T>
// Send one-way notifications
notification(notification: Notification): Promise<void>
}
主要类包括:
Protocol
Client
Server
2. 传输层
传输层处理客户端和服务器之间的实际通信。MCP 支持多种传输机制:
- 标准输入输出传输
- 使用标准输入/输出进行通信
- 适用于本地进程
- 带 SSE 的 HTTP 传输
- 使用服务器发送事件(SSE)进行服务器到客户端的消息传输
- 使用 HTTP POST 进行客户端到服务器的消息传输
所有传输都使用 JSON-RPC 2.0 来交换消息。有关模型上下文协议消息格式的详细信息,请参阅规范。
3. 消息类型
MCP 有以下主要消息类型:
-
请求 期望从另一方得到响应:
interface Request { method: string; params?: { ... }; }
-
通知 是不期望响应的单向消息:
interface Notification { method: string; params?: { ... }; }
-
结果 是对请求的成功响应:
interface Result { [key: string]: unknown; }
-
错误 表示请求失败:
interface Error { code: number; message: string; data?: unknown; }
3. 连接生命周期
1. 初始化
- 客户端发送带有协议版本和功能的
initialize
请求 - 服务器响应其协议版本和功能
- 客户端发送
initialized
通知作为确认 - 开始正常的消息交换
2. 消息交换
初始化后,支持以下模式:
- 请求-响应: 客户端或服务器发送请求,另一方响应
- 通知: 任何一方发送单向消息
3. 终止
任何一方都可以终止连接:
- 通过
close()
进行干净关闭 - 传输断开
- 错误条件
4.错误处理
MCP 定义了这些标准错误代码:
enum ErrorCode {
// 标准 JSON-RPC 错误代码
ParseError = -32700,
InvalidRequest = -32600,
MethodNotFound = -32601,
InvalidParams = -32602,
InternalError = -32603
}
SDK 和应用程序可以定义自己的大于 -32000 的错误代码。
错误通过以下方式传播:
- 对请求的错误响应
- 传输上的错误事件
- 协议级错误处理程序