当前位置: 首页 > news >正文

Java Solon-MCP 实现 MCP 实践全解析:SSE 与 STDIO 通信模式详解

一、MCP简介

MCP(Model Context Protocol,模型上下文协议)是由Anthropic公司于2024年推出的开放标准,旨在统一AI模型与外部数据源、工具之间的通信方式。MCP提供了一套规范化的接口,使大语言模型(LLM)能够更便捷地与各类外部工具和资源进行交互。

通俗点讲是:

一个专属的 RPC 协议

MCP的核心价值在于:

  • 标准化接口:为AI模型提供统一的工具发现和使用接口
  • 安全通信:定义了一套安全的模型与工具之间的通信协议
  • 跨平台兼容:适用于不同AI提供商的模型
  • 提升AI能力:让AI能够访问最新数据和执行复杂操作

二、Solon-MCP 简介

Solon-MCP(全名 Solon-AI-MCP)是一个基于 Java 的高级框架,专为构建 MCP 服务器而设计。它极大简化了 MCP 服务器的开发流程,让开发者能够以最小的代码量创建功能强大的MCP服务器。

Solon-MCP 的主要特点包括:

  • 简洁的 API:通过注解形式,简化MCP服务器的创建
  • 丰富的功能:支持工具(Tools)、资源(Resources)、提示模板(Prompts)等MCP核心元素
  • 多种传输方式:支持 STDIO 和 SSE 等不同传输协议
  • 类型安全:利用 Java 的类型提示,自动生成 MCP 协议所需的模式定义
  • 内置图像处理:支持图像数据的自动格式转换和处理
  • 使用 Solon-MCP,开发者可以专注于业务逻辑,而不必过多关注底层协议细节。

三、Java Solon-MCP 实现 STDIO 方式

(1)基本示例

下面是一个使用 Solon-MCP 实现 STDIO 通信方式的基本示例,创建一个简单的计算器工具 CalculatorTools:

@McpServerEndpoint(channel = McpChannel.STDIO)
public class CalculatorTools {@ToolMapping(description = "将两个数字相加")public int add(@Param int a, @Param int b) {return a + b;}@ToolMapping(description = "从第一个数中减去第二个数")public int subtract(@Param int a, @Param int b) {return a - b;}@ToolMapping(description = "将两个数相乘")public int multiply(@Param int a, @Param int b) {return a * b;}@ToolMapping(description = "将第一个数除以第二个数")public float divide(@Param float a, @Param float b) {return a / b;}
}

在这个示例中,我们:

  • 创建了一个名为 CalculatorTools 的 MCP 服务器实例
  • 使用 @ToolMapping 注解定义了四个计算工具
  • 通过 @McpServerEndpoint(channel = McpChannel.STDIO) 以 STDIO 模式启动服务器

4.2 运行和使用

(先打包成 jar 胖包)运行 STDIO 模式的 MCP 服务器:

java -jar demo.jar

在这种模式下,服务器将等待标准输入上的请求,然后通过标准输出返回响应。所有支持 STDIO 模式的 MCP 客户端(或工具,或中间件),都可以连接使用。

五、Java Solon-MCP 实现 SSE 方式

5.1 基本示例

下面是使用 Solon-MCP 实现 SSE 通信方式的示例,创建一个简单的天气服务:

@McpServerEndpoint(sseEndpoint = "/mcp/sse")
public class WeatherTools {@ToolMapping(description = "获取指定城市的当前天气")public String get_weather(@Param String city) {return "{city: '" + city + "', temperature:[10,25], condition:['sunny', 'clear', 'hot'], unit:celsius}";}//给前端用,需要严格的 json 格式@Produces(MimeType.APPLICATION_JSON_VALUE)@ResourceMapping(uri = "weather://cities", description = "获取所有可用的城市列表")public List<String> get_available_cities() {return Arrays.asList("Tokyo", "Sydney", "Tokyo");}@ResourceMapping(uri = "weather://forecast/{city}", description = "获取指定城市的天气预报资源")public String get_forecast(@Param String city) {return "{city: '" + city + "', temperature:[10,25], condition:['sunny', 'clear', 'hot'], unit:celsius}";}
}

在这个示例中:

  • 我们创建了一个名为 “Weather Service” 的 MCP 服务器
  • 定义了一个 get_weather 工具函数,用于获取城市的当前天气
  • 添加了两个资源:一个返回所有可用城市的列表,另一个返回指定城市的天气预报
  • 通过指定 sseEndpoint 以 SSE 模式启动服务器

5.2 运行和使用

运行 SSE 模式的 MCP 服务器:

java -jar demo.jar

服务器将在指定端口(默认为 8080)启动,并监听HTTP连接。您可以通过浏览器访问:

http://localhost:8080/mcp/sse

要与此服务器交互,可以使用支持 SSE 传输的 MCP 客户端,或者使用如下 Java 代码创建一个简单的客户端:

public void test() {McpClientProvider clientProvider = McpClientProvider.builder().apiUrl("http://localhost:8080/mcp/sse").build();String rst1 = clientProvider.callToolAsText("get_weather", Map.of("city", "杭州")).getContent();String rst2 = clientProvider.readResourceAsText("weather://cities").getContent();
}

六、总结

Java Solon-MCP 为开发者提供了一种简单高效的方式来构建 MCP 服务器,无论是使用 STDIO 还是 SSE 传输方式。

http://www.xdnf.cn/news/393013.html

相关文章:

  • 深入剖析卷积神经网络之卷积层:原理、类型与优化策略
  • Baklib内容管理平台的核心组成是什么?
  • SpringBoot 自动装配原理 自定义一个 starter
  • Android架构模式推荐及分析和MVC架构模式制作一个简单的底部tab切换
  • 嵌入式学习笔记 - STM32 ADC,多重转换,内部参考电压,
  • linux基础操作4------(权限管理)
  • 产业带数据采集方案:1688 API 接口开发与实时数据解析实践
  • 【人工智能】 大模型训练的艺术:从数据到智能的飞跃
  • 【RP2350】香瓜树莓派RP2350之Delay延时
  • 基于SpringBoot的在线教育管理系统
  • spring
  • Python工具链UV整合环境管理
  • 国内外主流AI编程工具全方位对比分析(截至2025年5月)
  • SpringCloud Gateway知识点整理和全局过滤器实现
  • Python中,async和with结合使用,有什么好处?
  • redis数据结构-07(SADD、SREM、SMEMBERS)
  • c++STL-string的模拟实现
  • 谷歌与微软的AI战争:搜索、云服务与生态布局
  • 【Part 2安卓原生360°VR播放器开发实战】第四节|安卓VR播放器性能优化与设备适配
  • JVM调优-重启CPU飙高优化
  • SQlite数据库
  • 优化理赔数据同步机制:从4小时延迟降至15分钟
  • Day22 Kaggle泰坦尼克号训练实战
  • java加强 -List集合
  • LeetCode百题刷003(449周赛一二题)
  • 文件包含3
  • Qt 信号与槽及元对象系统
  • 判断两台设备是否在同一局域网内的具体方法
  • Unity 红点系统
  • Rockchip RK3308 开发(二)