solon-ai-mcp [预览]
<dependency>
<groupId>org.noear</groupId>
<artifactId>solon-ai-mcp</artifactId>
<version>3.1.3-M6</version>
</dependency>
1、描述
solon-ai 的扩展插件,提供 mcp 协议支持(包括客户端和服务端)。学习参考 《教程 / Solon AI 开发》
2、服务端示例(发布工具服务)
引用插件并通过配置服务端“启用”后,组件的 ToolMapping 方法,会自动发布为 mcp 工具服务
solon.ai.mcp.server: # 对应的实体为 McpServerProperties(使用最新的 Solon Idea Plugin 会自动提示)
enabled: true # 默认为 false
sseEndpoint: "/mcp/sse" # 默认为 /mcp/sse
@Component
public class McpServerTool {
//
// 建议开启编译参数:-parameters (否则,要再配置参数的 name)
//
@ToolMapping(description = "查询天气预报")
public String getWeather(@ToolParam(description = "城市位置") String location) {
return "晴,14度";
}
}
public class McpServerApp {
public static void main(String[] args) {
Solon.start(McpServerApp.class, args);
}
}
3、客户端示例(使用工具服务)
客户端可以使用原生的 modelcontextprotocol 接口,也可以使用 McpClientToolProvider (更简单些)
- 直接调用
public void case1(){
McpClientToolProvider mcpClient = new McpClientToolProvider("http://localhost:8080/mcp/sse");
String rst = mcpClient.callToolAsText("getWeather", Map.of("location", "杭州"));
}
- 绑定给模型使用(结合配置与注入)
solon.ai:
chat:
demo:
apiUrl: "http://127.0.0.1:11434/api/chat"
provider: "ollama"
model: "qwen2.5:1.5b"
mcp:
client:
demo:
apiUrl: "http://localhost:8080/mcp/sse"
gitee:
apiUrl: "http://ai.gitee.demo/mcp/sse"
@Configuration
public class McpClientConfig {
@Bean
public McpClientToolProvider clientWrapper(@Inject("${solon.ai.mcp.client.demo}") McpClientToolProvider client) {
return client;
}
@Bean
public ChatModel chatModel(@Inject("${solon.ai.chat.demo}") ChatConfig chatConfig, McpClientToolProvider toolProvider) {
return ChatModel.of(chatConfig)
.defaultToolsAdd(toolProvider.getTools()) //添加默认工具
.build();
}
@Bean
public void case2( McpClientToolProvider toolProvider, ChatModel chatModel) {
ChatResponse resp = chatModel.prompt("杭州今天的天气怎么样?")
.options(options -> {
//转为工具集合用于绑定 //如果有 defaultToolsAdd,这里就不需要了
//options.toolsAdd(toolProvider.getTools());
//获取特定工具用于绑定
//options.toolsAdd(toolProvider.getTool("getWeather"));
})
.call();
}
}