在 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 整合才能。

核心依附:

<dependency>    <groupId>org.noear</groupId>    <artifactId>solon-ai-mcp</artifactId></dependency>

1. 像写 Controller 一样写 Mcp Server

@McpServerEndpoint(name = "it-tools", channel = McpChannel.STREAMABLE, mcpEndpoint = "/mcp")public class MyMcpServer {    @ToolMapping(description = "查询办事器负载")    public String getServerLoad(@Param("serverId") String id, @Header("token") String token) {        return "Server " + id + " load is 15%";    }}

提示:启动项目后,即可应用 McpClientProvider 或 Claude Desktop 连接端点进行测试。

2、除了注解开辟外,支撑“动态构建”:

对于须要动态加载对象的场景,Solon-AI 供给了灵活的 Builder 模式,支撑在运行时编排 AI 技能。

@Configurationpublic class McpServerConfig {    @Bean("mcp-weather")    public McpServerEndpointProvider serverEndpoint() {        McpServerEndpointProvider serverEndpoint = McpServerEndpointProvider.builder()                .name("mcp-weather")                .channel(McpChannel.STDIO)                .build();                        FunctionToolDesc weatherTool = new FunctionToolDesc("get_weather")                .description("获取指定城市的气象情况")                .stringParamAdd("location", "根据用户提到的地点推想城市")                .doHandle(map -> {                    return "24度";                });        serverEndpoint.addTool(new MethodToolProvider(weatherTool));        return serverEndpoint;    }}

3、强大年夜的协定代理转换

这是 Solon-AI 的一大年夜绝活:支撑跨协定代理。例如,你可以将本地运行的 STDIO 对象经由过程 Solon 包装,转为更合适集群安排的 STREAMABLE_STATELESS(无状况流)传输。

