SpringBoot2 可以使用 SolonMCP 开发 MCP(江湖救急)
MCP 官方的 java-sdk 目前要求 java17+(直接使用 sdk 也比较复杂)。Spring-AI(有 MCP 内容)也是要求 java17+。
SpringBoot2 怎么办?
使用 SolonMCP,可以支持 java8、java11、java17、java21 开发,可以内嵌到 SpringMVC 和 SpringBoot2 Web 里。
1、SolonMCP 简介
SolonMCP(全称:solon-ai-mcp)是 solon 的一个扩展。支持内嵌到 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-springboot2
- 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());
}
}
关注公众号
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
谷歌搜索主页测试用 AI Mode 取代「手气不错」按钮
谷歌搜索主页正在测试用 AI Mode 取代 I’m Feeling Lucky(手气不错)按钮。 谷歌此前曾表示,部分美国用户将会在 Google 搜索服务中看到 AI Mode 选项。 对于谷歌搜索最新的变更,谷歌发言人 Ashley Thompson 表示这只是众多实验之一,该公司经常对用户测试以不同的方式访问有用的功能,但经过测试的产品并不总是会广泛推出。 因此暂时还不清楚谷歌是否真的考虑用 AI Mode 去取代经典的 I’m Feeling Lucky 按钮。 “AI 模式”(AI Mode)是谷歌搜索的新功能,在该模式下,用户可以提出更复杂的问题,并基于搜索结果,AI 生成更详细、更直观的答案。 谷歌表示,AI 模式提供更高级的推理、思考和多模态能力,帮助用户更高效地获取信息。 谷歌表示,以往用户在处理复杂问题时,往往需要多次搜索才能解决,而 “AI 模式” 能够解决这个痛点。
-
下一篇
WizardLM 团队加入腾讯混元
前微软北京AI研究团队WizardLM的核心成员Can Xu在社交媒体上宣布,他与WizardLM团队已离开微软,并加入了腾讯混元(Tencent Hunyuan)团队。他们将继续致力于推动大型语言模型(LLM)的训练技术发展,并构建更优质的AI模型。 Can Xu提及,腾讯最新的Hunyuan-Turbos模型在lmarena.ai(原lmsys.org)的排行榜上取得了显著进展,整体排名第八,并在硬核、编码、数学等多个关键类别中位列前十,这标志着新团队在新征程中的良好开端。 WizardLM团队以其在指令遵循和复杂推理方面的模型微调技术而闻名,其WizardLM和WizardCoder系列模型在开源社区具有广泛影响力。此次加入腾讯,预计将增强腾讯在自研大模型领域的实力。 推荐阅读 腾讯重构混元大模型研发体系,加大 AI 投入 腾讯混元自研深度思考模型「T1」发布 腾讯混元新一代快思考模型 Turbo S 发布 前微软亚研院视觉专家胡瀚加入腾讯,负责混元多模态大模型
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- MySQL数据库中FOR UPDATE的使用
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Linux系统CentOS6、CentOS7手动修改IP地址
- 设置Eclipse缩进为4个空格,增强代码规范
- Docker容器配置,解决镜像无法拉取问题
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS8编译安装MySQL8.0.19

微信收款码
支付宝收款码