Hacktoberfest 2026: die Issues, die Maintainer für den Oktober markiert haben – offen und einsteigerfreundlich. Hacktoberfest-Issues durchsuchen

Streamable HTTP: Content-Type handling is order dependent and accepts invalid values

Offen Anfängerfreundlich
#3,691 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

@jayzuccarelli arbeitet bereits daran.

Seit 12.10.2026.

Bewertung

Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Anfängerfreundlichkeit
76/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Aktiv
Tech-Stack
python

Rechercherichtung

Lies zunächst die Content-Type-Prüfungen in src/mcp/server/transport_security.py und src/mcp/server/streamable_http.py und verfolge anschließend die entsprechende Prüfung im modernen Transport. Ergänze oder aktualisiere Tests für die aufgeführten Content-Type-Werte, einschließlich Parametern und durch Kommas getrennten Werten. Fertig ist die Änderung, wenn über alle Transports hinweg nur application/json, optional mit Parametern, konsistent akzeptiert wird.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

bug v1 v2
Initial Checks
Release line

2.x (current stable)

Description

The Content-Type header:

  • accepts values that are not JSON media types. application/json, text/plain is accepted and the request is executed, although a comma cannot appear inside a media type. On the modern transport application/jsonx is accepted as well
  • The answer depends on order. application/json, text/plain is accepted while text/plain, application/json is rejected, so the same invalid value gets opposite answers.

The first check is a prefix test in the middleware:

# src/mcp/server/transport_security.py
return content_type is not None and content_type.lower().startswith("application/json")

The second splits the value on ; and , and compares the result:

# src/mcp/server/streamable_http.py
content_type_parts = [part.strip() for part in content_type.split(";")[0].split(",")]
return any(part == CONTENT_TYPE_JSON for part in content_type_parts)

The second check rejects application/jsonx. The 2.x modern transport has no equivalent, so it accepts that value.

For reference, the TypeScript SDK answers 415 for application/json, text/plain and for application/jsonx, and mcp-go answers 400 for both.

Reproduction

Against a server started with stateless_http=True, so no session handshake is needed:

curl -s http://127.0.0.1:8901/mcp \
  -H 'Content-Type: application/json, text/plain' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"ping","arguments":{}}}'

Observed: 200 with a normal JSON-RPC result, and the tool's handler runs.

Content-Type sent Expected handshake transport (1.x and 2.x) modern transport (2.x only)
application/json accepted 200 200
application/json; charset=utf-8 accepted 200 200
application/json, text/plain rejected 200, body executed 200, body executed
application/jsonx rejected 415 200, body executed
text/plain, application/json rejected 400 400
text/plain rejected 400 400

For modern transport calls were sent with MCP-Protocol-Version: 2026-07-28 plus the Mcp-Method and Mcp-Name headers.

Fix

Parse the media type, the segment before the first ;, and compare it exactly to application/json. Parameters keep working, so application/json; charset=utf-8 is unaffected, while the values above are rejected.

Python & MCP Python SDK
Reproduced on the 2.x line (`2.2.0`, `2.3.0`) and the 1.x line (`1.30.0`)
Vorherrschende Sprache
Python
Sterne
24.5k
Forks
4k
Ø Merge
18 Std. 31 Min.
Gemergte PRs (30 T.)
38

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus modelcontextprotocol/python-sdk

Alle Issues in modelcontextprotocol/python-sdk

Ähnliche Issues

Weitere Issues zu Python

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.