diff --git a/registry/nacos/mcpserver/watcher.go b/registry/nacos/mcpserver/watcher.go index e575194aa..9ed5b778a 100644 --- a/registry/nacos/mcpserver/watcher.go +++ b/registry/nacos/mcpserver/watcher.go @@ -111,9 +111,10 @@ func NewWatcher(cache memory.Cache, opts ...WatcherOption) (provider.Watcher, er opt(w) } - if w.NacosNamespace == "" { - w.NacosNamespace = w.NacosNamespaceId - } + // The nacos mcp server uses these restricted namespaces and groups, and may be adjusted in the future. + w.NacosNamespace = "nacos-default-mcp" + w.NacosNamespaceId = w.NacosNamespace + w.NacosGroups = []string{"mcp-server"} mcpServerLog.Infof("new nacos mcp server watcher with config Name:%s", w.Name) @@ -177,32 +178,6 @@ func WithNacosSecretKey(nacosSecretKey string) WatcherOption { } } -func WithNacosNamespaceId(nacosNamespaceId string) WatcherOption { - return func(w *watcher) { - if nacosNamespaceId == "" { - w.NacosNamespaceId = "nacos-default-mcp" - } else { - w.NacosNamespaceId = nacosNamespaceId - } - } -} - -func WithNacosNamespace(nacosNamespace string) WatcherOption { - return func(w *watcher) { - w.NacosNamespace = nacosNamespace - } -} - -func WithNacosGroups(nacosGroups []string) WatcherOption { - return func(w *watcher) { - if len(nacosGroups) == 0 { - w.NacosGroups = []string{"mcp-server"} - } else { - w.NacosGroups = nacosGroups - } - } -} - func WithNacosRefreshInterval(refreshInterval int64) WatcherOption { return func(w *watcher) { if refreshInterval < int64(DefaultRefreshIntervalLimit) { @@ -967,7 +942,8 @@ func (w *watcher) Stop() { } mcpServerLog.Infof("stop all service nameing client") for _, client := range w.serviceCache { - client.Stop() + // TODO: This is a temporary implementation because of a bug in the nacos-go-sdk, which causes a block when stoping. + go client.Stop() } w.isStop = true diff --git a/registry/reconcile/reconcile.go b/registry/reconcile/reconcile.go index 73c9c6625..49cce310b 100644 --- a/registry/reconcile/reconcile.go +++ b/registry/reconcile/reconcile.go @@ -187,25 +187,40 @@ func (r *Reconciler) generateWatcherFromRegistryConfig(registry *apiv1.RegistryC nacosv2.WithAuthOption(authOption), ) case string(Nacos3): - watcher, err = mcpserver.NewWatcher( - r.Cache, - mcpserver.WithType(registry.Type), - mcpserver.WithName(registry.Name), - mcpserver.WithNacosAddressServer(registry.NacosAddressServer), - mcpserver.WithDomain(registry.Domain), - mcpserver.WithPort(registry.Port), - mcpserver.WithNacosAccessKey(registry.NacosAccessKey), - mcpserver.WithNacosSecretKey(registry.NacosSecretKey), - mcpserver.WithNacosNamespaceId(registry.NacosNamespaceId), - mcpserver.WithNacosNamespace(registry.NacosNamespace), - mcpserver.WithNacosGroups(registry.NacosGroups), - mcpserver.WithNacosRefreshInterval(registry.NacosRefreshInterval), - mcpserver.WithMcpExportDomains(registry.McpServerExportDomains), - mcpserver.WithMcpBaseUrl(registry.McpServerBaseUrl), - mcpserver.WithEnableMcpServer(registry.EnableMCPServer), - mcpserver.WithClusterId(r.clusterId), - mcpserver.WithNamespace(r.namespace), - ) + if registry.EnableMCPServer.GetValue() { + watcher, err = mcpserver.NewWatcher( + r.Cache, + mcpserver.WithType(registry.Type), + mcpserver.WithName(registry.Name), + mcpserver.WithNacosAddressServer(registry.NacosAddressServer), + mcpserver.WithDomain(registry.Domain), + mcpserver.WithPort(registry.Port), + mcpserver.WithNacosAccessKey(registry.NacosAccessKey), + mcpserver.WithNacosSecretKey(registry.NacosSecretKey), + mcpserver.WithNacosRefreshInterval(registry.NacosRefreshInterval), + mcpserver.WithMcpExportDomains(registry.McpServerExportDomains), + mcpserver.WithMcpBaseUrl(registry.McpServerBaseUrl), + mcpserver.WithEnableMcpServer(registry.EnableMCPServer), + mcpserver.WithClusterId(r.clusterId), + mcpserver.WithNamespace(r.namespace), + ) + } else { + watcher, err = nacosv2.NewWatcher( + r.Cache, + nacosv2.WithType(registry.Type), + nacosv2.WithName(registry.Name), + nacosv2.WithNacosAddressServer(registry.NacosAddressServer), + nacosv2.WithDomain(registry.Domain), + nacosv2.WithPort(registry.Port), + nacosv2.WithNacosAccessKey(registry.NacosAccessKey), + nacosv2.WithNacosSecretKey(registry.NacosSecretKey), + nacosv2.WithNacosNamespaceId(registry.NacosNamespaceId), + nacosv2.WithNacosNamespace(registry.NacosNamespace), + nacosv2.WithNacosGroups(registry.NacosGroups), + nacosv2.WithNacosRefreshInterval(registry.NacosRefreshInterval), + nacosv2.WithAuthOption(authOption), + ) + } case string(Zookeeper): watcher, err = zookeeper.NewWatcher( r.Cache,