solon-ai-mcp,提供了各种 mcp 相关能力,支持 java8, java11, java17, java21, java24 。是 solon-ai 项目的重要组成部分,也可以嵌入到 springboot2, springboot3, jfinal, vert.x 等项目中使用。
依赖包:
xml
<dependency>
<groupId>org.noear</groupId>
<artifactId>solon-ai-mcp</artifactId>
<version>最新版</version>
</dependency>
1、看一个简单的 web 控制器
此控制器有两个方法:get_weather,获取天气;get_rainfall,获取降雨量。后面基于它进行快速改造演示。
java
@Mapping("/web/api")
@Controller
public class McpServerTool {
@Mapping("get_weather")
public String get_weather(String location) {
return "晴,14度";
}
@Mapping("get_rainfall")
public String get_rainfall(String location) {
return "555毫米";
}
}
2、改造方案1:复用 mvc 注解,并添加 @McpServerEndpoint
注解
在 mvc 注解基础上,给方法和参数添加描述信息 description
信息(只适合 solon-web 项目,它的注解带有 description
属性)。再添加 @McpServerEndpoint
注解
java
@McpServerEndpoint(sseEndpoint = "/mcp/sse")
@Mapping("/web/api")
@Controller
public class McpServerTool {
@Mapping(path="get_weather", description = "查询天气预报")
public String get_weather(@Param(description = "城市位置") String location) {
return "晴,14度";
}
@Mapping(path="get_rainfall", description = "查询城市降雨量")
public String get_rainfall(@Param(description = "城市位置") String location) {
return "555毫米";
}
}
这个方案的提醒说明:
@Mapping
(通用注解)相当于 ai 的@ToolMapping
(专用注解)@Param
(通用注解)相当于 ai 的@ToolParam
(专用注解)- 必须申明
description
属性(否则会异常提示) - 入参使用 json 基础支持类型(暂时不支持实体入参。比如:字符串,数字,布尔,日期)
3、改造方案2:在控制器上,添加完整的 Mcp 相关注解
这个方案也适合 springboot2-web、sprngboot3-web、spring-mvc 或 jfinal 等项目,原控制器的代码不用动(原来有没有注解,不影响)。就像添加 swagger 注解那样,添加 mcp 相关注解即可。
注解简单说明(?
表示可选属性):
注解 | 描述 |
---|---|
@ToolMapping(name?, description, returnDirect?, resultConverter?) |
工具映射 |
@ToolParam(name?, description, required?) |
工具的参数申明 |
改造后的代码:
java
@McpServerEndpoint(sseEndpoint = "/mcp/sse")
@Mapping("/web/api")
@RestController
public class McpServerTool {
@ToolMapping(description = "查询天气预报")
@GetMapping("get_weather")
public String get_weather(@ToolParam(description = "城市位置") String location) {
return "晴,14度";
}
@ToolMapping(description = "查询城市降雨量")
@GetMapping("get_rainfall")
public String get_rainfall(@ToolParam(description = "城市位置") String location) {
return "555毫米";
}
}
提醒说明:
- 入参使用 json 基础支持类型(暂时不支持实体入参。比如:字符串,数字,布尔,日期)
4、也可以转为本地的大模型工具提供者使用(ToolProvider)
上两个方案去掉 @McpServerEndpoint
注解,就不会发布为 MCP 服务端点。使用 MethodToolProvider 加载它,就能成为本地的工具提供者。
java
MethodToolProvider toolProvider = new MethodToolProvider(new McpServerTool());
var chatModel = ChatModel.of(...)
.defaultToolsAdd(toolProvider) //添加默认工具
.build();
chatModel.prompt("杭州今天的天气怎么样?")
.call();
5、附代码仓库
solon-ai(源码)
solon-ai-mcp-embedded-examples(嵌入示例)