StreamableHTTPClientTransport should handle 404 and 406 gracefully for GET SSE stream
Les mainteneurs répondent en général sous 1 jour
@nanookclaw y travaille déjà.
Depuis le 27/4/2026.
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 76/100
- Type d'issue
- Bug
- Clarté
- Clairement spécifiée
- Activité
- Calme
- Stack technique
- typescript
- Domaine
- api, networking
Piste de recherche
Commencez dans packages/client/src/client/streamableHttp.ts, plus précisément dans StreamableHTTPClientTransport._startOrAuthSse(), et suivez la façon dont le statut de la réponse GET est traité pendant l’initialisation. Vérifiez le comportement avec un serveur MCP POST-only ou avec un test client ciblé s’il est disponible. Le travail est considéré comme terminé lorsque 404 et 406, comme 405, permettent à la communication basée sur POST de continuer sans erreur fatale.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Problem
The StreamableHTTPClientTransport._startOrAuthSse() method sends a GET request to open an SSE stream during initialization. Per the MCP spec, the server MAY respond with 405 Method Not Allowed if it doesn't support SSE streams, and the client correctly handles this.
However, many MCP servers return 404 Not Found or 406 Not Acceptable instead of 405 for this GET request:
- 404: Server doesn't have a GET handler for the MCP endpoint (only POST)
- 406: Server rejects
Accept: text/event-streamheader (e.g., requires bothapplication/jsonandtext/event-stream)
Both cases mean the same thing: the server does not offer an SSE stream at the GET endpoint. But the client treats them as fatal errors, preventing the connection even though POST-based communication would work fine.
Current Behavior
// packages/client/src/client/streamableHttp.ts, _startOrAuthSse()
if (response.status === 405) {
return; // Only 405 is handled gracefully
}
throw new SdkError(...); // 404 and 406 throw, killing the connection
This causes errors like:
StreamableHTTPError: Streamable HTTP error: Failed to open SSE stream: Not Found
Affected Clients
This impacts any client consuming the SDK, including:
- Gemini CLI (
google-gemini/gemini-cli) — #5268, #2787 - MCP Inspector — #1150
- LibreChat and other MCP consumers
Proposed Fix
Treat 404 and 406 the same as 405 — all indicate the server does not offer an SSE stream at the GET endpoint:
// 404: Server has no GET handler (only POST)
// 405: Server explicitly doesn't allow GET
// 406: Server rejects the Accept header for GET
if (response.status === 404 || response.status === 405 || response.status === 406) {
return;
}
The client will then proceed with POST-based communication, which works correctly for these servers.
Reproduction
- Set up an MCP server that only supports POST (no GET SSE stream)
- Connect using
StreamableHTTPClientTransport - The GET request returns 404 → client throws and disconnects
- POST would have worked fine
Environment
@modelcontextprotocol/sdk: latest- Discovered while debugging Gemini CLI v0.32.1 connecting to a remote HTTP MCP server (ArmorCode)
- Langage dominant
- TypeScript
- Étoiles
- 13.7k
- Forks
- 2.3k
- 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
-
The `maxToolInputElements` refusal lacks the `Input validation error:` prefix that the schema refusal carriesPeut-être pris @barry166 l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
modelcontextprotocol/typescript-sdk#3111 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
v2
Difficulté 2/5 1-3 heures Accessibilité débutants 71/100
modelcontextprotocol/typescript-sdk#3109 ·
Les mainteneurs répondent en général sous 1 jour
-
server: registeredResource.update and registeredResourceTemplate.update desync title and metadata.title when updating metadata alonePeut-être pris @FelixFangX l’a pris il y a 1 jour. Ouvertev1 v2
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
modelcontextprotocol/typescript-sdk#3103 · 2 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
[v2] server/client 2.4.0 inline fast-uri 3.1.8; four advisories published after release are fixed in 3.1.9Peut-être pris @claude l’a pris il y a 1 jour. Ouvertev2
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
modelcontextprotocol/typescript-sdk#3101 ·
Les mainteneurs répondent en général sous 1 jour
-
[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 · 2 commentaires ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de modelcontextprotocol/typescript-sdk
Issues similaires
-
Plugin: sheet music can't be scrolled by hand before playbackPeut-être pris @snakajima l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
receptron/jinglescript#51 ·
Les mainteneurs répondent en général sous 1 jour
-
enhancement
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
Les mainteneurs répondent en général sous 9 jours
-
clawsweeper:needs-maintainer-review clawsweeper:needs-product-decision clawsweeper:no-new-fix-pr clawsweeper:source-repro impact:ux-friction issue-rating: 🦞 diamond lobster P3
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
openclaw/openclaw#186424 · 1 commentaire · 1 réaction ·
Les mainteneurs répondent en général sous 1 jour
-
chore(worker): five module header comments describe the code from before later issues changed itOuvertearea:dev U2-later
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
bentleypark/aiwatch#1824 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
Pal-AI-Lab/Coopanion#469 ·
Les mainteneurs répondent en général sous 1 jour