`ping` and `logging/setLevel` still sent for protocol 2026-07-28

Đang mở
#1,518 1 bình luận 0 reaction 1 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

@nahapetyan-serob đang làm issue này rồi.

Từ ngày 13/11/2026.

Đánh giá

Độ khó
3/5
Thời gian dự kiến
1-2 ngày
Mức phù hợp với người mới
65/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
go
Lĩnh vực
api, backend

Hướng nghiên cứu

Start in the client session methods ClientSession.Ping and ClientSession.SetLoggingLevel, then read the keepalive loop and the protocol-version negotiation path. Check how other requests handle protocol metadata and how server.go rejects removed methods. Done means these calls and keepalive do not send unsupported methods for protocol 2026-07-28, and the session remains usable afterward.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

Checklist
  • I searched the existing issues, and this has not been reported before.
  • This is a real problem that I ran into myself, using the latest release of the SDK.
  • I ran into it in a production system, not in a toy example, a benchmark, or an automated or AI-driven scan of the code.
  • I (a human) examined the relevant SDK code, and wrote or reviewed every line of this report. It is not unreviewed AI output.
  • This report is brief and concise, and sticks to the facts needed to understand the problem.
What happened?

SEP-2575 (protocol 2026-07-28) removed ping and logging/setLevel. The SDK's own server rejects them on the new protocol (server.go, the case methodInitialize, methodPing, ..., methodSetLevel branch). On the client side, however, ClientSession.Ping and ClientSession.SetLoggingLevel still send them on a session that negotiated 2026-07-28:

  • the Mcp-Protocol-Version: 2026-07-28 header is set (the streamable transport falls back to the negotiated version);
  • unlike ListTools, CallTool, etc., neither method calls injectRequestMeta, so the body has no params._meta envelope. Ping goes out as {"jsonrpc":"2.0","id":N,"method":"ping"}.

A strict 2026-07-28 server such as python mcp 2.3.0 answers HTTP 400 / -32602 ("params._meta must be an object carrying the required 'io.modelcontextprotocol/protocolVersion' and 'io.modelcontextprotocol/clientCapabilities' envelope keys"). With the envelope present it answers HTTP 404 / -32601. In both cases streamableClientConn.Write treats the non-2xx as fatal and calls c.fail(err), so the whole session is closed. Every later request fails with client is closing: sending "ping": ... Bad Request.

Anything that pings for liveness or keepalive (for example ClientOptions.KeepAlive, or an application health check) therefore kills a healthy session against such servers.

Reproduce
See below.

Expected

On a session with ProtocolVersion >= 2026-07-28, Ping and SetLoggingLevel should not put a removed method on the wire. Returning a client-side error, for example "ping is not supported in protocol 2026-07-28", would let callers fall back. The keepalive loop should likewise not use ping on such sessions. Adding _meta alone would not fix this, because the methods no longer exist and the server answers 404, which also closes the session.

Workaround

Check sess.InitializeResult().ProtocolVersion and, on 2026-07-28 sessions, use a supported request (for example tools/list) for liveness, and skip SetLoggingLevel.

How to reproduce
1. Run a python `mcp` 2.3.0 server (for example FastMCP 4.0.11, `http_app(stateless_http=True)`).

2. Connect with go-sdk: `server/discover` succeeds and `2026-07-28` is negotiated.

3. `sess.ListTools(ctx, nil)` succeeds.

4. `sess.Ping(ctx, nil)` returns `... envelope keys: Bad Request`.

5. `sess.ListTools(ctx, nil)` now returns `connection closed: ... client is closing ...`.
Where did you hit this?

In production at work.

Go MCP SDK version

1.7

Go version

latest

Logs
No logs available.
Ngôn ngữ chính
Go
Star
5.3k
Fork
614
Merge trung bình
23 giờ 55 phút
Pull request đã merge (30 ngày)
62

Chuẩn bị môi trường

Mở trong Codespaces

Khởi chạy dev container của dự án ngay trên trình duyệt, bằng tài khoản GitHub của bạn.

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của modelcontextprotocol/go-sdk

Tất cả issue của modelcontextprotocol/go-sdk

Issue tương tự

Thêm issue về Go

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.