Solon AI & MCP(支持 LTS)
Solon AI & MCP ,是 Solon 官方推出的 Java 智能体应用开发框架。旨在为 Java 开发者提供统一的接口抽象层,简化与 OpenAI、DeepSeek、QWen 等主流 AI 模型的集成流程,以及简化 Mcp 的开发体验。同时支持 Java 8 到 Java 25。
主要特点:
- 一套接口支持不同提供者、不同大模型调用(通过方言适配)
- 支持聊天模型(ChatModel)
- 支持 Prompt 和 PromptTemplate;支持会话记忆(ChatSession);支持 Function Call(或 Tool Call)
- 支持同步接口(call)与流式接口(stream);支持多态模型等
- 支持生成模型(GenerateModel)
- 支持 RAG
- 文档加载、分割(excel, html, markdown, pdf, ppt, word...)
- 矢量知识库(chroma、dashvector、elasticsearch、milvus、opensearch、qdrant、redis、tcvectordb...)
- 嵌入模型(EmbeddingModel) 、排序模型(RankingModel)
- 支持 MCP(McpServer、McpClient、McpProxy),支持 MCP_2025_06_18 版本协议
- 支持 stdio、sse、streamable、streamable_stateless 传输方式
- 支持 AI-Flow
- 支持 Spring、jFinal、Vert.x 等 Solon 以外的框架
- 等......更多内容,参考官网介绍
v3.8.0 更新
重要变化:
- mcp-java-sdk 升为 v0.17 (支持 2025-06-18 版本协议)
- 添加 mcp-server McpChannel.STREAMABLE_STATELESS 通道支持(集群友好)
- 添加 mcp-server 异步支持
具体更新:
- 添加 solon-ai FunctionPrompt:handleAsync(用于 mcp-server 异步支持)
- 添加 solon-ai FunctionResource:handleAsync(用于 mcp-server 异步支持)
- 添加 solon-ai FunctionTool:handleAsync(用于 mcp-server 异步支持)
- 添加 solon-ai-core ChatMessage:toNdjson,fromNdjson 方法(替代 ChatSession:toNdjson, loadNdjson),新方法机制上更自由
- 添加 solon-ai-core ToolSchemaUtil.jsonSchema Publisher 泛型支持
- 添加 solon-ai-core ToolSchemaUtil.isIgnoreOutputSchema Publisher 泛型支持
- 添加 solon-ai-mcp mcp-java-sdk v0.17 适配(支持 2025-06-18 版本协议)
- 添加 solon-ai-mcp mcp-server 异步支持
- 添加 solon-ai-mcp mcp-server streamable_stateless 支持
- 添加 solon-ai-mcp Tool,Resource,Prompt 对 org.reactivestreams.Publisher 异步返回支持
- 添加 solon-ai-mcp McpServerHost 服务宿主接口,用于隔离有状态与无状态服务
- 添加 solon-ai-mcp McpChannel.STREAMABLE_STATELESS (服务端)无状态会话
- 添加 solon-ai-mcp McpClientProvider:customize 方法(用于扩展 roots, sampling 等)
- 添加 solon-ai-mcp mcpServer McpAsyncServerExchange 注入支持(用于扩展 roots, sampling 等)
- 优化 solon-ai-dialect-openai claude 兼容性
- 优化 solon-ai-mcp mcp StreamableHttp 模式下 服务端正常返回时 客户端异常日志打印的情况
- 调整 solon-ai-mcp getResourceTemplates、getResources 不再共享注册
- 调整 solon-ai-mcp McpServerManager 内部接口更名为 McpPrimitivesRegistry (MCP 原语注册器)
- 调整 solon-ai-mcp McpClientProvider 默认不启用心跳机制(随着 mcp-sdk 的成熟,server 都有心跳机制了)
- mcp ToolCapabilities 添加 @JsonIgnoreProperties(ignoreUnknown = true)
新特性展示:1.MCP 无状态会话(STREAMABLE_STATELESS)和 2.CompletableFuture 异步MCP工具
@McpServerEndpoint(channel = McpChannel.STREAMABLE_STATELESS, mcpEndpoint = "/mcp1")
public class McpServerTool {
@ToolMapping(description = "查询天气预报", returnDirect = true)
public CompletableFuture<String> getWeather(@Param(description = "城市位置") String location) {
return CompletableFuture.completedFuture("晴,14度");
}
}
传输方式对应表:(服务端与客户端,须使用对应的传输方式才可通讯)
| 服务端 |
客户端 |
备注 |
| STDIO |
STDIO |
|
| SSE |
SSE |
|
| STREAMABLE |
STREAMABLE |
|
| STREAMABLE_STATELESS |
STREAMABLE |
对 server 集群很友好 |
- STREAMABLE_STATELESS 集群,不需要 ip_hash,但“原语”变化后无法通知 client
v3.7.4 更新(LTS 维护中)
- 添加 solon-ai-core ChatMessage:toNdjson,fromNdjson 方法(替代 ChatSession:toNdjson, loadNdjson),新方法机制上更自由
- 优化 solon-ai-mcp mcp StreamableHttp 模式下 服务端正常返回时 客户端异常日志打印的情况
v3.6.7 更新(LTS 维护中)
- 添加 solon-ai-core ChatMessage:toNdjson,fromNdjson 方法(替代 ChatSession:toNdjson, loadNdjson),新方法机制上更自由
技术预览
ChatModel chatModel = ChatModel.of(apiUrl).provider(provider).model(model);
//同步请求
chatModel.prompt("hello").call();
//流式请求
chatModel.prompt("hello").stream();
//MCP 服务端(支持无状态服务,支持异步返回)
@McpServerEndpoint(channel = McpChannel.STREAMABLE_STATELESS, mcpEndpoint = "/mcp")
public class McpServerTool {
//工具
@ToolMapping(description = "查询天气预报")
public Mono<String> getWeather(@Param(description = "城市位置") String location) {
return Mono.just("晴,14度");
}
//资源
@ResourceMapping(uri = "config://app-version", description = "获取应用版本号", mimeType = "text/config")
public String getAppVersion() {
return "v3.2.0";
}
//提示语
@PromptMapping(description = "生成关于某个主题的提问")
public Collection<ChatMessage> askQuestion(@Param(description = "主题") String topic) {
return Arrays.asList(
ChatMessage.ofUser("请解释一下'" + topic + "'的概念?")
);
}
}
//MCP 客户端
McpClientProvider clientProvider = McpClientProvider.builder()
.channel(McpChannel.STREAMABLE)
.apiUrl("http://localhost:8080/mcp")
.build();
//客户端与聊天模型集成
//::构建时集成(全局)
ChatModel chatModel = ChatModel.of(apiUrl).provider(provider) .model(model)
.defaultToolsAdd(clientProvider);
//::聊天时集成(单次)
chatModel.prompt("hello").options(o -> o.toolsAdd(clientProvider)).call();
项目仓库地址?
官网?