首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
昨天 00:11
渤海大学 后端工程师
都 AI 写代码了,咋还问八股呢?
不知你是否是这样,习惯按TapTap补全代码;偶尔遇到个线程问题,忘记了语法,就直接对话框问AI;甚至在新项目初始化的时候,直接全部交给AI。AI Coding已经融了大部分的开发生活,使用已经是一种习惯。但即使你面试的AI Agent岗位,面试官还是会照例问你八股,这还有必要吗?我已经tap链接大脑,AI 代替思考了呀? AI 现状 很多产出变得更像“对的”,但更难确认它真的“能上线” 传统工作模式下,我们编码的工作受限于思考,心流的过程。但如果测试时发现问题,可以快速在脑海里定位到大概位置,心中有码。 而与AI人机协作后,我们更多的时间花在编码后的测试,因为代码没过脑,很多写法可能与现...
AI求职实录
点赞
评论
收藏
分享
01-29 12:04
江南大学 Java
智慧用能低碳研究院 - Java - 实习一面
自我介绍JDK1.8 中 HashMap 为什么要引入红黑树Spring 自动装配原理IOC 和 AOP 的概念出现循环依赖的问题如何解决分布式判题系统中如何防止用户恶意代码提交的?分布式判题系统支持多语言是吗?如果要添加 go 语言要怎么操作?如何保持 mysql 和 redis 的数据一致性问题?项目中用到了 rabbitmq 的死信队列,具体是在什么时候触发死信队列的?项目是直接用 docker 容器跑的,还是通过 docker-compose 部署的?
查看11道真题和解析
点赞
评论
收藏
分享
01-27 19:52
字节跳动_AiCoding_AI应用全栈开发工程师(准入职员工)
浅浅分享一下近况
最终还是婉拒了小红书的offer,厚着脸皮回了字节。其实这次字节不管是组内的氛围、HR的沟通体验,都比之前好太多,开的薪资也还算过得去,这些都是让我下定决心的原因之一。但最核心的,还是抵不住对Agent的兴趣,选择了Ai Coding这么一个方向。因为很多大佬讲过,在未来比较火的还是属于那些更加垂类的Agent,而Ai Coding恰好是Coding Agent这么一个领域,本质上还是程序员群体和泛程序员群体这个圈子的。目前也已经在提前实习,也是全栈这么一个岗位。就像最近阿里P10针对前端后端等等不再那么区分,确实在Agent方向不太区分这个。尤其是我们自己做AI Coding的内容,基本上90%左右的内容都是AI生成的,AI代码仓库贡献率也是我们的指标之一。有人说他不好用,那肯定是用的姿态不太对。基本上用对Skill、Rules 加上比较好的大模型基本都能Cover你的大部分需求,更别说Claude、Cursor这种目前看来Top水准的Coding工具了(叠甲:起码在我看来是这样)。所以不太区分的主要原因,还是针对一些例如Claude Code、Cursor、Trae、Codex、CC等一大堆,他们有很多新的概念和架构提出,我们往往需要快速验证(MVP版本)来看效果。而全栈就是这么快速验证的一个手段,加上Ai Coding的辅助,目前看起来问题不大(仅仅针对Agent而言)。而且Coding的产品形态往往是一个Plugin、Cli之类的,本质还是属于大前端领域。不过针对业务后端来看,区分还是有必要的。大家很多人也说Agent不就是Prompt提示词工程么?是的没错,本质上还是提示词。不过现在也衍生出一个新的Context Eneering,抽象成一种架构思想(类比框架、或者你们业务架构,参考商品有商品发布架构来提效)。本质还是提示词,但是就是能否最大化利用整个上下文窗口来提升效果,这个还是有很多探索空间和玩法的,例如Cursor的思想:上下文万物皆文件, CoWork之类的。后续也有一些Ralph Loop啥的,还有Coding里面的Coding Act姿态。这种才是比较核心的点,而不是你让AI生成的那提示词,然后调用了一下大模型那么简单;也不是dify、LangGraph搭建了一套workflow,从一个node走到另外一个node那么简单。Agent和WorkFLow还是两回事,大部分人也没能很好的区分这一点。不过很多人说AI泡沫啥啥啥的,我们ld也常把这句话挂在嘴边:“说AI泡沫还是太大了”诸如此类。我觉得在AI的时代,懂一点还是会好一点,所以润去字节了。目前的实习生活呢,除了修一些Tools的问题,还包括对比Claude、Cursor、Trae在某些源码实现思想上的点,看看能不能迁移过来,感觉还是比较有意思。不过目前组内还是主要Follow比较多,希望下一个阶段就做一些更有创新的事情哈哈。这就是一个牛马大学生的最终牧场,希望能好好的吧。说不定下次发的时候,正式AI泡沫结束,然后我又回归传统后端这么一个结局了。欢迎交流👏,有不对的🙅不要骂博主(浅薄的认知),可以私聊交流
码农索隆:
和优秀的人,做有挑战的事
点赞
评论
收藏
分享
02-02 14:50
影石Insta360_深度学习算法工程师(准入职员工)
SHEIN内推,SHEIN内推码
在SHEIN你可以获得什么? 1⃣️首先,时尚公司体验感直线拉满!我很多同学毕业都去做男装,做运动服,做轻熟装!但是shein真的很时尚!你可以在摄影棚直线面对外国模特,给她们搭配衣服和配饰! 2⃣️公司工作环境超级好,工作氛围也很轻松愉快啦~每个校招生都会有专门的带教导师,很重要!!不会走冤枉路,能快速学习到东西,快速成长~咱们就是说,直球女孩的快乐!! 3⃣️福利 超级翻倍!任何节日你都能收到来自公司满满的心意公司每个人都是shein专业的周边大户~下午茶吃到你嘴软,节日小礼物也是经常拿~ 4⃣️超值内购会!来到快时尚公司,妈妈再也不怕我没有衣服穿了!各种样衣全部十元!只要你敢来,公司就敢...
SHEIN希音公司福利 370人发布
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
AI 应用开发学习全景路线图
1.3W
2
...
害怕被嘲笑就不去做了吗?
4723
3
...
大厂到底想要什么样的人???
3599
4
...
面试官视角聊聊,AI大模型产品到底是做什么的?
2081
5
...
测试/测开方向刷题经验分享
1416
6
...
我用AI做了个小游戏,来玩!
1371
7
...
2026的你,应该知道哪些AI面试题?
1319
8
...
后端 offer选择
1128
9
...
字节财经业务一面凉经
1048
10
...
因为简历太烂被培训班找上了吗
968
创作者周榜
更多
正在热议
更多
#
在大厂上班是一种什么样的体验
#
3799次浏览
61人参与
#
找工作的破防时刻
#
251352次浏览
1949人参与
#
程序员找工作至少要刷多少题?
#
8197次浏览
127人参与
#
OPPO求职进展汇总
#
770733次浏览
5396人参与
#
刚入职的你踩过哪些坑
#
3768次浏览
85人参与
#
我的AI电子员工
#
25970次浏览
159人参与
#
为了减少AI幻觉,你注入过哪些设定?
#
1633次浏览
53人参与
#
你投递的公司有几家约面了?
#
157671次浏览
994人参与
#
论秋招对个人心气的改变
#
5315次浏览
94人参与
#
程序员能干到多少岁?
#
5341次浏览
85人参与
#
一张图晒一下你的AI员工
#
2585次浏览
61人参与
#
牛客AI体验站
#
2806次浏览
79人参与
#
我现在比当时_,你想录用我吗
#
3405次浏览
59人参与
#
牛客租房专区
#
146593次浏览
1463人参与
#
AI Coding的使用心得
#
2071次浏览
53人参与
#
关于春招/暑期实习,你想知道哪些信息?
#
3574次浏览
76人参与
#
晒晒你司的新年福利
#
3630次浏览
66人参与
#
腾讯工作体验
#
563238次浏览
3688人参与
#
实习,不懂就问
#
164851次浏览
1469人参与
#
如果公司降薪,你会跳槽吗?
#
138842次浏览
890人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务