1.概述
mcp 是什么,mcp 实际上是 model context protocol 的简称,意思是用一个标准协议,支持工具调用。
mcp ai 很火的概念,spring ai 已经支持了 mcp ,mcp 源于 工具调用,但是 我们在开发过程中会有一些 通用的方法,不需要反复来写,那么 mcp server 就应运而生了,比如我们可以写一个服务,将一些公共的方法 发布为一个服务,那么就可以实现公用。
我们需要做两个事情
1.实现mcp server
2.实现mcp client
2.如何实现一个mcp server
目前 mcp server 有两种实现方式,一种是 stdio,一种是sse
stdio 是进程内的实现方式,这种一般在客户端工具使用的比较多,这里我们只谈 sse.
sse 也有两种方式
- webmvc 同步调用方式
- webflux 异步调用方式
2.1 使用 webmvc 方式实现
- 我们新建项目,增加依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-mcp-server-webmvc</artifactId></dependency>
- 增加工具类
@Service
public class McpService {@Tool(description = "查询某个地区的人数")public static String getCountByArea(String area) {return area +"人数为:" + RandomNumberGenerator.generateRandomNumber();}@Tool(description = "这是一个帮人预测运势的功能,需要提供姓名 及 人的出生年月日,使用格式为 年-月-日 ")public static String suanming(String name, String birthday) {String result = name +"出生年 :" + birthday+ " 运势为:" + FortuneTeller.getRandomFortune();return result;}@Tool(description = "查询某个地区的天气")public static String getTianqiByArea(String area) {return area +"天气为:" +FortuneTeller.getRandomWeather();}}
这里就是需我们将需要发布的方法增加 @Tool 注解,这里需要写清楚每个方法的作用,及限制。
- 增加一个mcp 配置类
import com.redxun.mcpmvc.service.McpService;
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 McpConfig {@Beanpublic ToolCallbackProvider toolProvider(McpService mcpService) {return MethodToolCallbackProvider.builder().toolObjects(mcpService).build();}}
- 增加配置 application.yml
spring:ai:mcp:server:stdio: falsename: webmvc-mcp-serverversion: 1.0.0type: SYNCinstructions: "这个服务器提供1.运势预测,2.天气查询,3.人数查询等服务"sse-endpoint: /mcp/ssecapabilities:tool: trueresource: trueprompt: truecompletion: true