Spring AI Alibaba MCP Gateway:将存量服务转换成 MCP Server

在上一篇博客《使用 Spring AI Alibaba MCP 结合 Nacos 实现企业级智能体应用》中,我们探讨了如何利用 Nacos 实现 MCP Server 的分布式注册与发现,解决了服务的高可用问题。

然而,在真实的企业环境中,我们面临着另一个巨大的挑战:存量系统 。企业内已经存在大量的微服务应用,它们对外提供标准的 HTTP/RESTful 接口(如订单服务、天气服务、用户服务等)。如果为了让 AI 调用这些能力,要求开发人员去修改原有的业务代码,添加 @Tool 注解,重新打包发布,这不仅工作量巨大,还引入了回归测试的风险。

有没有一种方案,可以零代码改造 ,直接将现有的 Restful 服务"变身"为 MCP Server?

答案是肯定的。本文将介绍 Spring AI Alibaba MCP Gateway。它是一个中间代理层,能够基于 Nacos 的服务注册信息,将普通的 Restful 服务动态转换为标准的 MCP 协议服务。

Spring AI Alibaba MCP Gateway 的设计初衷就是为了解决存量应用的 AI 化改造问题。它的核心价值在于:

  1. 零代码改造:无需修改原有业务代码,无需引入任何 AI 相关的 SDK。
  2. 协议转换:自动将 MCP 协议请求转换为对后端 HTTP/Dubbo 服务的调用。
  3. 动态更新 :在 Nacos 中新增或删除 MCP 服务配置,网关端无需重启即可实时感知。

我们将通过一个完整的案例,演示如何将一个普通的天气查询 Restful 服务,通过 MCP Gateway 暴露给 AI 客户端。

1. 准备存量服务:Restful 天气服务

首先,我们模拟一个已有的微服务应用 mcp-nacos-restful。这个应用非常简单,它只负责提供两个标准的 RESTful 接口(改造前面的工具):

  • GET /weather/quality: 获取空气质量
  • GET /weather/forecast: 获取天气预报

该应用已经按照常规 Spring Boot 微服务的方式,注册到了 Nacos 注册中心。

注意:这个服务完全不知道 MCP 的存在,它只是一个普通的 Web 应用。

2. 创建 MCP 网关

接下来,我们创建一个全新的 Spring Boot 应用作为 MCP Gateway。它的职责是:作为 MCP Server 面对 AI 客户端,同时作为 HTTP Client 面对后端的 Restful 服务。

Maven 依赖

pom.xml 中引入核心依赖。我们需要 spring-ai-alibaba-starter-mcp-gateway 来启用网关功能。

xml 复制代码
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- MCP Server WebMvc 支持 -->
    <dependency>
        <groupId>org.springframework.ai</groupId>
        <artifactId>spring-ai-starter-mcp-server-webmvc</artifactId>
        <version>1.1.2</version>
    </dependency>

    <!-- Spring AI Alibaba MCP Gateway 核心依赖 -->
    <dependency>
        <groupId>com.alibaba.cloud.ai</groupId>
        <artifactId>spring-ai-alibaba-starter-mcp-gateway</artifactId>
        <version>1.1.2.2</version>
    </dependency>

    <!-- DashScope 依赖,用于后续连接大模型 -->
    <dependency>
        <groupId>com.alibaba.cloud.ai</groupId>
        <artifactId>spring-ai-alibaba-starter-dashscope</artifactId>
        <version>1.1.2.2</version>
    </dependency>
</dependencies>

配置文件

application.yml 中,我们需要配置两件事:一是网关自身的 MCP 服务信息,二是 Nacos 的地址以便发现后端服务。

yaml 复制代码
spring:
  application:
    name: mcp-gateway-server

  ai:
    mcp:
      server:
        name: mcp-nacos-gateway-example
        version: 1.0.0
        enabled: true
        protocol: sse
        type: sync
        instructions: "Nacos MCP Gateway - 聚合多个 MCP Server 的工具网关"
        sse-message-endpoint: /mcp/message
        capabilities:
          tool: true
          resource: false
          prompt: false
          completion: false

    dashscope:
      api-key: "sk-***********"

    alibaba:
      # MCP Gateway 配置
      mcp:
        gateway:
          enabled: true
          registry: nacos
          # 配置要发现和聚合的 MCP Server 服务名称
          nacos:
            service-names:
              - mcp-nacos-restful               # SSE 协议的 MCP Server
        # Nacos 注册中心配置
        nacos:
          server-addr: 192.168.0.201:8848
          namespace: 0178b20f-f8c5-4182-9d41-f744f6328c48
          username: nacos
          password: z123

