概述
MCP 遵循客户端-服务器架构,其中:- 主机是 LLM 应用程序(如 Claude 桌面版或 IDE),它们发起连接
- 客户端在主机应用程序内维护与服务器的 1:1 连接
- 服务器向客户端提供上下文、工具和提示
核心组件
协议层
协议层处理消息框架、请求/响应链接和高级通信模式。- TypeScript
- Python
ProtocolClientServer
传输层
传输层处理客户端和服务器之间的实际通信。MCP 支持多种传输机制:-
Stdio 传输
- 使用标准输入/输出进行通信
- 适用于本地进程
-
HTTP 和 SSE 传输
- 使用服务器发送事件进行服务器到客户端消息传递
- 使用 HTTP POST 进行客户端到服务器消息传递
消息类型
MCP 具有以下主要类型的消息:-
请求期望来自另一方的响应:
-
结果是对请求的成功响应:
-
错误表示请求失败:
-
通知是单向消息,不期望响应:
连接生命周期
1. 初始化
- 客户端发送
initialize请求,包含协议版本和功能 - 服务器响应其协议版本和功能
- 客户端发送
initialized通知作为确认 - 正常消息交换开始
2. 消息交换
初始化后,支持以下模式:- 请求-响应:客户端或服务器发送请求,另一方响应
- 通知:任一方发送单向消息
3. 终止
任一方可以终止连接:- 通过
close()进行干净关闭 - 传输断开
- 错误情况
错误处理
MCP 定义了以下标准错误代码:- 对请求的错误响应
- 传输上的错误事件
- 协议级错误处理程序
实现示例
以下是实现 MCP 服务器的基本示例:- TypeScript
- Python
最佳实践
传输选择
-
本地通信
- 对于本地进程,使用 stdio 传输
- 适用于同一台机器的通信
- 简单的进程管理
-
远程通信
- 对于需要 HTTP 兼容性的场景,使用 SSE
- 考虑包括身份验证和授权在内的安全隐患
消息处理
-
请求处理
- 彻底验证输入
- 使用类型安全的架构
- 优雅地处理错误
- 实现超时
-
进度报告
- 对于长时间操作,使用进度令牌
- 增量报告进度