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

 


相關推薦

2025-05-01

rk3labs/mcp-go介绍 github.com/mark3labs/mcp-go 是一个基于 Go 语言实现的 Model Context Protocol (MCP) 的开源项目,旨在为大语言模型(LLM)与外部系统的交互提供标准化协议支持。以下是综合搜索结果的关键信息: 1. 项目功能与定位 该

2025-04-01

器。在AI时代,人与服务器之间的对话可以通过自然语言实现。作为专注于模型上下文交互的开放性协议,MCP定义了AI模型调用外部工具、获取数据以及服务交互的具体方式,为深度的人机协作打开了新的想象空间。 1Panel MCP Serv

2025-03-20

效率。 查看项目中开启的 Issue 列表 让 Windsurf 实现 Gitee 上的 Issue Windsurf 成功实现 Gitee 上的 Issue 并创建 Pull Request,同时自动填写了 Pull Request 描述。 如果你曾经希望 AI 不仅能帮你写代码,还能理解、管理代

2025-04-22

器模式: STDIO模式(默认):通过标准输入/输出进行通信,非常适合与命令行工具和脚本集成。 SSE模式:作为服务器发送事件(Server-Sent Events)服务器在指定主机和端口上运行,支持基于 Web 和网络的集成。 Docker 支持

2025-04-29

细讲解如何通过“MaxKB+数据库MCP Server+QuickChart MCP Server”实现智能问数的功能。 方案概述 本方案以“学生考试成绩管理系统”为例进行说明,此系统包含了教师信息、学生信息、年级班级信息、考试成绩等信息内容。 MaxKB智

2025-03-26

SSE 仅支持服务器 → 客户端消息,无法灵活进行双向通信。 新的 “Streamable HTTP” 传输方式解决了这些问题,并增强了系统的可扩展性和灵活性。

2025-05-14

调整 solon-ai-mcp McpClientToolProvider 更名为 McpClientProvider(实现的接口变多了)) 优化 solon-ai 拆分为 solon-ai-core 和 solon-ai-model-dialects(方便适配与扩展) 优化 solon-ai 模型方言改为插件扩展方式 优化 nami 的编码处理 优化 nam

2025-05-07

过渡版本,让弃用的 API 与替代 API 共存,从而在 RC1 之前实现更顺畅的升级体验。 升级说明 可以使用 OpenRewrite 配方自动升级到 1.0.0-M8。此配方有助于应用此版本所需的许多代码更改。可以在Arconia Spring AI 迁移中找到配方和

2025-03-28

开源模型上下文协议 MCP 规范今天发布了新版本,一些主要变化: 基于 OAuth 2.1 的身份验证框架 用 Streamable HTTP 传输取代了以前的 HTTP+SSE 传输 支持 JSON-RPC 批处理 工具注释可以更好地描述工具行为 详情查看 http

2025-03-21

Gitee 正式发布官方 MCP Server 后,受到了许多开发者的关注,这种让 AI 助手深度参与协作开发的编码方式极大地提升了开发者们的工作效率。 许多开发者也来问马建仓,Cursor 能用 Gitee MCP 吗?当然没问题!今天马建仓就一行代码

2025-04-16

在不断涌现,当下代表性的 MCP(Model Context Protocol)标准实现的工具正逐渐成为连接大语言模型(LLM)与外部工具、数据源之间的关键桥梁。 自 2024 年底发布以来,MCP 已被广泛应用于 Claude Desktop、Cursor 等主流 AI 应用中,MCP Ser

2024-07-25

功能的服务器,然后逐步将之前的 A-1 和 A-2 下线,从而实现了无感知的更新。 开发者基于 ioGame 编写的项目模块,通常是条理清晰的,得益于框架对路由的合理设计,同时也为路由提供了优雅的访问权限控制。当我们整理好这

2024-08-09

展点 在构建器中配置 InOutManager 策略,框架内置了两个实现类,分别是 ofAbcAbc :in ABC,out ABC 的顺序,即编排时的顺序。 ofPipeline:in ABC,out CBA 的顺序,类似的 netty Pipeline 。(默认策略,如果不做任何设置,将使用该策略

2024-07-09

们提供了一个文本文档,即 TextDocumentGenerate,如果默认的实现满足不了当下需求,开发者也可以定制个性化的文档,如 json 格式的。 新增 DocumentGenerate 接口,开发者可利用该接口进行定制个性化的对接文档,如代码生成 ...等。