#!/usr/bin/env node /** * Unified Chrome MCP setup script. * * Usage: * node scripts/setup-chrome-mcp.mjs # Run full setup (fix-permissions → register → doctor) * node scripts/setup-chrome-mcp.mjs doctor # Run a single sub-command */ import { execFileSync } from 'node:child_process' import { mkdirSync } from 'node:fs' import { createRequire } from 'node:module' import { homedir } from 'node:os' import { join } from 'node:path' if (process.env.CLAUDE_CODE_SKIP_CHROME_MCP_SETUP === '1') { process.exit(0) } const require = createRequire(import.meta.url) const cliPath = require.resolve( '@claude-code-best/mcp-chrome-bridge/dist/cli.js', ) const userArgs = process.argv.slice(2) function getChromeMcpLogDir() { const home = homedir() if (process.platform === 'darwin') { return join(home, 'Library', 'Logs', 'mcp-chrome-bridge') } if (process.platform === 'win32') { return join( process.env.LOCALAPPDATA || join(home, 'AppData', 'Local'), 'mcp-chrome-bridge', 'logs', ) } return join( process.env.XDG_STATE_HOME || join(home, '.local', 'state'), 'mcp-chrome-bridge', 'logs', ) } if (userArgs.length > 0) { // Forward single sub-command execFileSync('node', [cliPath, ...userArgs], { stdio: 'inherit' }) } else { // Full setup sequence const steps = [ ['fix-permissions'], ['register', '--browser', 'chrome'], ['doctor'], ] mkdirSync(getChromeMcpLogDir(), { recursive: true }) for (let i = 0; i < steps.length; i++) { const args = steps[i] const isLast = i === steps.length - 1 if (isLast) console.log(`\n[${i + 1}/${steps.length}] ${args.join(' ')}`) execFileSync('node', [cliPath, ...args], { stdio: isLast ? 'inherit' : 'pipe', }) } console.log('\nChrome MCP setup complete!') }