StdioClientTransport

class StdioClientTransport @JvmOverloads constructor(input: Source, output: Sink, error: Source? = null, sendChannel: Channel<JSONRPCMessage> = Channel(Channel.BUFFERED), classifyStderr: (String) -> StdioClientTransport.StderrSeverity = { DEBUG }) : AbstractTransport(source)

A transport implementation for JSON-RPC communication over standard I/O streams.

Reads JSON-RPC messages from input and writes messages to output. Optionally monitors error stream for stderr output with configurable severity handling.

Usage Example

val process = ProcessBuilder("mcp-server").start()

val transport = StdioClientTransport(
input = process.inputStream.asSource().buffered(),
output = process.outputStream.asSink().buffered(),
error = process.errorStream.asSource().buffered()
) { stderrLine ->
when {
stderrLine.contains("error", ignoreCase = true) -> StderrSeverity.FATAL
stderrLine.contains("warning", ignoreCase = true) -> StderrSeverity.WARNING
else -> StderrSeverity.INFO
}
}

transport.start()

Parameters

input

The input stream where messages are received.

output

The output stream where messages are sent.

error

Optional error stream for stderr monitoring.

sendChannel

Channel for outbound messages. Default: buffered channel (implementation-default capacity).

classifyStderr

Callback to classify stderr lines. Return StderrSeverity.FATAL to fail transport, or StderrSeverity.WARNING / StderrSeverity.INFO / StderrSeverity.DEBUG to log, or StderrSeverity.IGNORE to discard. Default value: StderrSeverity.DEBUG.

See also

Constructors

Link copied to clipboard
constructor(input: Source, output: Sink, error: Source? = null, sendChannel: Channel<JSONRPCMessage> = Channel(Channel.BUFFERED), classifyStderr: (String) -> StdioClientTransport.StderrSeverity = { DEBUG })

Types

Link copied to clipboard

Severity classification for stderr messages.

Functions

Link copied to clipboard
open suspend override fun close()
Link copied to clipboard
open override fun onClose(block: () -> Unit)
Link copied to clipboard
open override fun onError(block: (Throwable) -> Unit)
Link copied to clipboard
open override fun onMessage(block: suspend (JSONRPCMessage) -> Unit)
Link copied to clipboard
open suspend override fun send(message: JSONRPCMessage, options: TransportSendOptions?)
Link copied to clipboard
open suspend override fun start()