Add prior-knowledge connection path for modern protocol clients
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 45/100
- Tipo di issue
- Funzionalità
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Tranquilla
- Stack tecnologico
- csharp
- Ambito
- api, backend-api-design
Direzione di ricerca
Inizia leggendo McpClientOptions.cs, McpClientImpl.cs e DiscoverResult.cs per tracciare il comportamento attuale della discovery moderna, del pinning della versione esatta e del fallback legacy. Confronta quindi i percorsi di conoscenza pregressa referenziati in TypeScript e Python, poi aggiungi test per l’auto-negoziazione predefinita, il pinning moderno esatto, la discovery precedente memorizzata nella cache e la discovery precedente non valida o incompatibile. Il lavoro è completato quando una connessione moderna attendibile salta server/discover, mentre il comportamento esistente e i metadati per richiesta rimangono corretti.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Summary
Add a C# client API for 2026-07-28+ connections that lets callers skip the server/discover round trip when they already have trusted prior knowledge about the server. This should be distinct from McpClientOptions.ProtocolVersion, so exact version pinning can continue to mean "require this version / disable fallback" rather than "skip discovery."
Motivation
Today, setting McpClientOptions.ProtocolVersion = "2026-07-28" disables legacy fallback, but the client still sends server/discover before adopting the modern protocol. That is safe, but it leaves no zero-round-trip path for known modern servers or for clients that have cached a previous DiscoverResult.
A separate prior-knowledge API would improve startup latency and align C# with the stronger ergonomics in the other Tier 1 SDKs while preserving C#'s current safe defaults.
Current C# behavior
ProtocolVersion = null: default modern auto path; sendsserver/discoverand falls back to legacyinitializewhen appropriate.ProtocolVersion = "2026-07-28": sendsserver/discoverand requires a modern result; does not fall back to legacy.- Legacy exact versions such as
"2025-11-25": skipserver/discoverand use legacyinitialize. - No public API was found for providing a cached
DiscoverResultor directly adopting a known modern protocol version.
Relevant C# files:
src/ModelContextProtocol.Core/Client/McpClientOptions.cssrc/ModelContextProtocol.Core/Client/McpClientImpl.cssrc/ModelContextProtocol.Core/Protocol/DiscoverResult.cs
Tier 1 SDK references
TypeScript SDK
TypeScript exposes the strongest explicit prior-knowledge shape:
ConnectOptions.prior?: DiscoverResultlets callers provide a previously obtained discovery result._connectFromPrior(...)bypasses version negotiation andserver/discover, adopts capabilities/server info/instructions, and sets the negotiated protocol version.getDiscoverResult()returns a reusableDiscoverResult.
References:
- https://github.com/modelcontextprotocol/typescript-sdk/blob/main/packages/client/src/client/client.ts
- Look for
ConnectOptions.prior,_connectFromPrior, andgetDiscoverResult.
Python SDK
Python supports both an explicit cached-discovery path and a simple direct-modern mode:
Client(mode="auto")probes withserver/discoverand falls back.Client(mode="2026-07-28")adopts the modern protocol directly without sendingserver/discover.prior_discovercan provide a cachedDiscoverResult.ClientSession.adopt()installs anInitializeResultorDiscoverResultwithout wire traffic.ClientSession.discover_resultexposes the round-trippable discovery result for reuse.
References:
- https://github.com/modelcontextprotocol/python-sdk/blob/main/src/mcp/client/client.py
- https://github.com/modelcontextprotocol/python-sdk/blob/main/src/mcp/client/session.py
- Look for
ConnectMode,prior_discover,adopt, anddiscover_result.
Go SDK
Go has solid 2026-07-28 plumbing but does not appear to expose a public prior-knowledge client API:
Client.Connectdefaults to latest2026-07-28, sendsserver/discover, negotiates, and falls back to legacyinitializewhen needed.ClientSessionOptions.protocolVersionis unexported and documented as a testing override.- Server
discoveradvertises transport-filtered supported versions. - Go also implements modern per-request
_meta, standard HTTP headers,subscriptions/listen, multi-round-trip helpers, and TTL caches for modern list/read results.
References:
- https://github.com/modelcontextprotocol/go-sdk/blob/main/mcp/client.go
- https://github.com/modelcontextprotocol/go-sdk/blob/main/mcp/server.go
- https://github.com/modelcontextprotocol/go-sdk/blob/main/mcp/cache.go
- https://github.com/modelcontextprotocol/go-sdk/blob/main/docs/protocol.md
Proposed C# API direction
Add a distinct opt-in prior-knowledge path, for example:
McpClientOptions.KnownDiscoverResultorMcpClientOptions.PriorDiscoverResult: adopt a trusted discovery result and skipserver/discover.- Optionally, a direct-modern option such as
AssumeProtocolVersion = "2026-07-28"for callers that only know the protocol version but do not have server info/capabilities yet. - Keep
ProtocolVersionsemantics unchanged: exact modern version should still probe and require a compatible result unless the new prior-knowledge option is used.
Acceptance criteria
- A caller can connect to a known 2026-07-28+ server without sending
server/discover. - A caller can retrieve or construct the prior-knowledge payload needed for a later zero-round-trip connection.
- Existing default auto-negotiation and exact
ProtocolVersionbehavior remain backward compatible. - Per-request
_metaand HTTP headers continue to be populated correctly after prior-knowledge adoption. - Tests cover default auto, exact modern pin, cached prior discovery, and invalid/incompatible prior discovery.
- Lingua principale
- C#
- Stelle
- 4.6k
- Fork
- 817
- Merge medio
- 8g 7h
- PR unite (30g)
- 3
Preparare l'ambiente
Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.
- Nessun Dockerfile né file Docker Compose
- Nessun 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/csharp-sdk
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
modelcontextprotocol/csharp-sdk#1899 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
modelcontextprotocol/csharp-sdk#1867 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
modelcontextprotocol/csharp-sdk#1840 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
modelcontextprotocol/csharp-sdk#1836 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement needs confirmation
Difficoltà 2/5 1-3 ore Idoneità per principianti 64/100
modelcontextprotocol/csharp-sdk#678 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di modelcontextprotocol/csharp-sdk
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
elsa-workflows/elsa-core#8593 ·
I maintainer di solito rispondono entro 1 giorno
-
NEW ISSUE Requestor-TML Maintainers Type: Change/Feature Request
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
tModLoader/tModLoader#5476 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
521xueweihan/HelloGitHub#3845 · 1 commento ·
-
possible bug
Difficoltà 1/5 1-3 ore Idoneità per principianti 88/100
-
documentation task
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100