找回密码
 立即注册
首页 业界区 业界 开发 Java MCP 就像写 Controller 一样简单,还支持 Jav ...

开发 Java MCP 就像写 Controller 一样简单,还支持 Java 8

忆雏闲 2026-1-24 13:15:00
在 AI 应用开发从“单机对话”迈向“群体智能(Agent)”的当下,MCP(Model Context Protocol) 协议的出现,为大模型连接外部世界统一了“插座”。
但,当 Anthropic 的 MCP 协议火遍 AI 圈时,很多 Java 开发者看了一眼官方 SDK 的环境要求(Java 17+)便望而却步。难道 Java 8、Java 11 的老项目注定要与 AI Agent 时代无缘吗?
Solon-AI 给出了截然不同的答案。 在这里,开发一个标准的 MCP Server,不需要你去研究复杂的 JSON-RPC 通讯逻辑,也不需要升级你的 JDK。只需要几个注解,就像写普通的 Web 控制器一样简单。
一、 为什么 Java 开发者需要 MCP?

在 MCP 出现之前,虽然各大模型都支持 Tool Call,但由于缺乏统一标准,开发者不得不针对不同厂商编写互不兼容的私有接口适配代码。MCP 的出现,为模型与工具之间建立了一套通用的“通讯语言”。
MCP 彻底改变了游戏规则:


  • 一次编写,到处运行:你写的 MCP Server 可以同时给 Claude Desktop、IDE 或你自己的 Solon 应用使用。
  • 生态复用:GitHub 上现成的 Python/Node.js MCP 工具,Java 开发者现在可以通过 Solon-AI 的 McpClient 瞬间“拿来主义”。
二、 Solon-AI:为 MCP 而生的 Java 框架

Solon-AI 是 Java 生态中率先深度集成 MCP 协议的开发框架。它不仅简化了服务端的构建,更通过高度抽象的客户端接口,让 Java 应用具备了强大的 AI 整合能力。
核心依赖:
  1. <dependency>
  2.     <groupId>org.noear</groupId>
  3.     solon-ai-mcp</artifactId>
  4. </dependency>
复制代码
1. 像写 Controller 一样写 Mcp Server

在 Solon-AI 中,你不需要研究复杂的 JSON-RPC 协议,也不需要手撸难以维护的原生 MCP Java SDK 代码。通过 @ToolMapping、@ResourceMapping 和 @PromptMapping,你可以将任何 Java 方法快速转变为 AI 可识别的工具。
  1. @McpServerEndpoint(name = "it-tools", channel = McpChannel.STREAMABLE, mcpEndpoint = "/mcp")
  2. public class MyMcpServer {
  3.     @ToolMapping(description = "查询服务器负载")
  4.     public String getServerLoad(@Param("serverId") String id, @Header("token") String token) {
  5.         return "Server " + id + " load is 15%";
  6.     }
  7. }
复制代码
提示:启动项目后,即可使用 McpClientProvider 或 Claude Desktop 连接端点进行测试。
2、除了注解开发外,支持“动态构建”:

对于需要动态加载工具的场景,Solon-AI 提供了灵活的 Builder 模式,支持在运行时编排 AI 技能。
  1. @Configuration
  2. public class McpServerConfig {
  3.     @Bean("mcp-weather")
  4.     public McpServerEndpointProvider serverEndpoint() {
  5.         McpServerEndpointProvider serverEndpoint = McpServerEndpointProvider.builder()
  6.                 .name("mcp-weather")
  7.                 .channel(McpChannel.STDIO)
  8.                 .build();
  9.                
  10.         FunctionToolDesc weatherTool = new FunctionToolDesc("get_weather")
  11.                 .description("获取指定城市的天气情况")
  12.                 .stringParamAdd("location", "根据用户提到的地点推测城市")
  13.                 .doHandle(map -> {
  14.                     return "24度";
  15.                 });
  16.         serverEndpoint.addTool(new MethodToolProvider(weatherTool));
  17.         return serverEndpoint;
  18.     }
  19. }
复制代码
3、强大的协议代理转换

