你是一个资深 Java 后端工程师,请在当前 Spring Boot(Java8)项目中实现一个完整的 MCP Server,并加入“AI 自动选 Tool(RAG + Tool Routing)”能力。 # 一、基础 MCP 能力(必须实现) 1. 提供统一入口: POST /mcp 2. 实现 JSON-RPC 2.0: * initialize * tools/list * tools/call 3. 返回格式: { "jsonrpc": "2.0", "id": "...", "result": ... } # 二、流式能力(必须) 1. 禁止使用 SseEmitter 2. 使用 HttpServletResponse + OutputStream 3. 实现 chunked streaming(write + flush) # 三、Tool 注册中心(必须) 实现: * McpToolRegistry * register / get / list Tool结构: * name * description(非常重要,用于向量检索) * inputSchema * handler # 四、RAG Tool 检索模块(新增重点) 实现一个 ToolRetriever 组件: 1. 构建向量索引(简化实现): * 使用内存存储 List * ToolEmbedding: * toolName * description * embedding(double[]) 2. 提供方法: List retrieve(String query, int topK) 3. embedding 实现(简化): * 可使用: * 简单 TF-IDF * 或 mock embedding(字符串相似度) * 不依赖外部服务(保证可运行) # 五、Tool Router(核心) 实现 ToolRouter: 流程: 1. 接收用户问题 query 2. 调用 ToolRetriever → 获取 topK tools 3. 构建 prompt(只包含候选 tools) 4. 返回候选 tools 给上层(或直接选) 要求: * 不允许返回全部 tools * 默认 topK = 3~5 # 六、tools/call 升级(关键) 当 method = tools/call 时: 1. 如果请求未指定 tool: * 自动触发 ToolRouter * 选出最优 tool 2. 如果指定 tool: * 直接执行 # 七、默认内置工具 实现: 1. hello 输入:name 输出:hello xxx 2. meeting.summary 输入:text 输出:模拟总结 # 八、架构分层(必须) * controller * service * registry * retriever(新增) * router(新增) # 九、扩展能力(必须预留) 1. 支持替换为真实向量数据库(如 Milvus / ES) 2. 支持 embedding API(OpenAI / 本地模型) 3. 支持多 MCP Server(未来扩展) # 十、输出要求 1. 输出完整代码: * McpController * McpService * McpToolRegistry * ToolRetriever * ToolRouter * ToolEmbedding * ToolInitializer * McpRequest 2. 代码必须: * 可运行 * 无伪代码 * 包含必要注释 * 代码生成目录在ruoyi-sip/src/main/java/com/ruoyi/sip/llm 3. 不要解释,只输出代码