| | |
| | | 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); |
| | |
| | | } |
| | | } |
| | | |
| | | 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; |