mcp: Client.Connect never falls back to initialize when a stdio server ignores server/discover
I maintainer di solito rispondono entro 1 giorno
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 45/100
Direzione di ricerca
Start at Client.Connect and the ClientSessionOptions handling for the server/discover probe, then reproduce the timeout with the silent Python stdio server described in the issue. Review the API decision around DiscoverTimeout or a transport-specific default; done means a silent handshake-era server reaches initialize instead of waiting for the caller context to expire.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Describe the bug
For protocol ≥ 2026-07-28, Client.Connect sends server/discover first and falls back to initialize on an error, or on a non-modern error from the server. Some handshake-era stdio servers silently ignore requests they don't recognize before initialize, and the stdio transport spec permits that. With such a server, server/discover never gets a reply, so Connect blocks until the caller's context ends and then fails. It never reaches the initialize fallback.
Setting ClientSessionOptions{ProtocolVersion: "2025-11-25"} connects immediately, but then the client can't use 2026-07-28 with any server.
To Reproduce
A stdio server that only answers initialize and tools/list and drops everything else:
import sys, json
for line in sys.stdin:
m = json.loads(line)
if m.get("method") == "initialize":
r = {"protocolVersion": "2025-11-25", "capabilities": {"tools": {}}, "serverInfo": {"name": "silent", "version": "1"}}
elif m.get("method") == "tools/list":
r = {"tools": []}
else:
continue
print(json.dumps({"jsonrpc": "2.0", "id": m["id"], "result": r}), flush=True)
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
_, err := client.Connect(ctx, &mcp.CommandTransport{Command: exec.Command("python3", "silent.py")}, nil)
// v1.8.0 and main at 53effc0: returns after 5s with context deadline exceeded
Expected behavior
This needs an API decision, so raising it before any PR. One option: bound the discover probe and treat "no reply in time" as a handshake-era server on transports where silence is possible, e.g. ClientSessionOptions.DiscoverTimeout, or a short default for CommandTransport.
Additional context
Found while moving PromptKit's MCP client onto go-sdk v1.8.0 (AltairaLabs/PromptKit#2141). We work around it by restarting the stdio server and connecting with the handshake-era protocol version when discover times out: client.go. Our interop matrix runs the silent server above as a fixture: silent_stdio.py.
- Lingua principale
- Go
- Stelle
- 5.2k
- Fork
- 583
- Merge medio
- 2g 1h
- PR unite (30g)
- 55
Preparare l'ambiente
Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di modelcontextprotocol/go-sdk
-
Session-lifecycle bookkeeping logs at info, spamming multiple log lines per request on stateless streamable HTTPForse già presa @anneheartrecord l’ha presa 51 giorni fa. ApertaP3
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
modelcontextprotocol/go-sdk#1204 · 1 reazione ·
I maintainer di solito rispondono entro 1 giorno
-
Expose generic `SendNotification` on `ServerSession` for custom protocol extensionsForse già presa @ajuijas l’ha presa 216 giorni fa. Apertaneeds investigation
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
modelcontextprotocol/go-sdk#745 · 13 commenti · 1 reazione ·
I maintainer di solito rispondono entro 1 giorno
-
mcp: a property with an array "type" (any pointer field from jsonschema.For) disables x-mcp-header handling for the whole toolForse già presa @jay23606 l’ha presa 1 giorno fa. Aperta
Difficoltà 3/5 1-2 giorni Idoneità per principianti 50/100
modelcontextprotocol/go-sdk#1406 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
jsonrpc: decimal and exponent integer IDs still lose precision after #1401Forse già presa @skosovsky l’ha presa 2 giorni fa. Aperta
Difficoltà 3/5 1-2 giorni Idoneità per principianti 25/100
modelcontextprotocol/go-sdk#1404 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
mcp: rejected request IDs receive no JSON-RPC error envelopeForse già presa @skosovsky l’ha presa 5 giorni fa. Aperta
Difficoltà 4/5 1-2 giorni Idoneità per principianti 68/100
modelcontextprotocol/go-sdk#1391 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di modelcontextprotocol/go-sdk
Issue simili
-
agent-butler-finding chore
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 90/100
jordansmall/spindrift#5575 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
JakeChampion/lang#12684 ·
I maintainer di solito rispondono entro 1 giorno
-
goose sub-agent runs are never indexed: blame finds no session for any file a `delegate` child wroteApertabug
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
C-bug O-community X-blathers-triaged
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
cockroachdb/cockroach#176150 · 1 commento ·
I maintainer di solito rispondono entro 12 giorni
-
triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 86/100
wakatime/wakatime-cli#1649 ·
I maintainer di solito rispondono entro 1 giorno