modelcontextprotocol / modelcontextprotocol/python-sdk

STDIO hangs forever when the using multiprocessing in tools

Aberta
#817 3 comentários 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

enhancement needs decision P3
Linguagem predominante
Python
Estrelas
24.3k
Forks
4k
Merge médio
1d 1h
PRs com merge (30d)
31

Descrição

Describe the bug
when multiprocessing in a tool, and start mcp client by STDIO, the mcp server never response.

To Reproduce
Steps to reproduce the behavior:

  1. write mcp server:
## test_mcp.py
from mcp.server.fastmcp import FastMCP
import multiprocessing as mp


mcp = FastMCP()

@mcp.tool()
def sum() -> int:
    "count number"
    with mp.Pool(processes=2) as pool:
        res =  pool.imap(str, range(10))
        res = list(res)
    return res

if __name__ == '__main__':
    mcp.run()


  1. write mcp client usig stdio
## test_client.py
from mcp import ClientSession, StdioServerParameters, types
from mcp.client.stdio import stdio_client

# Create server parameters for stdio connection
server_params = StdioServerParameters(
    command="python",  # Executable
    args=["test_mcp.py"],  # Optional command line arguments
    env=None,  # Optional environment variables
)


async def run():
    async with stdio_client(server_params) as (read, write):
        async with ClientSession(
            read, write
        ) as session:
            # Initialize the connection
            await session.initialize()
            resources = await session.list_resources()
            # List available tools
            tools = await session.list_tools()
            print(tools)
            result = await session.call_tool(
                "sum", 
            )
            print(result)
asyncio.run(run())
  1. test running
$ python test_client.py
[05/27/25 15:42:13] INFO     Processing request of type ListResourcesRequest                             server.py:551
                    INFO     Processing request of type ListToolsRequest                                 server.py:551
meta=None nextCursor=None tools=[Tool(name='sum', description='count number', inputSchema={'properties': {}, 'title': 'sumArguments', 'type': 'object'}, annotations=None)]
                    INFO     Processing request of type CallToolRequest                                  server.py:551

The program is stuck here and won't continue running

Version

Name: mcp
Version: 1.9.0
Summary: Model Context Protocol SDK
Home-page: 
Author: Anthropic, PBC.
Author-email: 
License: MIT
Location: /data/software/micromamba/envs/gbi/lib/python3.10/site-packages
Requires: anyio, httpx, httpx-sse, pydantic, pydantic-settings, python-multipart, sse-starlette, starlette, uvicorn
Required-by: camel-ai, cellrank-mcp, fast-agent-mcp, fastmcp, liana-mcp, mcp-server-calculator, scmcp, scmcp-utils, scmcp_shared

Guia de contribuição

Abrir o guia de contribuição

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Direção de pesquisa

Comece executando test_client.py com test_mcp.py e reproduza o travamento após CallToolRequest ser registrado. Rastreie a interação entre o pool de multiprocessing na ferramenta sum e os pontos de entrada do cliente/servidor stdio. Está concluído quando o exemplo termina e retorna o resultado da ferramenta, em vez de permanecer travado.

Escrita pelo modelo de indexação a partir do texto da issue.

Avaliação

Stack de tecnologia
python
Domínio
backend
Tipo de issue
Bug
Dificuldade
4/5
Tempo estimado
3-5 dias
Status de atividade
Estagnada
Clareza
Razoavelmente clara
Facilidade para iniciantes
35/100

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.