Spring AI(9)——MCP客户端

article/2025/8/20 5:39:43

Spring AI的MCP客户端介绍

模型上下文协议 (MCP) 是一种标准化协议,使 AI 模型能够以结构化方式与外部工具和资源交互。 它支持多种传输机制,以便在不同环境中提供灵活性。

MCP Java SDK 提供模型上下文协议的 Java 实现,通过同步和异步通信模式实现与 AI 模型和工具的标准化交互。

Spring AI MCP通过 Spring Boot 集成扩展了 MCP Java SDK,同时提供了客户端和服务器Starters。 

MCP官网提供的java sdk:Overview - Model Context Protocol

Spring AI提供了两种客户端的开发:

  • 标准客户端

        通过STDIO(in-process) 和/或SSE(远程)访问MCP服务端。 SSE 连接使用基于 HttpClient 的传输实现。 与 MCP 服务器的每次连接都会创建一个新的 MCP 客户端实例。 可以选择SYNC或ASYNCMCP 客户端(注意:不能混合使用同步客户端和异步客户端)。 

  • WebFlux客户端

        提供与标准客户端类似的功能,但使用基于 WebFlux 的 SSE 传输实现。

SDTIO方式通信

导入jar

<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-mcp-client</artifactId>
</dependency>

yml配置

application.yml


logging:level:org.springframework.ai: DEBUGio.modelcontextprotocol.client: DEBUGio.modelcontextprotocol.spec: DEBUGspring:ai:zhipuai:api-key: 智谱大模型的apikeychat:options:model: glm-4-flashtemperature: 0.7mcp:client:name: my-mcp-clientversion: 1.0.0request-timeout: 10stype: syncstdio:servers-configuration: classpath:mcp-servers-config.json

Claude Desktop 格式的MCP服务的JSON配置

mcp-servers-config.json

{"mcpServers": {"everything": {"command": "C:\\Program Files\\nodejs\\npx.cmd","args": ["-y","@modelcontextprotocol/server-everything@2025.4.28"]}}
}

注意:application.yml和mcp-servers-config.json都放在项目的resources目录下

本例使用的MCP服务是server-everything,关于该mcp服务的介绍,可以参考博客:

LangChain4j(17)——MCP客户端-CSDN博客

ChatClient对象中指定MCP服务器

