From 520ebe2f954f4b4f546d0676653307ce86c53736 Mon Sep 17 00:00:00 2001 From: g97iulio1609 Date: Sat, 28 Feb 2026 05:02:56 +0100 Subject: [PATCH] fix(stdio): allow configurable memory-stream buffer size Add read_stream_buffer_size and write_stream_buffer_size parameters to stdio_server() so callers can increase the internal memory-object-stream capacity. The default (0 = synchronous hand-off) is preserved for backward compatibility. With max_buffer_size=0 the stdin reader blocks whenever the message processor is busy, making the server unresponsive to pings and new requests during slow operations. A small buffer (e.g. 8) decouples reading from processing and lets the server remain responsive. Closes #1333 --- src/mcp/server/stdio.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/mcp/server/stdio.py b/src/mcp/server/stdio.py index e526bab56..28b540c8c 100644 --- a/src/mcp/server/stdio.py +++ b/src/mcp/server/stdio.py @@ -30,7 +30,12 @@ async def run_server(): @asynccontextmanager -async def stdio_server(stdin: anyio.AsyncFile[str] | None = None, stdout: anyio.AsyncFile[str] | None = None): +async def stdio_server( + stdin: anyio.AsyncFile[str] | None = None, + stdout: anyio.AsyncFile[str] | None = None, + read_stream_buffer_size: int = 0, + write_stream_buffer_size: int = 0, +): """Server transport for stdio: this communicates with an MCP client by reading from the current process' stdin and writing to stdout. """ @@ -49,8 +54,8 @@ async def stdio_server(stdin: anyio.AsyncFile[str] | None = None, stdout: anyio. write_stream: MemoryObjectSendStream[SessionMessage] write_stream_reader: MemoryObjectReceiveStream[SessionMessage] - read_stream_writer, read_stream = anyio.create_memory_object_stream(0) - write_stream, write_stream_reader = anyio.create_memory_object_stream(0) + read_stream_writer, read_stream = anyio.create_memory_object_stream(read_stream_buffer_size) + write_stream, write_stream_reader = anyio.create_memory_object_stream(write_stream_buffer_size) async def stdin_reader(): try: