摘要
分别使用java和python实现mcp server并注册到nacos中,并通过roo code使用。
使用docker-compose安装nacos
配置
3.0+版本以上的nacos需要配置NACOS_AUTH_IDENTITY_KEY等,参考官方手册配置即可
services:
nacos:
image: nacos/nacos-server:latest
container_name: nacos-standalone
environment:
- PREFER_HOST_MODE=hostname
- MODE=standalone
- NACOS_AUTH_IDENTITY_KEY=serverIdentity
- NACOS_AUTH_IDENTITY_VALUE=security
- NACOS_AUTH_TOKEN=VGhpc0lzTXlDdXN0b21TZWNyZXRLZXkwMTIzNDU2Nzg=
volumes:
- ./standalone-logs/:/home/nacos/logs
- ./init.d/custom.properties:/home/nacos/init.d/custom.properties
ports:
- "8080:8080"
- "8848:8848"
- "9848:9848"
启动
docker-compose up -d
使用 Spring AI Alibaba Nacos MCP 框架开发 MCP Server
依赖引入
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter-nacos-mcp-server</artifactId>
<version>1.0.0.1</version>
<exclusions>
<exclusion>
<artifactId>commons-logging</artifactId>
<groupId>commons-logging</groupId>
</exclusion>
</exclusions>
</dependency>
<!-- MCP Server (WebMVC) -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-mcp-server-webmvc</artifactId>
<version>1.0.0-RC1</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.5.18</version>
</dependency>
服务定义
实现一个获取天气信息的tool
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.ai.tool.annotation.ToolParam;
import org.springframework.stereotype.Service;
@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;
}
}
自动注册参数配置
server:
port: 8081
spring:
application:
name: springboot-nacos-mcp
ai:
mcp:
server:
name: webmvc-mcp-server # MCP服务名称
version: 1.0.0 # 服务版本
type: SYNC # 调用类型:SYNC(同步)或ASYNC(异步)
alibaba:
mcp:
nacos:
server-addr: localhost:8848 # 替换为你的 Nacos 地址
namespace: public # Nacos 命名空间 ID(默认为public)
username: nacos # 开源控制台用户名
password: nacos # 开源控制台密码
registry:
enabled: true # 是否开启服务注册
服务启动
import com.example.demo.service.WeatherService;
import org.springframework.ai.tool.ToolCallbackProvider;
import org.springframework.ai.tool.method.MethodToolCallbackProvider;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
/**
* @Title: Application
* @Package com/example/demo/Application.java
* @Description:
* "webmvc-mcp-server": {
* "url": "http://localhost:8081/sse",
* "type": "sse",
* "alwaysAllow": [],
* "disabled": false
* },
* @author zhaozhiwei
* @date 2025/7/19 13:58
* @version V1.0
*/
@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列表
02_001.png
mcp server详情
02_002.png
动态变更工具开关
MCP Server 自动注册到 Nacos 之后,可以在控制台上动态变更 MCP Server
Tools 的描述和开关,相关修改将会在运行时中动态应用到 MCP Server
中,无需重启服务 [图片上传失败...(image-fc0910-1752917362141)]
使用 Nacos MCP Wrapper Python 开发 MCP Server
环境准备
# 这里python环境一定要在3.12+
pip install nacos-mcp-wrapper-python
代码编写
"""
使用nacos注册的mcp server
"nacos-mcp-python": {
"url": "http://localhost:18001/sse",
"type": "sse",
"alwaysAllow": [],
"disabled": false
},
"""
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.USERNAME="nacos"
nacos_settings.PASSWORD="nacos"
mcp = NacosMCP("nacos-mcp-python", nacos_settings=nacos_settings, 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}")
在nacos中查看注册情况
查看mcp列表
02_001.png
mcp server详情
02_004.png
动态变更工具开关
MCP Server 自动注册到 Nacos 之后,可以在控制台上动态变更 MCP Server
Tools 的描述和开关,相关修改将会在运行时中动态应用到 MCP Server
中,无需重启服务 [图片上传失败...(image-31756c-1752917362141)]
在RooCode插件中配置MCP
配置
在mcp_setting.json文件中配置自己的server
{
"mcpServers": {
"nacos-mcp-python": {
"url": "http://localhost:18001/sse",
"type": "sse",
"alwaysAllow": [],
"disabled": false
},
"webmvc-mcp-server": {
"url": "http://localhost:8081/sse",
"type": "sse",
"alwaysAllow": [],
"disabled": false
}
}
}
检查是否成功
配置完成后,mcpServer会显示绿色图标,如下
02_006.png
测试
求和
使用demo工具, 计算100和201的和, 效果如下
02_007.png
查看天气
02_008.png
代码地址
https://github.com/zhaozhiwei1992/python/tree/master/demo/llm/mcp
https://github.com/zhaozhiwei1992/demo/tree/master/springboot/springboot-nacos-mcp