From 663990e8920e2ce6e3689d26b98c013a944d857b Mon Sep 17 00:00:00 2001 From: xiaoqu-ai Date: Wed, 21 Oct 2026 13:41:35 +0800 Subject: [PATCH] =?UTF-8?q?fix(mcp):=20=E4=BF=AE=E6=AD=A3=E5=90=AF?= =?UTF-8?q?=E5=8A=A8=E9=A1=BA=E5=BA=8F=E2=80=94=E2=80=94=E5=B7=A5=E5=85=B7?= =?UTF-8?q?=E6=B3=A8=E5=86=8C=E5=BF=85=E9=A1=BB=E5=85=88=E4=BA=8E=E4=BD=9C?= =?UTF-8?q?=E7=94=A8=E5=9F=9F=E7=BB=91=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因(源码级):ToolSyncService 没有 @Order,默认 LOWEST_PRECEDENCE(最后执行); ScopeToolSyncService 写了 @Order(2)(最先执行)。于是绑定跑在注册之前: - tool 表里已有的工具 → 能查到 → 绑上(实测 3 个) - 本次启动才注册的工具 → 查不到 → 跳过(district.paper.statistics.query) 现象完全对应:同一批 4 个工具,3 个进作用域,1 个缺失。 修复:给 ToolSyncService 显式 @Order(1),ScopeToolSyncService 保持 @Order(2), 并在注释里写清依赖关系,避免后来者再改错。 验证:编译通过;ScopeToolSyncServiceTest 5 例全过。 --- .../src/main/java/me/iiv/agent/mcp/ScopeToolSyncService.java | 2 +- .../src/main/java/me/iiv/agent/mcp/ToolSyncService.java | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/xiaoqu-agent-service/src/main/java/me/iiv/agent/mcp/ScopeToolSyncService.java b/xiaoqu-agent-service/src/main/java/me/iiv/agent/mcp/ScopeToolSyncService.java index c8e2b49..7c0628f 100644 --- a/xiaoqu-agent-service/src/main/java/me/iiv/agent/mcp/ScopeToolSyncService.java +++ b/xiaoqu-agent-service/src/main/java/me/iiv/agent/mcp/ScopeToolSyncService.java @@ -35,7 +35,7 @@ import java.util.List; *

安全约束:只新增、不删除;作用域或工具不存在时记警告并跳过(不阻断启动)。

*/ @Component -@Order(2) // 必须在 ToolSyncService(@Order 缺省最低)之后,确保 tool 表已有记录 +@Order(2) // 必须在 ToolSyncService(@Order(1)) 之后:它负责把工具写进 tool 表 public class ScopeToolSyncService implements ApplicationRunner { private static final Logger log = LoggerFactory.getLogger(ScopeToolSyncService.class); diff --git a/xiaoqu-agent-service/src/main/java/me/iiv/agent/mcp/ToolSyncService.java b/xiaoqu-agent-service/src/main/java/me/iiv/agent/mcp/ToolSyncService.java index a9ba918..ff16336 100644 --- a/xiaoqu-agent-service/src/main/java/me/iiv/agent/mcp/ToolSyncService.java +++ b/xiaoqu-agent-service/src/main/java/me/iiv/agent/mcp/ToolSyncService.java @@ -7,6 +7,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; +import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; import java.lang.reflect.Method; @@ -20,6 +21,7 @@ import java.util.Objects; * 但保留管理员手动设置的 status,且不删除任何已有工具。 */ @Component +@Order(1) // 必须先于 ScopeToolSyncService(2):后者按 tool 表里的 name 建立作用域绑定 public class ToolSyncService implements ApplicationRunner { private static final Logger log = LoggerFactory.getLogger(ToolSyncService.class);