Java Solon-MCP 实现 MCP 实践全解析:SSE 与 STDIO 通信模式详解
参文参考自:https://blog.csdn.net/lingding_cn/article/details/147355620
一、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 传输方式。
Java Solon-MCP 实现 MCP 实践全解析:SSE 与 STDIO 通信模式详解的更多相关文章
- 《Java面试全解析》505道面试题详解
<Java面试全解析>是我在 GitChat 发布的一门电子书,全书总共有 15 万字和 505 道 Java 面试题解析,目前来说应该是最实用和最全的 Java 面试题解析了. 我本人是 ...
- “全栈2019”Java第一百一十三章:什么是回调?回调应用场景详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第一百零一章:局部内部类覆盖作用域内成员详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第三十一章:二维数组和多维数组详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- 史上最全的maven pom.xml文件教程详解
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- 史上最全的maven的pom.xml文件详解(转载)
此文出处:史上最全的maven的pom.xml文件详解——阿豪聊干货 <project xmlns="http://maven.apache.org/POM/4.0.0" x ...
- 《手把手教你》系列技巧篇(三十六)-java+ selenium自动化测试-单选和多选按钮操作-番外篇(详解教程)
1.简介 前边几篇文章是宏哥自己在本地弄了一个单选和多选的demo,然后又找了网上相关联的例子给小伙伴或童鞋们演示了一下如何自动化测试,这一篇宏哥在网上找了一个问卷调查,给小伙伴或童鞋们来演示一下.上 ...
- 基于Java的打包jar、war、ear包的作用与区别详解
本篇文章,小编为大家介绍,基于Java的打包jar.war.ear包的作用与区别详解.需要的朋友参考下 以最终客户的角度来看,JAR文件就是一种封装,他们不需要知道jar文件中有多少个.cla ...
- 数据结构图文解析之:二叉堆详解及C++模板实现
0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...
- Java开源生鲜电商平台-盈利模式详解(源码可下载)
Java开源生鲜电商平台-盈利模式详解(源码可下载) 该平台提供一个联合买家与卖家的一个平台.(类似淘宝购物,这里指的是食材的购买.) 平台有以下的盈利模式:(类似的平台有美菜网,食材网等) 1. 订 ...
随机推荐
- ABB工业机器人控制柜IRC5维修具体细节
对于ABB机器人维修工作,需要具备专业的知识和技能,同时遵循维修步骤和注意事项.通过加强预防措施和建议的实施,可以有效降低ABB工业机器人控制柜IRC5的故障率,提高ABB工业机器人的整体运行效率. ...
- js中的模糊搜索( 正则表达式)
此案例在vue中实现 搜索设备ID示例 <input type="text" name="" placeholder="搜索设备ID" ...
- Typecho的Joe主题开启文章导航目录树
引言 发现从typora复制过来的markdown代码中的目录导航[toc]语句没生效, 没有像typora或其他markdown编辑器生成导航目录树, 网上搜了下, 发现个解决方法, 在主题设置里插 ...
- vue - [02] 安装部署
Vue.js 是一个流行的前端JavaScript框架,用于构建用户界面. 001 || 通过CND快速开始 只需要在HTML文件中引入VUE的CDN链接即可 (1)创建HTML文件 <!DOC ...
- vmware workstation 17 pro激活密钥
vmware workstation 17 pro激活密钥,通用批量永久激活许可 17:JU090-6039P-08409-8J0QH-2YR7F 16:ZF3R0-FHED2-M80TY-8QYGC ...
- nginx 配置 vue History模式
解决 需要加一行 try_files $uri $uri/ /index.html;,其中 /index.html 是你自己的目录中的入口文件 server { listen [::]:80 defa ...
- python pandas csv 大文件 DataFrame转换为List
python 将大文件读取为 DataFrame 时,直接对整个文件进行读取会比较耗时,甚至内存还会不足. https://pandas.pydata.org/pandas-docs/stable/u ...
- go cobra实例讲解
概述 cobra 库是 golang 的一个开源第三方库,能够快速便捷的建立命令行应用程序. 优势:cobra 可以快速建立CLI程序,使我们更专注于命令需要处理的具体的业务逻辑. 举两个例子: hu ...
- 安装Realtek RTL8111/RTL8168网卡驱动详解(error~eth0:no such device)
昨天给linux系统重新编了个内核linux2.6.31.9,进入新版本的内核之后,发现机子上不了网了.好像每次新编译一个内核版本,网卡都会出问题,之前也写过解决网卡问题的blog,不过比较简单,这里 ...
- 分布式一致性算法-Paxos、Raft、ZAB、Gossip
为什么需要一致性 数据不能存在单个节点(主机)上,否则可能出现单点故障. 多个节点(主机)需要保证具有相同的数据. 一致性算法就是为了解决上面两个问题. 一致性算法的定义 一致性就是数据保持一致, ...