概述
MCP采用客户端-服务器架构,其中:- **主机(Hosts)**是发起连接的LLM应用程序(如Claude Desktop或IDE)
- **客户端(Clients)**在主机应用程序内部与服务器保持1:1的连接
- **服务器(Servers)**为客户端提供上下文、工具和提示
核心组件
协议层
协议层处理消息帧、请求/响应链接和高级通信模式。- TypeScript
- Python
- Protocol(协议)
- Client(客户端)
- Server(服务器)
传输层
传输层处理客户端和服务器之间的实际通信。MCP支持多种传输机制:- 
标准输入输出传输(Stdio transport)
- 使用标准输入/输出进行通信
- 适用于本地进程
 
- 
HTTP与SSE传输(HTTP with SSE transport)
- 使用服务器发送事件(Server-Sent Events)进行服务器到客户端的消息传输
- 使用HTTP POST进行客户端到服务器的消息传输
 
消息类型
MCP有以下主要消息类型:- 
**请求(Requests)**期望从对方获得响应:
- 
**结果(Results)**是对请求的成功响应:
- 
**错误(Errors)**表示请求失败:
- 
**通知(Notifications)**是不需要响应的单向消息:
连接生命周期
1. 初始化
- 客户端发送带有协议版本和功能的initialize请求
- 服务器响应其协议版本和功能
- 客户端发送initialized通知作为确认
- 开始正常的消息交换
2. 消息交换
初始化后,支持以下通信模式:- 请求-响应:客户端或服务器发送请求,另一方响应
- 通知:任何一方发送单向消息
3. 终止
任何一方都可以终止连接:- 通过close()进行清理关闭
- 传输断开
- 错误条件
错误处理
MCP定义了以下标准错误代码:- 对请求的错误响应
- 传输上的错误事件
- 协议级错误处理程序
实现示例
以下是实现MCP服务器的基本示例:- TypeScript
- Python
最佳实践
传输选择
- 
本地通信
- 对本地进程使用stdio传输
- 适用于同一机器上的高效通信
- 简单的进程管理
 
- 
远程通信
- 在需要HTTP兼容性的场景中使用SSE
- 考虑包括身份验证和授权在内的安全性影响
 
消息处理
- 
请求处理
- 彻底验证输入
- 使用类型安全的模式
- 优雅地处理错误
- 实现超时机制
 
- 
进度报告
- 对长时间操作使用进度令牌
- 增量报告进度
- 在已知时包含总进度
 
- 
错误管理
- 使用适当的错误代码
- 包含有帮助的错误消息
- 在错误时清理资源
 
安全考虑
- 
传输安全
- 对远程连接使用TLS
- 验证连接来源
- 在需要时实现身份验证
 
- 
消息验证
- 验证所有传入消息
- 净化输入
- 检查消息大小限制
- 验证JSON-RPC格式
 
- 
资源保护
- 实现访问控制
- 验证资源路径
- 监控资源使用
- 限制请求速率
 
- 
错误处理
- 不泄露敏感信息
- 记录安全相关错误
- 实现适当的清理
- 处理DoS场景
 
调试和监控
- 
日志记录
- 记录协议事件
- 跟踪消息流
- 监控性能
- 记录错误
 
- 
诊断
- 实现健康检查
- 监控连接状态
- 跟踪资源使用
- 分析性能
 
- 
测试
- 测试不同的传输
- 验证错误处理
- 检查边缘情况
- 负载测试服务器