spring boot实现MCP服务器,及其cursor测试利用的手段

news/2025/9/24 14:30:42/文章来源:https://www.cnblogs.com/wzzkaifa/p/19109189

一、服务端开发
1、项目结构
在这里插入图片描述
2、按照maven依赖

org.springframework.ai
spring-ai-starter-mcp-server-webmvc
1.1.0-M1

3、application.yml配置文件

server:
port: 2258
spring:
ai:
mcp:
server:
name: my-mcp-server # 你的 MCP 服务器名称
version: 1.0.0
type: ASYNC
sse-endpoint: /mcp/sse
request-timeout: 180s
enabled: true
mcp:
api:
keys: apikey1

4、新建服务类和实现类
新建IStudentService服务类

package com.example.mcp_server_api.service;
public interface IStudentService {
//查询学生的基本信息
String getStudentInfoByName(String name);
//查询学生的分数信息
String getStudentScoreByName(String name);
}

新建StudentServiceImpl实现类

package com.example.mcp_server_api.service.impl;
import com.example.mcp_server_api.service.IStudentService;
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.ai.tool.annotation.ToolParam;
import org.springframework.stereotype.Service;
@Service
public class StudentServiceImpl implements IStudentService {
@Override
@Tool(name="getStudentInfoByName",description = "获取学生基本信息")
public String getStudentInfoByName(@ToolParam(description = "学生姓名") String name) {
return String.format("%s,26,180cm身高",name);
}
@Override
@Tool(name="getStudentScoreByName",description = "获取学生的成绩")
public String getStudentScoreByName(@ToolParam(description = "学生姓名") String name) {
return String.format("%s,89分",name);
}
}

5、新建McpServerConfig类MCP服务配置类

package com.example.mcp_server_api.config;
import com.example.mcp_server_api.service.IStudentService;
import org.springframework.ai.tool.ToolCallbackProvider;
import org.springframework.ai.tool.method.MethodToolCallbackProvider;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class McpServerConfig {
@Bean
public ToolCallbackProvider studentToolCallbackProvider(IStudentService studentService) {
// 打印传入的 studentService 实例
//System.out.println("studentService 实例: " + studentService.getClass().getName());
MethodToolCallbackProvider provider = MethodToolCallbackProvider.builder()
.toolObjects(studentService)
.build();
return provider;
}
}

6、新建McpApiKeyInterceptor拦截器类,用于鉴权

package com.example.mcp_server_api.handlerInterceptorConfig;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import java.util.List;
@Component
public class McpApiKeyInterceptor implements HandlerInterceptor {
@Value("${mcp.api.keys}") // 从配置文件注入合法的API Key列表
private List validApiKeys;
//拦截器
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String authHeader = request.getHeader("API_KEY");
System.out.println("请求头");
System.out.println(authHeader);
if(authHeader != null && validApiKeys.contains(authHeader)){
return true;
}
return false;
}
}

7、新建WebConfig类,加入拦截器

package com.example.mcp_server_api.handlerInterceptorConfig;
import jakarta.annotation.Resource;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Resource
private McpApiKeyInterceptor mcpApiKeyInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 指定拦截MCP服务器的SSE端点路径
registry.addInterceptor(mcpApiKeyInterceptor).addPathPatterns("/mcp/**");
}
}

至此服务端配置完成
二、使用cursor测试MCP服务
1、找到mcp的设置,并增加一个mcp指向配置
在这里插入图片描述
在mcp.json中进行如下配置

{
"mcpServers": {
"my-mcp-server": {
"url": "http://localhost:2258/mcp/sse",
"headers": {
"API_KEY": "apikey1"
}
}
}
}

在这里插入图片描述
2、判断连状态
当圆点为绿色时,代表客户端已经成功连接服务器
在这里插入图片描述
注意 一定需要再里面手动选择tools,否则无法测试
在这里插入图片描述
在这里插入图片描述

3、进行对话测试,注意需要将对话下方选择为Agent模式
在这里插入图片描述

4、然后进行提问测试,注意需要以自然语言的形式进行测试
如:@my-mcp-server 查询学生张三的基本信息?,其中my-mcp-server为mcp.json中配置的mcp服务的名称,该名称对应后端配置文件中的spring.ai.mcp.server.name
5、问话后如下图,点击运行可看到结果

在这里插入图片描述
在这里插入图片描述
完整测试结果
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/915821.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vscode插件开发,打包后不生效问题解决

原因:使用AI生成的vscode 插件代码,打包使用的tsc,没有将三方依赖打包进去,导致安装插件后,插件无法激活,仅注册了快捷键 解决:对比使用 yo生成的ts+pnpm 插件项目,切换为esbuild打包 注意发布的话,使用 @vsco…

streamlit构建dashboard

1.python numpy pandas plotly库三者不同的侧重点 | 内容1 | 内容2 | | 内容3 | 内容4 | | 内容5 | 内容6 |

力扣 338题 比特位计数

动态规划 1.奇数中1的个数,是它上一个数1个个数+1,如2(10),3(11),4(100),5(101) 2.偶数中1的个数,是它除以2后的那个数的1的个数,如2(10),4(100),8(1000),6(110),12(1100) 3.因此,dp[i]…

