Spring AI Alibaba + Nacos 动态 MCP Server 代理方案

作者:刘宏宇,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 提供的调用模板的格式,参见:

nacos.io/docs/v3.0/m...

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

配置及使用流程

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

nacos.io/blog/nacos-...

  1. 在 Nacos 中进入 MCP 列表管理功能,创建一个 MCP Server。
  1. 在 MCP Server 中添加 tools 相关内容,表明要暴露的 tools 信息
  1. 在 tools 信息中,需要配置一个 request template。格式与 higress 目前支持的格式完全兼容
json 复制代码
{
  "requestTemplate": {
    "url": "/v3/weather/weatherInfo?key={{ .config.credentials.api_key.data }}",
    "argsToUrlParam": true,
    "method": "GET"
  },
  "responseTemplate": {
    "body": "response value {{ .value }}"
  }
}
  1. 在工程中引入相关依赖
xml 复制代码
<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 相关信息
yaml 复制代码
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 插件类似且协议转换格式完全兼容:

higress.cn/ai/mcp-quic...

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

nacos.io/blog/nacos-...

相关推荐
阿里云云原生2 小时前
不只是告警:用阿里云可观测 MCP 实现 AK 高效安全审计
mcp
PetterHillWater3 小时前
12 MCP Servers的介绍
后端·aigc·mcp
程序员小潘21 小时前
Java开发MCP服务器
mcp
CodeDevMaster1 天前
从零到一:打包并发布你的第一个MCP AI工具服务
mcp
逍岚子1 天前
以官网计算器为例:手把手教你用 TypeScript SDK 开发 MCP Server
llm·agent·mcp
摸着石头过河的石头1 天前
手把手教你入门 MCP:模型上下文协议与 Trae IDE 中的实践
前端·mcp
逍岚子1 天前
新闻搜索 MCP Server 开发秘籍:Python - SDK 携手 SerpApi,融入 Trae 不再难
llm·agent·mcp
一包烟电脑面前做一天2 天前
理解MCP与LLM的协作流程:从困惑到清晰的技术实践
mcp·mcp流程·mcp协作流程
老纪的技术唠嗑局3 天前
手把手教你构建基于魔搭 x OceanBase MCP 的 Agent
agent·mcp
聚客AI3 天前
🎯2025架构革命:图解MCP工具链×MoE推理优化×多智能体协同
人工智能·llm·mcp