MSE Nacos企业版支持MCP 服务的注册与配置管理,为大语言模型(LLM)提供标准化的外部工具集成能力。
创建MCP服务
目前只支持MSE Nacos企业版3.0及以上版本。请您根据业务需求的不同,选择微服务引擎注册配置中心提供的三种MCP服务创建方式:
标准MCP服务:从零构建完整MCP配置。
HTTP转化MCP服务:将存量HTTP服务转换为MCP服务。
动态注册MCP服务:通过Nacos SDK实现服务自动注册。
创建标准MCP服务
登录MSE注册配置中心控制台,并在顶部菜单栏选择地域。
在左侧导航栏,选择注册配置中心 > 实例列表,单击目标实例名称。
单击左侧导航栏的MCP Registry,选择命名空间,然后单击创建MCP服务,并单击标准MCP服务页签。
在标准MCP服务页面,配置基本信息,其中重要参数说明如下:
MCP协议类型:
Stdio:不具备网络通信能力,适用于本地开发调试,离线环境验证。
SSE:用于API网关配置推送等单向实时通信场景,延迟低、兼容性强,但仅支持服务端到客户端的单向流。
Streamable HTTP:适合正式环境部署和跨网络通信(如混合云/跨VPC),支持双向通信。
后端服务:
使用已有服务:如果您的MCP服务已经通过控制台或SDK注册到MSE Nacos中,可直接选择。
新建服务:如果您的MCP服务尚未注册到MSE Nacos中,需要配置服务 IP/服务域名、服务端口及访问路径(必须以/开头,如/v1/mcp)。
配置完成后,单击保存并发布。
创建HTTP转化MCP服务
登录MSE注册配置中心控制台,并在顶部菜单栏选择地域。
在左侧导航栏,选择注册配置中心 > 实例列表,单击目标实例名称。
单击左侧导航栏的MCP Registry,选择命名空间,然后单击创建MCP服务,并单击HTTP转化MCP服务页签。
在HTTP转化MCP服务页签,配置基本信息,其中重要参数说明如下:
HTTPS服务:区分原有的HTTP服务协议。
MCP协议:
SSE:用于API网关配置推送等单向实时通信场景,延迟低、兼容性强,但仅支持服务端到客户端的单向流。
Streamable HTTP:适合正式环境部署和跨网络通信(如混合云/跨VPC),支持双向通信。
后端服务:
使用已有服务:如果您的HTTP服务已经通过控制台或SDK注册到MSE Nacos中,可直接选择。
新建服务:如果您的HTTP服务尚未注册到MSE Nacos中,需要配置服务 IP/服务域名、服务端口。
(可选)创建MCP工具。
配置完成后,单击保存并发布。
动态注册MCP服务
通过使用Spring AI Alibaba 框架,或者 Nacos MCP Wrapper Python 开发 MCP Server, 可以在 MCP Server启动后动态注册至 Nacos,并对齐进统一管理,支持以下能力:
服务动态管理:通过 MCP 服务列表增删改查服务信息。
描述动态生效:工具描述、参数定义等元信息支持运行时热更新,无需重启服务。
MCP Server Tools 动态开关:支持 MCP Server 服务 Tools 运行时动态开启和关闭,无需重启服务。
MCP服务支持通过函数计算进行部署,具体操作请参见:在FC函数计算中部署MCP服务并注册至MSE Nacos。
建议为应用分配独立 RAM 用户,独立于控制台访问的 RAM 用户,防止权限扩大风险。
当RAM鉴权开启时,身份认证需要使用阿里云账号ACCESS_KEY_ID与ACCESS_KEY_SECRET。
若未开启鉴权,采用开源用户名密码进行认证,用户名为固定值Nacos ,密码前往实例列表,单击所选实例ID,在基础信息页面开源控制台密码处点击重置,然后复制密码。
使用 Spring AI Alibaba Nacos MCP 框架开发 MCP Server
spring ai alibaba的版本要大于等于1.0.0.3。
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.服务定义(示例)
@Service
public class WeatherService {
@Tool(description = "Get weather information by city name")
public String getWeather(@ToolParam(description = "City name") String cityName) {
return "Sunny in " + cityName;
}
}
3. 配置 Nacos 注册参数
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)
access-key: # 阿里云账号access-key
secret-key: # 阿里云账号secret-key
register:
enabled: true # 是否开启服务注册
4.服务启动
@SpringBootApplication
public 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-python
2.自动注册参数配置
nacos_settings = NacosSettings()
nacos_settings.SERVER_ADDR = "127.0.0.1:8848" # <nacos_server_addr> e.g. 127.0.0.1:8848
nacos_settings.NAMESPACE= "public" # Nacos 命名空间ID
nacos_settings.ACCESS_KEY="" #阿里云账号access-key
nacos_settings.SECRET_KEY="" #阿里云账号secret-key
3.代码编写
from nacos_mcp_wrapper.server.nacos_mcp import NacosMCP
from nacos_mcp_wrapper.server.nacos_settings import NacosSettings
# Create an MCP server instance
nacos_settings = NacosSettings()
nacos_settings.SERVER_ADDR = "127.0.0.1:8848" # <nacos_server_addr> e.g. 127.0.0.1:8848
nacos_settings.ACCESS_KEY = ""
nacos_settings.SECRET_KEY = ""
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}")
常见问题
启动时出现
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 发现和调用
建议为应用分配独立 RAM 用户,独立于控制台访问的 RAM 用户,防止权限扩大风险。
当RAM鉴权开启时,身份认证需要使用阿里云账号ACCESS_KEY_ID与ACCESS_KEY_SECRET。
若未开启鉴权,采用开源用户名密码进行认证,用户名为固定值Nacos ,密码前往实例列表,单击所选实例ID,在基础信息页面开源控制台密码处点击重置,然后复制密码。
使用 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
声明同步 MCP 客户端列表:
@Autowired
private List<LoadbalancedMcpSyncClient> loadbalancedMcpSyncClients;
或声明异步 MCP 客户端列表:
@Autowired
private List<LoadbalancedMcpAsyncClient> loadbalancedMcpAsyncClients;
使用 ToolCallbackProvider 注入同步工具回调:
@Qualifier("loadbalancedSyncMcpToolCallbacks") ToolCallbackProvider tools
或使用 ToolCallbackProvider 注入异步工具回调:
@Qualifier("loadbalancedMcpAsyncToolCallbacks") ToolCallbackProvider tools
3.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
access-key: # 阿里云账号access-key
secret-key: # 阿里云账号secret-key
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: true
4.参考示例代码
@SpringBootApplication
public 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();
};
}
}
使用 Nacos MCP Router 发现和调用 Nacos 中的 MCP Server
Nacos MCP Router 有两种工作模式:
router模式:默认模式,Nacos MCP Router 作为一个标准MCP Server,提供MCP Server推荐、分发、安装及代理其他MCP Server的功能。
proxy模式:Nacos MCP Router 仅提供代理功能,无需代码改动即可实现stdio、sse协议一键转换为streamableHTTP协议。
router模式
stdio协议
启动Nacos MCP Router:
uvx启动:
{
"mcpServers": {
"nacos-mcp-router": {
"command": "uvx",
"args": [
"nacos-mcp-router@latest"
],
"env": {
"NACOS_ADDR": "<NACOS-ADDR>, 选填,默认为127.0.0.1:8848",
"ACCESS_KEY_ID": "<ACCESS_KEY_ID>, 阿里云账号access-key",
"ACCESS_KEY_SECRET": "<ACCESS_KEY_SECRET>, 阿里云账号secret-key"
}
}
}
}
docker启动:
{
"mcpServers": {
"nacos-mcp-router": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"--network",
"host",
"-e",
"NACOS_ADDR=<NACOS-ADDR>",
"-e",
"ACCESS_KEY_ID=<ACCESS_KEY_ID>",
"-e",
"ACCESS_KEY_SECRET=<ACCESS_KEY_SECRET>",
"-e",
"TRANSPORT_TYPE=stdio",
"nacos-mcp-router:latest"
]
}
}
}
MCP配置(以CherryStudio为例):
{
"mcpServers": {
"nacos-mcp-router": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"--network",
"host",
"-e",
"NACOS_ADDR=<NACOS-ADDR>",
"-e",
"ACCESS_KEY_ID=<ACCESS_KEY_ID>",
"-e",
"ACCESS_KEY_SECRET=<ACCESS_KEY_SECRET>",
"-e",
"TRANSPORT_TYPE=stdio",
"nacos-mcp-router:latest"
]
}
}
}
sse协议
uvx启动:
export NACOS_ADDR=127.0.0.1:8848
export ACCESS_KEY_ID=ACCESS_KEY_ID
export ACCESS_KEY_SECRET=ACCESS_KEY_SECRET
export TRANSPORT_TYPE=sse
uvx nacos-mcp-router@latest
docker启动:
docker run -i --rm --network host -e NACOS_ADDR=$NACOS_ADDR -e ACCESS_KEY_ID=$ACCESS_KEY_ID -e ACCESS_KEY_SECRET=$ACCESS_KEY_SECRET -e TRANSPORT_TYPE=sse nacos-mcp-router:latest
MCP配置(以CherryStudio为例):
{
"mcpServers": {
"nacos-mcp-router": {
"url": "http://$router_ip:8000/sse"
}
}
}
streamableHTTP 协议
uvx启动:
export NACOS_ADDR=127.0.0.1:8848
export ACCESS_KEY_ID=ACCESS_KEY_ID
export ACCESS_KEY_SECRET=ACCESS_KEY_SECRET
export TRANSPORT_TYPE=streamable_http
uvx nacos-mcp-router@latest
docker启动:
docker run -i --rm --network host -e NACOS_ADDR=$NACOS_ADDR -e ACCESS_KEY_ID=$ACCESS_KEY_ID -e ACCESS_KEY_SECRET=$ACCESS_KEY_SECRET -e TRANSPORT_TYPE=streamable_http nacos-mcp-router:latest
MCP配置(以CherryStudio为例):
{
"mcpServers": {
"nacos-mcp-router": {
"url": "http://$router_ip:8000/mcp"
}
}
}
proxy模式
proxy模式下,需设置环境变量MODE=proxy和PROXIED_MCP_NAME。
使用uvx:
export NACOS_ADDR=$NACOS_ADDR
export ACCESS_KEY_ID=$ACCESS_KEY_ID
export ACCESS_KEY_SECRET=$ACCESS_KEY_SECRET
export TRANSPORT_TYPE=streamable_http
export MODE=proxy
export PROXIED_MCP_NAME=$PROXIED_MCP_NAME
uvx nacos-mcp-router@latest
使用docker:
docker run -i --rm --network host -e NACOS_ADDR=$NACOS_ADDR -e ACCESS_KEY_ID=$ACCESS_KEY_ID -e ACCESS_KEY_SECRET=$ACCESS_KEY_SECRET -e TRANSPORT_TYPE=streamable_http -e MODE=proxy -e PROXIED_MCP_NAME=$PROXIED_MCP_NAME nacos-mcp-router:latest
环境变量配置:
参数 | 描述 | 默认值 | 是否必填 | 备注 |
NACOS_ADDR | Nacos 服务器地址 | 127.0.0.1:8848 | 否 | Nacos 服务器的地址,如 192.168.1.1:8848,需填写端口 |
ACCESS_KEY_ID | 阿里云账号access-key | - | 否 | |
ACCESS_KEY_SECRET | 阿里云账号access-secret | - | 否 | |
NACOS_NAMESPACE | Nacos命名空间 | public | 否 | Nacos命名空间,如 public |
TRANSPORT_TYPE | 传输协议类型 | stdio | 否 | 传输协议类型,可选值:stdio、sse、streamable_http |
PROXIED_MCP_NAME | 代理的 MCP 服务器名称 | - | 否 | proxy模式下需要被转换的 MCP 服务器名称,需要先注册到Nacos |
MODE | 工作模式 | router | 否 | 可选值:router、proxy |
PORT | 服务端口 | 8000 | 否 | 协议类型为sse或streamable时使用 |
Dify 对接 Nacos MCP Registry 实现 MCP Server 集中管理
Nacos 3.0 版本实现了MCP Registry 管理功能,可以对所有的MCP Server 进行集中式的管理,详情请参见Dify 对接 Nacos MCP Registry 实现 MCP Server 集中管理。
编辑MCP服务
登录MSE注册配置中心控制台,并在顶部菜单栏选择地域。
在左侧导航栏,选择注册配置中心 > 实例列表,单击目标实例名称。
单击左侧导航栏的MCP Registry,选择命名空间,编辑目标MCP服务:
MCP工具的工具描述与参数结构中的描述,无需变更版本号,可直接编辑保存;
除此之外,需要先更新版本号之后再进行编辑。
重要每个 MCP 服务仅支持保存一个草稿,最新保存且不发布的版本会覆盖掉之前的草稿。
删除MCP服务
登录MSE注册配置中心控制台,并在顶部菜单栏选择地域。
在左侧导航栏,选择注册配置中心 > 实例列表,单击目标实例名称。
单击左侧导航栏的MCP Registry,选择命名空间,删除目标MCP服务。
创建MCP工具
支持白屏编辑和黑屏编辑两种方式新建MCP工具。白屏编辑模式下支持通过导入Swagger文件创建 MCP工具;黑屏编辑完全兼容AI网关 YAML 格式。
协议转换配置:用于 AI 网关将 HTTP 服务转换为 MCP 服务,完全兼容开源Higress RestToMcp模板格式。
通过Swagger导入创建MCP工具
前序步骤请参见创建HTTP转化MCP服务。在导入之前请确保Swagger文件格式正确,导入成功之后MCP 工具将会展示在MCP 工具列表中。
如果存在同名的工具,新的工具将会覆盖原有同名的工具。