前言
剛過去兩個月,市面的 MCP 服務,如雨后春筍一般不斷涌現出來,包括;百度、高德、網盤、支付寶。這些 MCP 服務,可以讓我們基于 Spring AI 框架構建的 Agent 具備非常豐富的使用功能。同時這也說明,程序員???????,應該具備開發 MCP 服務的能力,Spring AI 讓 Java 再次牛逼!
舉例
如對接高德地圖 MCP
{"mcpServers": {"amap-amap-sse": {"url": "https://mcp.amap.com/sse?key=您在高德官網上申請的key"}}
}
官網 - 官網提供了創建對接 Key
二:代碼案例
@Configuration
publicclass McpConfig {@Beanpublic List<NamedClientMcpTransport> mcpClientTransport() {McpClientTransport transport = HttpClientSseClientTransport.builder("https://mcp.amap.com").sseEndpoint("/sse?key=<your_key>").objectMapper(new ObjectMapper()).build();return Collections.singletonList(new NamedClientMcpTransport("amap", transport));}}
1:對接時,需要設定 sseEndpoint 如果不設定個,Spring AI 默認是對 builder 的 baseUrl 值添加 /sse 的。
2:所以,如果你要對接外部帶有驗證權限的 MCP 服務,需要手動設置下 sseEndpoint 值。
項目中的配置
支持了外部的這些帶有權限校驗的 MCP 服務。你可以,以多種方式進行配置。如
{"baseUri":"https://mcp.amap.com","sseEndpoint":"/sse?key=****"
}
{"baseUri":"https://mcp.amap.com","sseEndpoint":"/sse?key=****"
}
以上兩種配置方式,在 項目案例代碼中 都做了兼容處理。以下是兼容代碼,有案例項目的,可以直接閱讀課程代碼。
@Slf4j
@Component
publicclass AiClientToolMcpNode extends AbstractArmorySupport {// ... 省略部分代碼protected McpSyncClient createMcpSyncClient(AiClientToolMcpVO aiClientToolMcpVO) {String transportType = aiClientToolMcpVO.getTransportType();switch (transportType) {case"sse" -> {AiClientToolMcpVO.TransportConfigSse transportConfigSse = aiClientToolMcpVO.getTransportConfigSse();// http://127.0.0.1:9999/sse?apikey=DElk89iu8EhhnbuString originalBaseUri = transportConfigSse.getBaseUri();String baseUri;String sseEndpoint;int queryParamStartIndex = originalBaseUri.indexOf("sse");if (queryParamStartIndex != -1) {baseUri = originalBaseUri.substring(0, queryParamStartIndex - 1);sseEndpoint = originalBaseUri.substring(queryParamStartIndex - 1);} else {baseUri = originalBaseUri;sseEndpoint = transportConfigSse.getSseEndpoint();