modelcontextprotocol / modelcontextprotocol/python-sdk
Client tool call hangs forever if server crashes or connection dies when using streamable-http
Aberta
Ninguém assumiu esta issue ainda.
bug
P2
ready for work
- Linguagem predominante
- Python
- Estrelas
- 24.3k
- Forks
- 4k
- Merge médio
- 1d 1h
- PRs com merge (30d)
- 31
Descrição
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
If the server dies during a tool call before it sends a response the client will get stuck forever.
Example Code
# server.py
from mcp.server.fastmcp import FastMCP
import sys
mcp = FastMCP("StatefulServer")
@mcp.tool()
def greet(name: str = "World") -> str:
"""Greet someone by name."""
sys.exit(0)
return f"Hello, {name}!"
if __name__ == "__main__":
mcp.run(transport="streamable-http")
# client.py
import asyncio
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
async def main():
# Connect to a streamable HTTP server
async with streamablehttp_client("http://localhost:8000/mcp") as (
read_stream,
write_stream,
_,
):
# Create a session using the client streams
async with ClientSession(read_stream, write_stream) as session:
# Initialize the connection
await session.initialize()
res = await session.call_tool("greet", {"name": "World"})
print(res)
if __name__ == "__main__":
asyncio.run(main())
# Run server.py then client.py
# client.py will hang forever in the tool call and never complete. I would expect it to throw an error since the connection died and it will never get a response.
Python & MCP Python SDK
Python 3.13.7
mcp 1.20.0
Guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Direção de pesquisa
Comece pelo entry point streamablehttp_client e pelo caminho ClientSession.call_tool mostrado em client.py; em seguida, reproduza o crash de server.py durante uma chamada de ferramenta. Está concluído quando o cliente relata uma falha de conexão em vez de esperar indefinidamente quando o servidor é encerrado antes de responder.
Escrita pelo modelo de indexação a partir do texto da issue.
Avaliação
- Stack de tecnologia
- python
- Domínio
- api, networking
- Tipo de issue
- Bug
- Dificuldade
- 3/5
- Tempo estimado
- 1-2 dias
- Status de atividade
- Pouca atividade
- Clareza
- Razoavelmente clara
- Facilidade para iniciantes
- 55/100