From 3913fd4443a86536155e3ebef9edd2045c372c1e Mon Sep 17 00:00:00 2001 From: jnMetaCode Date: Mon, 30 Mar 2026 18:53:42 +0800 Subject: [PATCH] fix(stdio): always set windowsHide on Windows, not just in Electron (#1640) Co-authored-by: JiangNan <1394485448@qq.com> Co-authored-by: Felix Weinberger Co-authored-by: Konstantin Konstantinov --- .changeset/fix-stdio-windows-hide.md | 5 +++ src/client/stdio.ts | 6 +--- test/client/cross-spawn.test.ts | 50 ++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+), 5 deletions(-) create mode 100644 .changeset/fix-stdio-windows-hide.md diff --git a/.changeset/fix-stdio-windows-hide.md b/.changeset/fix-stdio-windows-hide.md new file mode 100644 index 00000000..250e0a45 --- /dev/null +++ b/.changeset/fix-stdio-windows-hide.md @@ -0,0 +1,5 @@ +--- +'@modelcontextprotocol/sdk': patch +--- + +Always set windowsHide to true when spawning stdio server processes on Windows, not just in Electron environments. diff --git a/src/client/stdio.ts b/src/client/stdio.ts index e488dcd2..f6a71a30 100644 --- a/src/client/stdio.ts +++ b/src/client/stdio.ts @@ -125,7 +125,7 @@ export class StdioClientTransport implements Transport { }, stdio: ['pipe', 'pipe', this._serverParams.stderr ?? 'inherit'], shell: false, - windowsHide: process.platform === 'win32' && isElectron(), + windowsHide: process.platform === 'win32', cwd: this._serverParams.cwd }); @@ -257,7 +257,3 @@ export class StdioClientTransport implements Transport { }); } } - -function isElectron() { - return 'type' in process; -} diff --git a/test/client/cross-spawn.test.ts b/test/client/cross-spawn.test.ts index 26ae682f..5a267119 100644 --- a/test/client/cross-spawn.test.ts +++ b/test/client/cross-spawn.test.ts @@ -150,4 +150,54 @@ describe('StdioClientTransport using cross-spawn', () => { // verify message is sent correctly expect(mockProcess.stdin.write).toHaveBeenCalled(); }); + + describe('windowsHide', () => { + const originalPlatform = process.platform; + + afterEach(() => { + Object.defineProperty(process, 'platform', { + value: originalPlatform + }); + }); + + test('should set windowsHide to true on Windows', async () => { + Object.defineProperty(process, 'platform', { + value: 'win32' + }); + + const transport = new StdioClientTransport({ + command: 'test-command' + }); + + await transport.start(); + + expect(mockSpawn).toHaveBeenCalledWith( + 'test-command', + [], + expect.objectContaining({ + windowsHide: true + }) + ); + }); + + test('should set windowsHide to false on non-Windows', async () => { + Object.defineProperty(process, 'platform', { + value: 'linux' + }); + + const transport = new StdioClientTransport({ + command: 'test-command' + }); + + await transport.start(); + + expect(mockSpawn).toHaveBeenCalledWith( + 'test-command', + [], + expect.objectContaining({ + windowsHide: false + }) + ); + }); + }); });