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,调用体验丝滑。

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

相关推荐
袋鼠云数栈14 小时前
非结构化数据也能“周期调度“:离线开发BatchWorks的多模态数据同步实践
大数据·人工智能·多模态数据·离线开放
算了吧956914 小时前
GEO服务商选型指南:2026年企业评估框架与决策路径
大数据·人工智能·物联网
workflower14 小时前
矿用机器人人工智能安全与治理体系
人工智能·安全·机器学习·机器人·云计算·无人机
tianbin91114 小时前
从模型微调到API调用:大模型训练后的高效工程化落地路径
人工智能
a努力。14 小时前
RAG数据流水线的隐形杀手:文档加载与切分深度解析
人工智能
美林数据Tempodata14 小时前
高校工科专业转型工业数智方向:从六类岗位技术要求到课程模块的改造路径
人工智能·工业互联网·产教融合·课程改革
萧瑟余晖14 小时前
Spring MVC拦截器异常处理与跨域详解
java·spring·mvc
HUIBUR科技14 小时前
AI重塑企业数字化:从系统建设到价值盘活的全新变革
人工智能·ai
深频率14 小时前
6倍价格买8倍速度?GPT-6.1 Sol极速版的两个倍率
人工智能·gpt
Python测试之道15 小时前
GitHub 实战课|Playwright MCP:让 AI 真的会用浏览器
人工智能·github