Skip to content

将 client MCP server 从废弃的 HTTP+SSE 升级到 Streamable HTTP #95

@ctlnaveen

Description

@ctlnaveen

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
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions