From ffbf67765d2ae447d62333eed85100a15685d781 Mon Sep 17 00:00:00 2001
From: zhou zhou <3272660260@qq.com>
Date: 星期四, 19 三月 2026 12:27:59 +0800
Subject: [PATCH] #AI.内置工具治理
---
rsf-server/src/main/java/com/vincent/rsf/server/ai/service/impl/AiMcpMountServiceImpl.java | 19 +++++++++++++++++--
1 files changed, 17 insertions(+), 2 deletions(-)
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/ai/service/impl/AiMcpMountServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/ai/service/impl/AiMcpMountServiceImpl.java
index 5bde192..87eb622 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/ai/service/impl/AiMcpMountServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/ai/service/impl/AiMcpMountServiceImpl.java
@@ -72,7 +72,10 @@
AiMcpMount mount = requireMount(mountId, tenantId);
long startedAt = System.currentTimeMillis();
try (McpMountRuntimeFactory.McpMountRuntime runtime = mcpMountRuntimeFactory.create(List.of(mount), userId)) {
- List<AiMcpToolPreviewDto> tools = buildToolPreviewDtos(runtime.getToolCallbacks());
+ List<AiMcpToolPreviewDto> tools = buildToolPreviewDtos(runtime.getToolCallbacks(),
+ AiDefaults.MCP_TRANSPORT_BUILTIN.equals(mount.getTransportType())
+ ? builtinMcpToolRegistry.listBuiltinToolCatalog(mount.getBuiltinCode())
+ : List.of());
if (!runtime.getErrors().isEmpty()) {
String message = String.join("锛�", runtime.getErrors());
updateHealthStatus(mount.getId(), AiDefaults.MCP_HEALTH_UNHEALTHY, message, System.currentTimeMillis() - startedAt);
@@ -274,17 +277,29 @@
}
}
- private List<AiMcpToolPreviewDto> buildToolPreviewDtos(ToolCallback[] callbacks) {
+ private List<AiMcpToolPreviewDto> buildToolPreviewDtos(ToolCallback[] callbacks, List<AiMcpToolPreviewDto> governedCatalog) {
List<AiMcpToolPreviewDto> tools = new ArrayList<>();
+ Map<String, AiMcpToolPreviewDto> catalogMap = new java.util.LinkedHashMap<>();
+ for (AiMcpToolPreviewDto item : governedCatalog) {
+ if (item == null || !StringUtils.hasText(item.getName())) {
+ continue;
+ }
+ catalogMap.put(item.getName(), item);
+ }
for (ToolCallback callback : callbacks) {
if (callback == null || callback.getToolDefinition() == null) {
continue;
}
+ AiMcpToolPreviewDto governedItem = catalogMap.get(callback.getToolDefinition().name());
tools.add(AiMcpToolPreviewDto.builder()
.name(callback.getToolDefinition().name())
.description(callback.getToolDefinition().description())
.inputSchema(callback.getToolDefinition().inputSchema())
.returnDirect(callback.getToolMetadata() == null ? null : callback.getToolMetadata().returnDirect())
+ .toolGroup(governedItem == null ? null : governedItem.getToolGroup())
+ .toolPurpose(governedItem == null ? null : governedItem.getToolPurpose())
+ .queryBoundary(governedItem == null ? null : governedItem.getQueryBoundary())
+ .exampleQuestions(governedItem == null ? List.of() : governedItem.getExampleQuestions())
.build());
}
return tools;
--
Gitblit v1.9.1