这是 Solon-AI 的一大绝活:支持跨协议代理。例如,你可以将本地运行的 STDIO 工具通过 Solon 包装,转为更适合集群部署的 STREAMABLE_STATELESS(无状态流)传输。
  1. @McpServerEndpoint(channel = McpChannel.STREAMABLE_STATELESS, mcpEndpoint = "/mcp")
  2. public class McpServerTool implements ToolProvider {
  3.     private McpClientProvider stdioToolProvider = McpClientProvider.builder()
  4.             .channel(McpChannel.STDIO) //表示使用 stdio
  5.             .command("npx")
  6.             .args("-y", "@gitee/mcp-gitee@latest")
  7.             .addEnvVar("GITEE_API_BASE", "https://gitee.com/api/v5")
  8.             .addEnvVar("GITEE_ACCESS_TOKEN", "<your personal access token>")
  9.             .build();
  10.     @Override
  11.     public Collection<FunctionTool> getTools() {
  12.         return stdioToolProvider.getTools();
  13.     }
  14. }
复制代码
4、支持“反向通讯”,比如:Sampling 采样

MCP 不仅仅是“模型调工具”,还支持“工具调模型”。Solon-AI 完整支持了 Sampling(采样) 能力,允许服务端在执行工具时,反向请求客户端协助处理。
  1. //客户端
  2. public class SamplingClientDemo {
  3.     public void test() {
  4.         McpClientProvider clientProvider = McpClientProvider.builder()
  5.                 .url("http://localhost:8080/mcp")
  6.                 .customize(spec -> {
  7.                     spec.capabilities(McpSchema.ClientCapabilities.builder().sampling().build());
  8.                     spec.sampling(req -> Mono.just(McpSchema.CreateMessageResult.builder()
  9.                             .content(new McpSchema.TextContent("test"))
  10.                             .build()));
  11.                 })
  12.                 .build();
  13.         clientProvider.callToolAsText("demo", Utils.asMap("a", 1))
  14.                 .getContent();
  15.     }
  16. }
  17. //服务端
  18. @McpServerEndpoint(channel = McpChannel.STREAMABLE, mcpEndpoint = "/mcp")
  19. public class SamplingServerDemo {
  20.     //可以注入 exchange(实现反向通讯:服务端向客户端请求)
  21.     @ToolMapping(description = "复杂任务拆解")
  22.     public Mono<McpSchema.CreateMessageResult> demo(McpAsyncServerExchange exchange) {
  23.         // 服务端向客户端请求 AI 采样决策
  24.         return exchange.createMessage(McpSchema.CreateMessageRequest.builder()
  25.             .messages(Collections.singletonList(McpSchema.PromptMessage.builder()
  26.                 .role(McpSchema.Role.USER)
  27.                 .content(new McpSchema.TextContent("请帮我拆解这个任务..."))
  28.                 .build()))
  29.             .build());
  30.     }
  31. }
复制代码
5. “三合一”的超级客户端

McpClientProvider 实现了 Solon AI 体系内的 ToolProvider、ResourceProvider 和 PromptProvider。这意味着:连接一个 Server,即刻获得全量 AI 能力包。
  1. McpClientProvider clientProvider = McpClientProvider.builder()
  2.                 .channel(McpChannel.STREAMABLE)
  3.                 .url("http://localhost:8080/mcp")
  4.                 .build();
  5. //获取所有工具原语
  6. clientProvider.getTools();
  7. //获取所有模板原语
  8. clientProvider.getResources();
  9. //获取所有资源模板原语
  10. clientProvider.getResourceTemplates();
  11. //获取所有提示词原语
  12. clientProvider.getPrompts();
复制代码
为 ChatModel 赋能:
  1. ChatModel chatModel = ChatModel.of(apiUrl)
  2.         .defaultToolAdd(clientProvider) // 添加为默认工具
  3.         .build();
  4.         
  5. ReActAgent agent = ReActAgent.of(chatModel);
复制代码
为 ReActAgent 赋能:
  1. ChatModel chatModel = ChatModel.of(apiUrl)
  2.         .build();
  3.         
  4. ReActAgent agent = ReActAgent.of(chatModel)
  5.         .defaultToolAdd(clientProvider) //添加为默认工具
  6.         .build();
复制代码
三、生产级的稳健性

