RooCode结合NacosMCP实践

摘要

分别使用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

参考

https://nacos.io/docs/latest/manual/user/ai/mcp-auto-register/?spm=5238cd80.2ef5001f.0.0.3f613b7cth6gs3

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容