作者: 影子,劉宏宇,劉軍
Spring AI 通過集成 MCP 官方的 java sdk,讓 Spring Boot 開發者可以非常方便的開發自己的 MCP 服務,把自己企業內部的業務系統通過標準 MCP 形式發布為 AI Agent 能夠接入的工具;另一方面,開發者也可以使用 Spring AI 開發自己的 AI Agent,去接入提供各種能力的 MCP 服務。
在企業級 AI Agent 的應用與落地場景,只是能發布或者調通 MCP 服務是遠遠不夠的,其中一個非常重要的原因就是企業級的系統部署往往都是分布式的,不論是 Agent 還是 MCP Server,作為企業內部的一個個應用,它們都是要部署在多個機器上,要支持分布式的調用(這包括流量的負載均衡、節點變更動態感知等)。這么分析起來,Agent 與 MCP 需要的分布式能力與我們熟知微服務架構基本是一致的,Spring AI MCP 只是解決了 Agent 與 MCP 服務的編碼與通信協議問題,我們還需要為 MCP 服務構建起一套地址自動發現、負載均衡調用的體系,這就是 Spring AI Alibaba MCP 整體方案解決的問題,接下來我們將在這篇文章中詳細展開。
企業級 MCP 部署需要的分布式能力
市面上有很多公開可用的 MCP 服務,如生活類的高德地圖、天氣預報等 MCP 服務,這類服務的一個特點是他們都通過公開可訪問的域名地址提供服務,因此對于消費端來說只需要配置訪問地址即可使用。
區別于此類公共服務,Spring AI Alibaba MCP 解決的是企業內部 MCP 服務的部署與訪問架構問題,接下來我們通過一個 Agent 的開發示例,一起來看一下 Spring AI Alibaba MCP 的整體架構。
在整個系統中,我們有一個使用 Spring AI Alibaba 開發的 MCP Server 應用,它為企業內提供機票預訂的服務,該應用部署在多個實例,在實例啟動過程中,Spring AI Alibaba 框架會將當前 IP 實例、工具列表等元數據注冊到 Nacos,機票助手是一個基于 Spring AI Alibaba 開發的智能體應用,借助 Spring AI Alibaba 封裝的分布式 MCP 能力,機票助手能夠動態感知 MCP 訂票系統的實例變化、工具變化,并基于內置的負載均衡策略對多個 MCP 實例節點發起調用。
- 企業內部訂票服務是一個獨立的 MCP Server 應用,使用 Spring AI Alibaba 框架開發,具備自動注冊 MCP 實例與元數據到 Nacos 注冊中心的能力,目前同時兼容 Nacos2 與 Nacos3。
- 機票助手 Agent 使用 Spring AI Alibaba 框架開發,作為 MCP Client 可以自動感知下游 MCP 服務實例的動態變化,動態感知 MCP 服務元數據的變化(如工具增加、參數更新、描述更新等),能夠在保證負載均衡的情況下調用后端實例。
適用業務場景
對于任何需要在企業內部構建 MCP 業務系統的開發者,都可以使用 Spring AI Alibaba MCP。
接下來,我們從企業現實情況出發,分析在不同場景下,應該如何發布自己的 MCP 服務,并將 Agent 接入 MCP 服務:
- 企業內存在大量的已有微服務應用、HTTP 接口,需要將這些應用或接口發布為 MCP 服務。
- 無需考慮存量應用,直接開發全新的 MCP 服務。
通過 MCP 接入存量業務系統
對于存量應用或接口的接入,我們推薦使用增加代理應用的模式實現平滑接入,如下架構圖所示,在存量應用和 Agent 之間部署一個新應用,這個應用主要有兩個職責:
- 作為 server,該應用是一個標準的 MCP server,對外發布 Agent 可以使用的 MCP Tool。
- 作為 client,該應用負責轉發 MCP 請求到后端應用,它使用 HttpClient 或 Dubbo 消費后端的存量應用。
以下是一個代碼片段,展示如何在新開發的 MCP Server 應用中定義 MCP 服務并代理轉發到后端微服務(rest 或 dubbo):
@Bean
@LoadBalanced
public RestTemplate restTemplate() {return new RestTemplate();
}// ......@Autowired
private RestTemplate restTemplate;@Tool(description = "獲取指定訂單號的訂單詳情")
public Order getAirQuality(@ToolParam(description = "訂單號") String orderId) {return restTemplate.getForObject("http://order-service/order?id" + orderId, Order.class)
}
其中,restTemplate?
基于 Spring Cloud Alibaba 的服務發現能力,可以動態發現后端?order-service?
服務與實例地址。而?@Tool?
和?@ToolParam?
注解將發布為可被 Agent 使用的 MCP 工具。
開發全新 MCP
如果您不需要考慮存量的應用或服務,則整體會更簡單,只需要使用 Spring AI Alibaba MCP 開發一個 MCP server,并將業務邏輯發布為 MCP tool 就可以了。
以下是使用 Spring AI Alibaba 開發的整體架構圖:
完整開發指南
以下示例完整源碼地址:
https://github.com/springaialibaba/spring-ai-alibaba-examples/tree/main/spring-ai-alibaba-mcp-example/starter-example
首先,您需要安裝部署 Nacos,訪問 Nacos Server 控制臺,創建 MCP 服務專屬的命名空間?nacos-default-mcp
。
注冊?nacos-default-mcp
?命名空間后,記住命名空間 ID:9ba5f1aa-b37d-493b-9057-72918a40ef35
開發 Spring AI Alibaba MCP Server
pom.xml 文件
添加如下?spring-ai-alibaba-starter-nacos-mcp-server?
關鍵 starter 依賴到項目中:
<properties><spring-ai.version>1.0.0-M8</spring-ai.version><ai-alibaba.version>1.0.0-M8.1-SNAPSHOT</ai-alibaba.version>
</properties>
<dependencies><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter-nacos-mcp-server</artifactId><version>${ai-alibaba.version}</version></dependency>
</dependencies>
修改?application.yml
?文件
在?application.yml
?文件中,增加 Nacos 地址配置,這樣應用就可以連接到 Nacos Server 并實現 MCP 地址與元數據自動注冊。
server:port: ${SERVER_PORT:19000}
spring:application:name: mcp-server-provider
---
spring:main:banner-mode: offai:mcp:server:name: mcp-server-providerversion: 1.0.1sse-message-endpoint: /mcp/messages_type: SYNCalibaba:mcp:nacos:enabled: trueserver-addr: 127.0.0.1:8848username: nacospassword: nacosregistry:service-namespace: 9ba5f1aa-b37d-493b-9057-72918a40ef35_# 調試日志_
logging:level:io:modelcontextprotocol:client: DEBUGspec: DEBUGserver: DEBUG
這里注意兩個配置:
- MCP Server 的服務名稱:mcp-server-provider2. MCP 的命名空間 ID:9ba5f1aa-b37d-493b-9057-72918a40ef35
效果演示
打開 Nacos 控制臺,可以看到 MCP Server 自動注冊服務與實例信息。
打開 Nacos 控制臺,可以查看 MCP Server 自動注冊上來的元數據信息。
開發 Spring AI Alibaba MCP Client
pom.xml 文件
<properties><spring-ai.version>1.0.0-M8</spring-ai.version><ai-alibaba.version>1.0.0-M8.1-SNAPSHOT</ai-alibaba.version>
</properties>
<dependencies><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter-nacos-mcp-client</artifactId><version>${ai-alibaba.version}</version></dependency>
</dependencies>
這里需要在應用中新增引入?spring-ai-alibaba-starter-nacos-mcp-client
?依賴。
application.yml 文件
在?application.yml
?文件中,增加 Nacos 地址配置,這樣應用就可以連接到 Nacos Server 并實現 MCP 地址與元數據自動發現。
server:port: 8080spring:application:name: mcp-client-webfluxai:openai:api-key: ${DASHSCOPE_API_KEY}base-url: https://dashscope.aliyuncs.com/compatible-modechat:options:model: qwen-maxalibaba:mcp:nacos:enabled: trueservice-namespace: 9ba5f1aa-b37d-493b-9057-72918a40ef35 # nacos的命名空間IDserver-addr: 127.0.0.1:8848username: nacospassword: nacosclient:sse:connections:server1: mcp-server-provider # 對應的MCP Server服務名mcp:client:enabled: truename: mcp-client-webfluxversion: 0.0.1initialized: truerequest-timeout: 600snacos-enabled: truetype: synctoolcallback:enabled: trueroot-change-notification: true# 調試日志
logging:level:io:modelcontextprotocol:client: DEBUGspec: DEBUG
請注意,我們需要在配置中指定要連接的 MCP 服務,這樣 Client 將只訂閱該服務相關地址與元數據的更新。
client:sse:connections:server1: mcp-server-provider # 對應的MCP Server服務名
使用方式
MCP Client 注入
@Autowired
private List<LoadbalancedMcpSyncClient> mcpClients; // For sync client// OR@Autowired
private List<LoadbalancedMcpAsyncClient> mcpClients; // For async client
ToolCallbackProvider 注入
# sync類型,Bean名稱為"loadbalancedSyncMcpToolCallbacks"
@Autowired
private LoadbalancedSyncMcpToolCallbackProvider toolCallbackProvider;
ToolCallback[] toolCallbacks = toolCallbackProvider.getToolCallbacks();// OR# Async類型,Bean名稱為"loadbalancedMcpAsyncToolCallbacks"
@Autowired
private LoadbalancedAsyncMcpToolCallbackProvider toolCallbackProvider;
ToolCallback[] toolCallbacks = toolCallbackProvider.getToolCallbacks();
效果演示
MCP Client 注入
ToolCallbackProvider 注入
總結
Spring AI Alibaba MCP 聯合 Nacos,解決了企業級 AI Agent 的應用與落地場景中 MCP 分布式部署與動態更新的關鍵問題,其中包括流量的負載均衡、節點變更動態感知等關鍵解決方案。
Nacos3 中的 MCP 核心能力還在持續演進中,接下來,Spring AI Alibaba 計劃結合 Nacos3 mcp-registry 與 mcp-router 能力,構建更靈活強大的 Agent 開發體驗。
- 查看完整示例源碼:
https://github.com/springaialibaba/spring-ai-alibaba-examples/tree/main/spring-ai-alibaba-mcp-example/starter-example
- Spring AI Alibaba 官網:
https://java2ai.com
- Github 項目倉庫:
https://github.com/alibaba/spring-ai-alibaba