关于MCP transport协议的一些说明
版权声明 本站原创文章 由 萌叔 发表 转载请注明 萌叔 | http://vearne.cc 0. 起因: 萌叔开发的某个MCP服务,在本地调试正常,然后当它在线上部署时,发出tool调用后,经常没有反应,使用 modelcontextprotocol/inspector 进行调试 发现 Error from MCP server: SseError: SSE error: Premature close MCP 服务器的 SSE 连接提前关闭错误。这个错误通常意味着客户端与服务器建立的 Server-Sent Events 长连接被意外中断了。 有可能MCP的Client和Server的连接被当成空闲连接给kill了。 这是否与协议的设计有某种联系,萌叔使用wireshark抓包发现了一些有趣的事情。 1. SSE 模式 HTTP+SSE 传输(需要 /sse和 /message两个端点) 并通过不同的 HTTP 方法来区分行为: POST 请求:客户端向该端点发送 JSON-RPC 消息(请求、通知或响应)。 GET 请求:客户端向该端点发起请求以建立 SSE(Server-Sent Events)流,用于接收服务端的长连接推送或流式数据。 DELETE 请求(可选):可用于终止会话。 1.1【连接1】 专门用于MCP-Server向MCP-Client推送数据 请求 GET /sse HTTP/1.1 accept: text/event-stream accept-encoding: gzip, deflate, br user-agent: node-fetch Host: localhost:8080 Connection: keep-alive 响应 注意:【连接1】是长连接,且Content-Type: text/event-stream,连接不会被关闭。 text/event-stream ...