> 技术文档 > 【Spring AI系列】10 分钟用 Spring AI 搭专属 MCP Server,手把手教程来了_springai mcp server webclient天气查询

【Spring AI系列】10 分钟用 Spring AI 搭专属 MCP Server,手把手教程来了_springai mcp server webclient天气查询


大家好,我是小肥肠,专注AI干货知识分享,今天将给大家分享的是Spring AI搭建MCP Server教程,让你10分钟搭建一个自己的专属MCP Server,本期教程干货满满,一次看不完可以点击收藏做个记号下次看。如果你正在学习AI相关知识,欢迎关注小肥肠领取免费学习资料哦~

目录

1. 写在开头

2. MCP Server 的传输模式

2.1. 标准输入输出(stdio)模式

2.2. 服务器发送事件(SSE)模式

3. MCP Server搭建实战

3.1. 配置要求

3.2. 基于stdio模式访问天气查询MCP Server

3.2.1. 基于Spring AI编写天气查询MCP Server

3.2.2. 基于Cline调用天气查询MCP Server

4. 资料领取

5. 结语

1. 写在开头

最近在捣鼓 AI 开发时发现市面上的 MCP Server 虽然种类挺多,但落到具体细分小众业务场景里面就需要自己亲手开发。作为一个拥有9年研发经验的JAVAer看到 Spring AI 把 MCP 集成玩得风生水起后也决定下场实操一番。

我搭建过程也是蜿蜒曲折,折腾好几天总算是搭起来了,先是换JAVA版本,我之前一直美滋滋的用JAVA8,这次也是被强行升级到JAVA17,还有Maven版本的更和IDE的更新,总之这次算是我的开发工具全面升级了。装备换完,开发MCP Server再基于Client调用也就10分钟的事情,如果你对本期教程感兴趣就继续往下看,正文开始咯~

2. MCP Server 的传输模式

MCP Server 的传输模式各有千秋,其中 stdio、sse 和 Streamable HTTP 较为常用。Streamable HTTP 适合复杂网络交互,而 stdio 和 sse 应用更为高频,他俩一个主打本地交互的便捷,一个专注实时数据推送,这也是本文要重点讲解的内容,下面就来深入了解它们的原理与适用场景。

2.1. 标准输入输出(stdio)模式

stdio 模式主打一个本地交互的便捷。它利用操作系统自带的标准输入(stdin)和标准输出(stdout)流在进程间传递数据。MCP 客户端像启动一个小弟进程那样启动 MCP 服务器,然后通过标准输入流把消息传给服务器,服务器处理完再通过标准输出流把响应发回来。数据呢,是以 JSON格式序列化,一行一个完整的 JSON 对象,就像排队报数一样,采用 JSON Lines/JSONL 格式通信。

这种模式简单高效很适合在本地开发测试,或者对同时处理很多请求要求不高的场景。但它也有短板,它的模式为同步阻塞模型,即得等前一条消息传完才能处理下一条,遇到大量并发请求或者复杂交互场景,就有点力不从心了。

2.2. 服务器发送事件(SSE)模式

sse 模式则专注于实时数据推送。它是基于HTTP/1.1的长连接技术,实现服务器向客户端的单向实时通信。客户端通过 HTTP POST 端点发送请求,服务器就通过 SSE 长连接主动给客户端 投喂 数据。服务器推送的数据都按 SSE 格式,每个事件都带着 data: 这个前缀标识。像实时通知、股票行情更新这些场景,大量客户端连接但只需要服务器推送数据,sse 模式就派上用场了

sse是异步事件驱动模型,支持实时或接近实时的交互,在分布式系统或者高并发场景里表现不错,不过它也有局限,只支持服务器向客户端的单向通信,而且断线了不能自动重连或者恢复会话。

3. MCP Server搭建实战

由于篇幅限制,这篇文章先教大家搭建stido模式,下篇将会献上sse传输模式搭建,感兴趣的可以点点关注,防止我更新以后你找不到我。

3.1. 配置要求

基于Spring ai构建MCP Server需要保障你的开发工具满足以下条件:

环境要求

版本要求

推荐版本

说明

JDK

17+

JDK 17.0.12

必须使用Java 17或更高版本,推荐使用最新的LTS版本

Maven

3.6.x

Maven 3.9.6

构建工具版本要求,推荐使用最新的3.x稳定版

