首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
Hpp_
齐齐哈尔大学 Java
发布于浙江
关注
已关注
取消关注
m
@Java三段:
必看!SpringAI轻松构建MCP Client-Server架构
MCP 这个概念相信大家已经听了无数次了,但不同人会有不同的解释,你可能也是听得云里雾里的。不过没关系,今天这篇内容会通过 Spring AI 给你实现一个 MCP 的 Client 和 Server 架构,让你彻底搞懂 MCP 的概念,以及学会 MCP 的开发技能。什么是MCP?MCP 是 Model Context Protocol,模型上下文协议,它是由 Anthropic(Claude 大模型母公司)提出的开放协议,用于大模型连接外部“数据源”的一种协议。它可以通俗的理解为 Java 界的 Spring Cloud Openfeign,只不过 Openfeign 是用于微服务通讯的,而 MCP 用于大模型通讯的,但它们都是为了通讯获取某项数据的一种机制,如下图所示:为什么需要MCP?MCP 存在的意义是它解决了大模型时代最关键的三个问题:数据孤岛**、开发低效和生态****碎片化**等问题。1.打破数据孤岛,让AI“连接万物”大模型本身无法直接访问实时数据或本地资源(如数据库、文件系统),传统方式需要手动复制粘贴或定制接口。MCP 通过标准化协议,让大模型像“插USB”一样直接调用外部工具和数据源,例如:查天气时自动调用气象 API,无需手动输入数据。分析企业数据时直接连接内部数据库,避免信息割裂。2.降低开发成本,一次适配所有场景在之前每个大模型(如 DeepSeek、ChatGPT)需要为每个工具单独开发接口(Function Calling),导致重复劳动,MCP 通过统一协议:开发者只需写一次 MCP 服务端,所有兼容 MCP 的模型都能调用。用户无需关心技术细节,大模型可直接操作本地文件、设计软件等。3.提升安全性与互操作性安全性:MCP 内置权限控制和加密机制,比直接开放数据库更安全。生态统一:类似 USB 接口,MCP 让不同厂商的工具能“即插即用”,避免生态分裂。4.推动AIAgent的进化MCP 让大模型从“被动应答”变为“主动调用工具”,例如:自动抓取网页新闻补充实时知识。打开 Idea 编写一个“Hello World”的代码。MCP 的诞生,相当于为AI世界建立了“通用语言”,让模型、数据和工具能高效协作,最终释放大模型的全部潜力。MCP组成和执行流程MCP 架构分为以下 3 部分:客户端:大模型应用(如 DeepSeek、ChatGPT)发起请求。服务器:中间层,连接具体工具(如数据库、设计软件)。资源:具体的数据或工具(如 Exce l文件、网页 API)。运行流程:用户提问。大模型通过 MCP 客户端发送请求。MCP 服务器接收指令。调用对应工具(如数据库)执行。返回结果给大模型。生成最终回答。Spring AI MCP 介绍Spring AI MCP 是通过 Spring Boot 集成扩展了 MCP 的 Java SDK(开发工具),它同时提供了 Spring Boot 客户端和服务器的启动器,方便使用 Spring AI MCP 快速开发 AI 应用程序。Spring AI MCP 实战当前案例中,我们使用 MCP 实现一个天气查询小助手,其中包含的主要角色有:MCP Server:MCP 服务提供方,提供天气查询功能。MCP Client:MCP 客户端(大模型端)我们对接 DeepSeek LLM 实现对 MCP Server 的调用,从而实现天气预报的查询功能。具体交互流程如下:实现 MCP Server 代码编写MCP Server 主要实现步骤如下:添加 MCP Server 依赖。设置 MCP 配置信息。编写 MCP Server 服务代码。将 MCP Server 进行暴露设置。关键实现代码如下。添加 MCP Server 依赖<dependencies> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-starter-mcp-server-webflux</artifactId> </dependency></dependencies><repositories> <repository> <name>Central Portal Snapshots</name> <id>central-portal-snapshots</id> <url>https://central.sonatype.com/repository/maven-snapshots/</url> <releases> <enabled>false</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> <repository> <id>spring-snapshots</id> <name>Spring Snapshots</name> <url>https://repo.spring.io/snapshot</url> <releases> <enabled>false</enabled> </releases> </repository></repositories>MCP Server 依赖有三种类型:标准输入/输出 (STDIO):spring-ai-starter-mcp-serverSpring MVC(服务器发送的事件):spring-ai-starter-mcp-server-webmvcSpring WebFlux(响应式 SSE):spring-ai-starter-mcp-server-webflux设置 MCP 配置信息MCP Server 包含以下配置信息:配置项描述默认值enabled启用/禁用 MCP 服务器TRUEstdio启用/禁用 stdio 传输FALSEname用于标识的服务器名称mcp-serverversion服务器版本1.0.0type服务器类型 (SYNC/ASYNC)SYNCresource-change-notification启用资源更改通知TRUEprompt-change-notification启用提示更改通知TRUEtool-change-notification启用工具更改通知TRUEtool-response-mime-type(可选)每个工具名称的响应 MIME 类型。例如,将 mime 类型与工具名称相关联spring.ai.mcp.server.tool-response-mime-type.generateImage=image/pngimage/pnggenerateImage()-sse-message-endpointWeb 传输的 SSE 终端节点路径/mcp/message其中 MCP Server 又分为以下两种类型。服务器类型同步服务器:默认服务器类型,它专为应用程序中的简单请求-响应模式而设计。要启用此服务器类型,请在您的配置中设置。 激活后,它会自动处理同步工具规格的配置,spring.ai.mcp.server.type=SYNC。异步服务器:异步服务器实现使用非阻塞作并针对非阻塞作进行了优化。要启用此服务器类型,请使用配置您的应用程序。此服务器类型会自动设置具有内置 Project Reactor 支持的异步工具规范,spring.ai.mcp.server.type=ASYNC。编写 MCP Server 服务代码编写天气预报查询伪代码:import org.springframework.ai.tool.annotation.Tool;import org.springframework.stereotype.Service;import java.util.Map;@Servicepublic class WeatherService { @Tool(description = "根据城市名称获取天气预报") public String getWeatherByCity(String city) { Map<String, String> mockData = Map.of( "西安", "晴天", "北京", "小雨", "上海", "大雨" ); return mockData.getOrDefault(city, "抱歉:未查询到对应城市!"); }}将服务暴露出去@Beanpublic ToolCallbackProvider weatherTools(WeatherService weatherService) {return MethodToolCallbackProvider.builder().toolObjects(weatherService).build();}这样 MCP Server 就编写完成了。实现 MCP Client 代码编写MCP Client 主要实现步骤如下:添加 MCP Client 相关依赖。设置配置信息。设置 ChatClient 对象(调用 MCP Server)。编写测试代码调用 MCP Server。核心实现代码如下:import org.springframework.ai.chat.client.ChatClient;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class ClientController { @Autowired private ChatClient chatClient; @RequestMapping("/chat") public String chat(@RequestParam(value = "msg",defaultValue = "今天天气如何?") String msg) { String response = chatClient.prompt() .user(msg) .call() .content(); System.out.println("响应结果: " + response); return response; }}最终执行结果如下:因为 MCP Server 只配置了 3 个城市,所以查询结果和预期相符:小结到这里使用 Spring AI 就实现了 MCP Client 和 Server 的调用了,可以看出 MCP 的推出只是为了增强大模型的能力的,有了 MCP 协议之后,任何大模型就可以调用任意实现了 MCP Server 的服务了,这样就无线扩充了大模型的能力,为 AI 的发展提供了标准的协议和便利的对接。
点赞 5
评论 2
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
04-20 20:55
西安电子科技大学 算法工程师
字节内容消费团队一面
1.自我介绍2.论文拷打3.手撕题:(面试官已经不知道问啥了,让我先写个题,他再想想问什么)给定一个数组和k,问能不能把这数组换分成k份,每份的总和都相同。(想到问什么了)4.transformer的多头是如何划分的5.讲讲位置编码有哪些6.讲讲diffusion的原理,flow matching了解吗讲讲,ODE呢?(ODE是啥,可能没听清,反问了下ODE的全称 他说他也不清楚)(有可能是我听错了)7.Qwen Image-Edit讲讲(不知道,只用过)反问:1.业务2.手撕题的算法优化(我用的dfs+剪枝,面试官说应该可以用状压,不会)3.面试整体评价(面试官说字节大部分面试官看重聪明度+...
查看7道真题和解析
点赞
评论
收藏
分享
昨天 12:21
南京大学 用户运营
📌2026年AI产品经理的10项必备核心能力
2026年,AI产品经理和传统产品经理之间,已经拉开了一道清晰的分水岭。这道分水岭不是会不会写代码,而是能不能用产品思维驾驭AI能力。下面这10项技能,构成了一个完整的AI PM能力体系。一、AI技术理解力不是要你写代码,而是要你听懂工程师在说什么,知道AI能做什么、不能做什么、以及为什么。技能1:Prompt工程与模型选型 🎯Prompt不是跟AI聊天,是一种工程化的输入控制能力。很多新人觉得Prompt就是写指令让AI生成内容,这只是最表层的用法。做AI产品,你需要理解的是:不同的Prompt策略对模型输出质量的影响有多大什么场景用few-shot、什么场景用chain-of-thoug...
简历上如何体现你的“AI...
点赞
评论
收藏
分享
03-31 16:53
已编辑
门头沟学院 测试开发
四段实习经历,三段大厂。。春招至今0面试
四段实习经历,三段大厂。。春招至今0面试。。。受到好大的打击啊
迷茫的杰尼龟在等of...:
不是 我靠四段都没
春招提前批,你开始投了吗
点赞
评论
收藏
分享
04-20 20:49
门头沟学院 算法工程师
腾讯投的Agent,为啥面试变全栈了
大伙有懂的吗,流程看简历也没吃挂...
点赞
评论
收藏
分享
04-19 11:32
重庆大学 Java
京东-二面+HR面-4.15
京东真是很神奇的一家公司,面试完全不考算法,二面来了俩面试官,面完才知道是二面技术面和三面HR面一起面了,一会问八股一会问性格,4.17收到offer,最后决定去京东了HR:请做一个自我介绍为什么选择直接就业而不是考研?你对未来的职业规划是怎样的?为了转向全栈方向,你做了哪些准备?在本科期间你重点学习了哪些技术?是如何学习的?你的项目经历是否有实际落地或应用场景?请介绍一下你的 AI 智能问答助手项目这个 AI 项目是从 0 到 1 开发的吗?整体架构是怎样的?你在项目中是如何使用 AI 辅助开发的?使用 AI 编程工具时有哪些不足或风险?如何避免?技术:多模态能力在你的项目中是如何应用的?M...
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
中国银行软件中心合肥编程测评
1.5W
2
...
和室友聊完我才知道自己输在信息差...
1.0W
3
...
面到崩溃后,我接受保底offer去旅游了
8312
4
...
字节抖音前端暑期二面
5390
5
...
腾讯云智二面(已挂)
4397
6
...
同学去了腾讯、蔚来,而我去了一个小厂...
4064
7
...
AI产品面试复盘
4013
8
...
终于pdd让我的暑实告一段落,力竭了
3681
9
...
招银网络科技春招
3598
10
...
腾讯光子游戏客户端开发实习二面主管面面经(已oc)
2882
创作者周榜
更多
正在热议
更多
#
哪些AI项目值得做?
#
18234次浏览
467人参与
#
你总挂在第__面?
#
6569次浏览
73人参与
#
华泰星战营,提前锁定校招offer
#
12006次浏览
360人参与
#
简历上如何体现你的“AI”能力?
#
9208次浏览
208人参与
#
正在春招的你,也参与了去年秋招吗?
#
396833次浏览
2718人参与
#
找不到大厂实习可以去小厂吗?
#
14628次浏览
159人参与
#
实习时最怕听到的一句话
#
16293次浏览
155人参与
#
没有面试的日子里,你在做什么
#
9589次浏览
294人参与
#
你简历上最心虚的一句话
#
15920次浏览
197人参与
#
90后北漂现状
#
38841次浏览
225人参与
#
你知道最慷慨和最抠的公司分别是
#
7982次浏览
62人参与
#
非技术投递记录
#
726472次浏览
6948人参与
#
25届嵌入式真的回暖了吗
#
52361次浏览
383人参与
#
吉利求职进展汇总
#
109917次浏览
415人参与
#
拼多多工作体验
#
57652次浏览
415人参与
#
联通求职进展汇总
#
10318次浏览
30人参与
#
机械人还在等华为开奖吗?
#
334095次浏览
1629人参与
#
秋招笔试记录
#
397992次浏览
2200人参与
#
网易雷火工作体验
#
6146次浏览
25人参与
#
机械人,说说你的烦心事
#
144164次浏览
1151人参与
#
嵌入式岗知多少
#
73291次浏览
587人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务