Solon v3.3.0

mcp - 服务端构建 sse 和 stdio 的区别

</> markdown

两种服务的区别,主要是 channel (通讯方式,或通道)配置的不同。其它都是一样的。

1、构建 stdio 服务

使用 channel 属性(默认是 sse),且一个进程内只能有一个 stdio 服务端点(否则会协议串流)。

@McpServerEndpoint(channel = McpChannel.STDIO) //表示使用 stdio
public class McpServerTool {
    @ToolMapping(description = "查询天气预报")
    public String get_weather(@ToolParam(description = "城市位置") String location) {
        return "晴,14度";
    }
}

Java 原生手动构建方式

McpServerEndpointProvider serverEndpoint = McpServerEndpointProvider.builder()
                .name("mcp-case1")
                .channel(McpChannel.STDIO)
                .build();

serverEndpoint.addTool(new MethodToolProvider(new McpServerTool()));

serverEndpoint.postStart();

开发 stdio 服务时,不能启用控制台的日志。否则,可能会串流。

2、构建 sse 服务

即然是 sse 服务,自然是构建在 web 服务的基础上。一般 mcp sse 服务的背后,是由 web 框架做为支持的。

开发方面比较简单(和 web mvc 差不多),配置服务端点的 sseEndpoint 属性即可(channel 默认已经是 sse)。

@McpServerEndpoint(sseEndpoint = "/mcp/case1/sse") 
public class McpServerTool1 {
    @ToolMapping(description = "查询天气预报")
    public String getWeather(@Param(description = "城市位置") String location) {
        return "晴,14度";
    }
}

//支持多个端点
@McpServerEndpoint(sseEndpoint = "/mcp/case2/sse") 
public class McpServerTool2 {
    @ToolMapping(description = "查询天气预报")
    public String getWeather(@Param(description = "城市位置") String location) {
        return "晴,14度";
    }
}

Java 原生手动构建方式

McpServerEndpointProvider serverEndpoint = McpServerEndpointProvider.builder()
                .name("mcp-case1")
                .sseEndpoint("/mcp/case1/sse")
                .build();

serverEndpoint.addTool(new MethodToolProvider(new McpServerTool1()));

serverEndpoint.postStart();