{"_id":"@eikaramba/puppeteer-real-browser-mcp-server","_rev":"7-3712b9f6b2d59a9e10b3d10bca6790b6","name":"@eikaramba/puppeteer-real-browser-mcp-server","dist-tags":{"latest":"1.5.29"},"versions":{"1.5.20":{"name":"@eikaramba/puppeteer-real-browser-mcp-server","version":"1.5.20","keywords":["mcp","puppeteer","browser-automation"],"author":{"name":"eikaramba"},"license":"MIT","_id":"@eikaramba/puppeteer-real-browser-mcp-server@1.5.20","maintainers":[{"name":"eikaramba","email":"thies.eike@gmail.com"}],"homepage":"https://github.com/eikaramba/puppeteer-real-browser-mcp-server","bugs":{"url":"https://github.com/eikaramba/puppeteer-real-browser-mcp-server/issues"},"os":["darwin","linux","win32"],"bin":{"puppeteer-real-browser-mcp-server":"dist/index.js"},"dist":{"shasum":"9f4a73b145656e93859807c7b25254d4444c00dc","tarball":"https://registry.npmjs.org/@eikaramba/puppeteer-real-browser-mcp-server/-/puppeteer-real-browser-mcp-server-1.5.20.tgz","fileCount":27,"integrity":"sha512-7LZvGRVeE31+2ZBxOFCpq9ZP3Wtm3S1pEAA7s8EwQFY5SMgvKyNed9+YFBlIfO/IdhmP5WJ2wx0CEywabxNtUA==","signatures":[{"sig":"MEUCIQCk5rnAYZCPO9jwavTdlk8vT2rPuZvgP/olpA8NJVGTaQIgCkSgtW9Mo3kb+J5HuHfnfGAlGM6gYZ9YD5DOoUxhzQw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":569861},"main":"dist/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"f8cc24a7744ca090aee6ef3ba51240741224296a","scripts":{"dev":"tsx src/index.ts","test":"vitest","build":"tsc","clean":"rimraf dist","start":"node dist/index.js","rebuild":"npm run clean && npm run build","test:ci":"vitest run --coverage","test:ui":"vitest --ui","prebuild":"npm run clean","test:all":"npm run test:ci && npm run test:full && npm run test:performance","test:e2e":"vitest run --config vitest.e2e.config.ts","clean:all":"npm run clean:modules && npm run clean:cache && npm run clean","fresh-dev":"npm run fresh-install && npm run build && npm run dev","test:full":"cd tests/mcp-testing && npm test","test:unit":"vitest run src","test:debug":"node debug-server.js","test:watch":"vitest --watch","clean:cache":"npm cache clean --force","fresh-start":"npm run fresh-install && npm run build && npm start","clean:modules":"rm -rf node_modules","fresh-install":"npm run clean:all && npm install","test:coverage":"vitest --coverage","test:dashboard":"node test-runner.js","test:e2e:watch":"vitest --config vitest.e2e.config.ts","test:integration":"vitest run test/integration","test:performance":"node tests/performance/performance-tests.js","test:chrome:cleanup":"pkill -f 'Google Chrome' || true","fix-cache-permissions":"echo 'Run: sudo chown -R $(whoami):$(id -gn) ~/.npm' && echo 'This fixes npm cache permission issues'"},"_npmUser":{"name":"eikaramba","email":"thies.eike@gmail.com"},"repository":{"url":"git+https://github.com/eikaramba/puppeteer-real-browser-mcp-server.git","type":"git"},"_npmVersion":"10.9.2","description":"MCP server for puppeteer-real-browser","directories":{},"_nodeVersion":"22.15.1","dependencies":{"turndown":"^7.2.0","@types/turndown":"^5.0.5","puppeteer-real-browser":"^1.3.18","@modelcontextprotocol/sdk":">=1.0.0"},"preferGlobal":true,"_hasShrinkwrap":false,"devDependencies":{"tsx":"latest","rimraf":"^6.0.1","vitest":"^2.1.8","@vitest/ui":"^2.1.8","typescript":"^5.5.3","@types/node":"latest","@vitest/coverage-v8":"^2.1.8"},"peerDependencies":{"@modelcontextprotocol/sdk":">=1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/puppeteer-real-browser-mcp-server_1.5.20_1761861517391_0.04833356862345983","host":"s3://npm-registry-packages-npm-production"}},"1.5.24":{"name":"@eikaramba/puppeteer-real-browser-mcp-server","version":"1.5.24","keywords":["mcp","puppeteer","browser-automation"],"author":{"name":"eikaramba"},"license":"MIT","_id":"@eikaramba/puppeteer-real-browser-mcp-server@1.5.24","maintainers":[{"name":"eikaramba","email":"thies.eike@gmail.com"}],"homepage":"https://github.com/eikaramba/puppeteer-real-browser-mcp-server","bugs":{"url":"https://github.com/eikaramba/puppeteer-real-browser-mcp-server/issues"},"os":["darwin","linux","win32"],"bin":{"puppeteer-real-browser-mcp-server":"dist/index.js"},"dist":{"shasum":"6ea13a453e66a1de910bc5fc4cbdc2b339bb07a6","tarball":"https://registry.npmjs.org/@eikaramba/puppeteer-real-browser-mcp-server/-/puppeteer-real-browser-mcp-server-1.5.24.tgz","fileCount":27,"integrity":"sha512-sqEir/4CYyHfVii2x8a+zgNBaxFeWdWLc+6F9B8ZAxPy5vGe/WDDRgmxX4Iptms4m5sJ2qm8R8U0SHQdMTymWg==","signatures":[{"sig":"MEQCIE/l3vNp6eIW0oFW/qJpDjV0BiAAG+k9d7E2f1cnKhfnAiAtvMVt2i6CHrxBmYRBdg4Z8dxVvpTZ/VvjpodXoAcZkw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":571497},"main":"dist/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"1f51b03ffb9030b75fa5154d57fa8b332070be61","scripts":{"dev":"tsx src/index.ts","test":"vitest","build":"tsc","clean":"rimraf dist","start":"node dist/index.js","rebuild":"npm run clean && npm run build","test:ci":"vitest run --coverage","test:ui":"vitest --ui","prebuild":"npm run clean","test:all":"npm run test:ci && npm run test:full && npm run test:performance","test:e2e":"vitest run --config vitest.e2e.config.ts","clean:all":"npm run clean:modules && npm run clean:cache && npm run clean","fresh-dev":"npm run fresh-install && npm run build && npm run dev","test:full":"cd tests/mcp-testing && npm test","test:unit":"vitest run src","test:debug":"node debug-server.js","test:watch":"vitest --watch","clean:cache":"npm cache clean --force","fresh-start":"npm run fresh-install && npm run build && npm start","clean:modules":"rm -rf node_modules","fresh-install":"npm run clean:all && npm install","test:coverage":"vitest --coverage","test:dashboard":"node test-runner.js","test:e2e:watch":"vitest --config vitest.e2e.config.ts","test:integration":"vitest run test/integration","test:performance":"node tests/performance/performance-tests.js","test:chrome:cleanup":"pkill -f 'Google Chrome' || true","fix-cache-permissions":"echo 'Run: sudo chown -R $(whoami):$(id -gn) ~/.npm' && echo 'This fixes npm cache permission issues'"},"_npmUser":{"name":"eikaramba","email":"thies.eike@gmail.com"},"repository":{"url":"git+https://github.com/eikaramba/puppeteer-real-browser-mcp-server.git","type":"git"},"_npmVersion":"10.9.2","description":"MCP server for puppeteer-real-browser","directories":{},"_nodeVersion":"22.15.1","dependencies":{"turndown":"^7.2.0","@types/turndown":"^5.0.5","puppeteer-real-browser":"^1.3.18","@modelcontextprotocol/sdk":">=1.0.0"},"preferGlobal":true,"_hasShrinkwrap":false,"devDependencies":{"tsx":"latest","rimraf":"^6.0.1","vitest":"^2.1.8","@vitest/ui":"^2.1.8","typescript":"^5.5.3","@types/node":"latest","@vitest/coverage-v8":"^2.1.8"},"peerDependencies":{"@modelcontextprotocol/sdk":">=1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/puppeteer-real-browser-mcp-server_1.5.24_1761946331976_0.2874136041001365","host":"s3://npm-registry-packages-npm-production"}},"1.5.25":{"name":"@eikaramba/puppeteer-real-browser-mcp-server","version":"1.5.25","keywords":["mcp","puppeteer","browser-automation"],"author":{"name":"eikaramba"},"license":"MIT","_id":"@eikaramba/puppeteer-real-browser-mcp-server@1.5.25","maintainers":[{"name":"eikaramba","email":"thies.eike@gmail.com"}],"homepage":"https://github.com/eikaramba/puppeteer-real-browser-mcp-server","bugs":{"url":"https://github.com/eikaramba/puppeteer-real-browser-mcp-server/issues"},"os":["darwin","linux","win32"],"bin":{"puppeteer-real-browser-mcp-server":"dist/index.js"},"dist":{"shasum":"2685a6a7dae38b15910e96d5f6a3484924939a39","tarball":"https://registry.npmjs.org/@eikaramba/puppeteer-real-browser-mcp-server/-/puppeteer-real-browser-mcp-server-1.5.25.tgz","fileCount":27,"integrity":"sha512-hltNaZOmVEAEtVGsyRy3XAUUxH1C7/8N/WgD4DWFpWMOJYS42n+buElGuegzx3KFg0kXzAH0yHimVBfTHeq6Jw==","signatures":[{"sig":"MEUCIQDESsiw1KBarSQLf773RLxheANd6YyvqYXBUGViDd1oBQIgHNVBE9TdCgeXUfojDTYdwNw8inWUIn+t7KpXTrY3rd4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":572234},"main":"dist/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"7a806fbf74ffa5e7367494dea856361fc5512437","scripts":{"dev":"tsx src/index.ts","test":"vitest","build":"tsc","clean":"rimraf dist","start":"node dist/index.js","rebuild":"npm run clean && npm run build","test:ci":"vitest run --coverage","test:ui":"vitest --ui","prebuild":"npm run clean","test:all":"npm run test:ci && npm run test:full && npm run test:performance","test:e2e":"vitest run --config vitest.e2e.config.ts","clean:all":"npm run clean:modules && npm run clean:cache && npm run clean","fresh-dev":"npm run fresh-install && npm run build && npm run dev","test:full":"cd tests/mcp-testing && npm test","test:unit":"vitest run src","test:debug":"node debug-server.js","test:watch":"vitest --watch","clean:cache":"npm cache clean --force","fresh-start":"npm run fresh-install && npm run build && npm start","clean:modules":"rm -rf node_modules","fresh-install":"npm run clean:all && npm install","test:coverage":"vitest --coverage","test:dashboard":"node test-runner.js","test:e2e:watch":"vitest --config vitest.e2e.config.ts","test:integration":"vitest run test/integration","test:performance":"node tests/performance/performance-tests.js","test:chrome:cleanup":"pkill -f 'Google Chrome' || true","fix-cache-permissions":"echo 'Run: sudo chown -R $(whoami):$(id -gn) ~/.npm' && echo 'This fixes npm cache permission issues'"},"_npmUser":{"name":"eikaramba","email":"thies.eike@gmail.com"},"repository":{"url":"git+https://github.com/eikaramba/puppeteer-real-browser-mcp-server.git","type":"git"},"_npmVersion":"10.9.2","description":"MCP server for puppeteer-real-browser","directories":{},"_nodeVersion":"22.15.1","dependencies":{"turndown":"^7.2.0","@types/turndown":"^5.0.5","puppeteer-real-browser":"^1.3.18","@modelcontextprotocol/sdk":">=1.0.0"},"preferGlobal":true,"_hasShrinkwrap":false,"devDependencies":{"tsx":"latest","rimraf":"^6.0.1","vitest":"^2.1.8","@vitest/ui":"^2.1.8","typescript":"^5.5.3","@types/node":"latest","@vitest/coverage-v8":"^2.1.8"},"peerDependencies":{"@modelcontextprotocol/sdk":">=1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/puppeteer-real-browser-mcp-server_1.5.25_1761946948206_0.7333246066602204","host":"s3://npm-registry-packages-npm-production"}},"1.5.26":{"name":"@eikaramba/puppeteer-real-browser-mcp-server","version":"1.5.26","keywords":["mcp","puppeteer","browser-automation"],"author":{"name":"eikaramba"},"license":"MIT","_id":"@eikaramba/puppeteer-real-browser-mcp-server@1.5.26","maintainers":[{"name":"eikaramba","email":"thies.eike@gmail.com"}],"homepage":"https://github.com/eikaramba/puppeteer-real-browser-mcp-server","bugs":{"url":"https://github.com/eikaramba/puppeteer-real-browser-mcp-server/issues"},"os":["darwin","linux","win32"],"bin":{"puppeteer-real-browser-mcp-server":"dist/index.js"},"dist":{"shasum":"5c1a3333c71c53587166daef79a34361dc1b5984","tarball":"https://registry.npmjs.org/@eikaramba/puppeteer-real-browser-mcp-server/-/puppeteer-real-browser-mcp-server-1.5.26.tgz","fileCount":27,"integrity":"sha512-hQnvkbQST9Btysyzindk4ay35C+EcjcaReeJC+bwKNAnjQ6XzxE1OsMKg+ZTCuYoLoRdlapx3VtpMOTlebmqrA==","signatures":[{"sig":"MEUCIBw2ytJTnFyEpoHFbACDmL0ZC/k/9IHB0sLbFo1wsTz2AiEA6/HfiAQ8kJ3Jw/DevCrZzs8g4fYEU3IWbbiO+cU1+oM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":572467},"main":"dist/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"12712d320d3ce5d2aca120bdd64e46f525f1c4f4","scripts":{"dev":"tsx src/index.ts","test":"vitest","build":"tsc","clean":"rimraf dist","start":"node dist/index.js","rebuild":"npm run clean && npm run build","test:ci":"vitest run --coverage","test:ui":"vitest --ui","prebuild":"npm run clean","test:all":"npm run test:ci && npm run test:full && npm run test:performance","test:e2e":"vitest run --config vitest.e2e.config.ts","clean:all":"npm run clean:modules && npm run clean:cache && npm run clean","fresh-dev":"npm run fresh-install && npm run build && npm run dev","test:full":"cd tests/mcp-testing && npm test","test:unit":"vitest run src","test:debug":"node debug-server.js","test:watch":"vitest --watch","clean:cache":"npm cache clean --force","fresh-start":"npm run fresh-install && npm run build && npm start","clean:modules":"rm -rf node_modules","fresh-install":"npm run clean:all && npm install","test:coverage":"vitest --coverage","test:dashboard":"node test-runner.js","test:e2e:watch":"vitest --config vitest.e2e.config.ts","test:integration":"vitest run test/integration","test:performance":"node tests/performance/performance-tests.js","test:chrome:cleanup":"pkill -f 'Google Chrome' || true","fix-cache-permissions":"echo 'Run: sudo chown -R $(whoami):$(id -gn) ~/.npm' && echo 'This fixes npm cache permission issues'"},"_npmUser":{"name":"eikaramba","email":"thies.eike@gmail.com"},"repository":{"url":"git+https://github.com/eikaramba/puppeteer-real-browser-mcp-server.git","type":"git"},"_npmVersion":"10.9.2","description":"MCP server for puppeteer-real-browser","directories":{},"_nodeVersion":"22.15.1","dependencies":{"turndown":"^7.2.0","@types/turndown":"^5.0.5","puppeteer-real-browser":"^1.3.18","@modelcontextprotocol/sdk":">=1.0.0"},"preferGlobal":true,"_hasShrinkwrap":false,"devDependencies":{"tsx":"latest","rimraf":"^6.0.1","vitest":"^2.1.8","@vitest/ui":"^2.1.8","typescript":"^5.5.3","@types/node":"latest","@vitest/coverage-v8":"^2.1.8"},"peerDependencies":{"@modelcontextprotocol/sdk":">=1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/puppeteer-real-browser-mcp-server_1.5.26_1761947292508_0.08280520960621729","host":"s3://npm-registry-packages-npm-production"}},"1.5.27":{"name":"@eikaramba/puppeteer-real-browser-mcp-server","version":"1.5.27","keywords":["mcp","puppeteer","browser-automation"],"author":{"name":"eikaramba"},"license":"MIT","_id":"@eikaramba/puppeteer-real-browser-mcp-server@1.5.27","maintainers":[{"name":"eikaramba","email":"thies.eike@gmail.com"}],"homepage":"https://github.com/eikaramba/puppeteer-real-browser-mcp-server","bugs":{"url":"https://github.com/eikaramba/puppeteer-real-browser-mcp-server/issues"},"os":["darwin","linux","win32"],"bin":{"puppeteer-real-browser-mcp-server":"dist/index.js"},"dist":{"shasum":"49a36a177506391c77df736a649e125788bd1eda","tarball":"https://registry.npmjs.org/@eikaramba/puppeteer-real-browser-mcp-server/-/puppeteer-real-browser-mcp-server-1.5.27.tgz","fileCount":27,"integrity":"sha512-JK0nHVm4RYKvhZkI0bHrJYsdkI5DR4tTCcNrAUT7Z61yTaRK24Je3wz+/y7G0FCnJXZJigWvONQoOFSKPjAfbg==","signatures":[{"sig":"MEYCIQCIX/wsmNbG6uF27k32jt+DebC2uvNhW6gm7jcnC4LDIgIhAIHGgjR9slbK/TK5hQxhBBd9aj6j6MgBREV5clAGSXnK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":571542},"main":"dist/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"8e3cebe96cb010dbb634c9abcf2fc2ee60b8de56","scripts":{"dev":"tsx src/index.ts","test":"vitest","build":"tsc","clean":"rimraf dist","start":"node dist/index.js","rebuild":"npm run clean && npm run build","test:ci":"vitest run --coverage","test:ui":"vitest --ui","prebuild":"npm run clean","test:all":"npm run test:ci && npm run test:full && npm run test:performance","test:e2e":"vitest run --config vitest.e2e.config.ts","clean:all":"npm run clean:modules && npm run clean:cache && npm run clean","fresh-dev":"npm run fresh-install && npm run build && npm run dev","test:full":"cd tests/mcp-testing && npm test","test:unit":"vitest run src","test:debug":"node debug-server.js","test:watch":"vitest --watch","clean:cache":"npm cache clean --force","fresh-start":"npm run fresh-install && npm run build && npm start","clean:modules":"rm -rf node_modules","fresh-install":"npm run clean:all && npm install","test:coverage":"vitest --coverage","test:dashboard":"node test-runner.js","test:e2e:watch":"vitest --config vitest.e2e.config.ts","test:integration":"vitest run test/integration","test:performance":"node tests/performance/performance-tests.js","test:chrome:cleanup":"pkill -f 'Google Chrome' || true","fix-cache-permissions":"echo 'Run: sudo chown -R $(whoami):$(id -gn) ~/.npm' && echo 'This fixes npm cache permission issues'"},"_npmUser":{"name":"eikaramba","email":"thies.eike@gmail.com"},"repository":{"url":"git+https://github.com/eikaramba/puppeteer-real-browser-mcp-server.git","type":"git"},"_npmVersion":"10.9.2","description":"MCP server for puppeteer-real-browser","directories":{},"_nodeVersion":"22.15.1","dependencies":{"turndown":"^7.2.0","@types/turndown":"^5.0.5","puppeteer-real-browser":"^1.3.18","@modelcontextprotocol/sdk":">=1.0.0"},"preferGlobal":true,"_hasShrinkwrap":false,"devDependencies":{"tsx":"latest","rimraf":"^6.0.1","vitest":"^2.1.8","@vitest/ui":"^2.1.8","typescript":"^5.5.3","@types/node":"latest","@vitest/coverage-v8":"^2.1.8"},"peerDependencies":{"@modelcontextprotocol/sdk":">=1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/puppeteer-real-browser-mcp-server_1.5.27_1761947654828_0.38712218819612976","host":"s3://npm-registry-packages-npm-production"}},"1.5.28":{"name":"@eikaramba/puppeteer-real-browser-mcp-server","version":"1.5.28","keywords":["mcp","puppeteer","browser-automation"],"author":{"name":"eikaramba"},"license":"MIT","_id":"@eikaramba/puppeteer-real-browser-mcp-server@1.5.28","maintainers":[{"name":"eikaramba","email":"thies.eike@gmail.com"}],"homepage":"https://github.com/eikaramba/puppeteer-real-browser-mcp-server","bugs":{"url":"https://github.com/eikaramba/puppeteer-real-browser-mcp-server/issues"},"os":["darwin","linux","win32"],"bin":{"puppeteer-real-browser-mcp-server":"dist/index.js"},"dist":{"shasum":"408bee8fb299343bbbbfa079dc1e08770924a2a8","tarball":"https://registry.npmjs.org/@eikaramba/puppeteer-real-browser-mcp-server/-/puppeteer-real-browser-mcp-server-1.5.28.tgz","fileCount":27,"integrity":"sha512-NhRz01LUEh2C5yhX3dzq6OYTx3wPTtcn7TI6elgF/x35muSEwcfmkB3OeX/Kk58pCyq/MxP7+BiKwFWsjp6Qqw==","signatures":[{"sig":"MEQCICo0aJZ3dw/8XFwy3L1zHSPj77zDmcnrvkqK3mqyhs3lAiBZh3XBPR7mF1giHzD4/6P7nNHGxF1ISRWRCyBzgvJWoQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":571571},"main":"dist/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"8e3cebe96cb010dbb634c9abcf2fc2ee60b8de56","scripts":{"dev":"tsx src/index.ts","test":"vitest","build":"tsc","clean":"rimraf dist","start":"node dist/index.js","rebuild":"npm run clean && npm run build","test:ci":"vitest run --coverage","test:ui":"vitest --ui","prebuild":"npm run clean","test:all":"npm run test:ci && npm run test:full && npm run test:performance","test:e2e":"vitest run --config vitest.e2e.config.ts","clean:all":"npm run clean:modules && npm run clean:cache && npm run clean","fresh-dev":"npm run fresh-install && npm run build && npm run dev","test:full":"cd tests/mcp-testing && npm test","test:unit":"vitest run src","test:debug":"node debug-server.js","test:watch":"vitest --watch","clean:cache":"npm cache clean --force","fresh-start":"npm run fresh-install && npm run build && npm start","clean:modules":"rm -rf node_modules","fresh-install":"npm run clean:all && npm install","test:coverage":"vitest --coverage","test:dashboard":"node test-runner.js","test:e2e:watch":"vitest --config vitest.e2e.config.ts","test:integration":"vitest run test/integration","test:performance":"node tests/performance/performance-tests.js","test:chrome:cleanup":"pkill -f 'Google Chrome' || true","fix-cache-permissions":"echo 'Run: sudo chown -R $(whoami):$(id -gn) ~/.npm' && echo 'This fixes npm cache permission issues'"},"_npmUser":{"name":"eikaramba","email":"thies.eike@gmail.com"},"repository":{"url":"git+https://github.com/eikaramba/puppeteer-real-browser-mcp-server.git","type":"git"},"_npmVersion":"10.9.2","description":"MCP server for puppeteer-real-browser","directories":{},"_nodeVersion":"22.15.1","dependencies":{"turndown":"^7.2.0","@types/turndown":"^5.0.5","puppeteer-real-browser":"^1.3.18","@modelcontextprotocol/sdk":">=1.0.0"},"preferGlobal":true,"_hasShrinkwrap":false,"devDependencies":{"tsx":"latest","rimraf":"^6.0.1","vitest":"^2.1.8","@vitest/ui":"^2.1.8","typescript":"^5.5.3","@types/node":"latest","@vitest/coverage-v8":"^2.1.8"},"peerDependencies":{"@modelcontextprotocol/sdk":">=1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/puppeteer-real-browser-mcp-server_1.5.28_1761947881645_0.8296802168281872","host":"s3://npm-registry-packages-npm-production"}},"1.5.29":{"name":"@eikaramba/puppeteer-real-browser-mcp-server","version":"1.5.29","description":"MCP server for puppeteer-real-browser","type":"module","main":"dist/index.js","scripts":{"clean":"rimraf dist","clean:cache":"npm cache clean --force","fix-cache-permissions":"echo 'Run: sudo chown -R $(whoami):$(id -gn) ~/.npm' && echo 'This fixes npm cache permission issues'","clean:modules":"rm -rf node_modules","clean:all":"npm run clean:modules && npm run clean:cache && npm run clean","fresh-install":"npm run clean:all && npm install","fresh-start":"npm run fresh-install && npm run build && npm start","fresh-dev":"npm run fresh-install && npm run build && npm run dev","prebuild":"npm run clean","build":"tsc","rebuild":"npm run clean && npm run build","start":"node dist/index.js","dev":"tsx src/index.ts","test":"vitest","test:watch":"vitest --watch","test:ui":"vitest --ui","test:coverage":"vitest --coverage","test:ci":"vitest run --coverage","test:unit":"vitest run src","test:integration":"vitest run test/integration","test:e2e":"vitest run --config vitest.e2e.config.ts","test:e2e:watch":"vitest --config vitest.e2e.config.ts","test:chrome:cleanup":"pkill -f 'Google Chrome' || true","test:full":"cd tests/mcp-testing && npm test","test:performance":"node tests/performance/performance-tests.js","test:debug":"node debug-server.js","test:all":"npm run test:ci && npm run test:full && npm run test:performance","test:dashboard":"node test-runner.js"},"dependencies":{"@modelcontextprotocol/sdk":">=1.0.0","@types/turndown":"^5.0.5","puppeteer-real-browser":"^1.3.18","turndown":"^7.2.0"},"peerDependencies":{"@modelcontextprotocol/sdk":">=1.0.0"},"devDependencies":{"@types/node":"latest","@vitest/coverage-v8":"^2.1.8","@vitest/ui":"^2.1.8","rimraf":"^6.0.1","tsx":"latest","typescript":"^5.5.3","vitest":"^2.1.8"},"keywords":["mcp","puppeteer","browser-automation"],"author":{"name":"eikaramba"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/eikaramba/puppeteer-real-browser-mcp-server.git"},"homepage":"https://github.com/eikaramba/puppeteer-real-browser-mcp-server","bugs":{"url":"https://github.com/eikaramba/puppeteer-real-browser-mcp-server/issues"},"bin":{"puppeteer-real-browser-mcp-server":"dist/index.js"},"engines":{"node":">=18.0.0"},"preferGlobal":true,"os":["darwin","linux","win32"],"_id":"@eikaramba/puppeteer-real-browser-mcp-server@1.5.29","gitHead":"8e3cebe96cb010dbb634c9abcf2fc2ee60b8de56","_nodeVersion":"22.15.1","_npmVersion":"10.9.2","dist":{"integrity":"sha512-hhye9LwVDFl/dg6zDK7AqebXcXCyGGbvpO6Xt2DzHp96u/sMM4waz55bZU8qVXNA+UmvamsYnAFnJe52HXHnug==","shasum":"236d4d26b941f7ab4b0a3e94b3060ad8f87153eb","tarball":"https://registry.npmjs.org/@eikaramba/puppeteer-real-browser-mcp-server/-/puppeteer-real-browser-mcp-server-1.5.29.tgz","fileCount":27,"unpackedSize":571761,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDpqz+No8bwCXXjuwGUB4p5pUtNTBWy2Jb07Ln/GeXkpgIgJ7AodeGTn4fVUuu9DqZhM6GXDIM0X7h8ZphiNVlLLwI="}]},"_npmUser":{"name":"eikaramba","email":"thies.eike@gmail.com"},"directories":{},"maintainers":[{"name":"eikaramba","email":"thies.eike@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/puppeteer-real-browser-mcp-server_1.5.29_1761948117025_0.44914502664193434"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-30T21:58:37.317Z","modified":"2025-10-31T22:01:57.500Z","1.5.20":"2025-10-30T21:58:37.631Z","1.5.24":"2025-10-31T21:32:12.167Z","1.5.25":"2025-10-31T21:42:28.425Z","1.5.26":"2025-10-31T21:48:12.762Z","1.5.27":"2025-10-31T21:54:15.043Z","1.5.28":"2025-10-31T21:58:01.845Z","1.5.29":"2025-10-31T22:01:57.267Z"},"bugs":{"url":"https://github.com/eikaramba/puppeteer-real-browser-mcp-server/issues"},"author":{"name":"eikaramba"},"license":"MIT","homepage":"https://github.com/eikaramba/puppeteer-real-browser-mcp-server","keywords":["mcp","puppeteer","browser-automation"],"repository":{"type":"git","url":"git+https://github.com/eikaramba/puppeteer-real-browser-mcp-server.git"},"description":"MCP server for puppeteer-real-browser","maintainers":[{"name":"eikaramba","email":"thies.eike@gmail.com"}],"readme":"\r\n⚠️ **UNDER MAINTENANCE** - This project is still being actively developed. Some features may be incomplete or change without notice.\r\n\r\n# Puppeteer Real Browser MCP Server\r\n\r\nProvides AI assistants with powerful, detection-resistant browser automation capabilities built on ZFC Digital's puppeteer-real-browser package.\r\n\r\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\r\n\r\n## Table of Contents\r\n\r\n1. [Quick Start for Beginners](#quick-start-for-beginners)\r\n2. [Introduction](#introduction)\r\n3. [Features](#features)\r\n4. [Prerequisites](#prerequisites)\r\n5. [Installation](#installation)\r\n6. [Usage](#usage)\r\n   - [With Claude Desktop](#with-claude-desktop)\r\n   - [With Claude Code CLI](#with-claude-code-cli)\r\n   - [With Cursor IDE](#with-cursor-ide)\r\n   - [With Other AI Assistants](#with-other-ai-assistants)\r\n7. [Available Tools](#available-tools)\r\n8. [Advanced Features](#advanced-features)\r\n9. [Configuration](#configuration)\r\n10. [Troubleshooting](#troubleshooting)\r\n11. [Development](#development)\r\n12. [Testing](#testing)\r\n13. [Contributing](#contributing)\r\n14. [License](#license)\r\n\r\n## Quick Start for Beginners\r\n\r\n### What is this?\r\nThis is an MCP (Model Context Protocol) server that lets AI assistants like Claude control a real web browser. Think of it as giving Claude \"hands\" to interact with websites - it can click buttons, fill forms, extract content, and much more, all while avoiding bot detection.\r\n\r\n### Important: You DON'T Need to Install This Package!\r\nIf you're just using this MCP server (not developing it), you don't need to run `npm install`. The `npx` command in the configuration will automatically download and run the latest version for you. Installation is only required for development purposes.\r\n\r\n### Step-by-Step Setup\r\n\r\n#### 1. Install Node.js (Required)\r\n- Go to [nodejs.org](https://nodejs.org/)\r\n- Download and install Node.js (version 18 or higher)\r\n- Verify installation by opening terminal/command prompt and typing: `node --version`\r\n\r\n#### 2. Configure Claude Desktop\r\n\r\n**For Windows:**\r\n1. Open File Explorer and navigate to: `%APPDATA%\\Claude\\`\r\n2. Open (or create) `claude_desktop_config.json`\r\n3. Add this configuration:\r\n\r\n```json\r\n{\r\n  \"mcpServers\": {\r\n    \"puppeteer-real-browser\": {\r\n      \"command\": \"npx\",\r\n      \"args\": [\"puppeteer-real-browser-mcp-server@latest\"]\r\n    }\r\n  }\r\n}\r\n```\r\n\r\n**For Mac:**\r\n1. Open Finder and press `Cmd+Shift+G`\r\n2. Go to: `~/Library/Application Support/Claude/`\r\n3. Open (or create) `claude_desktop_config.json`\r\n4. Add the same configuration as above\r\n\r\n**For Linux:**\r\n1. Navigate to: `~/.config/Claude/`\r\n2. Open (or create) `claude_desktop_config.json`\r\n3. Add the same configuration as above\r\n\r\n**Why @latest?** The `@latest` tag ensures you always get the most recent version with bug fixes and improvements. The `npx` command automatically downloads and runs it without installing anything permanently on your system.\r\n\r\n#### 3. Restart Claude Desktop\r\nClose and reopen Claude Desktop completely.\r\n\r\n#### 4. Test It Works\r\nIn Claude Desktop, try saying:\r\n> \"Initialize a browser and navigate to google.com, then get the page content\"\r\n\r\nIf everything is working, Claude should be able to:\r\n- Start a browser\r\n- Navigate to Google\r\n- Extract and show you the page content\r\n\r\n### What Can You Do With It?\r\n\r\nOnce set up, you can ask Claude to:\r\n- **Browse websites**: \"Go to amazon.com and search for laptops\"\r\n- **Fill forms**: \"Fill out this contact form with my details\"\r\n- **Extract data**: \"Get all the product prices from this page\"\r\n- **Automate tasks**: \"Log into my account and download my invoice\"\r\n- **Solve captchas**: \"Handle any captchas that appear\"\r\n\r\n### Safety Notes\r\n- Claude will show you what it's doing - you can see the browser window\r\n- Always review what Claude does before approving sensitive actions\r\n- Use headless mode (`headless: true`) if you don't want to see the browser window\r\n- Be respectful of websites' terms of service\r\n\r\n## Introduction\r\n\r\nThe Puppeteer Real Browser MCP Server acts as a bridge between AI assistants\r\nand browser automation. It leverages puppeteer-real-browser to provide stealth\r\nbrowsing capabilities that can bypass common bot detection mechanisms.\r\n\r\nThis server implements the Model Context Protocol (MCP), allowing AI\r\nassistants to control a real browser, extract content, and more.\r\n\r\n## Features\r\n\r\n- **Stealth by default**: All browser instances use anti-detection features\r\n- **Enhanced Windows support**: Comprehensive Chrome detection and ECONNREFUSED error fixes (v1.3.0)\r\n- **Smart Chrome detection**: Registry-based detection + 15+ installation paths (Windows)\r\n- **Connection resilience**: Automatic localhost/127.0.0.1 fallback with port management\r\n- **Multiple retry strategies**: 5 different connection approaches with progressive fallback\r\n- **Advanced configuration**: Full support for all puppeteer-real-browser options\r\n- **Dynamic selector discovery**: Intelligent element finding without hardcoded selectors\r\n- **Random scrolling**: Tools for natural scrolling to avoid detection\r\n- **Comprehensive toolset**: 11 tools covering all browser automation needs\r\n- **Proxy support**: Built-in proxy configuration for enhanced privacy\r\n- **Captcha handling**: Support for solving reCAPTCHA, hCaptcha, and Turnstile\r\n- **Robust error handling**: Advanced error recovery with circuit breaker pattern\r\n- **Stack overflow protection**: Comprehensive protection against infinite recursion\r\n- **Timeout controls**: Automatic timeout mechanisms prevent hanging operations\r\n- **Platform optimization**: Windows-specific flags and longer timeouts for better compatibility\r\n\r\n## Prerequisites\r\n\r\n- Node.js >= 18.0.0\r\n- npm or yarn\r\n- Google Chrome or Chromium browser installed\r\n- Basic understanding of TypeScript/JavaScript (for development)\r\n\r\n### Platform-Specific Requirements\r\n\r\n**Windows:**\r\n- Google Chrome installation (automatic detection in v1.3.0+ includes):\r\n  - Standard installations: `C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe`\r\n  - 32-bit installations: `C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe`\r\n  - User installations: `%LOCALAPPDATA%\\Google\\Chrome\\Application\\chrome.exe`\r\n  - Chrome Canary: `%LOCALAPPDATA%\\Google\\Chrome SxS\\Application\\chrome.exe`\r\n  - Portable installations and Registry-detected paths\r\n  - Manual path specification: Use `CHROME_PATH` environment variable\r\n\r\n**macOS:**\r\n- Google Chrome or Chromium must be installed in `/Applications/`\r\n\r\n**Linux:**\r\n- Install Chrome/Chromium: `sudo apt-get install -y google-chrome-stable` or `sudo apt-get install -y chromium-browser`\r\n- Install xvfb for headless operation: `sudo apt-get install -y xvfb`\r\n\r\n## Installation for Developers\r\n\r\n> **Note for Claude Desktop Users:** You don't need to install anything! The npx command in your configuration automatically handles everything. Skip to the [Usage](#usage) section.\r\n\r\nThis section is for developers who want to:\r\n- Contribute to the project\r\n- Run the server locally for development\r\n- Create custom modifications\r\n\r\n### Global Installation (For Command Line Usage)\r\n\r\nIf you want to run the server directly from the command line without using npx:\r\n\r\n```bash\r\nnpm install -g puppeteer-real-browser-mcp-server@latest\r\n```\r\n\r\nAfter global installation, you can run:\r\n```bash\r\npuppeteer-real-browser-mcp-server\r\n```\r\n\r\n### Development Setup (For Contributors)\r\n\r\n```bash\r\n# Clone the repository\r\ngit clone https://github.com/withLinda/puppeteer-real-browser-mcp-server.git\r\ncd puppeteer-real-browser-mcp-server\r\n\r\n# Install dependencies\r\nnpm install\r\n\r\n# Build the project\r\nnpm run build\r\n\r\n# Run in development mode\r\nnpm run dev\r\n```\r\n\r\n## Usage\r\n\r\n### With Claude Desktop\r\n\r\nThe configuration below uses `npx` to automatically download and run the latest version. No installation required!\r\n\r\n```json\r\n{\r\n  \"mcpServers\": {\r\n    \"puppeteer-real-browser\": {\r\n      \"command\": \"npx\",\r\n      \"args\": [\"puppeteer-real-browser-mcp-server@latest\"]\r\n    }\r\n  }\r\n}\r\n```\r\n\r\n> **What does npx do?** The `npx` command downloads and runs the package without permanently installing it. The `@latest` ensures you always get the newest version with all bug fixes and improvements.\r\n\r\n### With Claude Code CLI\r\n\r\nClaude Code CLI offers multiple convenient methods to add the puppeteer-real-browser MCP server. Choose the method that best fits your workflow:\r\n\r\n#### Method 1: Quick Setup (Recommended)\r\n\r\nThe fastest way to get started is using the `claude mcp add` command:\r\n\r\n```bash\r\nclaude mcp add puppeteer-real-browser -- npx puppeteer-real-browser-mcp-server@latest\r\n```\r\n\r\nThis command:\r\n- Adds the server to your local scope (available only to you in current project)\r\n- Uses npx to automatically download and run the latest version\r\n- No installation required - everything is handled automatically\r\n\r\n#### Method 2: Add with Environment Variables\r\n\r\nIf you need to configure proxy settings or custom Chrome paths:\r\n\r\n```bash\r\nclaude mcp add puppeteer-real-browser \\\r\n  -e CHROME_PATH=\"/path/to/chrome\" \\\r\n  -e PROXY_URL=\"http://proxy:8080\" \\\r\n  -- npx puppeteer-real-browser-mcp-server@latest\r\n```\r\n\r\n#### Method 3: Scoped Configuration\r\n\r\n**For User-Wide Access (Available Across All Projects):**\r\n```bash\r\nclaude mcp add puppeteer-real-browser -s user -- npx puppeteer-real-browser-mcp-server@latest\r\n```\r\n\r\n**For Project-Wide Access (Shared with Team via .mcp.json):**\r\n```bash\r\nclaude mcp add puppeteer-real-browser -s project -- npx puppeteer-real-browser-mcp-server@latest\r\n```\r\n\r\n#### Method 4: JSON Configuration\r\n\r\nFor advanced users who want precise control:\r\n\r\n```bash\r\nclaude mcp add-json puppeteer-real-browser '{\r\n  \"type\": \"stdio\",\r\n  \"command\": \"npx\",\r\n  \"args\": [\"puppeteer-real-browser-mcp-server@latest\"],\r\n  \"env\": {\r\n    \"CHROME_PATH\": \"/path/to/chrome\",\r\n    \"PROXY_URL\": \"http://proxy:8080\"\r\n  }\r\n}'\r\n```\r\n\r\n#### Verification and Testing\r\n\r\nAfter adding the server:\r\n\r\n1. **Check MCP Server Status:**\r\n   ```bash\r\n   /mcp\r\n   ```\r\n   This command in Claude Code shows all active MCP servers.\r\n\r\n2. **Test the Server:**\r\n   In Claude Code, try:\r\n   > \"Initialize a browser and navigate to google.com, then get the page content\"\r\n\r\n   If working correctly, you should see:\r\n   - Browser initialization\r\n   - Navigation to Google\r\n   - Page content extracted and displayed\r\n\r\n#### Configuration Scopes Explained\r\n\r\n| Scope | Description | Config Location | Use Case |\r\n|-------|-------------|----------------|----------|\r\n| **local** (default) | Available only to you in current project | `.mcp.json` in project | Testing, project-specific |\r\n| **project** | Shared with entire team | `.mcp.json` committed to repo | Team collaboration |\r\n| **user** | Available to you across all projects | User config directory | Personal productivity |\r\n\r\n#### Benefits of Claude Code CLI\r\n\r\n- **Automatic Updates**: Using `@latest` ensures you get bug fixes and improvements\r\n- **No Installation**: npx handles downloading and running automatically  \r\n- **Environment Variables**: Easy configuration of proxies, Chrome paths, etc.\r\n- **Scope Control**: Choose where the server is available (local/project/user)\r\n- **Team Sharing**: Project scope allows sharing configurations with teammates\r\n- **Status Monitoring**: Built-in `/mcp` command for server health checks\r\n\r\n### With Cursor IDE\r\n\r\nCursor IDE uses the same npx approach - no installation needed! Here are the setup methods:\r\n\r\n#### Method 1: One-Click Installation (Recommended)\r\n\r\n1. **Open Cursor IDE**\r\n2. **Open Command Palette** (`Ctrl+Shift+P` on Windows/Linux, `Cmd+Shift+P` on Mac)\r\n3. **Search for \"Cursor Settings\"** and select it\r\n4. **Click on \"MCP\" in the sidebar**\r\n5. **Browse curated MCP servers** and install browser automation tools with one-click\r\n6. **OAuth authentication** will be handled automatically\r\n\r\n#### Method 2: Manual Configuration\r\n\r\n**Configuration File Location:**\r\n- **Project-specific**: Create `.cursor/mcp.json` in your project directory\r\n- **Global**: Create `~/.cursor/mcp.json` in your home directory\r\n\r\n**Basic Configuration (No Installation Required):**\r\n```json\r\n{\r\n  \"mcpServers\": {\r\n    \"puppeteer-real-browser\": {\r\n      \"command\": \"npx\",\r\n      \"args\": [\"puppeteer-real-browser-mcp-server@latest\"]\r\n    }\r\n  }\r\n}\r\n```\r\n\r\n> **Important:** Just like Claude Desktop, Cursor will use `npx` to automatically download and run the server. You don't need to install anything with npm!\r\n\r\n**Windows-Specific Configuration (if experiencing Chrome path issues):**\r\n```json\r\n{\r\n  \"mcpServers\": {\r\n    \"puppeteer-real-browser\": {\r\n      \"command\": \"npx\",\r\n      \"args\": [\"puppeteer-real-browser-mcp-server@latest\"],\r\n      \"env\": {\r\n        \"CHROME_PATH\": \"C:/Program Files/Google/Chrome/Application/chrome.exe\"\r\n      }\r\n    }\r\n  }\r\n}\r\n```\r\n\r\n> **Note**: Browser options like headless mode should be configured when initializing the browser through the `browser_init` tool, not via environment variables.\r\n\r\n**Advanced Configuration with Custom Chrome Path:**\r\n```json\r\n{\r\n  \"mcpServers\": {\r\n    \"puppeteer-real-browser\": {\r\n      \"command\": \"npx\",\r\n      \"args\": [\"puppeteer-real-browser-mcp-server@latest\"],\r\n      \"env\": {\r\n        \"CHROME_PATH\": \"C:/Program Files/Google/Chrome/Application/chrome.exe\"\r\n      }\r\n    }\r\n  }\r\n}\r\n```\r\n\r\n> **Note**: Proxy settings and browser options should be configured when asking Claude to initialize the browser using the `browser_init` tool.\r\n\r\n#### Platform-Specific Chrome Paths for Cursor IDE\r\n\r\nIf Chrome auto-detection fails, you can specify the Chrome path using the `CHROME_PATH` environment variable:\r\n\r\n**Windows:**\r\n```json\r\n\"env\": {\r\n  \"CHROME_PATH\": \"C:/Program Files/Google/Chrome/Application/chrome.exe\"\r\n}\r\n```\r\nAlternative Windows paths:\r\n- `\"C:/Program Files (x86)/Google/Chrome/Application/chrome.exe\"`\r\n- `\"%LOCALAPPDATA%/Google/Chrome/Application/chrome.exe\"`\r\n\r\n**macOS:**\r\n```json\r\n\"env\": {\r\n  \"CHROME_PATH\": \"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome\"\r\n}\r\n```\r\n\r\n**Linux:**\r\n```json\r\n\"env\": {\r\n  \"CHROME_PATH\": \"/usr/bin/google-chrome\"\r\n}\r\n```\r\nAlternative Linux paths: `/usr/bin/chromium-browser`, `/snap/bin/chromium`\r\n\r\n\r\n#### Testing Cursor IDE Setup\r\n\r\nAfter configuration:\r\n1. **Restart Cursor IDE completely**\r\n2. **Open a new chat** \r\n3. **Test with**: \"Initialize a browser and navigate to google.com, then get the page content\"\r\n\r\nIf successful, you should see:\r\n- Browser window opening\r\n- Navigation to Google\r\n- Page content extracted and displayed in the chat\r\n\r\n#### Cursor IDE Troubleshooting\r\n\r\n**Common Issues:**\r\n\r\n1. **\"MCP server not found\"**\r\n   - Verify config file location and JSON syntax\r\n   - Use [jsonlint.com](https://jsonlint.com/) to validate JSON\r\n   - Ensure Node.js 18+ is installed\r\n\r\n2. **\"Browser failed to launch\" on Windows**\r\n   - Add explicit Chrome path in `executablePath`\r\n   - Try running Cursor IDE as Administrator\r\n   - Check Windows Defender isn't blocking Chrome\r\n\r\n3. **\"Permission denied\"**\r\n   - Use `sudo npm install -g puppeteer-real-browser-mcp-server` on Linux/Mac\r\n   - Run Command Prompt as Administrator on Windows\r\n\r\n4. **Configuration not loading**\r\n   - Ensure file is named exactly `mcp.json` (not `mcp.json.txt`)\r\n   - Check file is in correct directory\r\n   - Restart Cursor IDE after changes\r\n\r\n### With Other AI Assistants\r\n\r\nStart the server:\r\n\r\n```bash\r\npuppeteer-real-browser-mcp-server\r\n```\r\n\r\nOr if installed from source:\r\n\r\n```bash\r\nnpm start\r\n```\r\n\r\nThe server communicates via stdin/stdout using the MCP protocol.\r\n\r\n### Example Interactions\r\n\r\n#### Basic Web Browsing\r\n```text\r\nUser: \"Initialize a browser and navigate to example.com\"\r\nAI: I'll initialize a stealth browser and navigate to the website.\r\n[Uses browser_init and navigate tools]\r\n\r\n```\r\n\r\n#### Form Automation\r\n```text\r\nUser: \"Fill in the search form with 'test query'\"\r\nAI: I'll type that into the search field.\r\n[Uses type tool with selector and text]\r\n\r\nUser: \"Click the search button\"\r\nAI: I'll click the search button.\r\n[Uses click tool]\r\n```\r\n\r\n#### Data Extraction\r\n```text\r\nUser: \"Get all the product names from this e-commerce page\"\r\nAI: I'll extract the product information from the page.\r\n[Uses get_content tool with appropriate selectors]\r\n\r\nUser: \"Save the page content as text\"\r\nAI: I'll get the text content of the entire page.\r\n[Uses get_content tool with type: 'text']\r\n\r\nUser: \"Save this page content as a markdown file\"\r\nAI: I'll extract the page content and save it as a formatted markdown file.\r\n[Uses save_content_as_markdown tool with specified file path]\r\n```\r\n\r\n\r\n#### Working with Proxies\r\n```text\r\nUser: \"Initialize a browser with a proxy server\"\r\nAI: I'll set up the browser with your proxy configuration.\r\n[Uses browser_init with proxy: \"https://proxy.example.com:8080\"]\r\n```\r\n\r\n## Available Tools\r\n\r\n### Core Browser Tools\r\n\r\n| Tool Name | Description | Required Parameters | Optional Parameters |\r\n|-----------|-------------|---------------------|-------------------|\r\n| `browser_init` | Initialize stealth browser with advanced options | None | `headless`, `disableXvfb`, `ignoreAllFlags`, `proxy`, `plugins`, `connectOption` |\r\n| `navigate` | Navigate to a URL | `url` | `waitUntil` |\r\n| `get_content` | Get page content (HTML or text) | None | `type`, `selector` |\r\n| `browser_close` | Close the browser instance | None | None |\r\n\r\n### Interaction Tools\r\n\r\n| Tool Name | Description | Required Parameters | Optional Parameters |\r\n|-----------|-------------|---------------------|-------------------|\r\n| `click` | Standard click on element | `selector` | `waitForNavigation` |\r\n| `type` | Type text into input field | `selector`, `text` | `delay` |\r\n| `wait` | Wait for various conditions | `type`, `value` | `timeout` |\r\n| `find_selector` | Find CSS selector for element containing specific text | `text` | `elementType`, `exact` |\r\n\r\n\r\n### Behavior Tools\r\n\r\n| Tool Name | Description | Required Parameters | Optional Parameters |\r\n|-----------|-------------|---------------------|-------------------|\r\n| `random_scroll` | Perform random scrolling with natural timing | None | None |\r\n\r\n### Element Discovery Tools\r\n\r\n| Tool Name | Description | Required Parameters | Optional Parameters |\r\n|-----------|-------------|---------------------|-------------------|\r\n| `find_selector` | Find CSS selector for element containing specific text | `text` | `elementType`, `exact` |\r\n\r\n### Content Tools\r\n\r\n| Tool Name | Description | Required Parameters | Optional Parameters |\r\n|-----------|-------------|---------------------|-------------------|\r\n| `save_content_as_markdown` | Extract page content and save it as a formatted markdown file | `filePath` | `contentType`, `selector`, `formatOptions` |\r\n\r\n### Anti-Detection Tools\r\n\r\n| Tool Name | Description | Required Parameters | Optional Parameters |\r\n|-----------|-------------|---------------------|-------------------|\r\n| `solve_captcha` | Attempt to solve captchas | `type` | None |\r\n\r\n## Advanced Features\r\n\r\n### Dynamic Selector Discovery\r\n\r\nThe server includes intelligent element discovery capabilities through the `find_selector` tool:\r\n\r\n- **Text-based element finding**: Automatically locates elements containing specific text\r\n- **Smart CSS selector generation**: Creates unique, robust CSS selectors similar to Chrome DevTools\r\n- **Element type filtering**: Optionally restrict search to specific HTML elements (e.g., buttons, links)\r\n- **Exact or partial text matching**: Choose between precise text matching or substring searches\r\n- **Universal compatibility**: Works across any website without hardcoded selectors\r\n\r\n**Example Usage:**\r\n```text\r\nUser: \"Find the submit button that says 'Sign Up'\"\r\nAI: I'll locate that button for you.\r\n[Uses find_selector with text: \"Sign Up\", elementType: \"button\"]\r\n\r\nAI: Found button at selector: \"form > button.btn-primary:nth-of-type(2)\"\r\n```\r\n\r\nThis approach eliminates the need for manually crafted selectors and makes automation more reliable across different websites.\r\n\r\n### Natural Interactions\r\n\r\nThe server includes tools designed for natural browsing behavior:\r\n\r\n- **Random scrolling**: Performs scrolling with natural timing and variable distances\r\n\r\nThis feature helps avoid detection by sophisticated bot-detection systems\r\nthat analyze user behavior patterns.\r\n\r\n### Captcha Handling\r\n\r\nThe server includes basic support for solving common captcha types:\r\n\r\n- reCAPTCHA\r\n- hCaptcha\r\n- Cloudflare Turnstile\r\n\r\nNote that captcha solving capabilities depend on the underlying\r\npuppeteer-real-browser implementation.\r\n\r\n## Configuration\r\n\r\n### Automatic Chrome Path Detection (Enhanced in v1.3.0)\r\n\r\nThe server automatically detects Chrome installation paths across different operating systems with significantly improved Windows support:\r\n\r\n- **Windows (v1.3.0+)**: \r\n  - Registry-based detection for installed Chrome versions\r\n  - Searches 15+ common installation directories including Program Files, user-specific locations, and portable installations\r\n  - Support for Chrome Canary fallback\r\n  - Environment variable detection (`CHROME_PATH`, `PUPPETEER_EXECUTABLE_PATH`)\r\n  - Detailed troubleshooting guidance when Chrome is not found\r\n  \r\n- **macOS**: Looks for Chrome in `/Applications/Google Chrome.app/` and Chrome Canary locations\r\n\r\n- **Linux**: Checks multiple locations including `/usr/bin/google-chrome`, `/usr/bin/chromium-browser`, and snap installations\r\n\r\n**Windows Registry Detection** (NEW in v1.3.0):\r\nThe server now queries Windows Registry to find Chrome installations, making detection more reliable across different installation types.\r\n\r\nIf Chrome is not found automatically, you can specify a custom path using:\r\n1. Environment variable: `set CHROME_PATH=\"C:\\Your\\Chrome\\Path\\chrome.exe\"`\r\n2. Browser init option: `customConfig.chromePath` when initializing the browser\r\n\r\n### Configuring Custom Options (like headless mode)\r\nCustom options like headless mode are **not configured in the MCP config file**. Instead, they're passed when initializing the browser using the `browser_init` tool:\r\n\r\nWhen you ask Claude to initialize a browser, you can specify options like:\r\n\r\n```\r\nPlease initialize a browser with headless mode enabled and a 30-second timeout\r\n```\r\n\r\nClaude will then use the `browser_init` tool with appropriate parameters:\r\n\r\n```json\r\n{\r\n  \"headless\": true,\r\n  \"connectOption\": {\r\n    \"timeout\": 30000\r\n  }\r\n}\r\n```\r\n\r\n### Available Browser Options\r\nWhen initializing with `browser_init`, you can configure:\r\n\r\n- `headless`: true/false (Set to true for headless operation)\r\n- `disableXvfb`: true/false (Disable X Virtual Framebuffer)\r\n- `ignoreAllFlags`: true/false (Ignore all Chrome flags)\r\n- `proxy`: \"https://proxy:8080\" (Proxy server URL)\r\n- `plugins`: [\"plugin1\", \"plugin2\"] (Array of plugins to load)\r\n- `connectOption`: Additional connection options like:\r\n  - `slowMo`: 250 (Slow down operations by milliseconds)\r\n  - `timeout`: 60,000 (Connection timeout)\r\n\r\nThe MCP config file only tells Claude where to find the server - all browser-specific options are configured through your conversations with Claude.\r\n\r\n### Browser Options Example\r\n\r\nWhen initializing the browser with `browser_init`, you can configure:\r\n\r\n```json\r\n{\r\n  \"headless\": false,\r\n  \"disableXvfb\": false,\r\n  \"ignoreAllFlags\": false,\r\n  \"proxy\": \"https://proxy:8080\",\r\n  \"plugins\": [\"plugin1\", \"plugin2\"],\r\n  \"connectOption\": {\r\n    \"slowMo\": 250,\r\n    \"timeout\": 60000\r\n  }\r\n}\r\n```\r\n\r\n### Advanced Configuration Examples\r\n\r\n#### Specifying Custom Chrome Path\r\n```json\r\n{\r\n  \"customConfig\": {\r\n    \"chromePath\": \"C:\\\\Program Files\\\\Google\\\\Chrome\\\\Application\\\\chrome.exe\"\r\n  }\r\n}\r\n```\r\n\r\n#### Using a Proxy\r\n```json\r\n{\r\n  \"headless\": true,\r\n  \"proxy\": \"https://username:password@proxy.example.com:8080\"\r\n}\r\n```\r\n\r\n#### Stealth Mode with Custom Options\r\n```json\r\n{\r\n  \"headless\": false,\r\n  \"ignoreAllFlags\": true,\r\n  \"disableXvfb\": false,\r\n  \"connectOption\": {\r\n    \"slowMo\": 100,\r\n    \"devtools\": false\r\n  }\r\n}\r\n```\r\n\r\n\r\n### Server Configuration\r\n\r\nFor advanced users, you can modify the server behavior by editing the source code:\r\n\r\n- Change default viewport size in the `initializeBrowser` function\r\n- Adjust timeout values for various operations\r\n- Enable debug logging\r\n\r\n## Troubleshooting\r\n\r\n### Major Windows Connection Issues (Fixed in v1.3.0)\r\n\r\n**🔧 ECONNREFUSED Error Solutions**\r\n\r\nVersion 1.3.0 includes comprehensive fixes for the `connect ECONNREFUSED 127.0.0.1:60725` error commonly experienced on Windows systems:\r\n\r\n**Enhanced Chrome Path Detection:**\r\n- Added Windows Registry-based Chrome detection\r\n- Expanded search to 15+ Windows installation locations including portable installations\r\n- Added support for Chrome Canary fallback\r\n- Environment variable support (`CHROME_PATH`, `PUPPETEER_EXECUTABLE_PATH`)\r\n\r\n**Windows-Specific Launch Optimizations:**\r\n- 20+ Windows-specific Chrome flags for better compatibility\r\n- Multiple fallback strategies (5 different connection approaches)\r\n- Progressive retry logic with exponential backoff\r\n- Enhanced timeout handling (120s for Windows vs 90s for other platforms)\r\n\r\n**Connection Resilience Features:**\r\n- Localhost vs 127.0.0.1 fallback handling (fixes known Puppeteer issue)\r\n- Port availability checking and automatic port assignment\r\n- Network connectivity testing before browser launch\r\n- Enhanced error categorization and automatic fallback strategies\r\n\r\n**If you're still experiencing ECONNREFUSED errors:**\r\n\r\n1. **Environment Variables (Recommended):**\r\n   ```bash\r\n   set CHROME_PATH=\"C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe\"\r\n   ```\r\n\r\n2. **Manual Chrome Path Configuration:**\r\n   ```text\r\n   Ask Claude: \"Initialize browser with custom Chrome path at C:\\\\Program Files\\\\Google\\\\Chrome\\\\Application\\\\chrome.exe\"\r\n   ```\r\n\r\n3. **Network Troubleshooting:**\r\n   ```bash\r\n   # Test localhost resolution\r\n   ping localhost\r\n   # Should resolve to 127.0.0.1\r\n   \r\n   # Check Windows hosts file\r\n   notepad C:\\Windows\\System32\\drivers\\etc\\hosts\r\n   # Ensure: 127.0.0.1 localhost\r\n   ```\r\n\r\n4. **Chrome Process Management:**\r\n   ```bash\r\n   # Kill existing Chrome processes\r\n   taskkill /f /im chrome.exe\r\n   ```\r\n\r\n### Common Issues\r\n\r\n#### npx-Specific Issues\r\n\r\n1. **\"spawn npx ENOENT\" or \"command not found\" errors**\r\n   - **Cause:** npx is not in your system PATH or Node.js is not properly installed\r\n   - **Solutions:**\r\n     - Verify Node.js installation: `node --version` and `npm --version`\r\n     - Reinstall Node.js from [nodejs.org](https://nodejs.org/)\r\n     - For NVM users, see the NVM-specific section below\r\n\r\n2. **\"npx: command not found\" in Claude Desktop/Cursor**\r\n   - **Windows:** Make sure to restart your IDE after installing Node.js\r\n   - **Mac/Linux:** Add npm to PATH: `export PATH=\"$PATH:$(npm bin -g)\"`\r\n   - **Alternative:** Use the full path to npx: `/usr/local/bin/npx`\r\n\r\n3. **npx hangs or takes too long**\r\n   - npx downloads the package on first run, which can take 30-60 seconds\r\n   - Ensure you have a stable internet connection\r\n   - Try clearing npm cache: `npm cache clean --force`\r\n\r\n4. **Using NVM (Node Version Manager)?**\r\n   - Standard npx commands may fail with NVM\r\n   - **Solution 1:** Use absolute paths in your config:\r\n     ```json\r\n     {\r\n       \"mcpServers\": {\r\n         \"puppeteer-real-browser\": {\r\n           \"command\": \"/Users/yourname/.nvm/versions/node/v20.0.0/bin/npx\",\r\n           \"args\": [\"puppeteer-real-browser-mcp-server@latest\"]\r\n         }\r\n       }\r\n     }\r\n     ```\r\n   - **Solution 2:** Set a default Node version: `nvm alias default 20.0.0`\r\n\r\n5. **Permission denied errors with npx**\r\n   - **Mac/Linux:** Try with sudo: `sudo npx puppeteer-real-browser-mcp-server@latest`\r\n   - **Better solution:** Fix npm permissions: `npm config set prefix ~/.npm`\r\n\r\n#### Other Common Issues\r\n\r\n1. **\"Maximum call stack size exceeded\" errors**\r\n   - This was fixed in version 1.2.0 with comprehensive stack overflow protection\r\n   - The server now includes circuit breaker patterns and recursion depth tracking\r\n   - Timeout controls prevent hanging operations that could lead to stack overflow\r\n   - If you encounter this error, ensure you're using the latest version: `npx puppeteer-real-browser-mcp-server@latest`\r\n\r\n2. **\"command not found\" or \"syntax error\" when using npx**\r\n   - This was fixed in version 1.0.3 with the addition of a proper shebang line\r\n   - Make sure you're using the latest version: `npx puppeteer-real-browser-mcp-server@latest`\r\n   - For global installation: `npm install -g puppeteer-real-browser-mcp-server@latest`\r\n   - If still having issues, install globally: `npm install -g puppeteer-real-browser-mcp-server`\r\n   - Check your PATH includes npm global binaries: `npm config get prefix`\r\n\r\n3. **Browser won't start**\r\n   - Check if Chrome/Chromium is installed in standard locations\r\n   - **Windows specific troubleshooting**:\r\n     \r\n     **Step 1: Verify Chrome Installation Paths**\r\n     Check these locations in order:\r\n     - `C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe`\r\n     - `C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe`\r\n     - `%LOCALAPPDATA%\\Google\\Chrome\\Application\\chrome.exe`\r\n     - `%PROGRAMFILES%\\Google\\Chrome\\Application\\chrome.exe`\r\n     \r\n     **Step 2: Manual Path Configuration**\r\n     If Chrome is in a different location, specify it manually:\r\n     ```\r\n     Ask Claude: \"Initialize browser with custom Chrome path at C:\\Your\\Chrome\\Path\\chrome.exe\"\r\n     ```\r\n     \r\n     **Step 3: Windows Launch Arguments**\r\n     For Windows compatibility, use these launch arguments:\r\n     ```\r\n     Ask Claude: \"Initialize browser with args --disable-gpu --disable-setuid-sandbox\"\r\n     ```\r\n     \r\n     **Step 4: Windows-Specific Solutions**\r\n     - **Run as Administrator**: Try running your IDE/terminal as Administrator\r\n     - **Windows Defender**: Add Chrome and Node.js to Windows Defender exclusions\r\n     - **Antivirus Software**: Temporarily disable antivirus to test if it's blocking Chrome\r\n     - **User Account Control**: Lower UAC settings temporarily for testing\r\n     - **Chrome Processes**: Kill any existing Chrome processes in Task Manager\r\n     \r\n     **Step 5: Alternative Chrome Installation**\r\n     If Chrome detection still fails:\r\n     - Download Chrome directly from [google.com/chrome](https://www.google.com/chrome/)\r\n     - Install to default location (`C:\\Program Files\\Google\\Chrome\\`)\r\n     - Restart your IDE after installation\r\n     \r\n     **Step 6: PowerShell vs Command Prompt**\r\n     Try switching between PowerShell and Command Prompt:\r\n     - Test with `cmd.exe` instead of PowerShell\r\n     - Test with PowerShell instead of Command Prompt\r\n     \r\n     **Step 7: Node.js and npm Configuration**\r\n     - Ensure Node.js is added to PATH: `node --version`\r\n     - Clear npm cache: `npm cache clean --force`\r\n     - Reinstall global packages: `npm install -g puppeteer-real-browser-mcp-server@latest`\r\n     \r\n   - **Linux**: Install dependencies: `sudo apt-get install -y google-chrome-stable`\r\n   - **macOS**: Ensure Chrome is in `/Applications/`\r\n   - Try with `headless: true` first\r\n   - Check console output for Chrome path detection messages\r\n\r\n4. **Claude doesn't see the MCP server**\r\n   - Verify `claude_desktop_config.json` is in the correct location\r\n   - Check JSON syntax is valid (use [jsonlint.com](https://jsonlint.com/))\r\n   - Restart Claude Desktop completely\r\n   - Check for any error messages in Claude Desktop\r\n\r\n**4a. Claude Code CLI doesn't see the MCP server**\r\n   - **Installation Issues**:\r\n     - Verify `claude mcp add` command was successful\r\n     - Check command syntax: `claude mcp add puppeteer-real-browser -- npx puppeteer-real-browser-mcp-server@latest`\r\n     - Ensure you have the latest Claude Code CLI version\r\n   \r\n   - **Scope and Configuration**:\r\n     - Check which scope you used: local (default), project, or user\r\n     - For local scope: ensure you're in the correct project directory\r\n     - For project scope: verify `.mcp.json` exists in project root\r\n     - For user scope: check user config directory\r\n   \r\n   - **MCP Server Status**:\r\n     - Use `/mcp` command in Claude Code to check server status\r\n     - Look for the \"puppeteer-real-browser\" server in the list\r\n     - Check if server status shows \"connected\" or error messages\r\n   \r\n   - **Environment Variables**:\r\n     - If using custom environment variables (Chrome path, proxy), verify they're correctly set\r\n     - Test without environment variables first: `claude mcp add puppeteer-real-browser -- npx puppeteer-real-browser-mcp-server@latest`\r\n   \r\n   - **Node.js and npx Issues**:\r\n     - Verify Node.js version 18+: `node --version`\r\n     - Test npx directly: `npx puppeteer-real-browser-mcp-server@latest`\r\n     - Clear npm cache: `npm cache clean --force`\r\n   \r\n   - **Protocol Version Issues** (Known Issue):\r\n     - Claude CLI may show protocolVersion validation errors despite correct configuration\r\n     - This is a known issue with internal validation in Claude CLI\r\n     - Server may still work despite validation warnings\r\n   \r\n   - **Re-adding Server**:\r\n     ```bash\r\n     # Remove and re-add if issues persist\r\n     claude mcp remove puppeteer-real-browser\r\n     claude mcp add puppeteer-real-browser -- npx puppeteer-real-browser-mcp-server@latest\r\n     ```\r\n\r\n**4b. Cursor IDE doesn't see the MCP server**\r\n   - **Config File Location Issues**:\r\n     - Verify `mcp.json` is in the correct location:\r\n       - Global: `~/.cursor/mcp.json` (`%USERPROFILE%\\.cursor\\mcp.json` on Windows)\r\n       - Project: `.cursor/mcp.json` in your project root\r\n     - Ensure filename is exactly `mcp.json` (not `mcp.json.txt`)\r\n     - Check file permissions allow reading\r\n   \r\n   - **JSON Syntax Validation**:\r\n     - Use [jsonlint.com](https://jsonlint.com/) to validate JSON syntax\r\n     - Common issues: missing commas, incorrect quotes, trailing commas\r\n     - Ensure proper escaping of Windows paths: `\"C:/Program Files/Google/Chrome/Application/chrome.exe\"`\r\n   \r\n   - **Cursor IDE Restart Process**:\r\n     - Close Cursor IDE completely (check Task Manager on Windows)\r\n     - Wait 5 seconds\r\n     - Restart Cursor IDE\r\n     - Open Command Palette and check MCP servers are listed\r\n   \r\n   - **Environment Variables**:\r\n     - Verify Node.js is accessible: `node --version`\r\n     - Check PATH includes npm: `npm --version`\r\n     - Clear any conflicting environment variables\r\n   \r\n   - **Cursor IDE Version Compatibility**:\r\n     - Ensure Cursor IDE version supports MCP (latest versions)\r\n     - Update Cursor IDE if using an older version\r\n     - Check Cursor IDE documentation for MCP requirements\r\n\r\n5. **Permission denied errors**\r\n   - On Linux/Mac: Try `sudo npm install -g puppeteer-real-browser-mcp-server`\r\n   - Or use nvm to manage Node.js without sudo\r\n   - On Windows: Run command prompt as Administrator\r\n\r\n6. **Detection issues**\r\n   - Use appropriate delays between actions for better reliability\r\n   - Add random delays with `random_scroll`\r\n   - Use proxy if needed: `proxy: \"http://proxy.example.com:8080\"`\r\n\r\n7. **Memory leaks**\r\n   - Always close browser instances with `browser_close` when done\r\n   - Don't initialize multiple browsers without closing previous ones\r\n   - Check for uncaught exceptions that might prevent cleanup\r\n\r\n8. **Timeout errors**\r\n   - Increase timeout values: `{ \"timeout\": 60000 }`\r\n   - Use `wait` tool before interacting with elements\r\n   - Check network connectivity and website response times\r\n\r\n### Frequently Asked Questions\r\n\r\n**Q: When should I use npm install vs npx?**\r\nA: \r\n- **Use npx (recommended for most users):** When using with Claude Desktop, Claude Code CLI, or Cursor IDE. The npx command in your config automatically downloads and runs the latest version without installation.\r\n- **Use npm install -g:** Only if you want to run the server directly from command line frequently, or if you're developing/contributing to the project.\r\n- **Never needed:** If you're just a Claude Desktop/Claude Code CLI user following the Quick Start guide - npx handles everything!\r\n\r\n**Q: Should I use Claude Desktop or Claude Code CLI?**\r\nA: Both are excellent choices, depending on your needs:\r\n\r\n**Claude Desktop:**\r\n- **Best for:** Simple web browsing automation, content extraction, basic form filling\r\n- **Setup:** Manual JSON config file editing\r\n- **Sharing:** Individual use only\r\n- **Interface:** Desktop GUI application\r\n- **Authentication:** None required\r\n\r\n**Claude Code CLI:**\r\n- **Best for:** Development workflows, team collaboration, project-specific automation\r\n- **Setup:** Simple command-line setup (`claude mcp add`)\r\n- **Sharing:** Supports team sharing via project scope\r\n- **Interface:** Command-line integration with IDEs\r\n- **Authentication:** OAuth support available\r\n- **Advanced Features:** Environment variables, scope control, server monitoring\r\n\r\n**Use Claude Code CLI if you:**\r\n- Work in development teams\r\n- Need project-specific browser automation\r\n- Want environment variable configuration\r\n- Prefer command-line workflows\r\n- Need server health monitoring\r\n\r\n**Use Claude Desktop if you:**\r\n- Want a simple GUI experience\r\n- Do individual browsing automation\r\n- Don't need team collaboration features\r\n- Prefer visual interfaces over command-line\r\n\r\n**Q: Why do we use @latest in the npx command?**\r\nA: The `@latest` tag ensures you always get the newest version with bug fixes and security updates. Without it, npx might cache an older version. It's especially important for actively maintained projects.\r\n\r\n**Q: Does this work with headless browsers?**\r\nA: Yes, set `headless: true` in browser_init options.\r\n\r\n**Q: Can I use multiple browsers at once?**\r\nA: Currently supports one browser instance. Close the current one before starting a new one.\r\n\r\n**Q: What captchas can it solve?**\r\nA: Supports reCAPTCHA, hCaptcha, and Cloudflare Turnstile through puppeteer-real-browser.\r\n\r\n**Q: Is this detectable by websites?**\r\nA: puppeteer-real-browser includes anti-detection features, but no solution is 100% undetectable.\r\n\r\n**Q: Can I use custom Chrome extensions?**\r\nA: Yes, through the `plugins` option in browser_init.\r\n\r\n**Q: Does it work on all operating systems?**\r\nA: Yes, tested on Windows, macOS, and Linux. The server automatically detects Chrome installations on all platforms.\r\n\r\n**Q: What's the difference between Claude Desktop, Claude Code CLI, and Cursor IDE configurations?**\r\nA: Here's a comparison:\r\n\r\n| Feature | Claude Desktop | Claude Code CLI | Cursor IDE |\r\n|---------|---------------|-----------------|------------|\r\n| **Setup Method** | Manual JSON editing | Command-line (`claude mcp add`) | One-click install OR manual JSON |\r\n| **Config Location** | `claude_desktop_config.json` | `.mcp.json` (scoped) | `.cursor/mcp.json` |\r\n| **Team Sharing** | No | Yes (project scope) | Yes |\r\n| **Environment Variables** | Limited support | Full support | Full support |\r\n| **Scope Control** | No | Yes (local/project/user) | Project/Global |\r\n| **Server Monitoring** | No | Yes (`/mcp` command) | Limited |\r\n| **Authentication** | None | OAuth available | OAuth available |\r\n| **Best For** | Individual GUI use | Development teams | Code-focused workflows |\r\n\r\n**Command Examples:**\r\n- **Claude Desktop**: Edit config file with JSON\r\n- **Claude Code CLI**: `claude mcp add puppeteer-real-browser -- npx puppeteer-real-browser-mcp-server@latest`\r\n- **Cursor IDE**: One-click install or manual JSON config\r\n\r\n**Q: What if Chrome is installed in a non-standard location?**\r\nA: Version 1.3.0 dramatically improves Chrome detection. The server now searches 15+ locations including portable installations and uses Windows Registry detection. If Chrome is still not found automatically, you can:\r\n1. Set environment variable: `set CHROME_PATH=\"C:\\Your\\Chrome\\Path\\chrome.exe\"`\r\n2. Use the `customConfig.chromePath` option: `{\"customConfig\": {\"chromePath\": \"C:\\\\Custom\\\\Chrome\\\\chrome.exe\"}}`\r\n\r\n**Q: Why am I getting \"Chrome not found\" or ECONNREFUSED errors on Windows?**\r\nA: Version 1.3.0 includes comprehensive fixes for Windows Chrome detection and connection issues. The server now automatically searches these locations and more:\r\n- `C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe`\r\n- `C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe` \r\n- `%LOCALAPPDATA%\\Google\\Chrome\\Application\\chrome.exe`\r\n- `%USERPROFILE%\\AppData\\Local\\Google\\Chrome\\Application\\chrome.exe`\r\n- Chrome Canary installations\r\n- Portable Chrome installations\r\n- Registry-detected installations\r\n\r\nThe server also implements multiple connection strategies with automatic fallback between localhost and 127.0.0.1, plus enhanced Windows-specific Chrome flags for better compatibility.\r\n\r\n**Q: I'm still getting ECONNREFUSED errors after upgrading to v1.3.0. What should I do?**\r\nA: Try these steps in order:\r\n1. Set the `CHROME_PATH` environment variable to your Chrome location\r\n2. Kill all existing Chrome processes: `taskkill /f /im chrome.exe`\r\n3. Check your Windows hosts file contains: `127.0.0.1 localhost`\r\n4. Try running your IDE as Administrator\r\n5. Add Chrome to Windows Defender exclusions\r\n6. If using a VPN/proxy, try disabling it temporarily\r\n\r\n### Debug Mode\r\n\r\nTo enable debug logging:\r\n\r\n```bash\r\nDEBUG=true npm start\r\n```\r\n\r\nOr when running from source:\r\n```bash\r\nDEBUG=true npm run dev\r\n```\r\n\r\n### Getting Help\r\n\r\nIf you're still having issues:\r\n1. Check the [GitHub Issues](https://github.com/your-organization/puppeteer-real-browser-mcp-server/issues)\r\n2. Create a new issue with:\r\n   - Your operating system\r\n   - Node.js version (`node --version`)\r\n   - npm version (`npm --version`)\r\n   - Full error message\r\n   - Steps to reproduce the problem\r\n\r\n## Development\r\n\r\n### Project Structure\r\n\r\n```text\r\npuppeteer-real-browser-mcp-server/\r\n├── src/\r\n│   ├── index.ts         # Main server implementation\r\n│   └── stealth-actions.ts # Browser interaction functions\r\n├── test/\r\n│   └── test-server.ts   # Test script\r\n├── package.json\r\n└── tsconfig.json\r\n```\r\n\r\n### Building from Source\r\n\r\n```bash\r\n# Install dependencies\r\nnpm install\r\n\r\n# Run in development mode\r\nnpm run dev\r\n\r\n# Build for production\r\nnpm run build\r\n\r\n# Test the server\r\nnpm test\r\n```\r\n\r\n### Adding New Tools\r\n\r\nTo add a new tool:\r\n\r\n1. Add the tool definition to the `TOOLS` array in `src/index.ts`\r\n2. Implement the tool handler in the `CallToolRequestSchema` handler\r\n3. Test the new tool functionality\r\n\r\n## Testing\r\n\r\nThis project includes a comprehensive testing suite with multiple categories optimized for different purposes:\r\n\r\n### Quick Tests (CI/CD) - ~30 seconds\r\n```bash\r\nnpm run test:quick    # Fast Jest tests for protocol compliance\r\nnpm test              # Alias for test:quick\r\n```\r\n\r\n### Comprehensive Tests - ~5-10 minutes  \r\n```bash\r\nnpm run test:full     # End-to-end MCP client testing\r\n```\r\n\r\n### Performance Testing - ~2-3 minutes\r\n```bash\r\nnpm run test:performance  # Browser performance benchmarking\r\n```\r\n\r\nPerformance tests measure:\r\n- Browser initialization timing (5 trials)\r\n- Navigation performance across different site types\r\n- Concurrent operation handling\r\n- Session longevity testing (30+ operations over 30 seconds)\r\n\r\n### Debug Tools - ~10 seconds\r\n```bash\r\nnpm run test:debug    # Environment diagnostics and troubleshooting\r\n```\r\n\r\nDebug tools provide:\r\n- Environment validation (Node.js version, platform, memory)\r\n- Chrome installation detection with specific paths\r\n- Quick server health check with startup timing\r\n- Network connectivity validation\r\n- Build status verification\r\n\r\n### All Tests - ~7-13 minutes\r\n```bash\r\nnpm run test:all      # Runs quick + full + performance tests\r\nnpm run test:dashboard # Unified test runner with reporting\r\n```\r\n\r\nThe test dashboard provides:\r\n- Unified execution of multiple test categories\r\n- Real-time progress reporting\r\n- Performance metrics and timing\r\n- Overall test status summary\r\n- Recommendations for failed tests\r\n- JSON results saved to `test-results/` directory\r\n\r\n### Integration Testing\r\n```bash\r\nnpm run test:integration  # Claude Code CLI integration testing\r\n```\r\n\r\nFor detailed testing information, see [TESTING.md](TESTING.md).\r\n\r\n## Contributing\r\n\r\nContributions are welcome! Please feel free to submit a Pull Request.\r\n\r\n1. Fork the repository\r\n2. Create your feature branch (`git checkout -b feature/amazing-feature`)\r\n3. Commit your changes (`git commit -m 'Add some amazing feature'`)\r\n4. Push to the branch (`git push origin feature/amazing-feature`)\r\n5. Open a Pull Request\r\n\r\n## License\r\n\r\nThis project is licensed under the MIT License - see the LICENSE file for details.\r\n\r\n## Acknowledgments\r\n\r\nThis MCP server is based on the excellent [puppeteer-real-browser](https://github.com/ZFC-Digital/puppeteer-real-browser) library by ZFC-Digital.\r\n\r\n**Thank you** to the puppeteer-real-browser team for creating such a powerful and detection-resistant browser automation solution!\r\n\r\n- GitHub: [https://github.com/ZFC-Digital/puppeteer-real-browser](https://github.com/ZFC-Digital/puppeteer-real-browser)\r\n- npm: [https://www.npmjs.com/package/puppeteer-real-browser](https://www.npmjs.com/package/puppeteer-real-browser)\r\n","readmeFilename":"README.md"}