SpringBoot3 使用 SolonMCP 开发 MCP
之前发了个 “《SpringBoot2 可以使用 SolonMCP 开发 MCP(江湖救急)》”。然后,有人问:SpringBoot3 能不能用 SolonMCP?
其实 SpringBoot3 可以使用 Spring AI 或者 Spring AI Alibaba(都有 MCP 功能)。
既然问了,就再发一个文。另外 SpringBoot3 使用 SolonMPC 和 SpringBoot2 的情况,差不多。只一个依赖包有不同。
1、SolonMCP 简介
SolonMCP(全称:solon-ai-mcp)是 solon ai 的一个扩展。支持内嵌到 jfinal,vert.x,springboot2,springboot3 等框架使用。
Maven 主要依赖包:
<dependency> <groupId>org.noear</groupId> <artifactId>solon-ai-mcp</artifactId> </dependency>
具体的示例参考:
- https://gitee.com/opensolon/solon-ai-mcp-embedded-examples/tree/main/solon-ai-embedded-springboot3
- https://gitee.com/opensolon/solon-ai-mcp-embedded-examples/tree/main/solon-ai-embedded-springboot3-newstyle
2、MCP 服务端开发
2.1、添加入口类 webapp.HelloApp
@SpringBootApplication public class HelloApp { public static void main(String[] args) { SpringApplication.run(HelloApp.class, args); }
2.2、添加个空接口 webapp.mcpserver.IMcpServerEndpoint
用于识别端点组件类
public interface IMcpServerEndpoint { }
2.3、添加 webapp.mcpserver.McpServerConfig
拖管 solon 的生命周期。收集 IMcpServerEndpoint 组件,并转为 McpServerEndpointProvider
@Configuration public class McpServerConfig { @PostConstruct public void start() { Solon.start(McpServerConfig.class, new String[]{"--cfg=mcpserver.yml"}); } @PreDestroy public void stop() { if (Solon.app() != null) { Solon.stopBlock(false, Solon.cfg().stopDelay()); } } @Bean public McpServerConfig init(List<IMcpServerEndpoint> serverEndpoints) { for (IMcpServerEndpoint serverEndpoint : serverEndpoints) { //这里注意一下,如果有代理的话需要用 AnnotationUtils 获取注解 McpServerEndpoint anno = AnnotationUtils.findAnnotation(serverEndpoint.getClass(), McpServerEndpoint.class); if (anno == null) { continue; } McpServerEndpointProvider serverEndpointProvider = McpServerEndpointProvider.builder() .from(serverEndpoint.getClass(), anno) .build(); serverEndpointProvider.addTool(new MethodToolProvider(serverEndpoint)); serverEndpointProvider.addResource(new MethodResourceProvider(serverEndpoint)); serverEndpointProvider.addPrompt(new MethodPromptProvider(serverEndpoint)); serverEndpointProvider.postStart(); //可以再把 serverEndpointProvider 手动转入 SpringBoot 容器 } //为了能让这个 init 能正常运行 return this; } @Bean public FilterRegistrationBean mcpServerFilter() { FilterRegistrationBean<SolonServletFilter> filter = new FilterRegistrationBean<>(); filter.setName("SolonFilter"); filter.addUrlPatterns("/mcp/*"); filter.setFilter(new SolonServletFilter()); return filter; } }
2.4、添加 webapp.mcpserver.tool.McpServer
(实现 Handler、IPlugin 接口)
这里是重点了,添加 mcp server 端点(支持多个端点)。这里是正常的 SpringBoot 组件开发了。
@Component //注意这个注解别用错了(solon 里也有同名的) @McpServerEndpoint(name="demo1", sseEndpoint = "/mcp/demo1/sse") public class McpServerTool implements IMcpServerEndpoint { // // 建议开启编译参数:-parameters (否则,最好再配置参数的 name) // @ToolMapping(description = "查询天气预报") public String getWeather(@Param(description = "城市位置") String location) { return "晴,14度"; } @ResourceMapping(uri = "config://app-version", description = "获取应用版本号") public String getAppVersion() { return "v3.2.0"; } @ResourceMapping(uri = "db://users/{user_id}/email", description = "根据用户ID查询邮箱") public String getEmail(@Param(description = "用户Id") String user_id) { return user_id + "@example.com"; } @PromptMapping(description = "生成关于某个主题的提问") public Collection<ChatMessage> askQuestion(@Param(description = "主题") String topic) { return Arrays.asList( ChatMessage.ofUser("请解释一下'" + topic + "'的概念?") ); } }
2.5、编译后运行
或者开发时,直接运行 HelloApp:main
方法
3、MCP 客户端开发
客户端简单些
public class McpClientTest { public static void main(String[] args) throws Exception { McpClientProvider toolProvider = McpClientProvider.builder() .apiUrl("http://localhost:8080/mcp/sse") .build(); //工具调用 Map<String, Object> map = Collections.singletonMap("location", "杭州"); String rst = toolProvider.callToolAsText("getWeather", map).getContent(); System.out.println(rst); assert "晴,14度".equals(rst); //资源读取 resourceContent = toolProvider.readResourceAsText("config://app-version").getContent(); System.out.println(resourceContent); } }
4、MCP 客户端作为 LLM(ChatModel) 的工具集使用
也比较简单。使用 ollama 做为 llm 提供者,方便本地测试。
public class McpClientTest { private static final String apiUrl = "http://127.0.0.1:11434/api/chat"; private static final String provider = "ollama"; private static final String model = "qwen2.5:1.5b"; //"llama3.2";//deepseek-r1:1.5b; public static void main(String[] args) throws Exception { //构建 mcp client McpClientProvider toolProvider = McpClientProvider.builder() .apiUrl("http://localhost:8080/mcp/sse") .build(); //构建 llm 接口 ChatModel chatModel = ChatModel.of(apiUrl) .provider(provider) .model(model) .defaultToolsAdd(toolProvider) //添加默认工具(这是 mcp client) .build(); //请求 ChatResponse resp = chatModel.prompt("杭州今天的天气怎么样?") .call(); System.out.println(resp.getMessage()); } }
5、SpringBoot3 和 SpringBoot2 使用 SolonMCP 有什么区别?
仅一个 servlet 的依赖包不同(由 java-ee 改名引起的)。SpringBoot3 使用 solon-web-servlet-jakarta
依赖包;SpringBoot2 则使用 solon-web-servlet-jakarta 依赖包。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
【最后今天】LFOSSA 技能焕新季 85 折限时福利活动即将结束!
Linux Foundation开源软件学园(LFOSSA) 于 5月7日至5月16日 推出LFOSSA 技能焕新季限时福利活动,全场 LF 官方认证考试及课程 85 折起,活动仅剩最后今天,机会不容错过!快速提升你的开源技能,抢跑AI新时代! 技能焕新季 · LF认证限时福利详情 活动时间:5月7日 - 5月16日(活动仅剩最后1天!) 适用产品:LF官方认证考试及课程 面向个人专属福利: 部分机构热门课程低至7折,添加 LFOSSA 官方微信,限时领取认证培训首节课程免费试听资格 面向企业专属福利(阶梯折扣): 1. 采购 5-20 个认证:享85折优惠 2. 采购 21-50 个认证:享8折优惠 3. 采购 50 个以上认证:联系官方客服,获取定制专属方案 有关LFOSSA 技能焕新季限时福利活动,可点击以下链接了解详情: 抢跑 AI 时代,焕新开源技能!LFOSSA 技能焕新季 85 折限时福利活动开启! 【最后2天】LFOSSA 技能焕新季|企业采购折扣限时福利活动即将截止,抓紧最后机会! 联系我们 如需体验认证培训课程免费试听首节课,或为贵单位定制认证学习路径以及批量采购方...
- 下一篇
🔥 Solon Ai Flow 编排开发框架发布预告(效果预览)
Solon Ai 在推出 Solon Ai Mcp 后,又将推出 Solon Ai Flow。 1、Solon Ai Flow 是个啥? Solon Ai Flow 是一个智能体编排开发框架。它是框架!不是工具,不是产品(这与市面上流行的工具和产品,有较大差别)。 使用 yaml 格式编排,很像 docker-compose 的观感。 2、发布预告 预计下周(2025年农历小满)发布首个版本。 3、效果预览 简单的聊天智能体 id: chat_case1 layout: - task: "@TextInput" meta: text: "你好" - task: "@ChatModel" meta: systemPrompt: "你是个聊天助手" stream: false chatConfig: # "@type": "org.noear.solon.ai.chat.ChatConfig" provider: "ollama" model: "qwen2.5:1.5b" apiUrl: "http://127.0.0.1:11434/api/chat" -...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- 2048小游戏-低调大师作品
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS关闭SELinux安全模块