diff --git a/src/client/cross-spawn.test.ts b/src/client/cross-spawn.test.ts index 11e81bf6..d28c7a1a 100644 --- a/src/client/cross-spawn.test.ts +++ b/src/client/cross-spawn.test.ts @@ -72,7 +72,26 @@ describe("StdioClientTransport using cross-spawn", () => { "test-command", [], expect.objectContaining({ - env: customEnv + env: expect.objectContaining(customEnv) + }) + ); + }); + + test("should merge default and custom environment variables", async () => { + const customEnv = { CUSTOM_VAR: "custom-value" }; + const transport = new StdioClientTransport({ + command: "test-command", + env: customEnv + }); + + await transport.start(); + + // verify environment variables are merged correctly + expect(mockSpawn).toHaveBeenCalledWith( + "test-command", + [], + expect.objectContaining({ + env: expect.objectContaining(customEnv) }) ); }); diff --git a/src/client/stdio.ts b/src/client/stdio.ts index b83bf27c..0963ca13 100644 --- a/src/client/stdio.ts +++ b/src/client/stdio.ts @@ -117,7 +117,7 @@ export class StdioClientTransport implements Transport { this._serverParams.command, this._serverParams.args ?? [], { - env: this._serverParams.env ?? getDefaultEnvironment(), + env: { ...getDefaultEnvironment(), ...(this._serverParams.env ?? {}) }, stdio: ["pipe", "pipe", this._serverParams.stderr ?? "inherit"], shell: false, signal: this._abortController.signal,