logging:
  level:
    com.alibaba.cloud.ai.mcp: DEBUG

3.在 Nacos 控制台配置 MCP Server

这是最关键的一步。虽然网关已经启动并监听了 Nacos,但它还不知道如何将 mcp-nacos-restful 的 HTTP 接口映射为 MCP 工具。我们需要在 Nacos 控制台的 MCP 管理 页面进行配置。

创建 MCP Server :在 Nacos 中新建一个 MCP Server,服务名填写 mcp-nacos-restful

添加 Tools :在该 Server 下添加工具定义。

我们需要配置两个工具,分别对应后端的两个接口:
工具 1:getAirQuality


工具 2:getWeatherForecastByLocation

配置完成后,MCP Gateway 会感知到这些配置,并自动将其转换为 MCP 协议下的可用工具。

4.改造 MCP Client 客户端

最后,我们需要一个 AI 客户端来调用这个网关。与上一篇博客不同,这次我们不再需要 distributedSyncMcpClient,因为网关本身就是标准的 MCP Server。

依赖调整

  • 移除 spring-ai-alibaba-starter-mcp-distributed
  • 移除 json-schema-validator

YAML 配置调整

Client 只需要直连网关的地址即可,无需感知后端的 Nacos 细节。

yaml 复制代码
spring:
  application:
    name: mcp-client
  main:
    web-application-type: none
  ai:
    dashscope:
      api-key: "sk-********"
    mcp:
      client:
        enabled: true
        name: my-mcp-client
        version: 1.0.0
        request-timeout: 30s
        type: sync
        sse:
          connections:
            server1:
              url: http://localhost:8085/ # 直连网关地址

我们可以直接使用标准的 ToolCallbackProvider,因为网关屏蔽了底层的复杂性。

java 复制代码
@Bean
public CommandLineRunner predefinedQuestions(ChatClient.Builder chatClientBuilder,
                                             ToolCallbackProvider tools, // 使用默认的 Provider
                                             ConfigurableApplicationContext context) {}

5.测试与效果

启动所有服务:

  1. Restful 服务 (mcp-nacos-restful)
  2. MCP 网关 (mcp-gateway-server)
  3. MCP 客户端 (mcp-client)

观察日志:


通过 Spring AI Alibaba MCP Gateway,我们成功实现了一个非侵入式的 AI 集成方案:

  • 存量应用:完全不需要改动代码,继续提供标准的 Restful 接口。
  • 网关层:利用 Nacos 作为配置中心,动态管理工具映射,实现了"配置即上线"。
  • 客户端:对 AI 而言,网关就是一个标准的 MCP Server,调用体验丝滑。

这种架构非常适合企业内部的旧系统改造,让传统的微服务架构能够以最小的成本接入大模型生态。

相关推荐
Fairy要carry2 小时前
面试-Skill粒度粗细的影响
人工智能
古希腊掌管代码的神THU2 小时前
【清华代码熊】RL后训练解析|Cursor Composer 2 技术报告
人工智能·深度学习·自然语言处理·composer
lpfasd1232 小时前
以Trae为例,拆解AI编程工具沙箱
人工智能·ai编程
猿类崛起@2 小时前
CherryStudio配置本地MCP服务器实现FileSystem本地文件系统读写操作
人工智能·学习·程序员·大模型·agent·ai大模型·mcp
AI医影跨模态组学3 小时前
Cell Rep Med(IF=10.6)北京清华长庚医院李国新&云南省肿瘤医院放射科李振辉等团队:基于TME的深度学习模型预测胃癌治疗反应
人工智能·深度学习·医学·医学影像·医学科研
宇擎智脑科技3 小时前
Claude Code 源码分析(二):Shell 命令安全体系 —— AI Agent 执行终端命令的纵深防御设计
人工智能·安全·claude code
TianFuRuanJian3 小时前
当车辆热管理系统遇到工业AI
人工智能·汽车
AI营销先锋3 小时前
原圈科技AI市场分析:破解增长瓶颈,领航智能营销
大数据·人工智能
AI创界者3 小时前
基于 C++ 架构的高性能远程管理技术探究(附 V7.4 优化解析)
人工智能·架构