Spring Boot

3.x

Spring Boot 3.2.3

框架版本要求,需要使用3.x系列版本

IDE

-

IntelliJ IDEA 2024

版本越新越好

3.2. 基于stdio模式访问天气查询MCP Server

3.2.1. 基于Spring AI编写天气查询MCP Server

基于stdio模式访问MCP Server搭建较为简单,因为我想写系列流程,我就用模块的方式来搭建,源码等SSE文章出来以后会放出来。

1. 新建父类工程xfc-mcp,新增子模块xfc-mcp-server,在父类pom文件中新建依赖管理。

 17 17 UTF-8 3.2.0 1.0.0-M6   org.springframework.boot spring-boot-dependencies ${spring-boot.version} pom import   org.springframework.ai spring-ai-bom ${spring-ai.version} pom import  

2. 在子类模块(后称作xfc-mcp-server模块)中新增具体依赖项

  org.springframework.ai spring-ai-core   org.springframework.ai spring-ai-mcp-server-spring-boot-starter   org.springframework.boot spring-boot-starter-web   org.springframework.boot spring-boot-starter 

3. 在xfc-mcp-server模块中新增spplication.properties文件:

spring.application.name=mcpspring.main.banner-mode=offlogging.pattern.console=

4. 在xfc-mcp-server模块中编写天气查询服务,由于我本期教程只是打个样,就做了一个虚拟的天气查询服务,目的只是带领大家把流程走通。

@Servicepublic class WeatherService { @Tool(description = \"通过城市名字获取温度\") public String getWeather(@ToolParam(description = \"城市名称\") String cityName) { return cityName + \"今天的温度是\" + (new java.util.Random().nextInt(9) + 1) * 10; }}

上述代码通过 @Service 注解声明为 Spring Bean。提供了一个工具方法 getWeather,该方法接收城市名参数,通过随机数生成 10-90 的整数值作为温度返回

5. 在xfc-mcp-server模块中编写启动类。

@SpringBootApplicationpublic class McpServerApplication { public static void main(String[] args) { SpringApplication.run(McpServerApplication.class, args); } @Bean public ToolCallbackProvider toolCallbackProvider(WeatherService weatherService) { return MethodToolCallbackProvider.builder() .toolObjects(weatherService) .build(); }}
3.2.2. 基于Cline调用天气查询MCP Server

在上期教程MCP协议实战指南:在VS Code中实现PostgreSQL到Excel的自动化迁移_postgresql mcp-CSDN博客,我讲了怎么安装Cline和集成MCP Server,这里不再赘述流程,直接将怎么集成我们开发好的MCP Server。

1. 打包xfc-mcp-server,找到侧边工具栏Maven选项,依次运行cleanpackage命令。

2. 将打包好的jar包挪出来,我把jar包放到了E盘根目录,填写MCP Server配置文件后保存,下图中我的天气查询MCP Server就配置好了。

配置代码为:

\"weather-service\": { \"disabled\": false, \"timeout\": 60, \"type\": \"stdio\", \"command\": \"java\", \"args\": [ \"-jar\", \"E:/xfc-mcp-server-1.0-SNAPSHOT.jar\" ] }

3. 在聊天框中输入\"昆明今天多少度\",就能查看MCP Server调用结果。

在上述代码中类中定义了一个 Bean 方法 toolCallbackProvider,它将 WeatherService 实例注册到 MethodToolCallbackProvider 中,用于构建工具回调提供者,使 WeatherService 中的工具方法(如 getWeather)能被外部系统(如 AI 助手)发现和调用,实现工具方法的自动注册和回调功能。

4. 资料领取

觉得大模型不好用,可能是你不会写提示词,小肥肠为你准备了海量提示词模板、DeepSeek相关教程以及Coze基础教程,只需关注gzh后端小肥肠,点击底部【资源】菜单即可领取。

如果你也对AI领域体感兴趣,想学习Coze、Dify智能体MCP、Spring AI开发相关内容,欢迎找我哦~

5. 结语

到这儿,stdio 模式下用 Spring AI 搭建 MCP Server 就算讲完了。整体不难,但是里面的坑很多,80%都是环境的坑,请大家务必严格按照我教程中的配置来搭建。

如果这篇保姆级教程对你有帮助,欢迎点个赞/收藏/转发——你的支持是我熬夜肝干货的最大动力!