当前位置: 首页 > news >正文

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

一、服务端开发
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.jsqmd.com/news/2852/

相关文章:

  • vscode插件开发,打包后不生效问题解决
  • streamlit构建dashboard
  • 力扣 338题 比特位计数
  • 技术前瞻与个人发展 - 构建终身学习的手艺体系——AI大模型:从0手搓到∞——AI、大模型时代,如何学习?
  • 企业服务管理是做什么的?-ManageEngine卓豪
  • 学习笔记_在Python中使用微信扫码功能(OpenCV WeChatQRCode)
  • fastApi框架开发一个web端仓库管理系统 - 实践
  • 国标GB28181视频平台EasyCVR如何构建安防监控“中枢神经”?
  • vscode中element-plus组件无属性提示
  • minio集群搭建
  • 在AI技术唾手可得的时代,挖掘新需求成为核心竞争力——某知名餐饮菜谱应用需求洞察
  • 英伟达入资 11Labs,黄仁勋:语音 AI 带来情感、共情和联结;Qwen3-TTS-Flash:多语言,多音色,多方言丨日报
  • 深入解析:一文详解回归分析的探索、分析、检验阶段,以Stata和SPSS为例
  • Vue 包依赖总结
  • 笔记_OpenCV4.5.1新增微信QRCode解码功能
  • 完整教程:模电基础:基本放大电路及其优化
  • 【论文阅读】Uncertainty Modeling for Out-of-Distribution Generalization (ICLR 2022) - 详解
  • 数字孪生 + 碳痕追踪:MyEMS 给能源管理装了套 “全链路全景导航”
  • 空间复杂度和时间复杂度
  • 基于IOS26的iOS 内存分析与必要内存界定
  • 深入解析:ARM架构学习9——LM75温度传感器+ADC转换器
  • 破局 “节能不省钱” 悖论:开源 EMS 生态如何让中小企业用 1/3 成本实现能效跃升?
  • 实用指南:U盘歌单管理器 (专业车载音乐播放列表制作工具)
  • iOS 26 性能测试实战,如何评估启动速度、CPUGPU 负载、帧率与系统资源适配(uni-app 与 iOS 原生应用性能方案)
  • P14062 【MX-X21-T7】[IAMOI R5] 若我不曾见过太阳 题解
  • unity确定性帧同步框架
  • 03-堆和栈
  • 深入解析:Django事务
  • 视频汇聚平台EasyCVR如何构建智慧农业监控监管系统?
  • 一套自用的git提交规范,可清晰的识别到关联的任务/bug - 实践