fix(mcp): preserve Windows env vars for MCP servers (#4180) #4182
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes #4180.
What
Expand the Windows DEFAULT_ENV_VARS list so MCP servers inherit COMSPEC, SYSTEMROOT, PROGRAMDATA, APPDATA, and other core variables used by CLI helpers and DNS
add a Windows-only regression test (test_create_env_for_mcp_server_includes_windows_defaults) that guards each entry in that list
keep the existing override test working cross‑platform by reading USERNAME on Windows
Why
Without those inherited variables, Windows MCP servers that shell out (Docker MCP gateway, npx-based servers, etc.) fail immediately because plugins, caches, or system DLLs can’t be located. The new test ensures we don’t regress on the required variable set.
How
Update codex-rs/mcp-client/src/mcp_client.rs
Introduce EnvVarGuard to safely mutate/restore env vars during tests
Document the rationale in the inline comment
Testing
just fmt
cargo test -p codex-mcp-client
just fix -p codex-mcp-client