diff --git a/.changeset/fix-env-mutation.md b/.changeset/fix-env-mutation.md new file mode 100644 index 000000000000..92454ae660df --- /dev/null +++ b/.changeset/fix-env-mutation.md @@ -0,0 +1,5 @@ +--- +'@ai/core': patch +--- + +fix (ai/mcp): prevent mutation of customEnv diff --git a/packages/ai/mcp-stdio/get-environment.test.ts b/packages/ai/mcp-stdio/get-environment.test.ts new file mode 100644 index 000000000000..1ea0bb900766 --- /dev/null +++ b/packages/ai/mcp-stdio/get-environment.test.ts @@ -0,0 +1,13 @@ +import { describe, it, expect } from 'vitest'; +import { getEnvironment } from './get-environment'; + +describe('getEnvironment', () => { + it('should not mutate the original custom environment object', () => { + const customEnv = { CUSTOM_VAR: 'custom_value' }; + + const result = getEnvironment(customEnv); + + expect(customEnv).toStrictEqual({ CUSTOM_VAR: 'custom_value' }); + expect(result).not.toBe(customEnv); + }); +}); diff --git a/packages/ai/mcp-stdio/get-environment.ts b/packages/ai/mcp-stdio/get-environment.ts index 843d7edb41e9..d22b7f854caf 100644 --- a/packages/ai/mcp-stdio/get-environment.ts +++ b/packages/ai/mcp-stdio/get-environment.ts @@ -24,7 +24,7 @@ export function getEnvironment( ] : ['HOME', 'LOGNAME', 'PATH', 'SHELL', 'TERM', 'USER']; - const env: Record = customEnv ?? {}; + const env: Record = customEnv ? { ...customEnv } : {}; for (const key of DEFAULT_INHERITED_ENV_VARS) { const value = globalThis.process.env[key];