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 传输方式。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
最新!AXUI 前端框架发布 v3.1.7 版本,优化了移动终端适配,处理了部分 BUG
2025-05-10更新 发布v3.1.7版本 核心js:https://unpkg.com/@codady/axui@3.1.7/dist/js/ax.js 核心css:https://unpkg.com/@codady/axui@3.1.7/dist/css/ax.css 打包文件:https://unpkg.com/@codady/axui@3.1.7/dist.zip 更新内容 对内置的none图片,去掉了“暂无图片”中文字样,在多语环境下更加通用。 修改Bubble气泡模块,将参数padding改为{enable,body,foot}。 修复checkboxes和radios模块属性content解析字符串为空的问题。 修复checkboxes的全选按钮无效的问题。 新增checkboxes全选按钮的形式,单个checkbox和radio也可全选。 修改checkbox中type=switch的样式,改小了尺寸。 修改checkbox组件,新增lang.on和lang.off属性,在type=switch时可能需要。 修复fieldTools.getVals方法从radio和...
- 下一篇
JPROCMS 1.4 发布,开源免费 Java cms 网站内容管理系统支持saas
发布了Springboot3-jdk17版本分支master-boot3 平台简介 Java 开源内容管理群系统 (java cms)、Java 建站系统。使用 SpringCloud 、SpringBoot、MyBatisPlus、FreeMarker、Vue3、ElementPlus 等技术开发。使用Apache-2.0开源协议,可免费用于商业网站。 可使用模板 (Freemarker)+ 标签或 API 方式制作网站群页面。支持自定义字段存储及字段可视化设计,支持自定义字段搜索。 技术上选择主流、先进、方便用户二次开发。设计上强调 “简单”、“灵活”,降低系统维护成本和二次开发难度。功能使用上也要求 “简单”,避免复杂的使用逻辑。 演示站前台:https://demo.jprocms.com 演示站后台:https://demo.jprocms.com/admin/index.html API 文档:https://demo.jprocms.com/doc.html 演示模板:https://gitee.com/jprocms/jprocms-template.git 管理后台 ...
相关文章
文章评论
共有0条评论来说两句吧...