找回密码
 立即注册
首页 业界区 业界 把 Java WebApi 快速转为 Mcp-Server(使用 Solon AI MC ...

把 Java WebApi 快速转为 Mcp-Server(使用 Solon AI MCP)

饮邺谲 前天 22:10
solon-ai-mcp,提供了各种 mcp 相关能力,支持 java8, java11, java17, java21, java24 。是 solon-ai 项目的重要组成部分,也可以嵌入到 springboot2, springboot3, jfinal, vert.x 等项目中使用。
依赖包:
  1. <dependency>
  2.     <groupId>org.noear</groupId>
  3.     solon-ai-mcp</artifactId>
  4.     <version>最新版</version>
  5. </dependency>
复制代码
1、看一个简单的 web 控制器

此控制器有两个方法:get_weather,获取天气;get_rainfall,获取降雨量。后面基于它进行快速改造演示。
  1. @Mapping("/web/api")
  2. @Controller
  3. public class McpServerTool {
  4.     @Mapping("get_weather")
  5.     public String get_weather(String location) {
  6.         return "晴,14度";
  7.     }
  8.    
  9.     @Mapping("get_rainfall")
  10.     public String get_rainfall(String location) {
  11.         return "555毫米";
  12.     }
  13. }
复制代码
2、改造方案1:复用 mvc 注解,并添加 @McpServerEndpoint 注解

在 mvc 注解基础上,给方法和参数添加描述信息 description 信息(只适合 solon-web 项目,它的注解带有 description 属性)。再添加  @McpServerEndpoint 注解
  1. @McpServerEndpoint(sseEndpoint = "/mcp/sse")
  2. @Mapping("/web/api")
  3. @Controller
  4. public class McpServerTool {
  5.     @Mapping(path="get_weather", description = "查询天气预报")
  6.     public String get_weather(@Param(description = "城市位置") String location) {
  7.         return "晴,14度";
  8.     }
  9.    
  10.     @Mapping(path="get_rainfall", description = "查询城市降雨量")
  11.     public String get_rainfall(@Param(description = "城市位置") String location) {
  12.         return "555毫米";
  13.     }
  14. }
复制代码
这个方案的提醒说明:

  • @Mapping (通用注解)相当于 ai 的 @ToolMapping(专用注解)
  • @Param (通用注解)相当于 ai 的 @ToolParam(专用注解)
  • 必须申明 description 属性(否则会异常提示)
3、改造方案2:在控制器上,添加完整的 Mcp 相关注解

这个方案也适合 springboot2-web、sprngboot3-web、spring-mvc 或 jfinal 等项目,原控制器的代码不用动(原来有没有注解,不影响)。就像添加 swagger 注解那样,添加 mcp 相关注解即可。
注解简单说明(? 表示可选属性):
注解描述@ToolMapping(name?, description, returnDirect?, resultConverter?) 工具映射@ToolParam(name?, description, required?)工具的参数申明改造后的代码:
  1. @McpServerEndpoint(sseEndpoint = "/mcp/sse")
  2. @Mapping("/web/api")
  3. @RestController
  4. public class McpServerTool {
  5.     @ToolMapping(description = "查询天气预报")
  6.     @GetMapping("get_weather")
  7.     public String get_weather(@ToolParam(description = "城市位置") String location) {
  8.         return "晴,14度";
  9.     }
  10.    
  11.     @ToolMapping(description = "查询城市降雨量")
  12.     @GetMapping("get_rainfall")
  13.     public String get_rainfall(@ToolParam(description = "城市位置") String location) {
  14.         return "555毫米";
  15.     }
  16. }
复制代码
4、也可以转为本地的大模型工具提供者使用(ToolProvider)

上两个方案去掉 @McpServerEndpoint 注解,就不会发布为 MCP 服务端点。使用 MethodToolProvider 加载它,就能成为本地的工具提供者。
  1. MethodToolProvider toolProvider = new MethodToolProvider(new McpServerTool());
  2. var chatModel = ChatModel.of(...)
  3.                 .defaultToolsAdd(toolProvider) //添加默认工具
  4.                 .build();
  5. chatModel.prompt("杭州今天的天气怎么样?")
  6.               .call();
复制代码
5、附代码仓库

solon-ai(源码)

  • https://gitee.com/opensolon/solon-ai
  • https://gitcode.com/opensolon/solon-ai
  • https://github.com/opensolon/solon-ai
solon-ai-mcp-embedded-examples(嵌入示例)

  • https://gitee.com/opensolon/solon-ai-mcp-embedded-examples
  • https://gitcode.com/opensolon/solon-ai-mcp-embedded-examples
  • https://github.com/opensolon/solon-ai-mcp-embedded-examples

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册