@McpServerEndpoint(channel = McpChannel.STREAMABLE_STATELESS, mcpEndpoint = "/mcp")public class McpServerTool implements ToolProvider {    private McpClientProvider stdioToolProvider = McpClientProvider.builder()            .channel(McpChannel.STDIO) //表示应用 stdio            .command("npx")            .args("-y", "@gitee/mcp-gitee@latest")            .addEnvVar("GITEE_API_BASE", "https://gitee.com/api/v5")            .addEnvVar("GITEE_ACCESS_TOKEN", "")            .build();    @Override    public Collection getTools() {        return stdioToolProvider.getTools();    }}

4、支撑“反向通信”,比如:Sampling 采样

MCP 不仅仅是“模型调对象”,还支撑“对象调模型”。Solon-AI 完全支撑了 Sampling(采样) 才能,许可办事端在履行对象时,反向请求客户端协助处理。

//客户端public class SamplingClientDemo {    public void test() {        McpClientProvider clientProvider = McpClientProvider.builder()                .url("http://localhost:8080/mcp")                .customize(spec -> {                    spec.capabilities(McpSchema.ClientCapabilities.builder().sampling().build());                    spec.sampling(req -> Mono.just(McpSchema.CreateMessageResult.builder()                            .content(new McpSchema.TextContent("test"))                            .build()));                })                .build();        clientProvider.callToolAsText("demo", Utils.asMap("a", 1))                .getContent();    }}//办事端@McpServerEndpoint(channel = McpChannel.STREAMABLE, mcpEndpoint = "/mcp")public class SamplingServerDemo {    //可以注入 exchange(实现反向通信:办事端向客户端请求)    @ToolMapping(description = "复杂义务拆解")    public Mono demo(McpAsyncServerExchange exchange) {        // 办事端向客户端请求 AI 采样决定计划        return exchange.createMessage(McpSchema.CreateMessageRequest.builder()            .messages(Collections.singletonList(McpSchema.PromptMessage.builder()                .role(McpSchema.Role.USER)                .content(new McpSchema.TextContent("请帮我拆解这个义务..."))                .build()))            .build());    }}

5. “三合一”的超等客户端

经由过程 Solon AI Skills 的智能路由,你可以避免模型因对象过多而产生幻觉,同时注入本地营业指令。

在临盆情况下,连接的稳定性与响应速度至关重要:

  • 自愈才能:内置心跳检测(Ping),链路断开主动重连,确保 Agent 永不掉联。
  • 高机能缓存:支撑对象列表与资本元数据缓存,削减收集开销,让 AI 响应“秒开”。
  • 多通道支撑:无论是跨过程的 STDIO 模式,照样跨收集的 STREAMABLE 模式,Solon-AI 都能丝滑切换。
  • Skill 赋能:经由过程 MCP 获取的原语可直接转化为 Solon AI Skills,构建高度模块化的 Agent 技能树。

四、借助 Skills 实现智能加载(智能分发)

McpClientProvider 实现了 Solon AI 体系内的 ToolProviderResourceProvider  PromptProvider。这意味着:连接一个 Server,即刻获得全量 AI 才能包。

McpClientProvider clientProvider = McpClientProvider.builder()                .channel(McpChannel.STREAMABLE)                .url("http://localhost:8080/mcp")                .build();//获取所有对象原语clientProvider.getTools();//获取所有模板原语clientProvider.getResources();//获取所有资本模板原语clientProvider.getResourceTemplates();//获取所有提示词原语clientProvider.getPrompts();

在 Solon-AI 中,你不须要研究复杂的 JSON-RPC 协定,也不须要手撸难以保护的原生 MCP Java SDK 代码。经由过程 @ToolMapping@ResourceMapping  @PromptMapping,你可以将任何 Java 办法快速改变为 AI 可识其余对象。

为 ChatModel 赋能:

ChatModel chatModel = ChatModel.of(apiUrl)        .defaultToolAdd(clientProvider) // 添加为默认对象        .build();        ReActAgent agent = ReActAgent.of(chatModel);

为 ReActAgent 赋能:

ChatModel chatModel = ChatModel.of(apiUrl)        .build();        ReActAgent agent = ReActAgent.of(chatModel)        .defaultToolAdd(clientProvider) //添加为默认对象        .build();

三、临盆级的稳健性

import org.noear.solon.ai.chat.skill.Skill;import org.noear.solon.ai.chat.skill.SkillDesc;import org.noear.solon.ai.mcp.McpChannel;import org.noear.solon.ai.mcp.client.McpClientProvider;public class McpSkillDemo {    public void test() {        // 1. 创建 MCP 客户端,从远端获取对象生态        // 这里假设远端 Server 供给了如 "restart_server", "query_log" 等运维对象        McpClientProvider devopsMcpProvider = McpClientProvider.builder()                .channel(McpChannel.STREAMABLE)                .url("http://devops-center:8080/mcp")                .build();        // 2. 应用 SkillDesc 将 MCP 对象集包装成一个“智能运维技能”        Skill devopsSkill = SkillDesc.builder("devops-skill")                .description("高等运维治理技能,支撑办事器状况查询与故障处理")                                // 智能分发:只有当用户提问包含“办事器”、“重启”、“日记”时才激活此技能                .isSupported("办事器", "重启", "日记", "负载")                                // 动态指令:为技能注入特别的 System Prompt 引导                .instruction(prompt -> {                    return "你如今是一名高等架构师。在履行重启操作前,请务必确认操作人的权限。";                })                                // 挂载对象:核心一步!直接将 MCP 获取的所有对象注入到该技能中                .toolAdd(devopsMcpProvider)                                 // 钩子函数:当技能被挂载到会话时触发逻辑(如:记录审计日记)                .onAttach(prompt -> {                    System.out.println("检测到运维相干指令,DevOps 技能已就绪...");                })                .build();        // 3. 应用技能:将技能交给 Agent        ChatModel chatModel = ChatModel.of(apiUrl).build();                ReActAgent agent = ReActAgent.of(chatModel)                .defaultSkillAdd(devopsSkill) // 添加包装后的技能                .build();        // 此时 Agent 只有在聊到运维话题时,才会经由过程 MCP 协定去调用对应的远端对象        agent.prompt("帮我查一下 server-01 的负载情况").call();    }}

五、 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。

 

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部