diff --git a/ruoyi-extend/ruoyi-mcp-server/pom.xml b/ruoyi-extend/ruoyi-mcp-server/pom.xml
index a35f0140..6dfb5d17 100644
--- a/ruoyi-extend/ruoyi-mcp-server/pom.xml
+++ b/ruoyi-extend/ruoyi-mcp-server/pom.xml
@@ -47,6 +47,39 @@
test
+
+
+ cn.hutool
+ hutool-all
+ 5.8.25
+
+
+
+
+ com.squareup.okhttp3
+ okhttp
+ 4.12.0
+
+
+
+
+ net.sourceforge.plantuml
+ plantuml
+ 1.2024.3
+
+
+
+
+ org.springframework.ai
+ spring-ai-tika-document-reader
+
+
+
+
+ org.projectlombok
+ lombok
+ true
+
diff --git a/ruoyi-extend/ruoyi-mcp-server/src/main/java/org/ruoyi/mcpserve/RuoyiMcpServeApplication.java b/ruoyi-extend/ruoyi-mcp-server/src/main/java/org/ruoyi/mcpserve/RuoyiMcpServeApplication.java
index 54a01deb..9abee854 100644
--- a/ruoyi-extend/ruoyi-mcp-server/src/main/java/org/ruoyi/mcpserve/RuoyiMcpServeApplication.java
+++ b/ruoyi-extend/ruoyi-mcp-server/src/main/java/org/ruoyi/mcpserve/RuoyiMcpServeApplication.java
@@ -1,13 +1,12 @@
package org.ruoyi.mcpserve;
-import org.ruoyi.mcpserve.service.ToolService;
-import org.springframework.ai.tool.ToolCallbackProvider;
-import org.springframework.ai.tool.method.MethodToolCallbackProvider;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.context.annotation.Bean;
/**
+ * MCP Server 应用启动类
+ * 工具通过 DynamicToolCallbackProvider 动态加载
+ *
* @author ageer
*/
@SpringBootApplication
@@ -17,9 +16,4 @@ public class RuoyiMcpServeApplication {
SpringApplication.run(RuoyiMcpServeApplication.class, args);
}
- @Bean
- public ToolCallbackProvider systemTools(ToolService toolService) {
- return MethodToolCallbackProvider.builder().toolObjects(toolService).build();
- }
-
}
diff --git a/ruoyi-extend/ruoyi-mcp-server/src/main/java/org/ruoyi/mcpserve/config/DynamicToolCallbackProvider.java b/ruoyi-extend/ruoyi-mcp-server/src/main/java/org/ruoyi/mcpserve/config/DynamicToolCallbackProvider.java
new file mode 100644
index 00000000..e4c0f6f3
--- /dev/null
+++ b/ruoyi-extend/ruoyi-mcp-server/src/main/java/org/ruoyi/mcpserve/config/DynamicToolCallbackProvider.java
@@ -0,0 +1,104 @@
+package org.ruoyi.mcpserve.config;
+
+import org.ruoyi.mcpserve.tools.McpTool;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.ai.tool.ToolCallback;
+import org.springframework.ai.tool.ToolCallbackProvider;
+import org.springframework.ai.tool.method.MethodToolCallbackProvider;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 动态工具回调提供者
+ * 根据配置动态加载启用的MCP工具
+ *
+ * @author OpenX
+ */
+@Component
+public class DynamicToolCallbackProvider implements ToolCallbackProvider {
+
+ private static final Logger log = LoggerFactory.getLogger(DynamicToolCallbackProvider.class);
+
+ private final McpToolsConfig mcpToolsConfig;
+ private final List allTools;
+ private volatile ToolCallback[] cachedCallbacks;
+
+ public DynamicToolCallbackProvider(McpToolsConfig mcpToolsConfig, List allTools) {
+ this.mcpToolsConfig = mcpToolsConfig;
+ this.allTools = allTools;
+ log.info("发现 {} 个MCP工具", allTools.size());
+ }
+
+ @Override
+ public ToolCallback[] getToolCallbacks() {
+ if (cachedCallbacks == null) {
+ synchronized (this) {
+ if (cachedCallbacks == null) {
+ cachedCallbacks = buildToolCallbacks();
+ }
+ }
+ }
+ return cachedCallbacks;
+ }
+
+ /**
+ * 构建工具回调数组
+ */
+ private ToolCallback[] buildToolCallbacks() {
+ List