技术前瞻与个人发展 - 构建终身学习的手艺体系——AI大模型:从0手搓到∞——AI、大模型时代,如何学习?

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

企业服务管理是做什么的?-ManageEngine卓豪

什么是企业服务管理软件呢?企业服务管理软件提供了一个统一的系统,可以整合IT、人力资源、设施和薪资等垂直业务部门的服务运营。这使得最终用户能够从单个控制台发现和访问服务,服务提供商可以从单个工作区中受益,…

wordpress免费云储存上海seo及网络推广

题目:桌上有 n 堆力扣币,每堆的数量保存在数组 coins 中。我们每次可以选择任意一堆,拿走其中的一枚或者两枚,求拿完所有力扣币的最少次数。 示例 1: 输入:[4,2,1]输出:4解释:第一…

站内关键词排名软件建设美妆企业网站

数据分区(Data Partitioning) 数据分区是指将一个大规模的数据集按某种规则划分成多个子集,并将这些子集存储到不同的存储节点上。这种方式不仅能提高查询效率,还能减轻单一节点的负担,使系统更容易扩展。 数据分区的…

学习笔记_在Python中使用微信扫码功能(OpenCV WeChatQRCode)

原文链接:http://www.juzicode.com/opencv-note-wechat-qrcode-detect-decode 微信开发团队在今年年初的时候将其二维码扫描功能贡献给了OpenCV社区,在OpenCV-Python中也可以使用微信扫码功能了。 使用前需要安装ope…

fastApi框架开发一个web端仓库管理系统 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

国标GB28181视频平台EasyCVR如何构建安防监控“中枢神经”?

国标GB28181视频平台EasyCVR如何构建安防监控“中枢神经”?在视频监控互联互通的需求日益迫切的今天,如何打破不同品牌、不同协议设备之间的壁垒?本文深度解析基于国家标准GB/T28181协议的视频平台EasyCVR的核心特点…

做个网站跳转链接怎么做网站建设与发布

类的测试与函数的测试相似 测试函数的案例:https://blog.csdn.net/hanhanwanghaha/article/details/107487037 https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 让这个可爱的宝藏女孩在努…

域名估价网站网页设计的首页如何设计官网

为啥又写一篇&#xff1f; 因为之前 用 Anchor 写的&#xff0c;这东西 放到Paragraph 里就不好使了 。 这回 目录里 和 跳转的地方 用的都是 Chunk 添加 目录条目 返回跳转的标记 public String addMenuTag (List<Pair<Chunk, String>> chunks, String[] men…

vscode中element-plus组件无属性提示

确保安装了Vue(Official)插件在项目根路径下的tsconfig.json中增加以下配置:compilerOptions:{"types": ["element-plus/global"], }重启编辑器即可

minio集群搭建

minio集群配置 minio不能装在/目录下,需要单独挂载磁盘 本文主机IP为 192.168.200.143 192.168.200.144 192.168.200.145 192.168.200.1461、给虚拟机添加磁盘,并配置挂载目录 [root@localhost ~]# fdisk -l磁盘 /de…

在AI技术唾手可得的时代,挖掘新需求成为核心竞争力——某知名餐饮菜谱应用需求洞察

本文分析了一个基于知名餐饮品牌菜谱的开源项目,该项目专注于菜品收录和烹饪指导,支持网页端访问和AI配图功能。通过分析用户反馈,发现了对部署工具和内容管理的具体需求,揭示了在技术实现便捷的背景下,真实用户需…

英伟达入资 11Labs,黄仁勋:语音 AI 带来情感、共情和联结;Qwen3-TTS-Flash:多语言,多音色,多方言丨日报

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 技术 」、「有亮点的 产品 」、「有思考的 文章 」、…

潍坊网站开发公司影视类网站建设

作者|晶少 转载|CSDN博客 2.4亿人在线使用文档协作无延宕…… 6万名武汉中小学生实力打造“远程课堂”活学高效…… 疫情以来&#xff0c;“远程”、“协作”持续大热&#xff0c;此局毋庸置疑。 根据QuestMobile最新发布的《2020中国移动互联网“战役”专题报告》显示&am…

心理网站建设策划书做一份网站动态图多少钱

题目描述 搜索二维矩阵 给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非严格递增顺序排列。 每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff0c;如果 target 在矩阵中&#xff0c;返回 true &#xff1b;否则&…

好的h5制作网站模板wordpress互动

配置旁挂二层组网隧道转发示例 组网图形 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件扩展阅读 业务需求 企业用户通过WLAN接入网络&#xff0c;以满足移动办公的最基本需求。且在覆盖区域内移动发生漫游时&#xff0c;不影响用户的业务使用。 组网需求 AC组…

网站建设与网络推广的关系xml网站模板

现有一个使用Relu激活函数的网络&#xff0c;训练过程中发现&#xff0c;它对所有的输入样本都输出一样的预测概率&#xff0c;比如二分类&#xff0c;对所有样本的预测概率都是[0.4,0.6]。由于预测概率都一样&#xff0c;因此预测标签也都一样&#xff0c;全预测为0或1。 一开…