mcp__Claude_Preview__preview_start reports success but never spawns the configured command (Windows 11)

Resolved 💬 3 comments Opened May 4, 2026 by jeroen-eatclub Closed May 8, 2026

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 at C:\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:

  1. Save the two files above.
  2. Call mcp__Claude_Preview__preview_start with name: "ops-hub".
  3. Wait 5 seconds.
  4. Check for %TEMP%\preview-debug.log. It does not exist.
  5. Run tasklist /FI "IMAGENAME eq cmd.exe" and tasklist /FI "IMAGENAME eq python.exe". Neither shows the spawned process.
  6. Run netstat -ano | grep "LISTENING.*876[5-9]". Nothing listening.
  7. Call mcp__Claude_Preview__preview_eval — returns chrome-error://chromewebdata/ or an Awaiting server… placeholder.

Expected

Either:

  • The configured runtimeExecutable is actually invoked (the .bat would create the debug log, then python would bind 8765), or
  • preview_start returns 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-Process with 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

  1. 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.
  2. Investigate why the Windows spawn path silently no-ops with the configurations above. Likely a process-creation flag or working-directory-with-spaces issue.
  3. Make preview_logs show 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 at C:\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:

  1. Save the two files above.
  2. Call mcp__Claude_Preview__preview_start with name: "ops-hub".
  3. Wait 5 seconds.
  4. Check for %TEMP%\preview-debug.log. It does not exist.
  5. Run tasklist /FI "IMAGENAME eq cmd.exe" and tasklist /FI "IMAGENAME eq python.exe". Neither shows the spawned process.
  6. Run netstat -ano | grep "LISTENING.*876[5-9]". Nothing listening.
  7. Call mcp__Claude_Preview__preview_eval — returns chrome-error://chromewebdata/ or an Awaiting server… placeholder.

Expected

Either:

  • The configured runtimeExecutable is actually invoked (the .bat would create the debug log, then python would bind 8765), or
  • preview_start returns 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-Process with 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

  1. 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.
  2. Investigate why the Windows spawn path silently no-ops with the configurations above. Likely a process-creation flag or working-directory-with-spaces issue.
  3. Make preview_logs show 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 at C:\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:

  1. Save the two files above.
  2. Call mcp__Claude_Preview__preview_start with name: "ops-hub".
  3. Wait 5 seconds.
  4. Check for %TEMP%\preview-debug.log. It does not exist.
  5. Run tasklist /FI "IMAGENAME eq cmd.exe" and tasklist /FI "IMAGENAME eq python.exe". Neither shows the spawned process.
  6. Run netstat -ano | grep "LISTENING.*876[5-9]". Nothing listening.
  7. Call mcp__Claude_Preview__preview_eval — returns chrome-error://chromewebdata/ or an Awaiting server… placeholder.

Expected

Either:

  • The configured runtimeExecutable is actually invoked (the .bat would create the debug log, then python would bind 8765), or
  • preview_start returns 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-Process with 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

  1. 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.
  2. Investigate why the Windows spawn path silently no-ops with the configurations above. Likely a process-creation flag or working-directory-with-spaces issue.
  3. Make preview_logs show 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_

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