注入MCP的同步客户端对象

    @Resourceprivate List<McpSyncClient> mcpSyncClients;
    @Beanpublic ChatClient chatClient(ZhiPuAiChatModel chatModel) {return ChatClient.builder(chatModel)// 设置系统消息.defaultSystem("你是一个java架构师")// 指定工具.defaultTools(new MyTools())// 指定同步的MCP回调工具对象.defaultToolCallbacks(new SyncMcpToolCallbackProvider(mcpSyncClients))//配置日志相关的Advisor,需要开启日志级别以及配置 默认debug级别.defaultAdvisors(simpleLoggerAdvisor(),MessageChatMemoryAdvisor.builder(chatMemory()).build()).build();}

控制层方法

package com.renr.springainew.mcp;import jakarta.annotation.Resource;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** @Classname MspClientController* @Description TODO* @Date 2025-05-28 18:29* @Created by 老任与码*/
@RestController
@RequestMapping("/mcp")
public class MspClientController {@Resourceprivate ChatClient client;@GetMapping("/chat")public String chat(String message) {String answer = this.client.prompt("11加12等于多少").call().content();System.out.println(answer);return "success";}
}

执行结果

我们还打印了执行过程的一些日志,从日志中看出,内部调用了server-everyting服务的add方法。

Http SSE方式通信

修改yml配置

logging:level:org.springframework.ai: DEBUGio.modelcontextprotocol.client: DEBUGio.modelcontextprotocol.spec: DEBUG
spring:ai:zhipuai:api-key: XXXXXXXXXchat:options:model: glm-4-flashtemperature: 0.7mcp:client:name: my-mcp-clientversion: 1.0.0request-timeout: 10stype: syncsse:connections:server1:url: http://localhost:3001sse-endpoint: /sse

以sse方式启动server-everyting服务

安装:

npm install -g @modelcontextprotocol/server-everything@2025.4.28

sse模式启动服务:

 找到服务的安装位置,执行如下命令:

注意:笔者按照server-everything中提供的sse方式启动后,mcp客户端无法连接。不确定是哪里的问题。

官方的启动方式:npx @modelcontextprotocol/server-everything sse

控制层方法不变,测试结果如下:

从输出日志可以看出,也调用了server-everything中的add函数。

WebFlux SSE方式通信 

只需要修改导入的jar为:

        <dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-mcp-client-webflux</artifactId></dependency>

其他的配置和代码无需改动,本文不再演示。


http://www.hkcw.cn/article/PARpJdfBni.shtml

相关文章

REALTECK瑞昱推出RTS5411T USB3.2 Gen1x1 超高速 USB 集线器控制器原厂代理分销经销一级代理分销经销

REALTECK瑞昱推出RTS5411T USB3.2 Gen1x1 超高速 USB 集线器控制 REALTECK瑞昱推出RTS5411T USB3.2 Gen1x1 超高速 USB 集线器控制器原厂代理分销经销一级代理分销经销 ​​ REALTECK瑞昱推出RTS5411T USB3.2 Gen1x1 超高速 USB 集线器控制器原厂代理分销经销一级代理分销经…

CppCon 2014 学习第3天:Viewing the world through array-shaped glasses

在内存中&#xff0c;数据是否是连续存储的&#xff0c;会对程序的性能产生显著影响。 为什么连续性重要&#xff1f; 缓存友好&#xff08;Cache-friendly&#xff09;&#xff1a;连续的数据访问能充分利用 CPU 缓存&#xff0c;速度更快。减少指针跳跃&#xff1a;非连续的…

【拼题A打卡奖励 / 01背包 W V转换】

题目 解法 如果直接上一维空间优化&#xff0c;也会因为时间上限太大而超时 注意到价值上限较小&#xff0c;于是将VW转换 状态定义从f(i, j) 1-i物品逐个决策&#xff0c;使得时间不超过j&#xff0c;价值最大 改为&#xff1a; 1-i物品逐个决策&#xff0c;使得价值正好等于…

《关于建立国际调解院的公约》签署仪式在香港举行

《关于建立国际调解院的公约》签署仪式在中国香港举行5月30日上午,《关于建立国际调解院的公约》签署仪式在中国香港举行。调解是《联合国宪章》规定的重要争端解决方式之一,推崇“以和为贵”,充分尊重当事方意愿,具有更灵活、更经济、更便捷、更易执行等独特优势,也体现了…

女子用高压锅煮粽子厨房被炸一片狼藉 警惕高压锅变“炸弹”

女子用高压锅煮粽子厨房被炸一片狼藉 警惕高压锅变“炸弹”。端午将至,许多人已经准备好糯米、粽叶和各种馅料,打算在家制作美味的粽子。然而,使用高压锅煮粽子时需格外小心,以免发生意外。去年,浙江温州一名61岁女子在家中用高压锅煮粽子时,因饭粒堵塞排气孔导致高压锅爆…

汕头1.14亿元违建几小时拆完 违法建筑的必然结局

汕头1.14亿元违建几小时拆完 违法建筑的必然结局!5月28日,汕头市潮阳区西胪镇西二社区估值1.14亿元的违法建筑群“英之园”被依法拆除。网络视频显示,当天数十台挖机同时作业,祠堂、四合院等豪华建筑群已成废墟。西二社区一位村民透露,5月27日深夜,多台挖机开进村里,次日…

NCBI保姆级使用教程(包含如何查找CDS、启动子、5‘UTR和3‘UTR、lncRNA序列)

一、NCBI数据库简介 NCBI&#xff0c;全称为美国国家生物技术信息中心&#xff08;National Center for Biotechnology Information&#xff09;&#xff0c;是美国国立卫生研究院&#xff08;National Institutes of Health&#xff09;的一个部门。NCBI成立于1988年&#xf…

PostgreSQL如何更新和删除表数据

这节说下怎样更新和删除表数据&#xff0c;当然认识命令了&#xff0c;可以问AI帮忙写。 接上节先看下天气表weather的数据&#xff0c;增加了杭州和西安的数据&#xff1a; 一.UPDATE更新命令 用UPDATE命令更新现有的行。 假设所有 杭州 5月12日的温度低了两度&#xff0c;用…

胖东来红内裤事件宣判:博主赔40万 名誉权纠纷落锤

2025年5月28日,许昌市魏都区人民法院公开审理了许昌市胖东来商贸集团有限公司与段某之间的名誉权纠纷案,并当庭宣判。法院判决段某在其个人抖音账号“两个小段(小)”发布书面道歉信的视频,且内容需经法院审核,发布后30日内不得删除;同时,段某需赔偿许昌市胖东来商贸集团…

一支烟能造成的危害远超你想象 !

一支烟能造成的危害远超你想象央视网原创解析。说到抽烟有什么坏处,哪怕是常年抽烟的人也能说出个一两句,但是真让抽烟者去戒烟,却是十分困难。为什么戒烟这么难?明明烟这么难闻,他们为什么爱抽烟?你以为在室外抽根烟,就不会影响家人健康了?大错特错!二手烟、三手烟的…

高铁站现“200寸巨型行李箱” 网友:这是要装下世界了?

近日,江西某地高铁站惊现一个“200寸巨型行李箱”,视频中能看到,两位女生合力才能推动这个巨型行李箱,还有热心的路人小哥上前帮忙,这个行李箱高度有近3米,和周围出站的行李箱形成鲜明对比,出站路人纷纷掏出手机拍照调侃:这集装箱进得去火车站吗?责任编辑:zx0002

普京会见安倍晋三遗孀 后者一度落泪 缅怀故人贡献

俄罗斯总统普京于5月29日在莫斯科会见了已故日本前首相安倍晋三的遗孀安倍昭惠。普京表达了对安倍晋三在俄日关系发展中所做贡献的认可,并向安倍昭惠赠送了一束鲜花。会谈中,安倍昭惠情绪激动,一度哽咽落泪。据媒体报道,在担任日本首相期间,安倍晋三与普京进行了多达27次面…

传输层协议TCP(上)

上一篇https://blog.csdn.net/Small_entreprene/article/details/148143494?fromshareblogdetail&sharetypeblogdetail&sharerId148143494&sharereferPC&sharesourceSmall_entreprene&sharefromfrom_link 上文学习了传输层的协议之一UDP&#xff0c;接下来…

Sqlyog-12数据库工具安装包和教程

1.引言 本次为大家介绍MySQL数据库可视化工具&#xff0c;sqlyog-12终极版64位和32位的安装教程 sqlyog安装包和终极版激活码在本文最后 2.安装 运行exe安装程序 软件语言选择简体中文 自定义软件安装位置 安装完成后需要输入激活码&#xff0c;我们输入安装包内提供的终极…

伊朗外长:伊方“并不确定”与美国接近达成协议

针对媒体当前有关伊朗与美国即将达成协议的猜测,伊朗外长阿拉格齐当地时间29日表示,伊方“并不确定是否已到这一步”。阿拉格齐当天在社交媒体上发文说,伊朗真诚地寻求一个符合各方利益的外交解决方案。但要实现这一目标,需要达成一项全面终止所有对伊制裁并维护伊朗核权利…

胡塞称一周内打击以色列多地目标:使用了14枚高超音速导弹、弹道导弹以及无人机

胡塞称一周内打击以色列多地目标。当地时间5月29日晚,也门胡塞武装领导人阿卜杜勒马利克胡塞在其每周讲话中表示,在本周内,该组织对以色列多地目标实施了军事打击。在打击过程中,该组织使用了14枚高超音速导弹、弹道导弹以及无人机,打击目标包括以色列特拉维夫以北的雅法、…

博主用AI杜撰霸王茶姬虚假信息被抓获 AI“洗稿”博流量

拼凑网络传言、利用AI“洗稿”,杜撰涉企不实文章,以此博流量、涨粉丝进而获取广告收益。5月29日,上海警方披露侦破一起利用人工智能技术编造、传播网络谣言损害企业权益案,抓获姚某、陈某等8名犯罪嫌疑人。年初,上海长宁警方接到辖区茶饮企业报案,称多个自媒体平台出现大…

中方代表为解决俄乌冲突提出三点建议

当地时间29日,联合国安理会举行乌克兰问题公开会,敦促俄乌立即全面停火,并呼吁国际社会加大人道援助。中方代表在发言中表示,乌克兰危机涉及的矛盾错综复杂,解决起来不可能一蹴而就。中方对此前的积极进展表示欢迎,支持一切通向和平的努力。中方为解决俄乌冲突提出了三点…

女子100米栏决赛:日媒报道田中佑美夺银未提吴艳妮

日媒报道田中佑美夺银未提吴艳妮。5月29日的韩国龟尾田径亚锦赛赛场,女子100米栏决赛上演了一场扣人心弦的较量。上届冠军的印度选手亚拉吉在后程突然发力,以12秒96(-0.1)的成绩成功卫冕,日本选手田中佑美以13秒061收获银牌,中国选手吴艳妮则以13秒068的成绩位列第三。这…

Blaster - Multiplayer P117-PXXX: 匹配状态

P118_ Game Timer 本局赛还剩多长时间. P118_1 Formet And Set Time Text ABlasterPlayerController::SetHUDMatchCountdown(). P118_2 计算剩余时间 我们目前在 PlayerController 做的倒计时逻辑, 之后会把其放到 Game Mode 中 , 这也许就是问题所在. P118_3 问题 各端的…