modelcontextprotocol / modelcontextprotocol/python-sdk
Initialize call hangs forever if MCP server does not return a `Content-Type: text/plain`
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Python
- Estrellas
- 24.3k
- Forks
- 4k
- Merge medio
- 1 d 1 h
- PR fusionados (30 d)
- 31
Descripción
Initial Checks
- I confirm that I'm using the latest version of MCP Python SDK
- I confirm that I searched for my issue in https://github.com/modelcontextprotocol/python-sdk/issues before opening this issue
Description
We had some timeouts on our server while using MCP client from the SDK.
When users try to integrate our client with their MCP server, we do an initialize call to the server and we are waiting infinitely to the following:
sync with self:
...
After investigation, it seems the error happens when the MCP server is misconfigured, and returns something different than Content-Type: text/event-stream as a response from the initialize call.
Although it is on the server side, the client should be able to fail immediately with a understandable error to warn the user something went wrong with the server's initialize output.
Example Code
# server.py
from http.server import BaseHTTPRequestHandler, HTTPServer
class PlainTextHandler(BaseHTTPRequestHandler):
def do_POST(self):
length = int(self.headers.get("Content-Length", 0))
self.rfile.read(length)
body = b"this is not json"
self.send_response(200)
self.send_header("Content-Type", "text/plain")
self.send_header("Content-Length", str(len(body)))
self.end_headers()
self.wfile.write(body)
def log_message(self, format, *args):
print(f"[server] {format % args}")
server = HTTPServer(("localhost", 9000), PlainTextHandler)
print("[server] listening on http://localhost:9000")
server.serve_forever()
# client.py
import asyncio
import mcp
from mcp.client.streamable_http import streamable_http_client
async def main():
print("connecting…")
async with streamable_http_client("http://localhost:9000/mcp") as (
read_stream, write_stream, _,
):
async with mcp.ClientSession(read_stream, write_stream) as session:
await session.initialize() # ← hangs here forever
print("done (you should never see this)")
Python & MCP Python SDK
- Python 3.12.12
- MCP - 1.27.0
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza con el punto de entrada streamable_http_client mostrado en client.py y reproduce el comportamiento usando el ejemplo PlainTextHandler de server.py. Rastrea el manejo de la respuesta de initialize y añade cobertura para una respuesta non-text/event-stream; estará terminado cuando el cliente falle rápidamente con un error comprensible en lugar de quedarse bloqueado.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- api, backend
- Tipo de issue
- Error
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Estado de actividad
- Tranquilo
- Claridad
- Bastante claro
- Aptitud para principiantes
- 58/100