掘金 人工智能 06月03日 18:38
Spring AI Alibaba + Nacos 动态 MCP Server 代理方案
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文介绍了Spring AI Alibaba MCP模块如何结合Nacos,实现对现有服务的改造,使其能够以MCP server的形式对外提供服务,从而简化AI智能化改造流程。通过动态代理技术,该方案无需修改现有业务代码,即可将http、dubbo等接口转换为MCP协议,并通过Nacos进行服务注册和管理。文章详细阐述了实现原理、配置流程以及优势,为企业级AI Agent的MCP分布式部署和动态更新提供了解决方案。

💡Spring AI Alibaba MCP模块基于Nacos,构建中间代理层,将Nacos注册的服务转换为MCP协议服务,实现现有服务的无缝调用。该方案避免了对现有业务代码的修改,简化了AI智能化改造流程。

⚙️该方案的核心在于动态代理技术,它类似于Higress MCP server插件的Java版本实现。通过解析MCP协议内容,并将请求转发到注册在Nacos的原生服务上,实现了协议转换。

🛠️配置流程主要涉及在Nacos中创建MCP Server,添加tools信息,并配置request template,确保与Higress兼容。同时,需要在工程中引入相关依赖,并配置spring.ai.alibaba.mcp.nacos相关信息。

✅该方案解决了企业级AI Agent的MCP分布式部署与动态更新问题,包括流量负载均衡和节点变更动态感知等关键功能,为AI Agent的落地提供了可靠的技术支持。

作者:刘宏宇,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-…

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

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

    在 tools 信息中,需要配置一个 request template。格式与 higress 目前支持的格式完全兼容
{  "requestTemplate": {    "url": "/v3/weather/weatherInfo?key={{ .config.credentials.api_key.data }}",    "argsToUrlParam": true,    "method": "GET"  },  "responseTemplate": {    "body": "response value {{ .value }}"  }}

4. 在工程中引入相关依赖

<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>

5. 配置 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

6. 启动服务之后,会读取 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-…

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

Spring AI Nacos MCP 动态代理
相关文章