Spring AI系列——开发MCP Server和MCP Client(SSE方式)

Spring AI系列——开发MCP Server和MCP Client(SSE方式)

文章目录


一、概述

MCP架构图

在这里插入图片描述

MCP生命周期

在这里插入图片描述

二、创建MCP SERVER的java工程

生成初始化工程代码

访问网址:https://start.spring.io/
填写基本信息→添加依赖项

在这里插入图片描述


选择Server

在这里插入图片描述


点击生成

在这里插入图片描述
在这里插入图片描述


解压后用IDEA打开

修改pom.xml文件

把spring-ai-starter-mcp-server依赖改为spring-ai-starter-mcp-server-webmvc

在这里插入图片描述


完整pom.xml内容

<?xml version="1.0" encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.5.8</version><relativePath/><!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>test-mcp-server</artifactId><version>0.0.1-SNAPSHOT</version><name>test-mcp-server</name><description>Demo project for Spring Boot</description><url/><licenses><license/></licenses><developers><developer/></developers><scm><connection/><developerConnection/><tag/><url/></scm><properties><java.version>17</java.version><spring-ai.version>1.1.2</spring-ai.version></properties><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-mcp-server-webmvc</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><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><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

定义服务类MathTool

在这里插入图片描述
packagecom.example.tool;importorg.springframework.ai.tool.annotation.Tool;publicclassMathTool{@Tool(description ="两个数字相加")publicstaticintaddNumbers(int a,int b){return a + b;}@Tool(description ="两个数字相减")publicstaticintsubtractNumbers(int a,int b){return a - b;}}

通过配置类的方式把MathTool注入到Spring容器中

创建config包,在下面创建McpConfig类

在这里插入图片描述
packagecom.example.test_mcp_server.config;importcom.example.tool.MathTool;importorg.springframework.ai.tool.ToolCallbackProvider;importorg.springframework.ai.tool.method.MethodToolCallbackProvider;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;@ConfigurationpublicclassMcpConfig{@BeanpublicToolCallbackProvidermathTool(){returnMethodToolCallbackProvider.builder().toolObjects(newMathTool()).build();}}

修改配置文件application.yaml

配置内容为:

server:port:8080spring:application:name: math_mcp_server ai:mcp:server:enabled:truename: test_mcp_server version: 1.0.0 sse-endpoint: /api/v1/sse sse-message-endpoint: /api/v1/mcp capabilities:tool:truelogging:level:# 查看MCP详细日志io.modelcontextprotocol: TRACE org.springframework.ai.mcp: TRACE 

启动服务

在这里插入图片描述


启动成功,并提示注册了两个Tool

在这里插入图片描述

三、如何使用MCP Server

方式一:使用Chatbox连接MCP Server

设置AI模型提供方

在这里插入图片描述


我这里选择智谱的ChatGLM6B, API密钥去智谱官网申请,点击检查

在这里插入图片描述


在这里插入图片描述


点确认

在这里插入图片描述


在这里插入图片描述

配置MCP服务器

点击左侧的MCP

在这里插入图片描述


添加服务器

在这里插入图片描述


在这里插入图片描述


配置信息后点击测试

在这里插入图片描述


编写的两个工具成功显示

在这里插入图片描述


**PS:必须点测试,这样才能完成服务端的初始化连接**
服务端日志:

在这里插入图片描述

点击保存

在这里插入图片描述

使用MCP Server

按ECS键退出设置,点击新对话,可以看到刚才添加的MCP服务

在这里插入图片描述

输入“运维小兵的计算服务有哪些功能”
AI给的回复很好的总结了工具的功能

在这里插入图片描述

问:8加7等于几
工具成功调用

在这里插入图片描述


服务端日志内容

在这里插入图片描述


测试完毕,符合预期

方式二:开发一个Client来连接Server

创建java工程

跟创建MCP Server类似,改下Artifact名字

在这里插入图片描述


添加Client的依赖

在这里插入图片描述


在这里插入图片描述


保存工程文件,解压后用IDEA打开

修改pom.xml,添加核心依赖

<properties><java.version>17</java.version><spring-ai.version>1.1.2</spring-ai.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--调用智谱系列大模型的依赖--><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-zhipuai</artifactId></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-mcp-client-webflux</artifactId></dependency></dependencies><dependencyManagement><dependencies><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>

配置application.yaml

server:port:8081spring:application:name: test-mcp-client ai:zhipuai:# 智谱官网创建API Key,配置到机器的环境变量ZHIPU_KEYapi-key: ${ZHIPU_KEY}base-url:"https://open.bigmodel.cn/api/paas"# 配置模型地址chat:options:model: glm-4-flash mcp:client:sse:connections:server1:# 填写MCP Server的地址url: http://localhost:8080sse-endpoint: /api/v1/sse 

创建Controller

在这里插入图片描述

ConnectMcpServer.java

packagecom.example.test_mcp_client.controller;importorg.springframework.ai.chat.client.ChatClient;importorg.springframework.ai.tool.ToolCallbackProvider;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestParam;importorg.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/mcp")publicclassConnectMcpServer{privatefinalChatClient chatClient;publicConnectMcpServer(ChatClient.Builder builder,ToolCallbackProvider toolCallbackProvider){this.chatClient = builder .defaultToolCallbacks(toolCallbackProvider.getToolCallbacks()).build();}@GetMapping("/test")publicStringtest(@RequestParam(name ="query")String query){return chatClient.prompt().system("你是一个有用的AI助手").user(query).call().content();}}

启动Client服务

服务启动成功

在这里插入图片描述


SERVER端完成初始化

在这里插入图片描述

