Model Context Protocol (MCP)详解与Spring Boot集成实战
Model Context Protocol (MCP)详解与Spring Boot集成实战
一、MCP协议简介
1.1 什么是MCP协议
Model Context Protocol (MCP)是一个用于AI模型与外部工具通信的开放协议,它解决了不同AI模型与工具之间的互操作性问题。通过MCP协议,AI模型可以无缝地调用外部工具,扩展模型的能力边界,实现更丰富的功能。
1.2 MCP协议的核心价值
- 统一接口标准:为AI模型和工具提供标准化的通信接口
- 跨平台兼容性:支持不同框架和平台的AI模型
- 安全性保障:提供安全的工具调用机制
- 扩展性强:易于扩展新的工具和功能
- 低耦合设计:实现模型和工具的解耦
二、MCP整体工作流程
用户 不直接和大模型交互,而是和 Agent 打交道。
Agent 负责:
-
管理上下文(对话历史、记忆、任务状态)
-
判断什么时候该调用工具、什么时候只靠模型回答
-
把大模型的 function call 输出转换成标准化的 MCP请求
-
整合 MCP 返回的结果,再交给模型继续生成回复
大模型 就像大脑,Agent 像是执行层的“秘书/中控”,而 MCP 是秘书用的“统一工作台”。
三、Spring Boot集成MCP实战
3.1 项目结构设计
我们创建了一个基于Spring Boot 3.4.0的MCP示例项目,采用Maven多模块架构,包含两个主要模块:
mcp-example/
├── mcp-server/ # MCP服务器模块
├── mcp-client/ # MCP客户端模块
└── pom.xml # 父项目依赖配置
3.2 技术栈选型
- Java: 17
- Spring Boot: 3.4.0
- Spring AI: 1.0.0-M7
- Alibaba Cloud AI: 1.0.0-M6.1
3.3 服务端集成步骤
步骤1:创建MCP服务器模块
首先,创建一个Spring Boot模块作为MCP服务器:
<!-- mcp-server/pom.xml -->
<project><parent><groupId>com.xgx</groupId><artifactId>mcp-example</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>mcp-server</artifactId><name>Model Context Protocol Server</name><description>MCP Server Example Implementation</description><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-mcp-server-webflux</artifactId></dependency><dependency><groupId>io.modelcontextprotocol.sdk</groupId><artifactId>mcp</artifactId><version>0.10.0</version></dependency></dependencies>
</project>
步骤2:编写服务器主应用类
创建简单的Spring Boot主应用类:
// McpServerApplication.java
@SpringBootApplication
public class McpServerApplication {public static void main(String[] args) {SpringApplication.run(McpServerApplication.class, args);}
}
步骤3:配置MCP服务器
在application.yml
中配置MCP服务器:
# mcp-server/src/main/resources/application.yml
spring:application:name: mcp-server
server:port: 9999# MCP服务器配置
modelcontextprotocol:server:enabled: true# 配置工具注册路径等信息
步骤4:定义工具组件
创建工具组件类,提供可供AI模型调用的具体工具方法:
// ToolComponent.java
package com.xgx.mcpserver.component;import org.springframework.ai.tool.annotation.Tool;
import org.springframework.ai.tool.annotation.ToolParam;
import org.springframework.stereotype.Component;import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;/*** 工具组件类* 提供各种可供AI模型调用的工具方法*/
@Component
public class ToolComponent {/*** 获取指定城市的天气信息* * @param city 城市名称(拼音)* @return 包含天气信息的Map*/@Tool(description = "可以获取到某个城市的天气信息")public Map<String, String> getWeather(@ToolParam(required = true, description = "入参城市,请传入城市拼音") String city) {System.out.println("获取到了城市信息: " + city);return Map.of("datas", city + "的天气为大雪,温度为零下5度到零下10度");}/*** 获取当前系统时间* * @return 包含当前时间信息的Map*/@Tool(description = "可以获取当前系统时间")public Map<String, String> getSystemTime() {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String currentTime = sdf.format(new Date());System.out.println("获取到了系统时间: " + currentTime);return Map.of("datas", "当前系统时间为: " + currentTime);}
}
步骤5:配置工具注册
创建工具注册配置类,将工具组件注册到Spring容器中:
// ToolRegister.java
package com.xgx.mcpserver.component;import org.springframework.ai.tool.ToolCallbackProvider;
import org.springframework.ai.tool.method.MethodToolCallbackProvider;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** 工具注册配置类* 负责将工具组件注册到Spring容器中,供AI模型调用*/
@Configuration
public class ToolRegister {/*** 创建并配置MCP工具提供者* * @param component 工具组件实例* @return 工具回调提供者*/@Beanpublic ToolCallbackProvider mcpTools(ToolComponent component) {return MethodToolCallbackProvider.builder().toolObjects(component).build();}
}
3.4 客户端集成步骤
步骤1:创建MCP客户端模块
创建Spring Boot客户端模块:
<!-- mcp-client/pom.xml -->
<project><parent><groupId>com.xgx</groupId><artifactId>mcp-example</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>mcp-client</artifactId><name>Model Context Protocol Client</name><description>MCP Client Example Implementation</description><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-mcp-client-webflux</artifactId></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-autoconfigure-model-tool</artifactId></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-client-chat</artifactId></dependency><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter</artifactId></dependency></dependencies>
</project>
步骤2:配置客户端连接
在application.yml
中配置MCP服务器连接信息:
# mcp-client/src/main/resources/application.yml
server:port: 8888
spring:ai:dashscope:api-key: sk-xxxxxx //替换成阿里dashscope的api-keymcp:client:toolcallback:enabled: trueenabled: truetype: ASYNCsse:connections:mcp-server:url: http://localhost:9999
步骤3:实现客户端调用逻辑
创建聊天测试工具类:
@Service
public class ChatTestTool {private final ChatModel chatModel;private final ToolCallbackProvider callbackProvider;public ChatTestTool(ChatModel chatModel, ToolCallbackProvider callbackProvider) {this.chatModel = chatModel;this.callbackProvider = callbackProvider;}public void call() {// 创建具有可爱语气的聊天客户端ChatClient client = ChatClient.builder(chatModel).defaultTools(callbackProvider).defaultSystem("你是一个很可爱的智能助手,不论回答什么问题,都请用比较可爱的语气回答").build();// 测试天气查询工具String weatherRes = client.prompt("能帮我查询一下南宁的天气吗").call().content();System.out.println("获取到天气查询结果:");System.out.println(weatherRes);// 测试获取系统时间工具String timeRes = client.prompt("现在几点了?能告诉我当前的系统时间吗?").call().content();System.out.println("获取到系统时间查询结果:");System.out.println(timeRes);}
}
步骤4:编写客户端主应用类
@SpringBootApplication
public class ClientApplication {public static void main(String[] args) {ConfigurableApplicationContext context = SpringApplication.run(ClientApplication.class, args);ChatTestTool testTool = context.getBean(ChatTestTool.class);testTool.call();}
}
四、实际使用与测试
4.1 构建与运行项目
- 构建项目
mvn clean install -DskipTests
- 启动服务器
cd mcp-server
mvn spring-boot:run
- 启动客户端
cd mcp-client
mvn spring-boot:run
4.2 测试结果分析
客户端启动后,将自动测试与服务器的连接,并调用我们在ToolComponent
类中定义的两个工具:
控制台输出结果将显示这些工具调用的详细信息,包括服务器端的处理日志和客户端接收到的响应,验证MCP协议的正常工作和工具调用机制。
4.3 完整代码实现
https://github.com/xgxizz/mcp-example
五、总结
Model Context Protocol (MCP)为AI模型与外部工具的通信提供了标准化的解决方案,大大扩展了AI模型的应用场景。通过本文介绍的Spring Boot集成方法,开发者可以快速搭建MCP服务,实现AI模型与各种外部工具的无缝集成。
参考资料
- Model Context Protocol官方文档
- Spring AI官方文档
- Spring Boot官方文档
- 一个简单的java基于spring-ai构建mcp server以及mcp client案例