概述
Model Context Protocol (MCP) 是一个基于客户端-服务器架构的开放协议,用于连接大型语言模型 (LLM) 应用和各类数据源与工具。MCP 由 Anthropic 主导开发,并于 2024 年 11 月开源。核心架构包括:
宿主(Hosts): LLM 应用程序(如 Claude Desktop 或 IDE),负责发起连接
客户端(Clients): 在宿主应用程序内部维护与服务器的 1:1 连接
服务器(Servers): 向客户端提供上下文、工具和提示
MCP 的价值
MCP 解决了 AI 系统集成中的几个关键问题:
简化集成复杂度:将 N×M 集成问题(N个AI应用需要与M个数据源分别集成)转变为 N+M 问题(每个应用和数据源只需实现一次 MCP 协议)
提供实时信息访问:使 AI 模型能够连接到最新的信息源,减少"幻觉"问题
促进标准化:建立通用设计模式,简化开发流程
支持复杂 AI 代理:通过维持跨工具和数据集的上下文,支持更复杂的 AI 代理系统
核心组件
协议层 (Protocol Layer)
协议层处理消息框架、请求/响应链接和高级通信模式:
class Protocol<Request, Notification, Result> {
// 处理传入请求
setRequestHandler<T>(schema: T, handler: (request: T, extra: RequestHandlerExtra) => Promise<Result>): void
// 处理传入通知
setNotificationHandler<T>(schema: T, handler: (notification: T) => Promise<void>): void
// 发送请求并等待响应
request<T>(request: Request, schema: T, options?: RequestOptions): Promise<T>
// 发送单向通知(只发送不返回)
notification(notification: Notification): Promise<void>
}
传输层 (Transport Layer)
传输层处理客户端和服务器之间的实际通信。MCP 支持多种传输机制:
标准输入/输出传输 (Stdio Transport)
使用标准输入/输出进行通信
适用于本地进程
HTTP 与 SSE 传输
使用服务器发送事件 (Server-Sent Events) 实现服务器到客户端的消息传递
使用 HTTP POST 实现客户端到服务器的消息传递
所有传输均使用 JSON-RPC 2.0 交换消息。
消息类型
MCP 有四种主要的消息类型:
请求 (Requests): 期望从另一方得到响应
interface Request { method: string; params?: { ... }; }
结果 (Results): 请求的成功响应
interface Result { [key: string]: unknown; }
错误 (Errors): 表示请求失败
interface Error { code: number; message: string; data?: unknown; }
通知 (Notifications): 单向消息,不期望响应
interface Notification { method: string; params?: { ... }; }
连接生命周期
1. 初始化
客户端发送
initialize
请求,包含协议版本和功能服务器响应其协议版本和功能
客户端发送
initialized
通知作为确认开始正常的消息交换
2. 消息交换
初始化后,支持以下模式:
请求-响应: 客户端或服务器发送请求,另一方响应
通知: 任一方发送单向消息
3. 终止
连接可通过以下方式终止:
通过
close()
进行干净的关闭传输断开连接
错误条件
错误处理
MCP 定义了标准错误代码:
enum ErrorCode {
// 标准 JSON-RPC 错误代码
ParseError = -32700,
InvalidRequest = -32600,
MethodNotFound = -32601,
InvalidParams = -32602,
InternalError = -32603
}
SDK 和应用程序可以定义自己的高于 -32000 的错误代码。
MCP 生态系统
Anthropic 已经启动了 MCP 的三个主要组件:
MCP 规范和 SDK:提供协议的详细说明和开发工具包
Claude Desktop 应用中的本地 MCP 服务器支持:允许 Claude 读取和写入计算机文件系统
开源 MCP 服务器仓库:预构建的 MCP 服务器,用于连接到各种流行服务和数据源
预构建的 MCP 服务器
Anthropic 提供了多个预构建的 MCP 服务器,包括:
Google Drive
Slack
GitHub
Git
Postgres
Puppeteer
生态系统合作伙伴
多家公司已经采用或正在集成 MCP:
Block 和 Apollo:已将 MCP 集成到其系统中
Zed、Replit、Codeium 和 Sourcegraph:正在使用 MCP 增强其开发平台