当前位置: 首页 > news >正文

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整体工作流程

mcp工作流程
用户 不直接和大模型交互,而是和 Agent 打交道。

Agent 负责

  1. 管理上下文(对话历史、记忆、任务状态)

  2. 判断什么时候该调用工具、什么时候只靠模型回答

  3. 把大模型的 function call 输出转换成标准化的 MCP请求

  4. 整合 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 构建与运行项目

  1. 构建项目
mvn clean install -DskipTests
  1. 启动服务器
cd mcp-server
mvn spring-boot:run
  1. 启动客户端
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模型与各种外部工具的无缝集成。

参考资料

  1. Model Context Protocol官方文档
  2. Spring AI官方文档
  3. Spring Boot官方文档
  4. 一个简单的java基于spring-ai构建mcp server以及mcp client案例
http://www.dtcms.com/a/407608.html

相关文章:

  • 珠海h5模板建站网站建设考试卷a卷
  • 豆包Seedream 4.0创意玩法大赏:开启AI绘画新纪元
  • 算法基础篇(5)前缀和
  • 手机网站宽度多少合适网站开发行业代码
  • 了解一下Ubuntu上搭建的ROS环境
  • 博客网站搭建网站建设需要资质么
  • 泰安市景区建设网站阿里巴巴企业网站怎么做
  • 网站采用什么字体wordpress get_pages()
  • 禁用内核模块,是否需要执行脚本 $ sudo update-initramfs -u $ sudo update-grub ?
  • 建站最好的公司排名织梦cms源码
  • 渲染 Python 中用 LaTeX 语法定义的数学公式 - 环境准备
  • 做教育业网站wordpress最漂亮的主题
  • 上海快速网站建设wordpress推广浏览插件
  • JVM-垃圾回收
  • [数据结构]ST表(markdown重制版)
  • 深圳网站建设saote网站建设项目登记表
  • STL 基础概念
  • dw做旅游网站毕业设计模板下载适合代码新手做的网站
  • 为什么公司网站打不开网页链接制作生成
  • 网站制作模板过程开发app的网站有哪些
  • 原来两个std::vector可以直接进行相等判断的吗?
  • 电子工程基础原理与应用指南(初学者版)电子工程入门:三极管与MOS管全解析
  • Rust/C/C++ 混合构建 - 用Bazel构建Rust与C
  • 微信公众号的网站长沙景点视频
  • 东莞网站建设qq群网站建设与维护项目六
  • ProxySQL:实现MySQL8.0主从同步与读写分离
  • 制作网站需要学什么软件灵璧做网站的公司
  • 基于FPGA的HDB3编解码(verilog语言)
  • 北京个人网站备案wordpress 同步公众号
  • python 做网站多用户商城网站建设