【AI】Spring AI+MCP实战:零代码改造将传统服务接入大模型生态
未来可考虑开发MCP代理服务,通过简单配置即可将现有业务转换为MCP Server,为AI智能体提供更广泛的服务接入能力。MCP目前仍处于发展初期,生态构建是当前的重点。通过统一标准构建的生态将促进整个领域的发展。使用支持MCP的客户端(如Cursor,Trae)进行测试,配置。配置完成后,客户端将自动发现MCP Server提供的工具接口。
·
技术选型与项目构建
基础环境
- Spring Boot 3.4.2:Spring AI当前支持的Spring Boot版本
- JDK 17:Spring Boot 3.x的最低要求
- MCP Server实现方式:
- Standard Input/Output (STDIO) -
spring-ai-starter-mcp-server
- Spring MVC (Server-Sent Events) -
spring-ai-starter-mcp-server-webmvc
(本文采用) - Spring WebFlux (Reactive SSE) -
spring-ai-starter-mcp-server-webflux
- Standard Input/Output (STDIO) -
特性 | STDIO | Spring MVC (SSE) | WebFlux (Reactive SSE) |
---|---|---|---|
通信协议 | 标准输入/输出 | HTTP + SSE | HTTP + Reactive SSE |
编程模型 | 同步 | 同步 | 响应式 |
I/O模型 | 阻塞 | 阻塞 | 非阻塞 |
线程模型 | 单线程 | 线程池(每个连接一个线程) | 事件循环(少量线程) |
并发能力 | 低 | 中 | 高 |
资源消耗 | 极低 | 中等 | 低 |
学习曲线 | 简单 | 中等 | 较陡峭 |
适用场景 | 命令行工具/本地调试 | 传统Web应用 | 高并发/云原生应用 |
集成复杂度 | 简单 | 中等 | 中等 |
调试难度 | 简单 | 中等 | 较复杂 |
Maven依赖配置
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>3.4.2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- MCP核心依赖 -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-mcp-server-webmvc-spring-boot-starter</artifactId>
<version>1.0.0-M6</version>
</dependency>
<!-- 开发工具 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- HTTP客户端 -->
<dependency>
<groupId>org.apache.httpcomponents.client5</groupId>
<artifactId>httpclient5</artifactId>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents.core5</groupId>
<artifactId>httpcore5</artifactId>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents.core5</groupId>
<artifactId>httpcore5-h2</artifactId>
</dependency>
<!-- Spring基础依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
MCP服务配置
application.yml配置
spring:
application:
name: mcp-name
ai:
mcp:
server:
name: mcp-name
version: 1.0.0
type: SYNC
sse-endpoint: /sse
服务实现
通过简单的HTTP转发,我们可以将现有服务接口快速暴露为MCP Server:
@Service
public class SmdMcpService {
@Autowired
private RestTemplate restTemplate;
@Value("${smd.service.url}")
private String smdServiceUrl;
/**
* 获取表结构信息
*/
@Tool(name = "getSmdInfo", description = "获取表结构信息")
public String getSmdInfo(
@ToolParam(description = "业务系统") String businessSystem,
@ToolParam(description = "表名") Set<String> tableNames) {
Map<String, Object> params = new HashMap<>();
params.put("businessSystem", businessSystem);
params.put("tableNames", tableNames);
ResponseEntity<String> response = restTemplate.postForEntity(
smdServiceUrl + "/mcp/api/getSmdInfo",
params,
String.class);
return response.getBody();
}
/**
* 根据表名生成增删改查代码
*/
@Tool(name = "getCRUDCode", description = "根据表名生成增删改查代码")
public List<Map<String, Object>> getCRUDByTable(
@ToolParam(description = "业务系统") String businessSystem,
@ToolParam(description = "表名") Set<String> tableNames,
@ToolParam(description = "模块名,非必填") String moduleName) {
Map<String, Object> params = new HashMap<>();
params.put("businessSystem", businessSystem);
params.put("tableNames", tableNames);
params.put("moduleName", moduleName);
params.put("author", "smd-mcp");
HttpEntity<Map<String, Object>> httpEntity = new HttpEntity<>(params);
ResponseEntity<List<Map<String, Object>>> response = restTemplate.exchange(
smdServiceUrl + "/mcp/api/crud",
HttpMethod.POST,
httpEntity,
new ParameterizedTypeReference<List<Map<String, Object>>>() {});
return response.getBody();
}
}
MCP工具注册配置
@Configuration
@Slf4j
public class McpConfig {
@Bean
public ToolCallbackProvider smdToolCallbackProvider(
SmdMcpService smdMcpService,
RulesMcpService rulesMcpService) {
return MethodToolCallbackProvider.builder()
.toolObjects(smdMcpService, rulesMcpService)
.build();
}
}
测试与验证
客户端配置
使用支持MCP的客户端(如Cursor,Trae)进行测试,配置mcp.json
文件:
{
"mcpServers": {
"mcp-name": {
"url": "http://localhost:8089/sse",
"env": {
"API_KEY": "value"
}
}
}
}
配置完成后,客户端将自动发现MCP Server提供的工具接口。
MCP生态展望
MCP目前仍处于发展初期,生态构建是当前的重点。通过统一标准构建的生态将促进整个领域的发展。
企业应用建议
- 零侵入改造:无需修改原有服务代码即可获得MCP能力
- 跨模型兼容:传统服务可无缝对接大模型生态
- 低成本投入:大幅缩短业务接入MCP的改造周期
未来可考虑开发MCP代理服务,通过简单配置即可将现有业务转换为MCP Server,为AI智能体提供更广泛的服务接入能力。
参考资源
更多推荐
所有评论(0)