mcp - 服务端构建 sse 和 stdio 的区别
两种服务的区别,主要是 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();