核心架构
理解MCP如何连接客户端、服务器和LLM
模型上下文协议 (MCP) 建立在灵活、可扩展的架构之上,能够实现 LLM 应用程序和集成之间的无缝通信。本文档涵盖了核心架构组件和概念。
概述
MCP 采用客户端-服务器架构,其中:
- 主机(Hosts) 是发起连接的 LLM 应用程序(例如 Desktop App 或 IDE)。
- 客户端(Clients) 在主机应用程序内部与服务器保持 1 对 1 的连接。
- 服务器(Servers) 为客户端提供上下文、工具和提示。
核心组件
协议层
协议层负责消息的封装、请求与响应的关联以及高级通信模式的处理。它确保了消息在客户端和服务器之间的正确传递和解析。
传输层
传输层处理客户端和服务器之间的实际通信。MCP(Model Context Protocol)支持多种传输机制:
- Stdio 传输
使用标准输入输出进行通信,适用于本地进程间的通信。 - HTTP with SSE 传输
使用服务器发送事件(Server-Sent Events)进行服务器到客户端的消息传递,使用HTTP POST进行客户端到服务器的消息传递。
所有传输机制都使用JSON-RPC 2.0来交换消息。详细的消息格式规范可以在MCP的规范文档中找到。
消息类型
MCP定义了几种主要的消息类型:
- 请求(Request)
请求是一种期望对方返回响应的消息。请求通常包含一个方法名和可选的参数。
interface Request {
method: string;
params?: { ... };
}
- 通知(Notification)
interface Notification {
method: string;
params?: { ... };
}
- 结果(Result)
结果是对请求的成功响应,通常包含请求处理后的数据。
interface Result {
[key: string]: unknown;
}
- 错误(Error)
错误表示请求处理失败,通常包含错误代码、错误信息和可选的附加数据。
interface Error {
code: number;
message: string;
data?: unknown;
}
总结
MCP(Model Context Protocol)通过定义清晰的协议层和传输层来确保消息的正确传递和解析。协议层处理消息的封装和高级通信模式,而传输层则负责实际的通信机制,支持Stdio和HTTP with SSE等多种传输方式。MCP使用JSON-RPC 2.0作为消息交换的标准格式。
MCP定义了四种主要的消息类型:请求(Request)、通知(Notification)、结果(Result)和错误(Error)。请求期望对方返回响应,通知是单向消息,结果是对请求的成功响应,而错误则表示请求处理失败。通过这些核心组件和消息类型,MCP提供了一个灵活且强大的框架,用于在不同系统之间进行高效、可靠的通信。