mcp__Claude_Preview__preview_start reports success but never spawns the configured command (Windows 11)
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
Bug: mcp__Claude_Preview__preview_start reports success but never spawns the configured command (Windows 11)
Summary
On Windows 11, mcp__Claude_Preview__preview_start returns { status: "Server started successfully", port: 8766 } but the runtimeExecutable configured in .claude/launch.json is never executed. No process is spawned, no port is bound, no logs are produced. The browser surface in mcp__Claude_Preview__preview_eval returns either chrome-error://chromewebdata/ or an Awaiting server… placeholder data URL.
This is reproducible across every config variation I tried (different runtimes, paths, with/without cwd). Confirmed via a .bat wrapper that the configured command is never invoked at all — the bug is in the spawn step inside Preview, not in the configured runtime.
Environment
- OS: Microsoft Windows 11 Home 10.0.26200 (build 26200)
- Shell: PowerShell 5.1.26100.8328 (default), Bash also available via Claude Code
- Claude Code: Desktop client (Opus 4.7)
- Python (real, installed via
winget install Python.Python.3.13): 3.13.13 atC:\Users\jeroe\AppData\Local\Programs\Python\Python313\python.exe - Python on PATH (Microsoft Store alias): stub returning "3.14.3"
Reproduction
.claude/launch.json:
{
"version": "0.0.1",
"configurations": [
{
"name": "ops-hub",
"runtimeExecutable": ".claude\\preview.bat",
"runtimeArgs": [],
"cwd": "C:/Users/jeroe/OneDrive/Bureaublad/EatClub/Claude Data/Claude Code/ops-hub",
"port": 8765
}
]
}
.claude/preview.bat:
@echo off
echo [%DATE% %TIME%] preview.bat invoked, args=%* > "%TEMP%\preview-debug.log"
echo [%DATE% %TIME%] cwd=%CD% >> "%TEMP%\preview-debug.log"
echo [%DATE% %TIME%] launching python... >> "%TEMP%\preview-debug.log"
"C:\Users\jeroe\AppData\Local\Programs\Python\Python313\python.exe" -m http.server 8765 >> "%TEMP%\preview-debug.log" 2>&1
Steps:
- Save the two files above.
- Call
mcp__Claude_Preview__preview_startwithname: "ops-hub". - Wait 5 seconds.
- Check for
%TEMP%\preview-debug.log. It does not exist. - Run
tasklist /FI "IMAGENAME eq cmd.exe"andtasklist /FI "IMAGENAME eq python.exe". Neither shows the spawned process. - Run
netstat -ano | grep "LISTENING.*876[5-9]". Nothing listening. - Call
mcp__Claude_Preview__preview_eval— returnschrome-error://chromewebdata/or anAwaiting server…placeholder.
Expected
Either:
- The configured
runtimeExecutableis actually invoked (the .bat would create the debug log, then python would bind 8765), or preview_startreturns an error explaining what failed.
Actual
preview_start returns success. The configured command is never spawned. No log file. No process. No port. preview_logs returns "No logs yet." indefinitely.
What I tried (all behaved the same — silent failure)
| runtimeExecutable | runtimeArgs | cwd set | Result |
|---|---|---|---|
| python | ["-m", "http.server", "8765"] | yes | spawns Microsoft Store stub (zombie process, no port) |
| python | ["-m", "http.server", "8765"] | no | spawns Microsoft Store stub (zombie process, no port) |
| python3 | ["-m", "http.server", "8765"] | yes | same as above |
| cmd.exe | ["/c", "python", "-m", "http.server", "8765"] | yes | cmd starts but python never binds |
| py | ["-3", "-m", "http.server", "8765"] | yes | nothing spawned |
| Absolute path to real Python (C:/.../python.exe, forward slashes) | ["-m", "http.server", "8765"] | yes | nothing spawned |
| Absolute path (double backslashes) | same | yes | nothing spawned |
| Absolute path to real Python | same | omitted | nothing spawned |
| .claude\preview.bat (proves whether the spawn happens at all) | [] | yes | .bat never executed; no debug log created |
Manual verification that real Python works fine when spawned by anything else:
- Direct from PowerShell:
python -m http.server 8770→ binds, serves files. ✓ - Via Bash background tool:
python -m http.server 8770→ binds, serves files. ✓ - Via PowerShell
Start-Processwith the same args Preview is configured with → binds successfully. ✓
So the binary works in every spawning context except Claude Preview's own spawner.
Impact
In a session that depended on iterating UI changes with the preview_* family of tools (snapshot / screenshot / eval / console_logs), I had to fall back entirely to "edit, push, ask the user to look" — costing both time and credits across many turns of trial-and-error. Eventually I gave up trying to use the tool.
Suggested fix priorities
- Surface the spawn failure instead of returning
Server started successfully. Even a generic "spawned process exited immediately" or "no process created" would have saved hours. - Investigate why the Windows spawn path silently no-ops with the configurations above. Likely a process-creation flag or working-directory-with-spaces issue.
- Make
preview_logsshow spawn-side errors, not just stdout/stderr from the (never-started) child.
Happy to provide any further trace data on request.
What Should Happen?
Bug: mcp__Claude_Preview__preview_start reports success but never spawns the configured command (Windows 11)
Summary
On Windows 11, mcp__Claude_Preview__preview_start returns { status: "Server started successfully", port: 8766 } but the runtimeExecutable configured in .claude/launch.json is never executed. No process is spawned, no port is bound, no logs are produced. The browser surface in mcp__Claude_Preview__preview_eval returns either chrome-error://chromewebdata/ or an Awaiting server… placeholder data URL.
This is reproducible across every config variation I tried (different runtimes, paths, with/without cwd). Confirmed via a .bat wrapper that the configured command is never invoked at all — the bug is in the spawn step inside Preview, not in the configured runtime.
Environment
- OS: Microsoft Windows 11 Home 10.0.26200 (build 26200)
- Shell: PowerShell 5.1.26100.8328 (default), Bash also available via Claude Code
- Claude Code: Desktop client (Opus 4.7)
- Python (real, installed via
winget install Python.Python.3.13): 3.13.13 atC:\Users\jeroe\AppData\Local\Programs\Python\Python313\python.exe - Python on PATH (Microsoft Store alias): stub returning "3.14.3"
Reproduction
.claude/launch.json:
{
"version": "0.0.1",
"configurations": [
{
"name": "ops-hub",
"runtimeExecutable": ".claude\\preview.bat",
"runtimeArgs": [],
"cwd": "C:/Users/jeroe/OneDrive/Bureaublad/EatClub/Claude Data/Claude Code/ops-hub",
"port": 8765
}
]
}
.claude/preview.bat:
@echo off
echo [%DATE% %TIME%] preview.bat invoked, args=%* > "%TEMP%\preview-debug.log"
echo [%DATE% %TIME%] cwd=%CD% >> "%TEMP%\preview-debug.log"
echo [%DATE% %TIME%] launching python... >> "%TEMP%\preview-debug.log"
"C:\Users\jeroe\AppData\Local\Programs\Python\Python313\python.exe" -m http.server 8765 >> "%TEMP%\preview-debug.log" 2>&1
Steps:
- Save the two files above.
- Call
mcp__Claude_Preview__preview_startwithname: "ops-hub". - Wait 5 seconds.
- Check for
%TEMP%\preview-debug.log. It does not exist. - Run
tasklist /FI "IMAGENAME eq cmd.exe"andtasklist /FI "IMAGENAME eq python.exe". Neither shows the spawned process. - Run
netstat -ano | grep "LISTENING.*876[5-9]". Nothing listening. - Call
mcp__Claude_Preview__preview_eval— returnschrome-error://chromewebdata/or anAwaiting server…placeholder.
Expected
Either:
- The configured
runtimeExecutableis actually invoked (the .bat would create the debug log, then python would bind 8765), or preview_startreturns an error explaining what failed.
Actual
preview_start returns success. The configured command is never spawned. No log file. No process. No port. preview_logs returns "No logs yet." indefinitely.
What I tried (all behaved the same — silent failure)
| runtimeExecutable | runtimeArgs | cwd set | Result |
|---|---|---|---|
| python | ["-m", "http.server", "8765"] | yes | spawns Microsoft Store stub (zombie process, no port) |
| python | ["-m", "http.server", "8765"] | no | spawns Microsoft Store stub (zombie process, no port) |
| python3 | ["-m", "http.server", "8765"] | yes | same as above |
| cmd.exe | ["/c", "python", "-m", "http.server", "8765"] | yes | cmd starts but python never binds |
| py | ["-3", "-m", "http.server", "8765"] | yes | nothing spawned |
| Absolute path to real Python (C:/.../python.exe, forward slashes) | ["-m", "http.server", "8765"] | yes | nothing spawned |
| Absolute path (double backslashes) | same | yes | nothing spawned |
| Absolute path to real Python | same | omitted | nothing spawned |
| .claude\preview.bat (proves whether the spawn happens at all) | [] | yes | .bat never executed; no debug log created |
Manual verification that real Python works fine when spawned by anything else:
- Direct from PowerShell:
python -m http.server 8770→ binds, serves files. ✓ - Via Bash background tool:
python -m http.server 8770→ binds, serves files. ✓ - Via PowerShell
Start-Processwith the same args Preview is configured with → binds successfully. ✓
So the binary works in every spawning context except Claude Preview's own spawner.
Impact
In a session that depended on iterating UI changes with the preview_* family of tools (snapshot / screenshot / eval / console_logs), I had to fall back entirely to "edit, push, ask the user to look" — costing both time and credits across many turns of trial-and-error. Eventually I gave up trying to use the tool.
Suggested fix priorities
- Surface the spawn failure instead of returning
Server started successfully. Even a generic "spawned process exited immediately" or "no process created" would have saved hours. - Investigate why the Windows spawn path silently no-ops with the configurations above. Likely a process-creation flag or working-directory-with-spaces issue.
- Make
preview_logsshow spawn-side errors, not just stdout/stderr from the (never-started) child.
Happy to provide any further trace data on request.
Error Messages/Logs
Steps to Reproduce
Bug: mcp__Claude_Preview__preview_start reports success but never spawns the configured command (Windows 11)
Summary
On Windows 11, mcp__Claude_Preview__preview_start returns { status: "Server started successfully", port: 8766 } but the runtimeExecutable configured in .claude/launch.json is never executed. No process is spawned, no port is bound, no logs are produced. The browser surface in mcp__Claude_Preview__preview_eval returns either chrome-error://chromewebdata/ or an Awaiting server… placeholder data URL.
This is reproducible across every config variation I tried (different runtimes, paths, with/without cwd). Confirmed via a .bat wrapper that the configured command is never invoked at all — the bug is in the spawn step inside Preview, not in the configured runtime.
Environment
- OS: Microsoft Windows 11 Home 10.0.26200 (build 26200)
- Shell: PowerShell 5.1.26100.8328 (default), Bash also available via Claude Code
- Claude Code: Desktop client (Opus 4.7)
- Python (real, installed via
winget install Python.Python.3.13): 3.13.13 atC:\Users\jeroe\AppData\Local\Programs\Python\Python313\python.exe - Python on PATH (Microsoft Store alias): stub returning "3.14.3"
Reproduction
.claude/launch.json:
{
"version": "0.0.1",
"configurations": [
{
"name": "ops-hub",
"runtimeExecutable": ".claude\\preview.bat",
"runtimeArgs": [],
"cwd": "C:/Users/jeroe/OneDrive/Bureaublad/EatClub/Claude Data/Claude Code/ops-hub",
"port": 8765
}
]
}
.claude/preview.bat:
@echo off
echo [%DATE% %TIME%] preview.bat invoked, args=%* > "%TEMP%\preview-debug.log"
echo [%DATE% %TIME%] cwd=%CD% >> "%TEMP%\preview-debug.log"
echo [%DATE% %TIME%] launching python... >> "%TEMP%\preview-debug.log"
"C:\Users\jeroe\AppData\Local\Programs\Python\Python313\python.exe" -m http.server 8765 >> "%TEMP%\preview-debug.log" 2>&1
Steps:
- Save the two files above.
- Call
mcp__Claude_Preview__preview_startwithname: "ops-hub". - Wait 5 seconds.
- Check for
%TEMP%\preview-debug.log. It does not exist. - Run
tasklist /FI "IMAGENAME eq cmd.exe"andtasklist /FI "IMAGENAME eq python.exe". Neither shows the spawned process. - Run
netstat -ano | grep "LISTENING.*876[5-9]". Nothing listening. - Call
mcp__Claude_Preview__preview_eval— returnschrome-error://chromewebdata/or anAwaiting server…placeholder.
Expected
Either:
- The configured
runtimeExecutableis actually invoked (the .bat would create the debug log, then python would bind 8765), or preview_startreturns an error explaining what failed.
Actual
preview_start returns success. The configured command is never spawned. No log file. No process. No port. preview_logs returns "No logs yet." indefinitely.
What I tried (all behaved the same — silent failure)
| runtimeExecutable | runtimeArgs | cwd set | Result |
|---|---|---|---|
| python | ["-m", "http.server", "8765"] | yes | spawns Microsoft Store stub (zombie process, no port) |
| python | ["-m", "http.server", "8765"] | no | spawns Microsoft Store stub (zombie process, no port) |
| python3 | ["-m", "http.server", "8765"] | yes | same as above |
| cmd.exe | ["/c", "python", "-m", "http.server", "8765"] | yes | cmd starts but python never binds |
| py | ["-3", "-m", "http.server", "8765"] | yes | nothing spawned |
| Absolute path to real Python (C:/.../python.exe, forward slashes) | ["-m", "http.server", "8765"] | yes | nothing spawned |
| Absolute path (double backslashes) | same | yes | nothing spawned |
| Absolute path to real Python | same | omitted | nothing spawned |
| .claude\preview.bat (proves whether the spawn happens at all) | [] | yes | .bat never executed; no debug log created |
Manual verification that real Python works fine when spawned by anything else:
- Direct from PowerShell:
python -m http.server 8770→ binds, serves files. ✓ - Via Bash background tool:
python -m http.server 8770→ binds, serves files. ✓ - Via PowerShell
Start-Processwith the same args Preview is configured with → binds successfully. ✓
So the binary works in every spawning context except Claude Preview's own spawner.
Impact
In a session that depended on iterating UI changes with the preview_* family of tools (snapshot / screenshot / eval / console_logs), I had to fall back entirely to "edit, push, ask the user to look" — costing both time and credits across many turns of trial-and-error. Eventually I gave up trying to use the tool.
Suggested fix priorities
- Surface the spawn failure instead of returning
Server started successfully. Even a generic "spawned process exited immediately" or "no process created" would have saved hours. - Investigate why the Windows spawn path silently no-ops with the configurations above. Likely a process-creation flag or working-directory-with-spaces issue.
- Make
preview_logsshow spawn-side errors, not just stdout/stderr from the (never-started) child.
Happy to provide any further trace data on request.
Claude Model
Opus
Is this a regression?
Yes, this worked in a previous version
Last Working Version
_No response_
Claude Code Version
Claude 1.5354.0 (9a9e3d) 2026-04-29T01:14:34.000Z
Platform
Anthropic API
Operating System
Windows
Terminal/Shell
PowerShell
Additional Information
_No response_
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