Type inconsistency: StreamableHTTPServerTransport.onclose widens Transport interface contract under exactOptionalPropertyTypes
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 68/100
- Type d'issue
- Bug
- Clarté
- Clairement spécifiée
- Activité
- Calme
- Stack technique
- typescript
- Domaine
- api
Piste de recherche
Comparez shared/transport.d.ts avec server/streamableHttp.d.ts, en vous concentrant sur les déclarations de onclose, puis reproduisez le problème avec TypeScript 5.9.3 et exactOptionalPropertyTypes activé. Le travail est considéré comme terminé lorsque l’instance de StreamableHTTPServerTransport est acceptée par McpServer.connect sans TS2379, tandis que la déclaration côté client reste inchangée.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
SDK version: 1.29.0. TypeScript version: 5.9.3. tsconfig flags: strict true, exactOptionalPropertyTypes true, noUncheckedIndexedAccess true, target ES2022, module NodeNext.
Problem: the Transport interface in shared/transport.d.ts declares onclose as optional with type () => void (no explicit | undefined). The concrete StreamableHTTPServerTransport class in server/streamableHttp.d.ts declares onclose via getter/setter typed (() => void) | undefined. Under exactOptionalPropertyTypes, these two declarations are incompatible: the concrete class widens the optional property to include undefined, but the interface contract does not. As a result, passing a StreamableHTTPServerTransport instance into McpServer.connect(transport: Transport) fails typecheck with TS2379.
Reproduction: create a TypeScript project with the flag set above, import StreamableHTTPServerTransport and McpServer, attempt server.connect(new StreamableHTTPServerTransport()).
Expected: typechecks cleanly because the SDK's own concrete transport class should be assignable to the SDK's own Transport interface.
Actual: TS2379 on the property variance.
Asymmetry note: the client-side StreamableHTTPClientTransport declares onclose with the narrower () => void shape and typechecks cleanly under EOPT. Only the server-side transport hits this.
Suggested fix: align StreamableHTTPServerTransport.onclose to () => void to match the Transport interface declaration, OR widen Transport.onclose explicitly to (() => void) | undefined. Either direction resolves the variance for EOPT consumers.
Workaround consumers must use today: targeted cast at the connect call site, e.g. server.connect(transport as Transport).
- Langage dominant
- TypeScript
- Étoiles
- 13.6k
- Forks
- 2.5k
- Merge moyen
- 1 j 2 h
- PR mergées (30 j)
- 60
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Aucun modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de modelcontextprotocol/typescript-sdk
-
[v1.x] Protocol.request keeps its abort listener after the request resolved, so a later abort sends notifications/cancelled for an answered request (1.30.0)Peut-être pris Une pull request liée à cette issue est ouverte ou déjà fusionnée. Ouvertev1
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
modelcontextprotocol/typescript-sdk#3090 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
[v2] e2e `protocol:timeout:max-total` is flaky over SSE: fake timers advance before the request reaches the serverPeut-être pris @Singmin l’a pris il y a 7 jours. Ouvertev1 v2
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
modelcontextprotocol/typescript-sdk#3045 ·
Les mainteneurs répondent en général sous 1 jour
-
[v1.x] Backport #2654: `notifications/cancelled` with `requestId: 0` is ignored, so the first server→client request cannot be cancelled (still in 1.32.1)Peut-être pris @CloudCorpRecords l’a pris il y a 8 jours. Ouvertev1
Difficulté 2/5 1-3 heures Accessibilité débutants 77/100
modelcontextprotocol/typescript-sdk#3043 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
v1 v2
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
modelcontextprotocol/typescript-sdk#2946 · 4 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
[v2] URI template reserved expansions encode existing %HH sequences againPeut-être pris @takagibit18 l’a pris il y a 23 jours. Ouvertev1 v2
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
modelcontextprotocol/typescript-sdk#2920 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de modelcontextprotocol/typescript-sdk
Issues similaires
-
Manager flashes an empty "errorOccurred" dialog while redirecting a logged-out user to loginOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
openremote/openremote#3487 · 1 commentaire ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
coollabsio/jean#867 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
ehmpathy/rhachet-roles-bhuild#616 ·
Les mainteneurs répondent en général sous 1 jour
-
📘 Docs supabase/cli
Difficulté 2/5 1-3 heures Accessibilité débutants 83/100
Les mainteneurs répondent en général sous 1 jour
-
bug(cli): theme file home-directory check uses startsWith (sibling dirs pass, Windows casing fails)Ouvertearea/core kind/bug priority/p2 status/bot-triaged
Difficulté 2/5 1-3 heures Accessibilité débutants 79/100
google-gemini/gemini-cli#29955 · 2 commentaires ·
Les mainteneurs répondent en général sous 1 jour