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

spring boot实现MCP服务器,及其cursor测试使用的方法

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

<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-mcp-server-webmvc</artifactId><version>1.1.0-M1</version></dependency>

3、application.yml配置文件

server:port: 2258spring:ai:mcp:server:name: my-mcp-server # 你的 MCP 服务器名称version: 1.0.0type: ASYNCsse-endpoint: /mcp/sserequest-timeout: 180senabled: truemcp: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 {@Beanpublic 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<String> validApiKeys;//拦截器@Overridepublic 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 {@Resourceprivate McpApiKeyInterceptor mcpApiKeyInterceptor;@Overridepublic 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.dtcms.com/a/395091.html

相关文章:

  • web前端开发与服务器通信的技术变迁历程
  • 市值机器人:智能力量与监管博弈下的金融新生态
  • LeetCode:46.二叉树展开为链表
  • LeetCode算法日记 - Day 50: 汉诺塔、两两交换链表中的节点
  • 力扣每日一刷Day24
  • LeetCode 226. 翻转二叉树
  • leetcode 2331 计算布尔二叉树的值
  • docker: Error response from daemon: Get “https://registry-1.docker.io/v2/“
  • 从50ms到30ms:YOLOv10部署中图像预处理的性能优化实践
  • 6. Typescript 类型体操
  • [C++:类的默认成员函数——Lesson7.const成员函数]
  • 园区3D可视化数字孪生管理平台与 IBMS 智能化集成系统:打造智慧园区新范式​
  • 【Javaweb】Restful开发规范
  • 【C++】深入理解const 成员函数
  • 使用vscode自带指令查找有问题的插件
  • JAVA算法练习题day18
  • springboot3 exception 全局异常处理入门与实战
  • spring简单入门和项目创建
  • lVS 负载均衡技术
  • 【论文阅读】OpenDriveVLA:基于大型视觉语言动作模型的端到端自动驾驶
  • Redis 缓存更新策略与热点数据识别
  • 新手小白——Oracle新建表完成题目
  • 如何让百度快速收录网页如何让百度快速收录网页的方法
  • Bugku-1和0的故事
  • 微硕WINSOK N+P MOSFET WSD3067DN56,优化汽车智能雨刷系统
  • DeviceNet 转 Profinet:西门子 S7 - 1500 PLC 与欧姆龙伺服电机在汽车焊装生产线夹具快速切换定位的通讯配置案例
  • 探索鸿蒙应用开发:构建一个简单的音乐播放器
  • 人脸识别(具体版)
  • 4.10 顶点光源
  • 深度学习---PyTorch 神经网络工具箱