欢迎光临
我们一直在努力

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 化改造问题。它的核心价值在于:

  • 零代码改造:无需修改原有业务代码,无需引入任何 AI 相关的 SDK。
  • 协议转换:自动将 MCP 协议请求转换为对后端 HTTP/Dubbo 服务的调用。
  • 动态更新:在 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 来启用网关功能。

    <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 的地址以便发现后端服务。

    spring:
    application:
    name: mcpgatewayserver

    ai:
    mcp:
    server:
    name: mcpnacosgatewayexample
    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:
    mcpnacosrestful # SSE 协议的 MCP Server
    # Nacos 注册中心配置
    nacos:
    server-addr: 192.168.0.201:8848
    namespace: 0178b20ff8c541829d41f744f6328c48
    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 细节。

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

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

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

    5.测试与效果

    启动所有服务:

  • Restful 服务 (mcp-nacos-restful)
  • MCP 网关 (mcp-gateway-server)
  • MCP 客户端 (mcp-client)
  • 观察日志: 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 通过 Spring AI Alibaba MCP Gateway,我们成功实现了一个非侵入式的 AI 集成方案:

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

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

    赞(0)
    未经允许不得转载:171主机测评 » Spring AI Alibaba MCP Gateway:将存量服务转换成 MCP Server
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址