MCP 规范在 2025-03-26 版本中正式将 HTTP+SSE 传输标记为 deprecated,并以 Streamable HTTP(单端点 POST,响应可选升级为 SSE 流)作为远程传输的新标准。该传输在后续修订(含 2025-11-25)中沿用。
当前 client/core/mcp.go 的 MCPServer.Start 使用的是 mark3labs/mcp-go 的旧版 SSE 传输:
m.sseServer = server.NewSSEServer(
m.server,
server.WithBaseURL(fmt.Sprintf("http://%s:%d/mcp", host, port)),
)
IoM 的 go.mod 用的是 github.com/mark3labs/mcp-go v0.45.0,该库从 v0.30.0 起提供了 server.NewStreamableHTTPServer。两者包装的是同一个底层 *server.MCPServer,所以现有的 registerPrompts / registerCustomTools / registerCobraCommands(工具、资源、prompt 注册逻辑)一行都不用改,只需替换传输层。
建议把 Start 改为 Streamable HTTP:
func (m *MCPServer) Start(host string, port int) error {
m.streamServer = server.NewStreamableHTTPServer(
m.server,
server.WithEndpointPath("/mcp"),
)
go func() {
addr := fmt.Sprintf("%s:%d", host, port)
if err := m.streamServer.Start(addr); err != nil && err != http.ErrServerClosed {
logs.Log.Errorf("Failed to start MCP server: %v\n", err)
}
}()
return nil
}
MCP 规范在 2025-03-26 版本中正式将 HTTP+SSE 传输标记为 deprecated,并以 Streamable HTTP(单端点 POST,响应可选升级为 SSE 流)作为远程传输的新标准。该传输在后续修订(含 2025-11-25)中沿用。
当前 client/core/mcp.go 的 MCPServer.Start 使用的是 mark3labs/mcp-go 的旧版 SSE 传输:
IoM 的 go.mod 用的是 github.com/mark3labs/mcp-go v0.45.0,该库从 v0.30.0 起提供了 server.NewStreamableHTTPServer。两者包装的是同一个底层 *server.MCPServer,所以现有的 registerPrompts / registerCustomTools / registerCobraCommands(工具、资源、prompt 注册逻辑)一行都不用改,只需替换传输层。
建议把 Start 改为 Streamable HTTP: