MCP Server 自动注册与发现手册
除了在控制台手动注册 MCP Server 服务以外,通过使用Spring AI Alibaba 框架 或者 Nacos MCP Wrapper Python 开发 MCP Server, 可以在 MCP Server启动后动态注册至 Nacos,并对齐进统一管理,支持以下能力:
- MCP Server 服务动态管理:通过 MCP 服务列表增删改查服务信息
- 描述动态生效:工具描述、参数定义等元信息支持运行时热更新,无需重启服务。
- MCP Server Tools 动态开关:支持 MCP Server 服务 Tools 运行时动态开启和关闭,无需重启服务。
- 全链路集成:服务注册信息自动同步至 Nacos 配置中心与服务发现模块,适配 AI Agent 调用需求
注册到 Nacos MCP Registry 中的服务,可以通过 Spring AI Alibaba 框架 或者 Nacos MCP Router 进行发现和调用,或者对接 Higress 网关,实现全链路集成。
MCP Server 自动注册
使用 Spring AI Alibaba Nacos MCP 框架开发 MCP Server
1.依赖引入
<dependency> <groupId>com.alibaba.cloud.ai</groupId> <artifactId>spring-ai-alibaba-starter-mcp-registry</artifactId> <version>{1.0.0.3及以上版本}</version></dependency>
<!-- MCP Server (WebMVC) --><dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-starter-mcp-server-webmvc</artifactId> <version>{1.0.0及以上版本}</version></dependency>2.服务定义(实例)
@Servicepublic class WeatherService {
@Tool(description = "Get weather information by city name") public String getWeather(@ToolParam(description = "City name") String cityName) { return "Sunny in " + cityName; }}3.自动注册参数配置
spring: application: name: mcp-nacos-registry-example ai: mcp: server: name: webmvc-mcp-server # MCP服务名称 version: 1.0.0 # 服务版本 type: SYNC # 调用类型:SYNC(同步)或ASYNC(异步) instructions: "This mcp server provides time information tools and resources" alibaba: mcp: nacos: server-addr: # 替换为你的 Nacos 地址 namespace: public # Nacos 命名空间 ID(默认为public) username: # 开源控制台用户名 password: # 开源控制台密码 register: enabled: true # 是否开启服务注册4.服务启动
@SpringBootApplicationpublic class Application {
public static void main(String[] args) { SpringApplication.run(Application.class, args); }
@Bean public ToolCallbackProvider weatherTools(WeatherService weatherService) { return MethodToolCallbackProvider.builder().toolObjects(weatherService).build(); }
}使用 Nacos MCP Wrapper Python 开发 MCP Server
1.环境准备
pip install nacos-mcp-wrapper-python2.自动注册参数配置
nacos_settings = NacosSettings()nacos_settings.SERVER_ADDR = "127.0.0.1:8848" # <nacos_server_addr> e.g. 127.0.0.1:8848nacos_settings.NAMESPACE= "public" # Nacos 命名空间IDnacos_settings.USERNAME="" #开源控制台用户名nacos_settings.PASSWORD="" #开源控制台密码3.代码编写
from nacos_mcp_wrapper.server.nacos_mcp import NacosMCPfrom nacos_mcp_wrapper.server.nacos_settings import NacosSettings
# Create an MCP server instancenacos_settings = NacosSettings()nacos_settings.SERVER_ADDR = "127.0.0.1:8848" # <nacos_server_addr> e.g. 127.0.0.1:8848nacos_settings.USERNAME=""nacos_settings.PASSWORD=""mcp = NacosMCP("nacos-mcp-python", nacos_settings=nacos_settings, version="1.0.1", port=18001)
# Register an addition tool@mcp.tool()def add(a: int, b: int) -> int: """Add two integers together""" return a + b
# Register a subtraction tool@mcp.tool()def minus(a: int, b: int) -> int: """Subtract two numbers""" return a - b
if __name__ == "__main__": try: mcp.run(transport="sse") # mcp.run(transport="stdio") # mcp.run(transport="streamable-http") except Exception as e: print(f"Runtime error: {e}")更多使用案例请参见https://github.com/nacos-group/nacos-mcp-wrapper-python/tree/main
在Nacos中动态变更工具开关和描述
MCP Server 自动注册到 Nacos 之后,可以在控制台上动态变更 MCP Server Tools 的描述和开关,相关修改将会在运行时中动态应用到 MCP Server 中,无需重启服务

