Spring AI 与 MCP 协议集成实践:打造可扩展的智能代理通信系统
Spring AI 与 MCP 协议集成实践:打造可扩展的智能代理通信系统
本文基于 Spring AI 0.8.1 版本与 MCP(Model Communication Protocol)v0.2 规范,详细阐述如何在 Spring Boot 应用中实现 MCP 客户端与服务端的集成,构建标准化的 AI 模型能力通信架构。
一、技术背景与意义
Model Communication Protocol(MCP)是由 Anthropic 等机构倡导的轻量级通信协议,致力于统一大语言模型工具调用(Tool Calling)、流式响应传递及元数据交互等核心语义。自 Spring AI 0.8.0 版本起,框架已原生支持 MCP 客户端,使得 Java 开发者能够便捷地接入符合 MCP 规范的各种服务(如 `mcp-server-ollama`、`mcp-server-langchain` 等)。
二、开发环境配置
<!-- pom.xml 依赖配置 -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-mcp-client-spring-boot-starter</artifactId>
<version>0.8.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
三、服务端连接配置
首先启动一个兼容 MCP 协议的服务端,以下以 mcp-server-ollama 为例:
# 启动本地 MCP 服务端(监听 3000 端口)
docker run -p 3000:3000 --rm -e OLLAMA_HOST=http://host.docker.internal:11434 mcpserver/ollama
四、Spring Boot 中集成 MCP 客户端
1. 配置文件设置
spring:
ai:
mcp:
client:
url: http://localhost:3000
# 启用工具自动发现功能
enable-tool-discovery: true
2. 创建 MCP 服务类
@Service
public class IntelligentProcessingService {
private final McpClient mcpClient;
public IntelligentProcessingService(McpClient mcpClient) {
this.mcpClient = mcpClient;
}
public Mono<String> processDocumentAnalysis(String documentId, String analysisType) {
return mcpClient.execute(
McpRequest.builder()
.tool("document-analyzer")
.arguments(Map.of("doc_id", documentId, "analysis", analysisType))
.build()
).map(McpResponse::getResult)
.onErrorResume(e -> Mono.just("[处理失败] " + e.getMessage()));
}
}
3. 控制器实现
@RestController
@RequestMapping("/api/intelligent")
public class IntelligentController {
private final IntelligentProcessingService processingService;
public IntelligentController(IntelligentProcessingService processingService) {
this.processingService = processingService;
}
@PostMapping("/analyze")
public Mono<ResponseEntity<String>> analyzeDocument(@RequestBody AnalysisRequest request) {
return processingService.processDocumentAnalysis(request.getDocumentId(), request.getAnalysisType())
.map(result -> ResponseEntity.ok().body(result));
}
}
static class AnalysisRequest {
private String documentId;
private String analysisType;
// getters and setters
}
五、核心技术优势
- 协议标准化:摆脱特定模型 API(如 OpenAI/Anthropic)的硬编码依赖,仅需适配统一 MCP 接口;
- 服务解耦:MCP 服务端可独立部署与版本迭代,客户端无需修改代码;
- 响应格式统一:原生支持 `progress`、`error`、`result`、`tool_call` 等多种事件类型;
- Spring 生态集成:提供自动配置、响应式编程支持、指标监控及可插拔的重试与熔断机制。
六、扩展应用建议
- 利用 `@McpTool` 注解定义 Java 工具并注册至 MCP 服务端(需配合 `mcp-server-java` 使用);
- 结合 Spring AI 的 `ChatClient` 实现「MCP 工具调用 + 大语言模型编排」的混合工作模式;
- 在生产环境中采用 MCP over SSE 或 WebSocket 协议以提升流式交互体验。
完整示例代码可参考:github.com/spring-projects/spring-ai-samples/tree/main/mcp-demo