访问接口进行测试

GET http://localhost:8081/mcp/test?query=8加6等于几

在这里插入图片描述


查看SERVER日志


完美。

四、资料

Spring AI官网:https://docs.spring.io/spring-ai/reference/index.html
视频:https://www.bilibili.com/video/BV1yT8qzMEbd/?spm_id_from=333.337.search-card.all.click&vd_source=0467ab39cc5ec5940fee22a0e7797575

Read more

LangFlow镜像适配多种大模型:Llama、ChatGLM、Qwen任选

LangFlow镜像适配多种大模型:Llama、ChatGLM、Qwen任选 在AI应用开发日益普及的今天,越来越多团队希望快速验证大模型的能力——无论是构建智能客服、知识问答系统,还是设计复杂的AI Agent。但现实是,LangChain这类强大框架的学习曲线陡峭,模块繁杂,光是搞清楚Chain、Agent、Memory之间的数据流向就足以让人望而却步。 有没有一种方式,能让开发者“看见”整个流程?能像搭积木一样把提示词、模型、工具拼接起来,并且随时切换不同大模型做对比? 答案就是 LangFlow —— 一个专为LangChain打造的可视化工作流工具。而通过其官方提供的 Docker镜像,你甚至不需要配置Python环境、安装依赖包,只需一条命令,就能启动一个支持Llama、ChatGLM、通义千问(Qwen)等多种主流大模型的图形化开发平台。 这不仅是部署方式的简化,更是一种开发范式的转变:从“写代码驱动”转向“拖拽流程驱动”。 为什么LangFlow镜像值得用? 传统上使用LangChain需要手动搭建环境:创建虚拟环境、安装langchain、transfo

2026-01-14 学习记录--LLM-申请Hugging Face 访问令牌(以Meta-Llama-3.1-8B-Instruct为例)

2026-01-14 学习记录--LLM-申请Hugging Face 访问令牌(以Meta-Llama-3.1-8B-Instruct为例)

LLM-申请 Hugging Face 访问令牌(以Meta-Llama-3.1-8B-Instruct为例) 一、请求访问Llama模型 ⭐️ 随便进入想要访问的Llama模型,这里展示的是Meta-Llama-3-8B-Instruct。 1、 点击链接,申请访问Llama模型 2、 填写相关申请信息,注意如下:👇🏻(1)、国家最好选「美国」,然后填 「美国的大学」;(2)、操作这一步时,节点需要是对应国家的节点(若是美国,那么节点也要是美国)。 3、 提交成功后,就可开始申请Llama模型的Hugging Face 访问令牌啦~ 二、申请Llama模型的Hugging Face 访问令牌(以Meta-Llama-3.1-8B-Instruct为例)⭐️ 1、判断是否需要申请 访问Meta-Llama-3.1-8B-Instruct模型在Hugging Face上的官方仓库。 假若你看见“You need to agree to share your

Llama-3.2-3B效果实测:Ollama部署后3B模型在中文会议语音转写文本后的摘要压缩率与信息保留率

Llama-3.2-3B效果实测:Ollama部署后3B模型在中文会议语音转写文本后的摘要压缩率与信息保留率 1. 实测背景与核心关注点 你有没有遇到过这样的场景:一场两小时的线上会议结束,语音转写工具生成了8000多字的逐字稿,密密麻麻全是“嗯”“啊”“这个那个”,关键结论却藏在一堆口语碎片里?人工通读耗时、外包摘要成本高、大模型又动辄要GPU显存——这时候,一个能在笔记本上跑起来、又真能抓住重点的小模型,就特别实在。 Llama-3.2-3B就是这样一个“轻量但不轻浮”的选择。它不是参数堆出来的庞然大物,而是Meta专为多语言对话和摘要任务打磨过的30亿参数模型。我们这次没聊它多快、多省显存,而是直接把它放进真实工作流里:用Ollama一键拉起服务,把真实的中文会议语音转写文本喂给它,看它到底能把8000字压到多少字,同时还能保住多少关键信息。 实测不玩虚的——我们统计了压缩率(输出字数 ÷ 输入字数)和信息保留率(由三位有会议纪要经验的同事盲评打分,聚焦“是否遗漏决策项、是否丢失责任人、是否模糊时间节点、是否漏掉待办事项”四个硬指标),所有数据都来自同一组12份真实会议

AI“代笔”的困境与破局:百考通AI如何理性应对论文查重与AIGC检测

在学术研究的漫长征途中,许多研究者都经历过这样的时刻:当你呕心沥血完成的论文,在提交前最后一关——查重与AI生成内容(AIGC)检测中“触礁”,那种沮丧足以让所有前期努力蒙上阴影。随着AI写作辅助工具的普及,传统的“同义词替换”式降重已难以应对知网、维普等平台日益精进的算法。而AIGC检测的引入,更是为学术诚信设立了新标尺。在此背景下,百考通AI 以“降低重复率,优化AIGC疑似度”为核心,正致力于为研究者提供一条更智能、更可靠的辅助路径,帮助大家在遵守学术规范的前提下,更高效地完成写作。 首页 - 百考通AI写作https://www.baikaotongai.com/ 一、新时代的学术写作挑战:当重复率遇上AIGC检测 1. 传统降重方法的局限 长期以来,论文降重是让无数学生学者头疼的问题。依赖机械性的同义改写、语序调整,往往使论文失去原有的逻辑流畅性与专业严谨性,陷入“为降重而降重”的怪圈。更关键的是,主流查重系统的算法持续升级,能够轻易识别这类浅层改写,导致费时费力修改后,重复率依然居高不下。