常见问题
- 启动时出现
mcp server info is not compatible或者check mcp server compatible false报错
这是由于Nacos 中已经有对应版本的 MCP Server 数据,并且注册上来的 MCP Server 数据和Nacos中的MCP Server 数据 不兼容,请确保自动注册的MCP Server 数据和Nacos上对应版本的数据兼容性,包括:
- MCP Server 协议(stdio,sse,streamable)是否一致,
- 服务引用是否一致
- Tools 数据是否一致(Tools 名称,Tools 数量,参数类型,参数是否可选),注意,Tools 描述和参数描述不要求一致。
MCP Server 发现和调用
使用 Spring AI Alibaba Nacos MCP 框架发现和调用 MCP Server
1.依赖引入
<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-autoconfigure-model-openai</artifactId> <version>{1.0.0及以上版本}</version></dependency>
<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-autoconfigure-model-chat-client</artifactId> <version>{1.0.0及以上版本}</version></dependency>
<dependency> <groupId>com.alibaba.cloud.ai</groupId> <artifactId>spring-ai-alibaba-starter-mcp-registry</artifactId> <version>{1.0.0.3及以上版本}</version></dependency>
<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-starter-mcp-client-webflux</artifactId> <version>{1.0.0及以上版本}</version></dependency>2.创建 Async 或者 Sync MCP Client
@Autowired private List<LoadbalancedMcpSyncClient> loadbalancedMcpSyncClients;or
@Autowired private List<LoadbalancedMcpAsyncClient> loadbalancedMcpAsyncClients;或者使用 提供的ToolCallbackProvider
@Qualifier("loadbalancedSyncMcpToolCallbacks") ToolCallbackProvider toolsor
@Qualifier("loadbalancedMcpAsyncToolCallbacks") ToolCallbackProvider tools3.application.yml配置
spring: application: name: mcp-client-webflux ai: openai: api-key: ${DASHSCOPE_API_KEY} base-url: https://dashscope.aliyuncs.com/compatible-mode chat: options: model: qwen-max alibaba: mcp: nacos: namespace: 4ad3108b-4d44-43d0-9634-3c1ac4850c8c server-addr: 127.0.0.1:8848 username: nacos password: nacos client: enabled: true sse: connections: server1: service-name: webflux-mcp-server # Nacos 中对应 MCP Server 的服务名 version: 1.0.0 # Nacos 中对应 MCP Server 的版本号 mcp: client: enabled: true name: mcp-client-webflux version: 0.0.1 initialized: true request-timeout: 600s type: sync toolcallback: enabled: true root-change-notification: true4.参考示例代码
@SpringBootApplicationpublic class NacosMcpDiscoveryClientApplication {
public static void main(String[] args) { SpringApplication.run(NacosMcpDiscoveryClientApplication.class, args); }
@Bean public CommandLineRunner predefinedQuestionsDemo(ChatClient.Builder chatClientBuilder, @Qualifier("loadbalancedMcpAsyncToolCallbacks") ToolCallbackProvider tools, ConfigurableApplicationContext context) {
return args -> { var chatClient = chatClientBuilder .defaultToolCallbacks(tools.getToolCallbacks()) .build();
Scanner scanner = new Scanner(System.in); while (true) { System.out.print("\n>>> QUESTION: "); String userInput = scanner.nextLine(); if (userInput.equalsIgnoreCase("exit")) { break; } if (userInput.isEmpty()) { userInput = "北京时间现在几点钟"; } System.out.println("\n>>> ASSISTANT: " + chatClient.prompt(userInput).call().content()); } scanner.close(); context.close(); }; }}完整代码请参考Spring AI Alibaba Examples - Nacos MCP Server 消费示例