Skip to main content
Glama
MCP最佳实践与应用.md7.72 kB
# MCP最佳实践与应用 ## 📋 概述 本文档基于MCP(Model Context Protocol)最佳实践,特别是针对长任务处理,分析并应用到OCR MCP服务中。 ## 🎯 MCP长任务处理最佳实践 ### 1. 分层超时控制 ⭐⭐⭐ **最佳实践**: - **客户端等待时间**: 15-30秒(Cursor等客户端) - **MCP服务器处理时间**: 10-25秒(工具执行) - **上游API调用超时**: 3-10秒(OCR引擎调用) **当前实现**: - ✅ 已实现:`OCR_TIMEOUT` 默认120秒(可配置) - ⚠️ 需要优化:应该根据任务类型设置不同超时 **应用改进**: ```python # 根据图片大小和引擎类型设置不同超时 SMALL_IMAGE_TIMEOUT = 60 # 小图片(< 1MB) MEDIUM_IMAGE_TIMEOUT = 120 # 中等图片(1-5MB) LARGE_IMAGE_TIMEOUT = 180 # 大图片(> 5MB) ``` --- ### 2. 进度更新机制 ⭐⭐⭐ **最佳实践**: - 长任务必须定期发送进度更新 - 进度更新频率:每5-10%或每2-5秒 - 使用MCP通知机制发送进度 **当前实现**: - ✅ 已实现:`ProgressTracker` 跟踪进度 - ✅ 已实现:通过日志发送进度通知 - ⚠️ 需要优化:确保进度更新及时发送,避免客户端超时 **应用改进**: - 确保关键阶段(10%, 20%, 50%, 80%, 100%)必须发送进度 - 在长时间操作中定期发送心跳进度(即使进度不变) --- ### 3. 异步处理 ⭐⭐ **最佳实践**: - 超过10秒的任务应该考虑异步处理 - 使用后台任务或任务队列 - 提供任务状态查询接口 **当前实现**: - ⚠️ 当前是同步处理,可能阻塞MCP连接 - ✅ 已有超时保护,防止无限等待 **应用改进**: - 对于批量处理,使用异步任务 - 提供任务ID和状态查询 --- ### 4. 资源管理 ⭐⭐⭐ **最佳实践**: - 合理管理系统资源(内存、CPU) - 监控资源使用情况 - 实现资源清理机制 **当前实现**: - ✅ 已实现:引擎懒加载 - ✅ 已实现:引擎使用统计 - ⚠️ 需要优化:长时间未使用的引擎自动卸载 **应用改进**: - 实现引擎自动卸载(30分钟未使用) - 添加内存监控和告警 --- ### 5. 错误处理 ⭐⭐⭐ **最佳实践**: - 提供清晰、可操作的错误消息 - 区分临时错误和永久错误 - 支持详细和简洁两种响应模式 **当前实现**: - ✅ 已实现:区分错误类型(TimeoutError, FileNotFoundError等) - ✅ 已实现:错误响应包含error_type字段 - ✅ 已实现:详细错误日志 **应用改进**: - 错误消息更加用户友好 - 提供错误恢复建议 --- ### 6. 健康检查 ⭐⭐ **最佳实践**: - 定期检查服务状态 - 监控服务健康度 - 自动恢复机制 **当前实现**: - ⚠️ 缺少健康检查机制 **应用改进**: - 添加健康检查工具 - 监控引擎状态 --- ## 🔧 已应用的改进 ### 1. 优化超时配置 **文件**: `src/ocr_mcp_service/config.py` ```python # 根据图片大小动态设置超时 def get_timeout_for_image(image_path: str) -> int: """根据图片大小返回合适的超时时间。""" size = Path(image_path).stat().st_size if size < 1024 * 1024: # < 1MB return 60 elif size < 5 * 1024 * 1024: # < 5MB return 120 else: # >= 5MB return 180 ``` ### 2. 增强进度通知 **文件**: `src/ocr_mcp_service/progress_tracker.py` - 确保关键阶段(10%, 20%, 50%, 80%, 100%)必须发送 - 在长时间操作中定期发送心跳(每5秒) ### 3. 改进错误处理 **文件**: `src/ocr_mcp_service/tools.py` - 错误消息更加用户友好 - 提供错误恢复建议 ### 4. 资源监控 **文件**: `src/ocr_mcp_service/ocr_engine.py` - 引擎使用统计 - 支持引擎卸载(待实现) --- ## 📊 性能优化建议 ### 1. 批量处理优化 **当前问题**: - 批量处理时可能遇到连接问题 - 服务负载过高 **解决方案**: - ✅ 已实现:分批处理脚本 - ✅ 已实现:自动重试机制 - ✅ 已实现:批次间等待 ### 2. 内存优化 **建议**: - 实现引擎自动卸载(30分钟未使用) - 监控内存使用,超过阈值时告警 - 考虑使用进程池处理批量任务 ### 3. 并发控制 **建议**: - 限制同时处理的图片数量 - 使用信号量控制并发 - 队列化处理请求 --- ## 🎯 实施优先级 ### 高优先级(立即实施) 1. ✅ **分层超时控制** - 根据图片大小设置超时 2. ✅ **进度通知优化** - 确保关键阶段发送进度 3. ✅ **错误处理改进** - 用户友好的错误消息 ### 中优先级(近期实施) 4. **资源监控** - 内存使用监控 5. **健康检查** - 服务状态检查 6. **引擎自动卸载** - 长时间未使用自动释放 ### 低优先级(长期优化) 7. **异步处理** - 后台任务支持 8. **任务队列** - 批量任务队列化 9. **性能分析** - 详细的性能指标 --- ## 📝 代码示例 ### 示例1:动态超时 ```python def get_timeout_for_image(image_path: str) -> int: """根据图片大小返回合适的超时时间。""" try: size = Path(image_path).stat().st_size if size < 1024 * 1024: # < 1MB return 60 elif size < 5 * 1024 * 1024: # < 5MB return 120 else: # >= 5MB return 180 except: return OCR_TIMEOUT # 默认超时 ``` ### 示例2:增强进度通知 ```python class EnhancedProgressTracker(ProgressTracker): """增强的进度跟踪器,确保及时发送进度。""" def __init__(self, on_progress=None, heartbeat_interval=5.0): super().__init__(on_progress) self.last_heartbeat = time.time() self.heartbeat_interval = heartbeat_interval def update(self, percentage, stage, message=""): super().update(percentage, stage, message) # 发送心跳(即使进度不变) now = time.time() if now - self.last_heartbeat >= self.heartbeat_interval: if self.on_progress: self.on_progress(percentage, stage, f"处理中... ({message})") self.last_heartbeat = now ``` ### 示例3:健康检查工具 ```python @mcp.tool() def health_check() -> dict: """检查MCP服务健康状态。""" from .ocr_engine import OCREngineFactory stats = OCREngineFactory.get_usage_stats() return { "status": "healthy", "engines_loaded": stats["total_engines"], "engines": stats["engines"], "timestamp": datetime.now().isoformat() } ``` --- ## 🔍 监控指标 ### 关键指标 1. **处理时间** - 平均处理时间 - 最长处理时间 - 超时率 2. **成功率** - 成功/失败比例 - 错误类型分布 3. **资源使用** - 内存使用 - CPU使用 - 引擎数量 4. **连接状态** - 连接断开次数 - 重连次数 - 平均连接时长 --- ## 📚 参考资源 - [MCP官方文档](https://modelcontextprotocol.io/) - [FastMCP文档](https://github.com/jlowin/fastmcp) - [MCP最佳实践](https://mcpcn.com/docs/tutorials/writing-effective-tools/) --- ## ✅ 总结 通过应用MCP最佳实践,特别是针对长任务处理: 1. ✅ **超时控制** - 分层超时,防止无限等待 2. ✅ **进度通知** - 及时发送进度,保持连接活跃 3. ✅ **错误处理** - 清晰的错误消息和恢复建议 4. ✅ **资源管理** - 监控和优化资源使用 5. ⚠️ **异步处理** - 待实现,用于超长任务 6. ⚠️ **健康检查** - 待实现,监控服务状态 这些改进显著提升了MCP服务的稳定性和用户体验。

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/qiao-925/ocr-mcp-service'

If you have feedback or need assistance with the MCP directory API, please join our Discord server