SpringBoot MCP 入门使用

随着AI的火爆,最近发现MCP在未来确实大有可为,作为一名javaer怎么可以落后在历史洪流呢,根据官网和cursor也从零开始体验一下自定义mcp server。以后可以根据自己业务场景做出各种适合自身业务的工具。
至于什么是MCP 可以到https://modelcontextprotocol.io/introduction看看,里面有非常详细的介绍,这里就不赘述了。
下面开始我们自己的第一个mcp server,按照各种demo 我这里也以获取当前天气和报警信息作为demo,这里会提供两个工具:

  • 根据经纬度获取天气,获取天气后会返回一个token信息
  • 根据token信息获取天气报警
    那下面开始我们的开发

第一步 初始化pom

新建项目,并且引入spirng-ai

    <dependencies>
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-mcp-server-webmvc-spring-boot-starter</artifactId>
        </dependency>
    </dependencies>

第二步 编写tools

getWeatherForecastByLocation:这里也是根据官方demo信息进行稍微改造,在获取天气的时候除了经纬度入参外,还需要传入一个期望值,这个值可选范围为aa和hh,主要是mock一些业务场景下入参是枚举类型的场景。
getAlerts:模拟业务场景中有流程上数据依赖的场景,这里的token入参信息是从第一步中获取的


@Service
public class WeatherService {


    /**
     * Get forecast for a specific latitude/longitude
     *
     * @param latitude  Latitude
     * @param longitude Longitude
     * @return The forecast for the given location
     * @throws RestClientException if the request fails
     */
    @Tool(description = "根据经纬度获取当前天气,expectValue可选值为[\"aa\",\"hh\"]")
    public String getWeatherForecastByLocation(@ToolParam(required = true, description = "请输入精度") double latitude,
                                               @ToolParam(required = true, description = "请输入纬度")
                                               double longitude
            , @ToolParam(required = true, description = "请输入期望值") String expectValue
    ) throws Exception {

        if (!"hh".equals(expectValue)) {
            throw new IllegalArgumentException("无效的期望值,可选值为如下: [\"aa\",\"hh\"]");
        }

        return "当前经纬度为 " + latitude + ":" + longitude + ", 会下雨哦 记得带伞,token=9527";
    }

    /**
     * Get alerts for a specific area
     *
     * @param state Area code. Two-letter US state code (e.g. CA, NY)
     * @return Human readable alert information
     * @throws RestClientException if the request fails
     */
    @Tool(description = "获取地区的天气预警信息"
    )
    public String getAlerts(String state, @ToolParam(required = true, description = "请输入token") String token) {
        Assert.isTrue("9527".equals(token), "无效的token值");
        return "请不要随意出门" + state;
    }


}

第三步 启动服务

第四步 配置cursor

这里使用cursor作为mcp client,在设置中添加上这里添加的mcp工具,这里选择的是sse协议
在这里插入图片描述
选择完成后,看到天气左边的小绿点表示连接成功了

第五步 使用

这里就按照正常的咨询场景,问一下杭州的天气,大模型就会根据当前的mcp server工具和需要的入参进行判断,发现天气这个server入参需要经纬度信息,于是就会自动获取城市对应的经纬度信息,并且调用天气这个mcp工具
在这里插入图片描述
在程序上我们写死了expectValue可选值为aa和hh,当第一次获取失败时会自动替换下一个值
在这里插入图片描述
!](https://i-blog.csdnimg.cn/direct/df393162d6934a58a0a8debc666a5892.png)

第二次访问的时候就正常了,不得不说大模型真溜了,返回值信息给出了token信息了,大模型还贴心的调用了天气预警信息,
在这里插入图片描述
不仅智能识别出了token参数,而且还会根据返回的信息给出适合的建议,不得不说真的是人工智能了。

总结

以上demo信息已经放到git:https://github.com/cmlbeliever/my-weather-mcp
如果对你有用,请给个star。

### Spring AI MCP Java SDK 概述 Spring AI MCP 是一种基于 Model Context Protocol (MCP) 的 Java 实现,旨在简化模型上下文协议的应用开发过程。通过该 SDK,开发者可以轻松构建支持 MCP 协议的服务端和客户端应用程序[^1]。 #### 核心功能 - **多传输选项**:支持多种通信方式,便于灵活集成到不同的技术栈中。 - **三层架构设计**: - **MCP 客户端**:负责向服务端发送请求并处理响应。 - **MCP 服务器**:提供 API 接口供客户端调用,并管理模型的上下文数据。 - **工具回调接口(ToolCallbackProvider)**:允许扩展自定义行为以适应特定需求[^2]。 --- ### 使用方法 以下是关于如何使用 Spring AI MCP Java SDK 构建服务端和客户端的具体指导: #### 1. 引入 Maven 依赖 在项目的 `pom.xml` 文件中添加以下依赖项来引入 Spring AI MCP SDK: ```xml <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-mcp</artifactId> <version>1.0.0-M6</version> </dependency> ``` #### 2. 配置 YML 文件 创建或修改项目中的 `application.yml` 或 `application.properties` 文件,设置必要的参数。例如: ```yaml spring: ai: mcp: server-url: http://localhost:8080/mcp-server client-id: my-client-id secret-key: my-secret-key ``` #### 3. 编写服务端代码 服务端需要实现 ToolCallbackProvider 并将其注册到容器中。示例代码如下: ```java import org.springframework.ai.mcp.ToolCallbackProvider; import org.springframework.stereotype.Component; @Component public class MyToolCallbackProvider implements ToolCallbackProvider { @Override public String handleRequest(String requestPayload) { // 自定义逻辑处理接收到的数据 return "Response from tool callback provider"; } } ``` 同时,在控制器类中暴露 RESTful API 来接收来自客户端的请求: ```java import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/mcp-server") public class McpServerController { private final ToolCallbackProvider toolCallbackProvider; public McpServerController(ToolCallbackProvider toolCallbackProvider) { this.toolCallbackProvider = toolCallbackProvider; } @PostMapping("/process") public String process(@RequestBody String payload) { return toolCallbackProvider.handleRequest(payload); } } ``` #### 4. 编写客户端代码 客户端可以通过简单的 HTTP 请求与服务端交互。下面展示了一个基本的 Controller 示例: ```java import org.springframework.beans.factory.annotation.Value; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import org.springframework.web.client.RestTemplate; @RestController @RequestMapping("/mcp-client") public class McpClientController { private final RestTemplate restTemplate; @Value("${spring.ai.mcp.server-url}") private String serverUrl; public McpClientController(RestTemplate restTemplate) { this.restTemplate = restTemplate; } @GetMapping("/send-request") public ResponseEntity<String> sendRequest() { String url = serverUrl + "/process"; String requestBody = "{\"key\":\"value\"}"; return restTemplate.postForEntity(url, requestBody, String.class); } } ``` --- ### 总结 Spring AI MCP 提供了一套完整的解决方案,帮助开发者快速搭建基于 MCP 协议的应用程序。无论是作为服务提供商还是消费者角色,都可以借助其强大的功能模块完成复杂的业务场景需求。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值