Solon v3.3.0

mcp - 发布 Tool 服务,使用 Tool 服务

</> markdown

在 Hello World 的基础上,再构建一个真实的场景(天气预报的工具服务)

1、服务端(mcp-server)示例(发布工具服务)

跟在 Solon AI 里开发 Tool Call 很像。只需要在工具类上添加 @McpServerEndpoint 注解,就变成了 MPC 服务了(可以被“跨进程”或“远程”使用)。

@McpServerEndpoint(sseEndpoint = "/mcp/sse")
public class McpServerTool {
    //
    // 建议开启编译参数:-parameters (否则,要再配置参数的 name)
    //
    @ToolMapping(description = "查询天气预报")
    public String getWeather(@Param(description = "城市位置") String location) {
        return "晴,14度";
    }
}

public class McpServerApp {
    public static void main(String[] args) {
        //启动时,会扫描到 McpServerTool 类,并转为真实的 Mcp 服务。
        Solon.start(McpServerApp.class, args);
    }
}

比如,这是国家气象台,提供的一个天气 mcp tool 服务。就可以被各种 AI 应用集成。

2、客户端(mcp-client)示例(使用工具服务)

使用 McpClientProvider 可以快速使用工具服务。(也可以使用第三方的工具,或平台)

  • 直接调用(测试场景)
public void case1() {
    McpClientProvider clientProvider = McpClientProvider.builder()
                .apiUrl("http://localhost:8080/mcp/sse")
                .build();

    String rst = clientProvider.callToolAsText("getWeather", Map.of("location", "杭州"))
                               .getContent();
}
  • 集成到大模型使用(应用场景)

在 AI 应用里,可以快速集成上面国家气象台的天气 mcp tool 服务。

public void case2() {
    McpClientProvider clientProvider = McpClientProvider.builder()
                .apiUrl("http://localhost:8080/mcp/sse")
                .build();

    ChatModel chatModel = ChatModel.of("http://127.0.0.1:11434/api/chat")
                .provider("ollama")
                .model("qwen2.5:1.5b")
                .defaultToolsAdd(clientProvider) //添加为默认工具。和本地的 Tool 使用一样。
                .build();
    
    String rst = chatModel.prompt("杭州今天的天气怎么样?")
                .call()
                .getMessage()
                .getContent();
}

3、MCP 之于 AI 应用开发

  • 以前调用第三方接口,我们需要先封装成本地的 Tool 规范,再给 ChatModel。
  • 现在,第三方提供 Mcp Tool 服务(通过 MCP 协议)。可以直接整合给 ChatModel 用了。
  • 再进一步的话,能过“配置”就可以使用第三方的 Mcp Tool 服务