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

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(嵌入示例)

相关推荐
Boilermaker19926 小时前
[Java 并发编程] Synchronized 锁升级
java·开发语言
Cherry的跨界思维6 小时前
28、AI测试环境搭建与全栈工具实战:从本地到云平台的完整指南
java·人工智能·vue3·ai测试·ai全栈·测试全栈·ai测试全栈
alonewolf_997 小时前
JDK17新特性全面解析:从语法革新到模块化革命
java·开发语言·jvm·jdk
一嘴一个橘子7 小时前
spring-aop 的 基础使用(啥是增强类、切点、切面)- 2
java
sheji34167 小时前
【开题答辩全过程】以 中医药文化科普系统为例,包含答辩的问题和答案
java
恋爱绝缘体17 小时前
2020重学C++重构你的C++知识体系
java·开发语言·c++·算法·junit
wszy18098 小时前
新文章标签:让用户一眼发现最新内容
java·python·harmonyos
程序员佳佳8 小时前
【万字硬核】从零构建企业级AI中台:基于Vector Engine整合GPT-5.2、Sora2与Veo3的落地实践指南
人工智能·gpt·chatgpt·ai作画·aigc·api·ai编程
wszy18098 小时前
顶部标题栏的设计与实现:让用户知道自己在哪
java·python·react native·harmonyos
kaizq8 小时前
AI-MCP-SQLite-SSE本地服务及CherryStudio便捷应用
python·sqlite·llm·sse·mcp·cherry studio·fastmcp