作者:刘宏宇,Spring AI Alibaba Contributor

文章概览

Spring AI Alibaba MCP 可基于 Nacos 提供的 MCP server registry 信息,建立一个中间代理层 Java 应用,将 Nacos 中注册的服务信息转换成 MCP 协议的服务器信息,以便 MCP 客户端可以无缝调用这些服务。基于这种方案,您无需对原有业务代码进行改造,新增或者删除 MCP 服务(在 Nacos 中)无需重启代理应用。

业务背景

现存业务代码,对外仅提供 http、dubbo 等接口供外部调用。在 AI 智能化改造期间,如果要对这类服务进行改造,涉及到开发、测试、版本发布等一系列流程,改造工作量不容小觑。

所以要考虑有没有什么方式,可以做到按需将现有服务转换成 MCP server 提供能力,且尽可能减少对既有业务代码的改造工作量。

在 Spring AI Alibaba MCP 模块中,基于 Nacos 2.x 版本,实现了存量业务直接注册 MCP server 相关信息到 Nacos 的相关能力;

在近期刚刚发布的 Nacos 3.0 版本中,也提供了管理页面,供开发人员进行手动注册 MCP server 等相关信息。

至此,需要暴露的 MCP server 信息,已经成功注册到了 Nacos,但是 Nacos 本身并没有直接将配置信息转成 MCP server 的能力。所以就需要借助 higress 这类网关的能力,来实现真正的服务暴露。

Spring AI Alibaba MCP 模块的动态代理能力可以理解成是 Higress MCP server 插件的 Java 版本实现,让用户的业务架构更简单,实现 Java 技术栈闭环。

实现原理

附一张启动流程图,目前程序代码兼容了 Nacos 2.x 版本以及 Nacos 3.x 版本的能力。区别在于 Nacos 2.x 版本目前需要通过 configService 来获取 MCP registry 相关信息,而 Nacos 3.x 版本提供了 MCP 相关的 openapi,可以通过调用 api 接口的方式来获取相关信息。

动态的 MCP Server 暴露出来的是标准的 MCP 协议的内容,基于 spring ai + MCP 官方 sdk 的能力,目前 Java 版本 sdk 暂不支持 streamable http。

在请求打到 MCP Server 之后,会将 MCP 协议内容解析之后,转发到注册到 Nacos 的原生 http 之类的服务上。

在协议转换环节,目前代码实现的方案是基于 Higress 提供的调用模板的格式,参见:

https://nacos.io/docs/v3.0/manual/user/mcp-template/?spm=5238...

通过 Nacos 提供的 loadbalance 的方式选取实例信息,确定目标 ip:port ,最后组装调用信息,发起实现调用的。

配置及使用流程

配置内容以 Nacos 3.0 版本为例,主要配置过程参考:

https://nacos.io/blog/nacos-gvr7dx_awbbpb_gg16sv97bgirkixe/?s...

  1. 在 Nacos 中进入 MCP 列表管理功能,创建一个 MCP Server。

  1. 在 MCP Server 中添加 tools 相关内容,表明要暴露的 tools 信息

  1. 在 tools 信息中,需要配置一个 request template。格式与 higress 目前支持的格式完全兼容
{
  "requestTemplate": {
    "url": "/v3/weather/weatherInfo?key={{ .config.credentials.api_key.data }}",
    "argsToUrlParam": true,
    "method": "GET"
  },
  "responseTemplate": {
    "body": "response value {{ .value }}"
  }
}
  1. 在工程中引入相关依赖
<dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
        </dependency>

        <!-- Dynamic Mcp Server -->
        <dependency>
            <groupId>com.alibaba.cloud.ai</groupId>
            <artifactId>spring-ai-alibaba-mcp-nacos-dynamic-server</artifactId>
            <version>1.0.0-M8.1-SNAPSHOT</version>
        </dependency>

        <!-- MCP Server WebFlux 支持 -->
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-starter-mcp-server-webflux</artifactId>
            <version>1.0.0-M8</version>
        </dependency>

    </dependencies>
  1. 配置 spring.ai.alibaba.mcp.nacos 相关信息
spring:
  ai:
    alibaba:
      mcp:
        nacos:
          server-addr:
      username:
      password:
      dynamic:
        service-namespace: public
        service-group: DEFAULT_GROUP
        service-names: 
        - echo-server
  1. 启动服务之后,会读取 Nacos 中持有的 MCP Server 相关配置信息,对外暴露出来,供 MCP client 进行调用

总结

Spring AI Alibaba MCP 联合 Nacos,解决了企业级 AI Agent 的应用与落地场景中 MCP 分布式部署与动态更新的关键问题,其中包括流量的负载均衡、节点变更动态感知等关键解决方案,可阅读 Spring AI Alibaba 发布企业级 MCP 分布式部署方案了解详情。

参考资料

Spring AI Alibaba MCP 动态代理思路和 Higress MCP Server 插件类似且协议转换格式完全兼容:

https://higress.cn/ai/mcp-quick-start/

本方案 MCP 服务动态配置思路与格式源于:

https://nacos.io/blog/nacos-gvr7dx_awbbpb_vksfvdh9258pgddl/


阿里云云原生
1.1k 声望323 粉丝