Skip to content

Fix Windows subprocess NotImplementedError for STDIO clients #1009

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed

Conversation

felixweinberger
Copy link
Contributor

@felixweinberger felixweinberger commented Jun 23, 2025

Warning

THIS IS FOR REVIEW ONLY - PR #596 should be the one that gets merged.

This is a rebase of PR #596 (#596) by @theailanguage with merge conflicts resolved and (presumed) unrelated changes removed.

Original fix by @theailanguage implements a fallback mechanism for Windows where asyncio.create_subprocess_exec raises NotImplementedError. Uses subprocess.Popen directly with async stream wrappers to maintain compatibility.

The DummyProcess class wraps the synchronous Popen object and provides the same interface as anyio.Process for seamless integration.

Resolves subprocess creation issues on Windows, particularly in environments with different event loop configurations like Streamlit.

@felixweinberger felixweinberger force-pushed the fweinberger/windows-subprocess-fix-clean branch from 01d073d to d613377 Compare June 23, 2025 19:47
@felixweinberger felixweinberger force-pushed the fweinberger/windows-subprocess-fix-clean branch from d613377 to 75d14a5 Compare June 23, 2025 19:54
On Windows, asyncio.create_subprocess_exec raises NotImplementedError due to
incomplete subprocess transport support in ProactorEventLoop. This commit
implements a fallback using subprocess.Popen directly with async wrappers.

The fix introduces a DummyProcess class that wraps subprocess.Popen and
provides async-compatible stdin/stdout streams using anyio's FileReadStream
and FileWriteStream. This allows MCP STDIO clients to work on Windows
without encountering the NotImplementedError.

Based on PR #596 by @theailanguage

Github-Issue: #596
Reported-by: theailanguage
The DummyProcess class wasn't closing file handles in its __aexit__ method,
causing ResourceWarning errors in CI tests on Windows. This commit adds
proper cleanup to close both the async stream wrappers and underlying raw
file handles when the process context manager exits.

This prevents file descriptor leaks and eliminates the ResourceWarning
errors seen in pytest output on Windows CI.
@felixweinberger felixweinberger force-pushed the fweinberger/windows-subprocess-fix-clean branch from 75d14a5 to 6a703a4 Compare June 23, 2025 19:56
@felixweinberger felixweinberger added the duplicate This issue or pull request already exists label Jun 23, 2025
@felixweinberger
Copy link
Contributor Author

Closing in favor of #596

@felixweinberger felixweinberger deleted the fweinberger/windows-subprocess-fix-clean branch June 26, 2025 19:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
duplicate This issue or pull request already exists
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant