Define handling for protocol-incompatible result properties set by applications

Aperta
#1,754 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
5/5
Tempo stimato
Più di una settimana
Idoneità per principianti
35/100
Tipo di issue
Funzionalità
Chiarezza
Da chiarire
Stato di attività
Tranquilla
Stack tecnologico
csharp

Direzione di ricerca

Inizia dal confine condiviso post-handler e leggi come McpServerImpl.IsJuly2026OrLaterProtocolRequest risolve RequestContext.JsonRpcRequest.Context.ProtocolVersion e McpServer.NegotiatedProtocolVersion. Confronta le policy proposte prima di sceglierne una, quindi segui l’emissione dei risultati normali, memorizzabili nella cache e alternativi immediati. Il lavoro è completato quando il comportamento scelto è definito e i test dell’esatta forma wire coprono i contesti di protocollo, gli handler, i filtri e le istanze di risultato riutilizzate elencati.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

enhancement P2 ready for work

Summary

PR #1753 fixes #1721 by stopping the SDK from automatically adding the 2026-07-28-only resultType, ttlMs, and cacheScope properties to legacy results. Applications can still set those properties explicitly from handlers or filters, which can produce a wire shape that is invalid for the negotiated protocol version.

We should define and consistently enforce the server behavior for protocol-version-specific result properties supplied by application code.

Protocol detection

The effective protocol version is already available at the shared post-handler boundary:

  • Use RequestContext.JsonRpcRequest.Context.ProtocolVersion for per-request metadata protocols.
  • Fall back to McpServer.NegotiatedProtocolVersion for stateful sessions.
  • McpServerImpl.IsJuly2026OrLaterProtocolRequest already implements this resolution.

Possible policies

  1. Fail the request before serialization with an InternalError and a useful server-side diagnostic. This gives application developers the strongest signal, but turns an otherwise valid client request into an error. Ordinary application exceptions currently produce a generic "An error occurred." response, so we would also need to decide whether the client receives a specific message.
  2. Strip the unsupported properties and log a warning. This preserves a valid legacy wire shape while making the application misuse visible to server operators.
  3. Strip the unsupported properties silently. This maximizes compatibility but can hide application bugs.

Scope

The selected policy should:

  • Be applied once at a typed response-emission boundary after handlers and filters.
  • Cover Result.ResultType and both ICacheableResult properties.
  • Cover normal, cacheable, and immediate alternate results.
  • Avoid mutating shared response instances in a way that can affect later requests using another protocol version.
  • Preserve explicit values and add required defaults for 2026-07-28 and later responses.
  • Be extensible to future protocol-version-specific result properties.

Tests

Add exact serialized wire-shape coverage for:

  • Legacy handlers and filters that explicitly set each unsupported property.
  • 2026-07-28 handlers and filters with explicit values.
  • Normal, cacheable, and immediate alternate results.
  • Session-negotiated and per-request HTTP protocol contexts.
  • Reused or shared result instances across requests with different protocol versions.
Lingua principale
C#
Stelle
4.5k
Fork
814
Merge medio
9g 19h
PR unite (30g)
4

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di modelcontextprotocol/csharp-sdk

Tutte le issue di modelcontextprotocol/csharp-sdk

Issue simili

Altre issue su C#

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.