stdio
Stdio Server Transport Module
This module provides functionality for creating an stdio-based transport layer that can be used to communicate with an MCP client through standard input/output streams.
Example
async def run_server():
async with stdio_server() as (read_stream, write_stream):
# read_stream contains incoming JSONRPCMessages from stdin
# write_stream allows sending JSONRPCMessages to stdout
server = await create_my_server()
await server.run(read_stream, write_stream)
anyio.run(run_server)
stdio_server
async
Server transport for stdio: this communicates with an MCP client by reading from the current process' stdin and writing to stdout.
Source code in src/mcp/server/stdio.py
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | |
newline_json_transport
async
newline_json_transport(
stream: ByteStream,
*,
max_frame_bytes: int = _MAX_FRAME_BYTES
) -> AsyncIterator[
tuple[
ContextReceiveStream[SessionMessage | Exception],
ContextSendStream[SessionMessage],
]
]
The stdio wire over any byte stream: newline-delimited JSON-RPC framing.
Yields the (read_stream, write_stream) pair a server driver consumes,
framing stream exactly as stdio frames its process handles:
async with newline_json_transport(sock) as (read_stream, write_stream):
await server.run(read_stream, write_stream)
A malformed line reaches the read stream as an exception item and the
connection carries on; a frame longer than max_frame_bytes ends the read
side. This framer never closes stream itself.
Source code in src/mcp/server/stdio.py
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 | |