From 8de0bf0c918aeab88082cb3babc38c26a53b8270 Mon Sep 17 00:00:00 2001 From: Kirill Osenkov Date: Tue, 9 Jun 2026 18:34:53 -0700 Subject: [PATCH] Work around https://github.com/modelcontextprotocol/csharp-sdk/issues/1638 --- .../Client/StdioClientTransport.cs | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/ModelContextProtocol.Core/Client/StdioClientTransport.cs b/src/ModelContextProtocol.Core/Client/StdioClientTransport.cs index b0af062b1..2e44ee34f 100644 --- a/src/ModelContextProtocol.Core/Client/StdioClientTransport.cs +++ b/src/ModelContextProtocol.Core/Client/StdioClientTransport.cs @@ -187,14 +187,29 @@ public async Task ConnectAsync(CancellationToken cancellationToken = lock (s_consoleEncodingLock) { Encoding originalInputEncoding = Console.InputEncoding; + bool encodingChanged = false; try { - Console.InputEncoding = StreamClientSessionTransport.NoBomUtf8Encoding; + try + { + Console.InputEncoding = StreamClientSessionTransport.NoBomUtf8Encoding; + encodingChanged = true; + } + catch + { + // Host has no usable console (e.g. WPF/WinForms on .NET Framework with no + // AllocConsole). The child inherits the current Console.InputEncoding; + // non-ASCII stdin may be misencoded, but the connect itself proceeds. + } + processStarted = process.Start(); } finally { - Console.InputEncoding = originalInputEncoding; + if (encodingChanged) + { + Console.InputEncoding = originalInputEncoding; + } } } #endif