preview_start fails with ENOENT for disclaimer binary even though it exists
Resolved 💬 3 comments Opened Mar 20, 2026 by pannuprabhat Closed Mar 23, 2026
Bug Description
preview_start (via the Claude Preview MCP tool) fails with the error:
Failed to start preview server: spawn /Applications/Claude.app/Contents/Helpers/disclaimer ENOENT
The disclaimer binary exists, has correct permissions, and runs fine from the shell. The issue persists even after removing the macOS quarantine attribute.
Steps to Reproduce
- Have a
.claude/launch.jsonwith a valid server configuration:
``json``
{
"version": "0.0.1",
"configurations": [
{
"name": "Frontend (Next.js)",
"runtimeExecutable": "npm",
"runtimeArgs": ["run", "dev"],
"port": 3000,
"cwd": "frontend"
}
]
}
- Call
preview_startwith name"Frontend (Next.js)" - Error:
Failed to start preview server: spawn /Applications/Claude.app/Contents/Helpers/disclaimer ENOENT
Verification
The binary exists and works:
$ ls -la /Applications/Claude.app/Contents/Helpers/disclaimer
-rwxr-xr-x@ 1 user admin 135600 Mar 19 21:00 /Applications/Claude.app/Contents/Helpers/disclaimer
$ file /Applications/Claude.app/Contents/Helpers/disclaimer
Mach-O universal binary with 2 architectures: [x86_64] [arm64]
$ /Applications/Claude.app/Contents/Helpers/disclaimer
Usage: disclaimer <command> [args...]
Quarantine was removed but made no difference:
$ xattr -dr com.apple.quarantine /Applications/Claude.app
Environment
- Claude Code version: 2.1.79
- macOS: 26.3.1 (Build 25D2128)
- Architecture: arm64 (Apple Silicon)
- Node.js: v22.17.0
Analysis
Since the binary runs fine from the shell but spawn reports ENOENT, the issue is likely:
- The Node.js
spawncall may not be resolving the path correctly - A missing dependency of the
disclaimerbinary (thoughfileshows it's a valid Mach-O for arm64) - The preview tool's process environment may differ from the shell environment (missing PATH entries, sandbox restrictions, etc.)
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