fix(stdio): launch PowerShell (.ps1) servers via a PowerShell host on Windows - #3497
fix(stdio): launch PowerShell (.ps1) servers via a PowerShell host on Windows#3497dltsum wants to merge 1 commit into
Conversation
… Windows `get_windows_executable_command()` resolves commands to `.ps1` paths, but `CreateProcess` cannot execute a PowerShell script directly, so the spawn failed with WinError 193. Rewrite the argv in `create_windows_process` to route `.ps1` commands through `pwsh` (or `powershell` as fallback) with `-NoProfile -NonInteractive -ExecutionPolicy Bypass -File`, raising a clear FileNotFoundError when no PowerShell host is on PATH. Fixes modelcontextprotocol#3496
|
This PR has been closed automatically. This repo only keeps pull requests open when they come from a maintainer, or from a contributor a maintainer has assigned to the linked issue, and you aren't currently assigned to #3496. If a maintainer assigns you to #3496, this PR reopens on its own and there's nothing more you need to do here. Assignment is a maintainer call based on capacity; comments that only ask to be assigned don't factor in. What does help is engaging on the issue itself by confirming the repro, explaining why it matters for your use case, or describing the approach you'd take. You're welcome to keep pushing commits here (just avoid force-pushing, since GitHub can't reopen a rewritten branch), but that on its own won't get the PR reviewed or the issue assigned, and realistically most auto-closed PRs stay closed. There's no need to open a new PR either way. CONTRIBUTING.md has the full reasoning, but in short:
Maintainers: reopen, remove |
Summary
Fixes #3496
On Windows,
get_windows_executable_command()resolves a stdio server command to a.ps1path (viashutil.whichextension probing), butCreateProcesscannot execute a PowerShell script directly — the spawn then fails withWinError 193(%1 is not a valid Win32 application).Fix: in
create_windows_process, when the resolved command ends with.ps1, rewrite the argv to launch through a PowerShell host —pwshpreferred,powershellas fallback — with-NoProfile -NonInteractive -ExecutionPolicy Bypass -File <script> <args...>. If neither host is on PATH, raise a clearFileNotFoundErrorinstead of the opaqueWinError 193. Both theanyio.open_processpath and theFallbackProcess(SelectorEventLoop) path benefit, since the rewrite happens before either spawn.Testing:
test_a_powershell_script_server_round_trips_messages: writes a real.ps1echo server, connects viastdio_client, and round-trips a JSON-RPC ping.OSError: [WinError 193], exactly the reported error), passes with it (0.68s).ruff check/ruff formatclean.