掘金 人工智能 7小时前
JAVAer 狂喜!10 分钟用 Spring AI 搭专属 MCP Server,手把手教程来了
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文分享了使用Spring AI快速搭建MCP Server的教程,重点介绍了stdio模式的实现方法。作者详细讲解了环境配置、代码编写以及使用Cline调用MCP Server的步骤,并提供了天气查询服务的示例。通过本教程,读者可以在10分钟内搭建一个自己的专属MCP Server,为后续的AI开发打下基础。

💻 教程首先介绍了MCP Server的两种常用传输模式:stdio和SSE。stdio模式适合本地开发测试,通过标准输入输出流进行数据交互,以JSON Lines格式通信。SSE模式则专注于实时数据推送,基于HTTP/1.1长连接,实现服务器向客户端的单向实时通信。

🛠️ 教程详细说明了基于Spring AI搭建MCP Server的环境要求和配置,包括JDK、Maven、Spring Boot和IDE的版本。并提供了xfc-mcp-server模块的pom文件和application.properties文件的配置示例,为读者提供了清晰的参考。

💡 教程通过一个虚拟的天气查询服务示例,演示了如何编写MCP Server的核心代码,包括WeatherService和启动类McpServerApplication。WeatherService使用了@Tool和@ToolParam注解,定义了工具方法getWeather,用于获取城市天气。启动类中配置了ToolCallbackProvider,用于注册工具方法。

🚀 教程展示了如何使用Cline调用搭建好的MCP Server,并提供了配置示例。通过在聊天框中输入指令,即可查看MCP Server的调用结果。教程还强调了环境配置的重要性,并鼓励读者按照教程中的配置进行搭建。

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

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需要保障你的开发工具满足以下条件:

环境要求版本要求推荐版本说明
JDK17+JDK 17.0.12必须使用Java 17或更高版本,推荐使用最新的LTS版本
Maven3.6.xMaven 3.9.6构建工具版本要求,推荐使用最新的3.x稳定版
Spring Boot3.xSpring 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文章出来以后会放出来。

    新建父类工程xfc-mcp,新增子模块xfc-mcp-server,在父类pom文件中新建依赖管理。
<properties>    <maven.compiler.source>17</maven.compiler.source>    <maven.compiler.target>17</maven.compiler.target>    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>    <spring-boot.version>3.2.0</spring-boot.version>    <spring-ai.version>1.0.0-M6</spring-ai.version></properties><dependencyManagement>    <dependencies>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-dependencies</artifactId>            <version>${spring-boot.version}</version>            <type>pom</type>            <scope>import</scope>        </dependency>        <dependency>            <groupId>org.springframework.ai</groupId>            <artifactId>spring-ai-bom</artifactId>            <version>${spring-ai.version}</version>            <type>pom</type>            <scope>import</scope>        </dependency>    </dependencies></dependencyManagement>
    在子类模块(后称作xfc-mcp-server模块)中新增具体依赖项
<dependencies>    <dependency>        <groupId>org.springframework.ai</groupId>        <artifactId>spring-ai-core</artifactId>    </dependency>    <dependency>        <groupId>org.springframework.ai</groupId>        <artifactId>spring-ai-mcp-server-spring-boot-starter</artifactId>    </dependency>    <dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-web</artifactId>    </dependency>    <dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter</artifactId>    </dependency></dependencies>
    在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 的整数值作为温度返回

    在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

在上期教程Manus平替方案:用DeepSeek+MCP Server构建AI自主工作流,我讲了怎么安装Cline和集成MCP Server,这里不再赘述流程,直接将怎么集成我们开发好的MCP Server。

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

    将打包好的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%都是环境的坑,请大家务必严格按照我教程中的配置来搭建。虽然这次只是用虚拟天气查询打了个样,但只要吃透了这里面的逻辑,之后遇到其他需求也能轻松上手。

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

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

Spring AI MCP Server stdio模式 SSE模式 AI开发
相关文章