using Microsoft.Extensions.Logging; using ModelContextProtocol.Utils; namespace ModelContextProtocol.Protocol.Transport; /// /// Provides a client MCP transport implemented around a pair of input/output streams. /// public sealed class StreamClientTransport : IClientTransport { private readonly Stream _serverInput; private readonly Stream _serverOutput; private readonly ILoggerFactory? _loggerFactory; /// /// Initializes a new instance of the class. /// /// /// The stream representing the connected server's input. /// Writes to this stream will be sent to the server. /// /// /// The stream representing the connected server's output. /// Reads from this stream will receive messages from the server. /// /// A logger factory for creating loggers. public StreamClientTransport( Stream serverInput, Stream serverOutput, ILoggerFactory? loggerFactory = null) { Throw.IfNull(serverInput); Throw.IfNull(serverOutput); _serverInput = serverInput; _serverOutput = serverOutput; _loggerFactory = loggerFactory; } /// public string Name => $"in-memory-stream"; /// public Task ConnectAsync(CancellationToken cancellationToken = default) { return Task.FromResult(new StreamClientSessionTransport( new StreamWriter(_serverInput), new StreamReader(_serverOutput), "Client (stream)", _loggerFactory)); } }