在生产环境下,连接的稳定性与响应速度至关重要:

  • 自愈能力:内置心跳检测(Ping),链路断开自动重连,确保 Agent 永不失联。
  • 高性能缓存:支持工具列表与资源元数据缓存,减少网络开销,让 AI 响应“秒开”。
  • 多通道支持:无论是跨进程的 STDIO 模式,还是跨网络的 STREAMABLE 模式,Solon-AI 都能丝滑切换。
  • Skill 赋能:通过 MCP 获取的原语可直接转化为 Solon AI Skills,构建高度模块化的 Agent 技能树。
四、借助 Skills 实现智能加载(智能分发)

通过 Solon AI Skills 的智能路由,你可以避免模型因工具过多而产生幻觉,同时注入本地业务指令。
  1. import org.noear.solon.ai.chat.skill.Skill;
  2. import org.noear.solon.ai.chat.skill.SkillDesc;
  3. import org.noear.solon.ai.mcp.McpChannel;
  4. import org.noear.solon.ai.mcp.client.McpClientProvider;
  5. public class McpSkillDemo {
  6.     public void test() {
  7.         // 1. 创建 MCP 客户端,从远端获取工具生态
  8.         // 这里假设远端 Server 提供了如 "restart_server", "query_log" 等运维工具
  9.         McpClientProvider devopsMcpProvider = McpClientProvider.builder()
  10.                 .channel(McpChannel.STREAMABLE)
  11.                 .url("http://devops-center:8080/mcp")
  12.                 .build();
  13.         // 2. 使用 SkillDesc 将 MCP 工具集包装成一个“智能运维技能”
  14.         Skill devopsSkill = SkillDesc.builder("devops-skill")
  15.                 .description("高级运维管理技能,支持服务器状态查询与故障处理")
  16.                
  17.                 // 智能分发:只有当用户提问包含“服务器”、“重启”、“日志”时才激活此技能
  18.                 .isSupported("服务器", "重启", "日志", "负载")
  19.                
  20.                 // 动态指令:为技能注入特殊的 System Prompt 引导
  21.                 .instruction(prompt -> {
  22.                     return "你现在是一名高级架构师。在执行重启操作前,请务必确认操作人的权限。";
  23.                 })
  24.                
  25.                 // 挂载工具:核心一步!直接将 MCP 获取的所有工具注入到该技能中
  26.                 .toolAdd(devopsMcpProvider)
  27.                
  28.                 // 钩子函数:当技能被挂载到会话时触发逻辑(如:记录审计日志)
  29.                 .onAttach(prompt -> {
  30.                     System.out.println("检测到运维相关指令,DevOps 技能已就绪...");
  31.                 })
  32.                 .build();
  33.         // 3. 应用技能:将技能交给 Agent
  34.         ChatModel chatModel = ChatModel.of(apiUrl).build();
  35.         
  36.         ReActAgent agent = ReActAgent.of(chatModel)
  37.                 .defaultSkillAdd(devopsSkill) // 添加包装后的技能
  38.                 .build();
  39.         // 此时 Agent 只有在聊到运维话题时,才会通过 MCP 协议去调用对应的远端工具
  40.         agent.prompt("帮我查一下 server-01 的负载情况").call();
  41.     }
  42. }
复制代码
五、 Solon-AI + MCP 的典型场景

场景 A:企业私有数据助手

通过 Solon-AI 构建一个 MCP Server,将企业的 ERP、CRM 系统通过 @ResourceMapping 暴露。AI 助手可以直接读取实时业务数据,而无需你手动编写复杂的数据抓取逻辑。
场景 B:跨语言工具链整合

你的团队可能有用 Python 写的算法脚本,现在只需将其包装成一个 MCP Server,Solon-AI 的客户端就能通过标准协议调用它,打破 Java 与 Python 的隔离。
场景 C:智能 IDE 与本地自动化

利用 Solon-AI 的 STDIO 通道,你可以编写 Java 程序作为本地插件,直接接入 Claude Desktop 或其他支持 MCP 的编辑器,实现用自然语言操控本地系统。
六、 开启你的 MCP 之旅

Solon-AI 不仅仅是在追赶趋势,它正在重新定义 Java 开发 AI 应用的体验。轻量、强大、兼容 Java 8 到 Java 25,这就是 Solon-AI。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

昨天 04:22

举报

您需要登录后才可以回帖 登录 | 立即注册