| feat: 重构 MCP Server 架构实现 (#317) (#318) * feat: 重构 MCP Server 架构实现 (#317) 根据 issue #317 的设计,完全重构 MCP Server 架构: 架构改进: - 移除 fastmcp 依赖,使用官方 @modelcontextprotocol/sdk - 实现 Template Method 设计模式的基础服务器类 - 支持 Node.js 16+ 环境 - 遵循 SOLID 设计原则 核心功能: - BaseMCPServer: 抽象基类,提供核心功能模板 - StdioMCPServer: 标准输入输出实现,支持 CLI 工具 - StreamableHttpMCPServer: HTTP 服务器实现,支持 SSE 流式传输 - MCPServerFactory: 工厂类,简化服务器创建 增强特性: - 完整的状态机管理 (IDLE→STARTING→RUNNING→STOPPING→STOPPED) - 会话管理与超时控制 - 健康检查和性能指标收集 - 并发请求控制与优雅关闭 - 全面的错误处理系统 错误处理: - MCPError 类型层次结构,支持严重级别和类别分类 - 错误恢复策略(指数退避、熔断器模式) - 错误收集器,支持监控和报告 - 自动重试机制与阈值触发器 测试覆盖: - TDD 开发方式,61 个测试用例全部通过 - 完整的单元测试覆盖 - Mock 策略处理外部依赖 日志系统: - 结构化日志,便于调试和监控 - 关键操作点的详细日志记录 - 状态变更、工具执行、会话管理等全程跟踪 Breaking Changes: - 旧代码已移至 legacy 目录 - 需要更新导入路径和使用方式 - API 接口有较大变化 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * feat: 优化 HTTP 端点设计,符合 MCP 官方规范 - 统一使用 /mcp 端点处理所有请求 - POST /mcp: 处理 RPC 请求,自动生成或使用会话ID - GET /mcp: SSE 流连接 - DELETE /mcp: 终止会话 - 通过 MCP-Session-Id header 管理会话 - 保留 /health 健康检查端点 - 更新命令行提示信息 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * feat: 集成 PromptXMCPServer 到 CLI 和 Desktop 应用 更新内容: - CLI: 直接使用 MCPServerManager (PromptXMCPServer 的别名) - Desktop: 更新 PromptXServerAdapter 使用新的 PromptXMCPServer - 适配新的 API 方法(isRunning, getServer, getMetrics 等) - 处理配置更新(需要重启才能生效) 这样所有应用都使用统一的 PromptXMCPServer,确保一致性。 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * refactor: 完全仿照官方 MCP Streamable HTTP 实现 - 重构 StreamableHttpMCPServer 采用官方示例的精确实现模式 - 使用 express.Router() 而非直接路由定义 - 使用对象字典而非 Map 存储 transports - 统一使用 SESSION_ID_HEADER_NAME 常量 - 移除自定义 CORS 和日志中间件 - 迁移所有 PromptX 核心工具到新架构 - 删除基础工具,专注于 PromptX 专业工具 - 简化 StdioMCPServer 使用 SDK 处理协议细节 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: force IPv4 binding to resolve ECONNRESET error Server was binding to IPv6 localhost (::1) while clients connect to IPv4 (127.0.0.1) Changed all default host values from 'localhost' to '127.0.0.1' 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: 修复托盘 Stop Server 功能失效问题 问题是 isRunning 检查方式错误。代码检查了 this.server?.isRunning(函数是否存在) 而不是调用 this.server.getServer().isRunning()(实际运行状态)。 修复: - start() 方法:使用 getServer().isRunning() 检查状态 - stop() 方法:使用 getServer().isRunning() 检查状态 - restart() 方法:使用 getServer().isRunning() 检查状态 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * refactor: 删除废弃的 legacy 目录 移除不再使用的旧版 MCP 服务器实现代码: - 删除 legacy/MCPOutputAdapter.ts(已迁移到 utils/) - 删除 legacy/MCPServerManager.ts(现使用 PromptXMCPServer) - 删除 legacy/definitions/(已迁移到新架构) - 删除 legacy/server/(已被新服务器实现替代) 所有功能已在新架构中实现,legacy 代码不再被任何地方引用。 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com> | 9 个月前 |