diff --git a/auto-configurations/spring-ai-alibaba-autoconfigure-mcp-distributed/src/main/java/com/alibaba/cloud/ai/autoconfigure/mcp/discovery/client/NacosMcpAutoConfiguration.java b/auto-configurations/spring-ai-alibaba-autoconfigure-mcp-distributed/src/main/java/com/alibaba/cloud/ai/autoconfigure/mcp/discovery/client/NacosMcpAutoConfiguration.java index 68958ef0..a3b4918b 100644 --- a/auto-configurations/spring-ai-alibaba-autoconfigure-mcp-distributed/src/main/java/com/alibaba/cloud/ai/autoconfigure/mcp/discovery/client/NacosMcpAutoConfiguration.java +++ b/auto-configurations/spring-ai-alibaba-autoconfigure-mcp-distributed/src/main/java/com/alibaba/cloud/ai/autoconfigure/mcp/discovery/client/NacosMcpAutoConfiguration.java @@ -16,22 +16,22 @@ package com.alibaba.cloud.ai.autoconfigure.mcp.discovery.client; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; +import java.util.Properties; + +import static com.alibaba.cloud.ai.mcp.nacos.NacosMcpProperties.DEFAULT_ADDRESS; import com.alibaba.cloud.ai.mcp.nacos.NacosMcpClientProperties; import com.alibaba.cloud.ai.mcp.nacos.service.NacosMcpOperationService; import com.alibaba.nacos.api.PropertyKeyConst; import com.alibaba.nacos.api.exception.NacosException; import com.alibaba.nacos.api.utils.StringUtils; +import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; -import java.util.Properties; - -import static com.alibaba.cloud.ai.mcp.nacos.NacosMcpProperties.DEFAULT_ADDRESS; - /** * @author yingzi * @since 2025/6/4 19:16 @@ -41,7 +41,7 @@ public class NacosMcpAutoConfiguration { @Bean - public Map nacosMcpOperationServiceMap(NacosMcpClientProperties nacosMcpClientProperties) { + public Map nacosMcpOperationServiceMap(NacosMcpClientProperties nacosMcpClientProperties, ObjectProvider registryServiceProvider) { Map map = new HashMap<>(); nacosMcpClientProperties.getConfigs().forEach((name, nacosSseParameters) -> { Properties properties = new Properties(); @@ -60,11 +60,9 @@ public Map nacosMcpOperationServiceMap(NacosMc else { properties.put(PropertyKeyConst.ENDPOINT, endpoint); } - if (StringUtils.isEmpty(nacosSseParameters.serverAddr()) && StringUtils.isEmpty(nacosSseParameters.endpoint())) { properties.put(PropertyKeyConst.SERVER_ADDR, DEFAULT_ADDRESS); } - try { NacosMcpOperationService nacosMcpOperationService = new NacosMcpOperationService(properties); map.put(name, nacosMcpOperationService); @@ -72,7 +70,9 @@ public Map nacosMcpOperationServiceMap(NacosMc throw new RuntimeException(e); } }); - + registryServiceProvider.ifAvailable(service -> { + map.put("nacosMcpOperationService", service); + }); return map; } diff --git a/auto-configurations/spring-ai-alibaba-autoconfigure-mcp-distributed/src/main/java/com/alibaba/cloud/ai/autoconfigure/mcp/discovery/client/NacosMcpSseClientAutoConfiguration.java b/auto-configurations/spring-ai-alibaba-autoconfigure-mcp-distributed/src/main/java/com/alibaba/cloud/ai/autoconfigure/mcp/discovery/client/NacosMcpSseClientAutoConfiguration.java index 9fc7fffe..bc178c72 100644 --- a/auto-configurations/spring-ai-alibaba-autoconfigure-mcp-distributed/src/main/java/com/alibaba/cloud/ai/autoconfigure/mcp/discovery/client/NacosMcpSseClientAutoConfiguration.java +++ b/auto-configurations/spring-ai-alibaba-autoconfigure-mcp-distributed/src/main/java/com/alibaba/cloud/ai/autoconfigure/mcp/discovery/client/NacosMcpSseClientAutoConfiguration.java @@ -16,29 +16,28 @@ package com.alibaba.cloud.ai.autoconfigure.mcp.discovery.client; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + import com.alibaba.cloud.ai.mcp.discovery.client.transport.DistributedAsyncMcpClient; import com.alibaba.cloud.ai.mcp.discovery.client.transport.DistributedSyncMcpClient; import com.alibaba.cloud.ai.mcp.discovery.client.transport.sse.SseWebFluxDistributedAsyncMcpClient; import com.alibaba.cloud.ai.mcp.discovery.client.transport.sse.SseWebFluxDistributedSyncMcpClient; import com.alibaba.cloud.ai.mcp.nacos.NacosMcpClientProperties; -import com.alibaba.cloud.ai.mcp.nacos.service.NacosMcpOperationService; import com.alibaba.cloud.ai.mcp.nacos.NacosMcpSseClientProperties; -import org.springframework.beans.factory.ObjectProvider; +import com.alibaba.cloud.ai.mcp.nacos.service.NacosMcpOperationService; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - /** * @author yingzi * @since 2025/10/28 */ -@AutoConfiguration(after = { NacosMcpAutoConfiguration.class }) +@AutoConfiguration @EnableConfigurationProperties({ NacosMcpSseClientProperties.class, NacosMcpClientProperties.class}) @ConditionalOnProperty(prefix = "spring.ai.alibaba.mcp.nacos.client", name = { "enabled" }, havingValue = "true", matchIfMissing = false) @@ -48,11 +47,9 @@ public class NacosMcpSseClientAutoConfiguration { @ConditionalOnProperty(prefix = "spring.ai.mcp.client", name = { "type" }, havingValue = "SYNC", matchIfMissing = true) public List sseWebFluxDistributedSyncClients( - ObjectProvider> nacosMcpOperationServiceMapProvider, + Map nacosMcpOperationServiceMap, NacosMcpSseClientProperties nacosMcpSseClientProperties, ApplicationContext applicationContext) { - Map nacosMcpOperationServiceMap = nacosMcpOperationServiceMapProvider.getObject(); List clients = new ArrayList<>(); - nacosMcpSseClientProperties.getConnections().forEach((name, nacosSseParameters) -> { SseWebFluxDistributedSyncMcpClient client = SseWebFluxDistributedSyncMcpClient.builder() .serverName(nacosSseParameters.serviceName()) @@ -63,7 +60,6 @@ public List sseWebFluxDistributedSyncClients( client.init(); client.subscribe(); clients.add(client); - }); return clients; } @@ -72,11 +68,9 @@ public List sseWebFluxDistributedSyncClients( @ConditionalOnProperty(prefix = "spring.ai.mcp.client", name = { "type" }, havingValue = "ASYNC", matchIfMissing = true) public List sseWebFluxDistributedAsyncClients( - ObjectProvider> nacosMcpOperationServiceMapProvider, + Map nacosMcpOperationServiceMap, NacosMcpSseClientProperties nacosMcpSseClientProperties, ApplicationContext applicationContext) { - Map nacosMcpOperationServiceMap = nacosMcpOperationServiceMapProvider.getObject(); List clients = new ArrayList<>(); - nacosMcpSseClientProperties.getConnections().forEach((name, nacosSseParameters) -> { SseWebFluxDistributedAsyncMcpClient client = SseWebFluxDistributedAsyncMcpClient.builder() .serverName(nacosSseParameters.serviceName()) @@ -86,7 +80,6 @@ public List sseWebFluxDistributedAsyncClients( .build(); client.init(); client.subscribe(); - clients.add(client); }); return clients; diff --git a/auto-configurations/spring-ai-alibaba-autoconfigure-mcp-distributed/src/main/java/com/alibaba/cloud/ai/autoconfigure/mcp/discovery/client/NacosMcpStreamableClientAutoConfiguration.java b/auto-configurations/spring-ai-alibaba-autoconfigure-mcp-distributed/src/main/java/com/alibaba/cloud/ai/autoconfigure/mcp/discovery/client/NacosMcpStreamableClientAutoConfiguration.java index 223420fa..24927e55 100644 --- a/auto-configurations/spring-ai-alibaba-autoconfigure-mcp-distributed/src/main/java/com/alibaba/cloud/ai/autoconfigure/mcp/discovery/client/NacosMcpStreamableClientAutoConfiguration.java +++ b/auto-configurations/spring-ai-alibaba-autoconfigure-mcp-distributed/src/main/java/com/alibaba/cloud/ai/autoconfigure/mcp/discovery/client/NacosMcpStreamableClientAutoConfiguration.java @@ -16,29 +16,28 @@ package com.alibaba.cloud.ai.autoconfigure.mcp.discovery.client; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + import com.alibaba.cloud.ai.mcp.discovery.client.transport.DistributedAsyncMcpClient; import com.alibaba.cloud.ai.mcp.discovery.client.transport.DistributedSyncMcpClient; import com.alibaba.cloud.ai.mcp.discovery.client.transport.streamable.StreamWebFluxDistributedAsyncMcpClient; import com.alibaba.cloud.ai.mcp.discovery.client.transport.streamable.StreamWebFluxDistributedSyncMcpClient; import com.alibaba.cloud.ai.mcp.nacos.NacosMcpClientProperties; -import com.alibaba.cloud.ai.mcp.nacos.service.NacosMcpOperationService; import com.alibaba.cloud.ai.mcp.nacos.NacosMcpStreamableClientProperties; -import org.springframework.beans.factory.ObjectProvider; +import com.alibaba.cloud.ai.mcp.nacos.service.NacosMcpOperationService; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - /** * @author yingzi * @since 2025/10/28 */ -@AutoConfiguration(after = { NacosMcpAutoConfiguration.class }) +@AutoConfiguration @EnableConfigurationProperties({ NacosMcpStreamableClientProperties.class, NacosMcpClientProperties.class}) @ConditionalOnProperty(prefix = "spring.ai.alibaba.mcp.nacos.client", name = { "enabled" }, havingValue = "true", matchIfMissing = false) @@ -48,11 +47,9 @@ public class NacosMcpStreamableClientAutoConfiguration { @ConditionalOnProperty(prefix = "spring.ai.mcp.client", name = { "type" }, havingValue = "SYNC", matchIfMissing = true) public List streamableWebFluxDistributedSyncClients( - ObjectProvider> nacosMcpOperationServiceMapProvider, + Map nacosMcpOperationServiceMap, NacosMcpStreamableClientProperties nacosMcpStreamableClientProperties, ApplicationContext applicationContext) { - Map nacosMcpOperationServiceMap = nacosMcpOperationServiceMapProvider.getObject(); List clients = new ArrayList<>(); - nacosMcpStreamableClientProperties.getConnections().forEach((name, nacosSseParameters) -> { StreamWebFluxDistributedSyncMcpClient client = StreamWebFluxDistributedSyncMcpClient.builder() .serverName(nacosSseParameters.serviceName()) @@ -63,7 +60,6 @@ public List streamableWebFluxDistributedSyncClients( client.init(); client.subscribe(); clients.add(client); - }); return clients; } @@ -72,11 +68,9 @@ public List streamableWebFluxDistributedSyncClients( @ConditionalOnProperty(prefix = "spring.ai.mcp.client", name = { "type" }, havingValue = "ASYNC", matchIfMissing = true) public List streamableWebFluxDistributedAsyncClients( - ObjectProvider> nacosMcpOperationServiceMapProvider, + Map nacosMcpOperationServiceMap, NacosMcpStreamableClientProperties nacosMcpStreamableClientProperties, ApplicationContext applicationContext) { - Map nacosMcpOperationServiceMap = nacosMcpOperationServiceMapProvider.getObject(); List clients = new ArrayList<>(); - nacosMcpStreamableClientProperties.getConnections().forEach((name, nacosSseParameters) -> { StreamWebFluxDistributedAsyncMcpClient client = StreamWebFluxDistributedAsyncMcpClient.builder() .serverName(nacosSseParameters.serviceName()) @@ -86,7 +80,6 @@ public List streamableWebFluxDistributedAsyncClients( .build(); client.init(); client.subscribe(); - clients.add(client); }); return clients;