{"_id":"chrome-bridge-mcp","_rev":"29-6cc719cc975c5cc3836734f00aba7702","name":"chrome-bridge-mcp","dist-tags":{"latest":"1.28.0"},"versions":{"1.8.0":{"name":"chrome-bridge-mcp","version":"1.8.0","keywords":["mcp","chrome","browser-automation","claude-code","chromeos","crostini","devtools","websocket","chrome-extension","accessibility","testing"],"author":{"name":"frsorrentino"},"license":"MIT","_id":"chrome-bridge-mcp@1.8.0","maintainers":[{"name":"fr.sorrentino","email":"fr.sorrentino@gmail.com"}],"homepage":"https://github.com/frsorrentino/chrome-bridge#readme","bugs":{"url":"https://github.com/frsorrentino/chrome-bridge/issues"},"bin":{"chrome-bridge":"server/cli.js","chrome-bridge-mcp":"server/index.js"},"dist":{"shasum":"117a5648f12f5556c3bea9b227934132b7cc8423","tarball":"https://registry.npmjs.org/chrome-bridge-mcp/-/chrome-bridge-mcp-1.8.0.tgz","fileCount":29,"integrity":"sha512-vtzg10eidPxe1+THrRd4+SHULOxTtRvHO+noCa69bTmPibb4MSx4oCpH8fNXY24XOakCdC7J9LLlg3DqW8/tvg==","signatures":[{"sig":"MEYCIQC+i64AYXNH9E804D/3bYcLMmDY0FiKJVR7NoC6ZUPd/QIhANW8ej97e/kwVN4JWtLz7bca9S0xcYF9CTym1UjjoaeE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":342473},"main":"server/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"7cc4c5eff7251f4ccc31ef3bc64a40ea4e79a627","mcpName":"io.github.frsorrentino/chrome-bridge","scripts":{"test":"node --test test/unit/*.test.js","start":"node server/index.js","measure":"node tools/measure-schema.mjs","test:e2e":"node test/test-devtools.js","test:unit":"node --test test/unit/*.test.js"},"_npmUser":{"name":"fr.sorrentino","email":"fr.sorrentino@gmail.com"},"repository":{"url":"git+https://github.com/frsorrentino/chrome-bridge.git","type":"git"},"_npmVersion":"11.8.0","description":"MCP server with 59 tools for browser automation via Chrome extension. Works on ChromeOS/Crostini.","directories":{},"_nodeVersion":"24.13.1","dependencies":{"ws":"^8.18.0","node-html-parser":"^9.0.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/chrome-bridge-mcp_1.8.0_1785397171060_0.24131246667332684","host":"s3://npm-registry-packages-npm-production"}},"1.9.0":{"name":"chrome-bridge-mcp","version":"1.9.0","keywords":["mcp","chrome","browser-automation","claude-code","chromeos","crostini","devtools","websocket","chrome-extension","accessibility","testing"],"author":{"name":"frsorrentino"},"license":"MIT","_id":"chrome-bridge-mcp@1.9.0","maintainers":[{"name":"fr.sorrentino","email":"fr.sorrentino@gmail.com"}],"homepage":"https://github.com/frsorrentino/chrome-bridge#readme","bugs":{"url":"https://github.com/frsorrentino/chrome-bridge/issues"},"bin":{"chrome-bridge":"server/cli.js","chrome-bridge-mcp":"server/index.js"},"dist":{"shasum":"c0c67dc5b9380ff07f1423bc0c7a47c9817d21c0","tarball":"https://registry.npmjs.org/chrome-bridge-mcp/-/chrome-bridge-mcp-1.9.0.tgz","fileCount":29,"integrity":"sha512-L2+eUzmhvR5X8/p9guFbx5FzPzggAyi80TUwoh0wCHVe1mesUJqfZarIanxTo6fUAkznOr1O4Ml12S8C5nMCpA==","signatures":[{"sig":"MEUCIQCUU+m0XHCr3v8SxqFduXLLqH3D7oYKWalkB/ThnMOoegIgTxQaGuYURJK0k8zKd+yyoeqzgZtUSElEGHrrz1Mdmd8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":356126},"main":"server/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"75a16533e86f0d53f1ef45430aa8b467eff99064","mcpName":"io.github.frsorrentino/chrome-bridge","scripts":{"test":"node --test test/unit/*.test.js","start":"node server/index.js","measure":"node tools/measure-schema.mjs","test:e2e":"node test/test-devtools.js","test:unit":"node --test test/unit/*.test.js"},"_npmUser":{"name":"fr.sorrentino","email":"fr.sorrentino@gmail.com"},"repository":{"url":"git+https://github.com/frsorrentino/chrome-bridge.git","type":"git"},"_npmVersion":"11.8.0","description":"MCP server with 60 tools for browser automation via Chrome extension. Works on ChromeOS/Crostini.","directories":{},"_nodeVersion":"24.13.1","dependencies":{"ws":"^8.18.0","node-html-parser":"^9.0.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/chrome-bridge-mcp_1.9.0_1785404327447_0.9533295076061317","host":"s3://npm-registry-packages-npm-production"}},"1.10.0":{"name":"chrome-bridge-mcp","version":"1.10.0","keywords":["mcp","chrome","browser-automation","claude-code","chromeos","crostini","devtools","websocket","chrome-extension","accessibility","testing"],"author":{"name":"frsorrentino"},"license":"MIT","_id":"chrome-bridge-mcp@1.10.0","maintainers":[{"name":"fr.sorrentino","email":"fr.sorrentino@gmail.com"}],"homepage":"https://github.com/frsorrentino/chrome-bridge#readme","bugs":{"url":"https://github.com/frsorrentino/chrome-bridge/issues"},"bin":{"chrome-bridge":"server/cli.js","chrome-bridge-mcp":"server/index.js"},"dist":{"shasum":"ca54d82486c94bd8cdaa925b5772947583682a07","tarball":"https://registry.npmjs.org/chrome-bridge-mcp/-/chrome-bridge-mcp-1.10.0.tgz","fileCount":29,"integrity":"sha512-IRugATDD72axbdXLxVbGQacZbnVIFB0Akj6u3iZlRAx0yRIeCCKF7nTPzs8r7PkE4b+uMINlAQvnHWGZ1RN61w==","signatures":[{"sig":"MEUCIQDxpvXEvV/AazDBvI7IOJynBcj+SEhv/0Hk5FVYNinj+QIgWeK4gI+209o5TVnwQ/9BErs1ZF+NgniYkw6zxL0tJ7s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":362581},"main":"server/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"e80e1bec1b794bc0728cff832729080e8f996002","mcpName":"io.github.frsorrentino/chrome-bridge","scripts":{"test":"node --test test/unit/*.test.js","start":"node server/index.js","measure":"node tools/measure-schema.mjs","test:e2e":"node test/test-devtools.js","test:unit":"node --test test/unit/*.test.js"},"_npmUser":{"name":"fr.sorrentino","email":"fr.sorrentino@gmail.com"},"repository":{"url":"git+https://github.com/frsorrentino/chrome-bridge.git","type":"git"},"_npmVersion":"11.8.0","description":"MCP server with 60 tools for browser automation via Chrome extension. Works on ChromeOS/Crostini.","directories":{},"_nodeVersion":"24.13.1","dependencies":{"ws":"^8.18.0","node-html-parser":"^9.0.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/chrome-bridge-mcp_1.10.0_1785409366320_0.8707199595133415","host":"s3://npm-registry-packages-npm-production"}},"1.10.1":{"name":"chrome-bridge-mcp","version":"1.10.1","keywords":["mcp","chrome","browser-automation","claude-code","chromeos","crostini","devtools","websocket","chrome-extension","accessibility","testing"],"author":{"name":"frsorrentino"},"license":"MIT","_id":"chrome-bridge-mcp@1.10.1","maintainers":[{"name":"fr.sorrentino","email":"fr.sorrentino@gmail.com"}],"homepage":"https://github.com/frsorrentino/chrome-bridge#readme","bugs":{"url":"https://github.com/frsorrentino/chrome-bridge/issues"},"bin":{"chrome-bridge":"server/cli.js","chrome-bridge-mcp":"server/index.js"},"dist":{"shasum":"7242d302784ab938182d38e89a2f5680d86aa262","tarball":"https://registry.npmjs.org/chrome-bridge-mcp/-/chrome-bridge-mcp-1.10.1.tgz","fileCount":29,"integrity":"sha512-Ue3KUiApXvf40Si6W0WBVgilqlPFhqSGQC+oB+5jrEMFtXGjSiTYTl60JnFv+GIp0mjlkpNzWEPHt46rjeVFEw==","signatures":[{"sig":"MEQCIDqsqVtma6vXkQ7jLbaJu4d6ycHcaUfNTDnvSA+L837iAiAVC3DO6e4aI8tW13LEn7+nEBRvKCaKr/oSBQhbJrfppA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":364576},"main":"server/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"3398e48636b27e723981c91855296dc9d9c08068","mcpName":"io.github.frsorrentino/chrome-bridge","scripts":{"test":"node --test test/unit/*.test.js","start":"node server/index.js","measure":"node tools/measure-schema.mjs","test:e2e":"node test/test-devtools.js","test:unit":"node --test test/unit/*.test.js"},"_npmUser":{"name":"fr.sorrentino","email":"fr.sorrentino@gmail.com"},"repository":{"url":"git+https://github.com/frsorrentino/chrome-bridge.git","type":"git"},"_npmVersion":"11.8.0","description":"MCP server with 60 tools for browser automation via Chrome extension. Works on ChromeOS/Crostini.","directories":{},"_nodeVersion":"24.13.1","dependencies":{"ws":"^8.18.0","node-html-parser":"^9.0.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/chrome-bridge-mcp_1.10.1_1785411038178_0.6619404579005144","host":"s3://npm-registry-packages-npm-production"}},"1.11.0":{"name":"chrome-bridge-mcp","version":"1.11.0","keywords":["mcp","chrome","browser-automation","claude-code","chromeos","crostini","devtools","websocket","chrome-extension","accessibility","testing"],"author":{"name":"frsorrentino"},"license":"MIT","_id":"chrome-bridge-mcp@1.11.0","maintainers":[{"name":"fr.sorrentino","email":"fr.sorrentino@gmail.com"}],"homepage":"https://github.com/frsorrentino/chrome-bridge#readme","bugs":{"url":"https://github.com/frsorrentino/chrome-bridge/issues"},"bin":{"chrome-bridge":"server/cli.js","chrome-bridge-mcp":"server/index.js"},"dist":{"shasum":"21f4ed35c1a8187f822918f5525c1ca6e01f787c","tarball":"https://registry.npmjs.org/chrome-bridge-mcp/-/chrome-bridge-mcp-1.11.0.tgz","fileCount":30,"integrity":"sha512-Ldz5/MoqZm+DEo89E9uyoVPdbdc0f113fF+ehOZLKaoPSOW96G+8Y1aIFRBpQWqU6Ii87SoXDENl45XNGmITmA==","signatures":[{"sig":"MEQCIF+wsox0MBoSA3O9laVJHfCwNkG9E9Y2Xt8HDAlWeffaAiAGORr1khBj+zY5MWXqU/p9U1krrN7bKhFev83uRKilDA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":376430},"main":"server/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"a3515a877f07bc2855cb3fa5e878573706219545","mcpName":"io.github.frsorrentino/chrome-bridge","scripts":{"test":"node --test test/unit/*.test.js","start":"node server/index.js","measure":"node tools/measure-schema.mjs","test:e2e":"node test/test-devtools.js","test:unit":"node --test test/unit/*.test.js"},"_npmUser":{"name":"fr.sorrentino","email":"fr.sorrentino@gmail.com"},"repository":{"url":"git+https://github.com/frsorrentino/chrome-bridge.git","type":"git"},"_npmVersion":"11.8.0","description":"MCP server with 60 tools for browser automation via Chrome extension. Works on ChromeOS/Crostini.","directories":{},"_nodeVersion":"24.13.1","dependencies":{"ws":"^8.18.0","node-html-parser":"^9.0.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/chrome-bridge-mcp_1.11.0_1785437340067_0.18472693253074257","host":"s3://npm-registry-packages-npm-production"}},"1.11.1":{"name":"chrome-bridge-mcp","version":"1.11.1","keywords":["mcp","chrome","browser-automation","claude-code","chromeos","crostini","devtools","websocket","chrome-extension","accessibility","testing"],"author":{"name":"frsorrentino"},"license":"MIT","_id":"chrome-bridge-mcp@1.11.1","maintainers":[{"name":"fr.sorrentino","email":"fr.sorrentino@gmail.com"}],"homepage":"https://github.com/frsorrentino/chrome-bridge#readme","bugs":{"url":"https://github.com/frsorrentino/chrome-bridge/issues"},"bin":{"chrome-bridge":"server/cli.js","chrome-bridge-mcp":"server/index.js"},"dist":{"shasum":"a81a79da8642e9fd93234b1276298e5860919ead","tarball":"https://registry.npmjs.org/chrome-bridge-mcp/-/chrome-bridge-mcp-1.11.1.tgz","fileCount":31,"integrity":"sha512-fj+oytksgOgXt81O+LNlep1nK7aaalklj84nqIMWLSG07j4tojMXVXZ2JvGt17sioJwI6qXxVsEkgmxR8dEFUw==","signatures":[{"sig":"MEQCIHeHd828MWza7t0FOFcRKOennYQP1KY6Pmz7Pj356cJCAiBrBNBAL65T006hca+7PknG2ylhDR8kpDnEyt4mtU/ypw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":384810},"main":"server/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"a3e42b778787a5ff9f4c7ac6add6392a64155d7a","mcpName":"io.github.frsorrentino/chrome-bridge","scripts":{"test":"node --test test/unit/*.test.js","start":"node server/index.js","measure":"node tools/measure-schema.mjs","test:e2e":"node test/test-devtools.js","test:unit":"node --test test/unit/*.test.js"},"_npmUser":{"name":"fr.sorrentino","email":"fr.sorrentino@gmail.com"},"repository":{"url":"git+https://github.com/frsorrentino/chrome-bridge.git","type":"git"},"_npmVersion":"11.8.0","description":"MCP server with 60 tools for browser automation via Chrome extension. Works on ChromeOS/Crostini.","directories":{},"_nodeVersion":"24.13.1","dependencies":{"ws":"^8.18.0","node-html-parser":"^9.0.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/chrome-bridge-mcp_1.11.1_1785443303022_0.21889190798822034","host":"s3://npm-registry-packages-npm-production"}},"1.13.0":{"name":"chrome-bridge-mcp","version":"1.13.0","keywords":["mcp","chrome","browser-automation","claude-code","chromeos","crostini","devtools","websocket","chrome-extension","accessibility","testing"],"author":{"name":"frsorrentino"},"license":"MIT","_id":"chrome-bridge-mcp@1.13.0","maintainers":[{"name":"fr.sorrentino","email":"fr.sorrentino@gmail.com"}],"homepage":"https://github.com/frsorrentino/chrome-bridge#readme","bugs":{"url":"https://github.com/frsorrentino/chrome-bridge/issues"},"bin":{"chrome-bridge":"server/cli.js","chrome-bridge-mcp":"server/index.js"},"dist":{"shasum":"fc8cc2acf63694918ad90b9fe3da5a9d19edb41b","tarball":"https://registry.npmjs.org/chrome-bridge-mcp/-/chrome-bridge-mcp-1.13.0.tgz","fileCount":32,"integrity":"sha512-u4iTOwsBPuRKheDcABTlSNwt1Xkf7KpT9mtWh14ZqOSTO0/7eIfNB6G10ZqgyRIApINrRq7u6tJDGnTH5+dJrA==","signatures":[{"sig":"MEYCIQDRbDhAmSBGv8hCVenqVRKUOADzO88cXPg8agMm/MfzjAIhAKhtdMZWJ+cUME/KgZilugGLqv01kq+vTmclfzPuQUD6","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":398573},"main":"server/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"6d84f7177a21d3111e560b1cff800e0f60385714","mcpName":"io.github.frsorrentino/chrome-bridge","scripts":{"test":"node --test test/unit/*.test.js","start":"node server/index.js","measure":"node tools/measure-schema.mjs","test:e2e":"node test/test-devtools.js","test:unit":"node --test test/unit/*.test.js"},"_npmUser":{"name":"fr.sorrentino","email":"fr.sorrentino@gmail.com"},"repository":{"url":"git+https://github.com/frsorrentino/chrome-bridge.git","type":"git"},"_npmVersion":"11.8.0","description":"MCP server with 62 tools for browser automation via Chrome extension. Works on ChromeOS/Crostini.","directories":{},"_nodeVersion":"24.13.1","dependencies":{"ws":"^8.18.0","node-html-parser":"^9.0.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/chrome-bridge-mcp_1.13.0_1785495667615_0.3762499391195562","host":"s3://npm-registry-packages-npm-production"}},"1.14.0":{"name":"chrome-bridge-mcp","version":"1.14.0","keywords":["mcp","chrome","browser-automation","claude-code","chromeos","crostini","devtools","websocket","chrome-extension","accessibility","testing"],"author":{"name":"frsorrentino"},"license":"MIT","_id":"chrome-bridge-mcp@1.14.0","maintainers":[{"name":"fr.sorrentino","email":"fr.sorrentino@gmail.com"}],"homepage":"https://github.com/frsorrentino/chrome-bridge#readme","bugs":{"url":"https://github.com/frsorrentino/chrome-bridge/issues"},"bin":{"chrome-bridge":"server/cli.js","chrome-bridge-mcp":"server/index.js"},"dist":{"shasum":"f97e056ad31781b6a31f49aab46f59b0981ec795","tarball":"https://registry.npmjs.org/chrome-bridge-mcp/-/chrome-bridge-mcp-1.14.0.tgz","fileCount":32,"integrity":"sha512-WaoB1Qg9ycrnCn0soTXRtzvcqhrWn8koHhOG/glK0TTTBXTESw9Sa17B6alsuYy8ukZtgeMy8VFhx5bDFiZcrw==","signatures":[{"sig":"MEUCIQC7+9vX2eKV1BkF5PpbrXfZmPJ40gJ6DlnoScAeYIPh+gIgBtHUSwYl/GEYFvMe+b7uqFf6OAVM9trsSvxD6IIBTK0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/chrome-bridge-mcp@1.14.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":396751},"main":"server/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"dc4eb75ac98ba3c36e8aac31e7a87d8cb632bd86","mcpName":"io.github.frsorrentino/chrome-bridge","scripts":{"test":"node --test test/unit/*.test.js","start":"node server/index.js","measure":"node tools/measure-schema.mjs","test:e2e":"node test/test-devtools.js","test:unit":"node --test test/unit/*.test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:74b9860b-1b37-416e-a550-e4651e5b056b"}},"repository":{"url":"git+https://github.com/frsorrentino/chrome-bridge.git","type":"git"},"_npmVersion":"11.19.0","description":"MCP server with 62 tools for browser automation via Chrome extension. Works on ChromeOS/Crostini.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.18.0","node-html-parser":"^9.0.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/chrome-bridge-mcp_1.14.0_1785510059747_0.9941906960775473","host":"s3://npm-registry-packages-npm-production"}},"1.15.0":{"name":"chrome-bridge-mcp","version":"1.15.0","keywords":["mcp","chrome","browser-automation","claude-code","chromeos","crostini","devtools","websocket","chrome-extension","accessibility","testing"],"author":{"name":"frsorrentino"},"license":"MIT","_id":"chrome-bridge-mcp@1.15.0","maintainers":[{"name":"fr.sorrentino","email":"fr.sorrentino@gmail.com"}],"homepage":"https://github.com/frsorrentino/chrome-bridge#readme","bugs":{"url":"https://github.com/frsorrentino/chrome-bridge/issues"},"bin":{"chrome-bridge":"server/cli.js","chrome-bridge-mcp":"server/index.js"},"dist":{"shasum":"ea32c1991ce915110c8770923f7cccef4da609a1","tarball":"https://registry.npmjs.org/chrome-bridge-mcp/-/chrome-bridge-mcp-1.15.0.tgz","fileCount":32,"integrity":"sha512-a04czwNh/cI+T7X7oU5iMstagOmku24R9M8KeONcGrRpdlshkitz7D0jB9GouiHxBkt0R7XSkHraIOdFd4/kHg==","signatures":[{"sig":"MEQCIGOT+/QdjxNz6snd+0nb/ZjzqPjj3YDZ1EjJdeH+ByO8AiBsmV+hXGOJi0f0BKlL8Dw9tU9A7Ad2EDdnCBRYdMmvow==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/chrome-bridge-mcp@1.15.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":407449},"main":"server/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"1e7dfdc7a940e460c49a685714525b1d141fc182","mcpName":"io.github.frsorrentino/chrome-bridge","scripts":{"test":"node --test test/unit/*.test.js","start":"node server/index.js","measure":"node tools/measure-schema.mjs","test:e2e":"node test/test-devtools.js","test:unit":"node --test test/unit/*.test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:74b9860b-1b37-416e-a550-e4651e5b056b"}},"repository":{"url":"git+https://github.com/frsorrentino/chrome-bridge.git","type":"git"},"_npmVersion":"11.19.0","description":"MCP server with 63 tools for browser automation via Chrome extension. Works on ChromeOS/Crostini.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.18.0","node-html-parser":"^9.0.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/chrome-bridge-mcp_1.15.0_1785511487981_0.45884753078640483","host":"s3://npm-registry-packages-npm-production"}},"1.15.1":{"name":"chrome-bridge-mcp","version":"1.15.1","keywords":["mcp","chrome","browser-automation","claude-code","chromeos","crostini","devtools","websocket","chrome-extension","accessibility","testing"],"author":{"name":"frsorrentino"},"license":"MIT","_id":"chrome-bridge-mcp@1.15.1","maintainers":[{"name":"fr.sorrentino","email":"fr.sorrentino@gmail.com"}],"homepage":"https://github.com/frsorrentino/chrome-bridge#readme","bugs":{"url":"https://github.com/frsorrentino/chrome-bridge/issues"},"bin":{"chrome-bridge":"server/cli.js","chrome-bridge-mcp":"server/index.js"},"dist":{"shasum":"1d0fb61190972afc624730f617281ec6061a1554","tarball":"https://registry.npmjs.org/chrome-bridge-mcp/-/chrome-bridge-mcp-1.15.1.tgz","fileCount":33,"integrity":"sha512-SnliFMMtYPQ1D4I7n0D1VTuuVlGNQZMdJYhs0BI2wHVl6LB11JFQ1fgEnIaKw858omU0UJg/26FMh8/ysocJoA==","signatures":[{"sig":"MEYCIQDPgUICfWodKdLsLO6hIsLtibinU6aa7do5P91RTJmXfQIhAI3wxVoKZjdD0aoULp1PaxHvzHiA4uW8D48UZXBsYCrc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/chrome-bridge-mcp@1.15.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":412220},"main":"server/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"431c476e751f799fbc8fe23612ef7f3dbe97c5d5","mcpName":"io.github.frsorrentino/chrome-bridge","scripts":{"test":"node --test test/unit/*.test.js","start":"node server/index.js","measure":"node tools/measure-schema.mjs","test:e2e":"node test/test-devtools.js","test:unit":"node --test test/unit/*.test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:74b9860b-1b37-416e-a550-e4651e5b056b"}},"repository":{"url":"git+https://github.com/frsorrentino/chrome-bridge.git","type":"git"},"_npmVersion":"11.19.0","description":"MCP server with 63 tools for browser automation via Chrome extension. Works on ChromeOS/Crostini.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.18.0","node-html-parser":"^9.0.0","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/chrome-bridge-mcp_1.15.1_1785522313388_0.13360859191699936","host":"s3://npm-registry-packages-npm-production"}},"1.16.0":{"name":"chrome-bridge-mcp","version":"1.16.0","keywords":["mcp","chrome","browser-automation","claude-code","chromeos","crostini","devtools","websocket","chrome-extension","accessibility","testing"],"author":{"name":"frsorrentino"},"license":"MIT","_id":"chrome-bridge-mcp@1.16.0","maintainers":[{"name":"fr.sorrentino","email":"fr.sorrentino@gmail.com"}],"homepage":"https://github.com/frsorrentino/chrome-bridge#readme","bugs":{"url":"https://github.com/frsorrentino/chrome-bridge/issues"},"bin":{"chrome-bridge":"server/cli.js","chrome-bridge-mcp":"server/index.js"},"dist":{"shasum":"c1a03c1f4ad0252cd6601dac533d2b5087a17baa","tarball":"https://registry.npmjs.org/chrome-bridge-mcp/-/chrome-bridge-mcp-1.16.0.tgz","fileCount":44,"integrity":"sha512-9K2ih9RNcLh0kEKWjRydm9u/iisBkoIEl92rlfMAUloN9Xitmp4qKsMo5e3p1M+2Jbtj12uWO0reAoVihI4YpA==","signatures":[{"sig":"MEUCIDI7amBX9L/5F4Bv94gJpW4f3BB4/KjFhpA0VCwHDM47AiEAz/Etc4oyhUPCV18pzI5N2kG4SQ9ZdZXpkhrAFYYZ+PU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIF5jkvKL53afEFmRAvS5wCka/2RqBPTvgRP3y4kj0yQWAiB0qQcE9XAqQKtPvwFgTQCYwhwZim+ZUkfGkVnR7X/flQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/chrome-bridge-mcp@1.16.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":541748},"main":"server/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"12ff23785f559736d4479ce293429355af2e73c2","mcpName":"io.github.frsorrentino/chrome-bridge","scripts":{"test":"node --test test/unit/*.test.js","start":"node server/index.js","measure":"node tools/measure-schema.mjs","test:e2e":"node test/test-devtools.js","test:unit":"node --test test/unit/*.test.js","test:e2e:launch":"CHROME_BRIDGE_PORT=8799 node test/test-devtools.js --launch"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:74b9860b-1b37-416e-a550-e4651e5b056b"}},"repository":{"url":"git+https://github.com/frsorrentino/chrome-bridge.git","type":"git"},"_npmVersion":"11.19.1","description":"MCP server with 59 tools for browser automation via Chrome extension. Works on ChromeOS/Crostini.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.18.0","node-html-parser":"^9.0.0","@jridgewell/trace-mapping":"^0.3.31","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/chrome-bridge-mcp_1.16.0_1788344468990_0.01286281259290889","host":"s3://npm-registry-packages-npm-production"}},"1.16.1":{"name":"chrome-bridge-mcp","version":"1.16.1","keywords":["mcp","chrome","browser-automation","claude-code","chromeos","crostini","devtools","websocket","chrome-extension","accessibility","testing"],"author":{"name":"frsorrentino"},"license":"MIT","_id":"chrome-bridge-mcp@1.16.1","maintainers":[{"name":"fr.sorrentino","email":"fr.sorrentino@gmail.com"}],"homepage":"https://github.com/frsorrentino/chrome-bridge#readme","bugs":{"url":"https://github.com/frsorrentino/chrome-bridge/issues"},"bin":{"chrome-bridge":"server/cli.js","chrome-bridge-mcp":"server/index.js"},"dist":{"shasum":"b73cbf2bfe9909422fdaa2b32e48d1661b55b672","tarball":"https://registry.npmjs.org/chrome-bridge-mcp/-/chrome-bridge-mcp-1.16.1.tgz","fileCount":44,"integrity":"sha512-zZRr+IQz4IO/RwENIZ0O2gPyUH1Qc30w0JyVSAXomwNniY7vhB/IAZ6LjsZ7Q0Eo/NaxXVv3oCdxoDy1t6f37Q==","signatures":[{"sig":"MEUCICdha6k5KiGmuUJXBErla6nT+SUlH3nOTw0d9U8z0oakAiEAs/YW3ceDK/OimbycylSkiuOd+zj8TLy9fBo1bYL0GBE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCfOCLuvnxt4rAxz3khy7p4Ind+WelfPB6Jh5N55XmQpAIhAPkYKyWvGuFWMNLWj1jlxVC4AvmoJaLQb/aj37R1UI2b","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/chrome-bridge-mcp@1.16.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":542876},"main":"server/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"21afcbd7350575563c4848c57ce979df1240db98","mcpName":"io.github.frsorrentino/chrome-bridge","scripts":{"test":"node --test test/unit/*.test.js","start":"node server/index.js","measure":"node tools/measure-schema.mjs","test:e2e":"node test/test-devtools.js","test:unit":"node --test test/unit/*.test.js","test:e2e:launch":"CHROME_BRIDGE_PORT=8799 node test/test-devtools.js --launch"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:74b9860b-1b37-416e-a550-e4651e5b056b"}},"repository":{"url":"git+https://github.com/frsorrentino/chrome-bridge.git","type":"git"},"_npmVersion":"11.19.1","description":"MCP server with 59 tools for browser automation via Chrome extension. Works on ChromeOS/Crostini.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.18.0","node-html-parser":"^9.0.0","@jridgewell/trace-mapping":"^0.3.31","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/chrome-bridge-mcp_1.16.1_1788361318001_0.47510082508241536","host":"s3://npm-registry-packages-npm-production"}},"1.17.0":{"name":"chrome-bridge-mcp","version":"1.17.0","keywords":["mcp","chrome","browser-automation","claude-code","chromeos","crostini","devtools","websocket","chrome-extension","accessibility","testing"],"author":{"name":"frsorrentino"},"license":"MIT","_id":"chrome-bridge-mcp@1.17.0","maintainers":[{"name":"fr.sorrentino","email":"fr.sorrentino@gmail.com"}],"homepage":"https://github.com/frsorrentino/chrome-bridge#readme","bugs":{"url":"https://github.com/frsorrentino/chrome-bridge/issues"},"bin":{"chrome-bridge":"server/cli.js","chrome-bridge-mcp":"server/index.js"},"dist":{"shasum":"9ac0d489aa4ecf0006d126eaf9bb0ea766399126","tarball":"https://registry.npmjs.org/chrome-bridge-mcp/-/chrome-bridge-mcp-1.17.0.tgz","fileCount":48,"integrity":"sha512-UdqLanJ8nriCGuI+UpeTbgUXUwdVSN6IaZO3o4KfjBE8jL9L47B8Hc1aaxa4LIRiXqu2ozJgsu9RoMJR1MTETw==","signatures":[{"sig":"MEQCIG/nd8y3V36Gm7DBL6zLd3EX1Z+3Gd6mJJ/K9TWjj6roAiByPGf9fxK2yZeVGr5VRu854uFsSvtiZw1AjWumM4fhBg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQC2KHfBT5iHusyDAJ0kQyqs/rgb+pNRLAF4pSB61E20FgIgGjVfp6bUpVa1NAiMY32qStygaydoLdqdKd10ncZaogs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/chrome-bridge-mcp@1.17.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":556995},"main":"server/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"4802617cd942670f9b873da2125e79eb2277ccf1","mcpName":"io.github.frsorrentino/chrome-bridge","scripts":{"test":"node --test test/unit/*.test.js","start":"node server/index.js","measure":"node tools/measure-schema.mjs","test:e2e":"node test/test-devtools.js","test:unit":"node --test test/unit/*.test.js","bench:latency":"node bench/latency.mjs","test:e2e:launch":"CHROME_BRIDGE_PORT=8799 node test/test-devtools.js --launch"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:74b9860b-1b37-416e-a550-e4651e5b056b"}},"repository":{"url":"git+https://github.com/frsorrentino/chrome-bridge.git","type":"git"},"_npmVersion":"11.19.1","description":"MCP server with 59 tools for browser automation via Chrome extension. Works on ChromeOS/Crostini.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.18.0","node-html-parser":"^9.0.0","@jridgewell/trace-mapping":"^0.3.31","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/chrome-bridge-mcp_1.17.0_1789115224536_0.8031873946869916","host":"s3://npm-registry-packages-npm-production"}},"1.18.0":{"name":"chrome-bridge-mcp","version":"1.18.0","keywords":["mcp","chrome","browser-automation","claude-code","chromeos","crostini","devtools","websocket","chrome-extension","accessibility","testing"],"author":{"name":"frsorrentino"},"license":"MIT","_id":"chrome-bridge-mcp@1.18.0","maintainers":[{"name":"fr.sorrentino","email":"fr.sorrentino@gmail.com"}],"homepage":"https://github.com/frsorrentino/chrome-bridge#readme","bugs":{"url":"https://github.com/frsorrentino/chrome-bridge/issues"},"bin":{"chrome-bridge":"server/cli.js","chrome-bridge-mcp":"server/index.js"},"dist":{"shasum":"608c33149b69807ba9861bca61165f917b7d8c32","tarball":"https://registry.npmjs.org/chrome-bridge-mcp/-/chrome-bridge-mcp-1.18.0.tgz","fileCount":48,"integrity":"sha512-JqJmcs4uwNW/FZGdQr2l4uJeZgp72r06sjLFzfmGRn6GsMuUXic5LodBx4DF6V9RfMl4uRqhWH2n0FGhlQatQg==","signatures":[{"sig":"MEUCIQCLp3cE3G/9NxjNFgeCNjGG6rU2n2CEdI6mgY6+7LogWQIgIW3ubK8guN6OKOS2jhb0lqpnZRFpJKyHDQCwBHYUs9s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIA4lI1cb3Gxruj0vFD2VISaIcCgESxBt3XhKobYWP7xqAiEA2RWDQYWwyuxNORBcFQdY/qltuISThmxidivi2Db+jo0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/chrome-bridge-mcp@1.18.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":562488},"main":"server/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"4de3bfd86e4e695f42cf4bdd040933dd91fd16e0","mcpName":"io.github.frsorrentino/chrome-bridge","scripts":{"test":"node --test test/unit/*.test.js","start":"node server/index.js","measure":"node tools/measure-schema.mjs","test:e2e":"node test/test-devtools.js","test:unit":"node --test test/unit/*.test.js","bench:latency":"node bench/latency.mjs","test:e2e:launch":"CHROME_BRIDGE_PORT=8799 node test/test-devtools.js --launch"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:74b9860b-1b37-416e-a550-e4651e5b056b"}},"repository":{"url":"git+https://github.com/frsorrentino/chrome-bridge.git","type":"git"},"_npmVersion":"11.19.1","description":"MCP server with 59 tools for browser automation via Chrome extension. Works on ChromeOS/Crostini.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.18.0","node-html-parser":"^9.0.0","@jridgewell/trace-mapping":"^0.3.31","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/chrome-bridge-mcp_1.18.0_1790098513555_0.2858786862173237","host":"s3://npm-registry-packages-npm-production"}},"1.19.0":{"name":"chrome-bridge-mcp","version":"1.19.0","keywords":["mcp","chrome","browser-automation","claude-code","chromeos","crostini","devtools","websocket","chrome-extension","accessibility","testing"],"author":{"name":"frsorrentino"},"license":"MIT","_id":"chrome-bridge-mcp@1.19.0","maintainers":[{"name":"fr.sorrentino","email":"fr.sorrentino@gmail.com"}],"homepage":"https://github.com/frsorrentino/chrome-bridge#readme","bugs":{"url":"https://github.com/frsorrentino/chrome-bridge/issues"},"bin":{"chrome-bridge":"server/cli.js","chrome-bridge-mcp":"server/index.js"},"dist":{"shasum":"510ba6a33d92e8234219710d69b02f9720b5cc3f","tarball":"https://registry.npmjs.org/chrome-bridge-mcp/-/chrome-bridge-mcp-1.19.0.tgz","fileCount":49,"integrity":"sha512-j3U0ZI8L4ms89WVX8DszJvQViJGirKZuJAyz4R7vsgrVZFzEucIzLTD3bIVLjYBCDlssCVmRzVte50QSp/+0iw==","signatures":[{"sig":"MEUCIC6fovvc/zAT2O9xLDRaJW7FrpTtnFdaThqVJcM7Ga8uAiEApG8TEIoP3add3X3/N7xHylRhjHHznTG4ECpc+hIkXW8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCeD0argFQ9xJOQ+XnHM8kzS00pcuWnQ59gxcPyEUmCEgIhAP0C8JTX+XIIi8kncgg3g5+GDQ0/IFSlQXMoGHgimk1W","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/chrome-bridge-mcp@1.19.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":576387},"main":"server/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"5708d1dcc794c52af82f57888bab191d5d4d87b0","mcpName":"io.github.frsorrentino/chrome-bridge","scripts":{"test":"node --test test/unit/*.test.js","start":"node server/index.js","measure":"node tools/measure-schema.mjs","test:e2e":"node test/test-devtools.js","test:unit":"node --test test/unit/*.test.js","bench:latency":"node bench/latency.mjs","test:e2e:launch":"CHROME_BRIDGE_PORT=8799 node test/test-devtools.js --launch"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:74b9860b-1b37-416e-a550-e4651e5b056b"}},"repository":{"url":"git+https://github.com/frsorrentino/chrome-bridge.git","type":"git"},"_npmVersion":"11.20.0","description":"MCP server with 59 tools for browser automation via Chrome extension. Works on ChromeOS/Crostini.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.18.0","node-html-parser":"^9.0.0","@jridgewell/trace-mapping":"^0.3.31","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/chrome-bridge-mcp_1.19.0_1790169791009_0.14664279729507412","host":"s3://npm-registry-packages-npm-production"}},"1.20.0":{"name":"chrome-bridge-mcp","version":"1.20.0","keywords":["mcp","chrome","browser-automation","claude-code","chromeos","crostini","devtools","websocket","chrome-extension","accessibility","testing"],"author":{"name":"frsorrentino"},"license":"MIT","_id":"chrome-bridge-mcp@1.20.0","maintainers":[{"name":"fr.sorrentino","email":"fr.sorrentino@gmail.com"}],"homepage":"https://github.com/frsorrentino/chrome-bridge#readme","bugs":{"url":"https://github.com/frsorrentino/chrome-bridge/issues"},"bin":{"chrome-bridge":"server/cli.js","chrome-bridge-mcp":"server/index.js"},"dist":{"shasum":"af7bb126c79f18ec8ed5d763c58d3bf9c2225f87","tarball":"https://registry.npmjs.org/chrome-bridge-mcp/-/chrome-bridge-mcp-1.20.0.tgz","fileCount":51,"integrity":"sha512-NKV936aBvQbQiUxrcz8Nb2JnRrCsJpxvo5M4T6QaC9S2nMKm5IJzt+WpA5wUsRtUEJv5tFt+AW/2iE5JDYLDhw==","signatures":[{"sig":"MEUCIE7c7lT+nT873yGI2X4ySRmlJDWy4/pK7u617cQTwx3bAiEAzRYmIgVHqMIdv+Y89VTkgSsN2OrFLU+7kEg1FjC5WTQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDSXYkihWBG3PdX6Z3UAQjh1L6B+woblJ67uJDJFbHCrAIhAIbnPEdhgkCFI1aDnZvDEG6mGe0Yjg1O8j2WPxl5n2cb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/chrome-bridge-mcp@1.20.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":595314},"main":"server/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"de01dd4989d6637baa604039e1ee5e08b11b0c17","mcpName":"io.github.frsorrentino/chrome-bridge","scripts":{"test":"node --test test/unit/*.test.js","start":"node server/index.js","measure":"node tools/measure-schema.mjs","test:e2e":"node test/test-devtools.js","test:unit":"node --test test/unit/*.test.js","bench:latency":"node bench/latency.mjs","test:e2e:launch":"CHROME_BRIDGE_PORT=8799 node test/test-devtools.js --launch"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:74b9860b-1b37-416e-a550-e4651e5b056b"}},"repository":{"url":"git+https://github.com/frsorrentino/chrome-bridge.git","type":"git"},"_npmVersion":"11.20.0","description":"MCP server with 59 tools for browser automation via Chrome extension. Works on ChromeOS/Crostini.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.18.0","node-html-parser":"^9.0.0","@jridgewell/trace-mapping":"^0.3.31","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/chrome-bridge-mcp_1.20.0_1790232486826_0.042934077905740775","host":"s3://npm-registry-packages-npm-production"}},"1.20.1":{"name":"chrome-bridge-mcp","version":"1.20.1","keywords":["mcp","chrome","browser-automation","claude-code","chromeos","crostini","devtools","websocket","chrome-extension","accessibility","testing"],"author":{"name":"frsorrentino"},"license":"MIT","_id":"chrome-bridge-mcp@1.20.1","maintainers":[{"name":"fr.sorrentino","email":"fr.sorrentino@gmail.com"}],"homepage":"https://github.com/frsorrentino/chrome-bridge#readme","bugs":{"url":"https://github.com/frsorrentino/chrome-bridge/issues"},"bin":{"chrome-bridge":"server/cli.js","chrome-bridge-mcp":"server/index.js"},"dist":{"shasum":"61c53bd145eef27f9e30ae856b698aaf1656ce5f","tarball":"https://registry.npmjs.org/chrome-bridge-mcp/-/chrome-bridge-mcp-1.20.1.tgz","fileCount":51,"integrity":"sha512-d1aDfOUyh5rGd/uM/jyQYeuczmPAQ6gAZfqI06lL/l9xjqnCNVs6gDZT0ibqRaPDvhn2akkqOUpMkAYPhi5YyQ==","signatures":[{"sig":"MEYCIQC/VRr4Yt0V+kRq9JEvnLYLlOmpXH0LodncmWCtzrKsyQIhAPiF9ou3O+erA+Uhpdab8LYLNNQ8mvusUEIPpJFdtP6u","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIC2vheUWGihLq7CNmeH+E7J96evrAUnhp1oXSrEtfEbpAiEApBP3MZK5/czwU9L5/nnG6qaEr5DavFYihbneVH3v4Mc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/chrome-bridge-mcp@1.20.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":598869},"main":"server/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"2d8aa471a35997b14745c42ef8d5b2cf5a45ee6a","mcpName":"io.github.frsorrentino/chrome-bridge","scripts":{"test":"node --test test/unit/*.test.js","start":"node server/index.js","measure":"node tools/measure-schema.mjs","test:e2e":"node test/test-devtools.js","test:unit":"node --test test/unit/*.test.js","bench:latency":"node bench/latency.mjs","test:e2e:launch":"CHROME_BRIDGE_PORT=8799 node test/test-devtools.js --launch"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:74b9860b-1b37-416e-a550-e4651e5b056b"}},"repository":{"url":"git+https://github.com/frsorrentino/chrome-bridge.git","type":"git"},"_npmVersion":"11.20.0","description":"MCP server with 59 tools for browser automation via Chrome extension. Works on ChromeOS/Crostini.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.18.0","node-html-parser":"^9.0.0","@jridgewell/trace-mapping":"^0.3.31","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/chrome-bridge-mcp_1.20.1_1790257112401_0.5685646002929314","host":"s3://npm-registry-packages-npm-production"}},"1.21.0":{"name":"chrome-bridge-mcp","version":"1.21.0","keywords":["mcp","chrome","browser-automation","claude-code","chromeos","crostini","devtools","websocket","chrome-extension","accessibility","testing"],"author":{"name":"frsorrentino"},"license":"MIT","_id":"chrome-bridge-mcp@1.21.0","maintainers":[{"name":"fr.sorrentino","email":"fr.sorrentino@gmail.com"}],"homepage":"https://github.com/frsorrentino/chrome-bridge#readme","bugs":{"url":"https://github.com/frsorrentino/chrome-bridge/issues"},"bin":{"chrome-bridge":"server/cli.js","chrome-bridge-mcp":"server/index.js"},"dist":{"shasum":"9f8eb25fc2d01667799ce1d5c64823e14c3ef6e3","tarball":"https://registry.npmjs.org/chrome-bridge-mcp/-/chrome-bridge-mcp-1.21.0.tgz","fileCount":52,"integrity":"sha512-wzUU+otXhUgwKQtaQLav5w/4dYsNkLMoPDnjEGCTJwgFZ64i73ktmZ8VULNZnUbMQOXtM5A8ztEbkuSahH8DXA==","signatures":[{"sig":"MEUCIQCBJkDBWsQnGxheb4LCt4zFC2OSyW31Ims6FvTmDBV/fAIgYwC4KpYZ+bsBLut3eVr4Ud0REmtVGw32pqhzleTHioU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIBKXFOIo07glCSF8dB7dAw3JAL5kvKmLuWw5d39ioj8fAiAtD/kPN6b0e2b1Tb8zL9znCI3Yh/H5r6AvDBaUfD321w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/chrome-bridge-mcp@1.21.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":621772},"main":"server/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"9f30df2be6d648c43120940dc8f71d7002fc8498","mcpName":"io.github.frsorrentino/chrome-bridge","scripts":{"test":"node --test test/unit/*.test.js","start":"node server/index.js","measure":"node tools/measure-schema.mjs","test:e2e":"node test/test-devtools.js","test:unit":"node --test test/unit/*.test.js","bench:latency":"node bench/latency.mjs","test:e2e:launch":"CHROME_BRIDGE_PORT=8799 node test/test-devtools.js --launch"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:74b9860b-1b37-416e-a550-e4651e5b056b"}},"repository":{"url":"git+https://github.com/frsorrentino/chrome-bridge.git","type":"git"},"_npmVersion":"11.20.0","description":"Chrome Bridge by frsorrentino: MCP server that gives Claude Code your real, logged-in Chrome — 60 tools, 2.75× fewer turns than Claude in Chrome, ChromeOS included.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.18.0","node-html-parser":"^9.0.0","@jridgewell/trace-mapping":"^0.3.31","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/chrome-bridge-mcp_1.21.0_1790266892998_0.6071226454280503","host":"s3://npm-registry-packages-npm-production"}},"1.22.0":{"name":"chrome-bridge-mcp","version":"1.22.0","keywords":["mcp","chrome","browser-automation","claude-code","chromeos","crostini","devtools","websocket","chrome-extension","accessibility","testing"],"author":{"name":"frsorrentino"},"license":"MIT","_id":"chrome-bridge-mcp@1.22.0","maintainers":[{"name":"fr.sorrentino","email":"fr.sorrentino@gmail.com"}],"homepage":"https://github.com/frsorrentino/chrome-bridge#readme","bugs":{"url":"https://github.com/frsorrentino/chrome-bridge/issues"},"bin":{"chrome-bridge":"server/cli.js","chrome-bridge-mcp":"server/index.js"},"dist":{"shasum":"da03febc68e5903052e2ece60c41613b2b465ece","tarball":"https://registry.npmjs.org/chrome-bridge-mcp/-/chrome-bridge-mcp-1.22.0.tgz","fileCount":52,"integrity":"sha512-wqBAuFwU6QlLcRBnSlSqHctznsuijRWn1hBH5KAewIUBh/A2ij1Ildaj5xZqQQxpyD41+qB+IUb/HRX9NB99uA==","signatures":[{"sig":"MEQCIG3KMVxHzkyzlqqJLDW0sVq1b8mgxheFofKKo1bNe36QAiAH9ntuAZJ0SNW6jHFaJzH9OE8bG//ewt9aYk8kZeYCWw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCk1t8ytbPBFDx0jXrqkIuW/lhqssieiI7DxvSXfJkI1gIhALfRgXRZ7K1jBlyt0bOw3IiyEZJzG9MzTOrHmlBjLTEP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/chrome-bridge-mcp@1.22.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":622365},"main":"server/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"500e55e36a4b3a18077434b86facba670febffd9","mcpName":"io.github.frsorrentino/chrome-bridge","scripts":{"test":"node --test test/unit/*.test.js","start":"node server/index.js","measure":"node tools/measure-schema.mjs","test:e2e":"node test/test-devtools.js","test:unit":"node --test test/unit/*.test.js","bench:latency":"node bench/latency.mjs","test:e2e:launch":"CHROME_BRIDGE_PORT=8799 node test/test-devtools.js --launch"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:74b9860b-1b37-416e-a550-e4651e5b056b"}},"repository":{"url":"git+https://github.com/frsorrentino/chrome-bridge.git","type":"git"},"_npmVersion":"11.20.0","description":"Chrome Bridge by frsorrentino: MCP server that gives Claude Code your real, logged-in Chrome — 60 tools, 2.75× fewer turns than Claude in Chrome, ChromeOS included.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.18.0","node-html-parser":"^9.0.0","@jridgewell/trace-mapping":"^0.3.31","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/chrome-bridge-mcp_1.22.0_1790321517863_0.3714737656603002","host":"s3://npm-registry-packages-npm-production"}},"1.23.0":{"name":"chrome-bridge-mcp","version":"1.23.0","keywords":["mcp","chrome","browser-automation","claude-code","chromeos","crostini","devtools","websocket","chrome-extension","accessibility","testing"],"author":{"name":"frsorrentino"},"license":"MIT","_id":"chrome-bridge-mcp@1.23.0","maintainers":[{"name":"fr.sorrentino","email":"fr.sorrentino@gmail.com"}],"homepage":"https://github.com/frsorrentino/chrome-bridge#readme","bugs":{"url":"https://github.com/frsorrentino/chrome-bridge/issues"},"bin":{"chrome-bridge":"server/cli.js","chrome-bridge-mcp":"server/index.js"},"dist":{"shasum":"761efb76332a38439e7d92ef41e52535cfad8f02","tarball":"https://registry.npmjs.org/chrome-bridge-mcp/-/chrome-bridge-mcp-1.23.0.tgz","fileCount":52,"integrity":"sha512-SAjQNPxgoNCX5iT187TafrZJ9xFGoh1n8cwGoE5AFf4zfoxH/W9IC8XW7yeYi5e8XR0ci0iimPg0IluN2Z4JPQ==","signatures":[{"sig":"MEUCIQDHMmtaioxehyAvIJxt7M0/yJV8xFW2i4B4CeTSCmsOmAIgSFRtopKsGIA4KLf55luZSOqF8zkOsiDJIYbW9o8/NcI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCEZxM3OWH5xwVJR1taxKMQzCCG5Ah/E53esH9yzp8IygIhAK/OlsXYVx6XtPji8o9QcR9xeXAEcHEAi/X5SKL9lNeS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/chrome-bridge-mcp@1.23.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":625446},"main":"server/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"fb781911ed65c00837e0f07d5127742241445bf0","mcpName":"io.github.frsorrentino/chrome-bridge","scripts":{"test":"node --test test/unit/*.test.js","start":"node server/index.js","measure":"node tools/measure-schema.mjs","test:e2e":"node test/test-devtools.js","test:unit":"node --test test/unit/*.test.js","bench:latency":"node bench/latency.mjs","test:e2e:launch":"CHROME_BRIDGE_PORT=8799 node test/test-devtools.js --launch"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:74b9860b-1b37-416e-a550-e4651e5b056b"}},"repository":{"url":"git+https://github.com/frsorrentino/chrome-bridge.git","type":"git"},"_npmVersion":"11.20.0","description":"Chrome Bridge by frsorrentino: MCP server that lets Claude Code borrow a tab from your own logged-in Chrome and hand it back — logins, 2FA and CAPTCHAs stay with you (handoff). 60 tools, 2.75× fewer turns measured, ChromeOS included.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.18.0","node-html-parser":"^9.0.0","@jridgewell/trace-mapping":"^0.3.31","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/chrome-bridge-mcp_1.23.0_1790406637591_0.42077543638963677","host":"s3://npm-registry-packages-npm-production"}},"1.23.2":{"name":"chrome-bridge-mcp","version":"1.23.2","keywords":["mcp","chrome","browser-automation","claude-code","chromeos","crostini","devtools","websocket","chrome-extension","accessibility","testing"],"author":{"name":"frsorrentino"},"license":"MIT","_id":"chrome-bridge-mcp@1.23.2","maintainers":[{"name":"fr.sorrentino","email":"fr.sorrentino@gmail.com"}],"homepage":"https://github.com/frsorrentino/chrome-bridge#readme","bugs":{"url":"https://github.com/frsorrentino/chrome-bridge/issues"},"bin":{"chrome-bridge":"server/cli.js","chrome-bridge-mcp":"server/index.js"},"dist":{"shasum":"bad0dafc22a6972c54635d6d4c6d2637f5d27053","tarball":"https://registry.npmjs.org/chrome-bridge-mcp/-/chrome-bridge-mcp-1.23.2.tgz","fileCount":52,"integrity":"sha512-96qHaTfrN+9a2ew/72SDln0t9z8MZ/3LiENigmS8sW12iunN0hrbVoj/joj5t6nn6+PtMJHfTNuVioCaRy5O1Q==","signatures":[{"sig":"MEUCIQCQ9m2QHv6dfdY3SRVjb0zsPtTYB0pdr6MwiOF5rN2a/wIgWEkDISY+taqlL5LV6zpGJLJibyg0PnhcFQbLIPmSLxA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDyHYskDoNp9hKNUqhb7iqonupWCAMyP3eZ+/vdrl2lMQIhAIfI8G+Il1G9IXCeuJ++MScL6A9BYjNdBrj7pT5VFL53","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/chrome-bridge-mcp@1.23.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":632308},"main":"server/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"9250873faa8f51d53e5ea2d44bf9c5e2c183b8fc","mcpName":"io.github.frsorrentino/chrome-bridge","scripts":{"test":"node --test test/unit/*.test.js","start":"node server/index.js","measure":"node tools/measure-schema.mjs","test:e2e":"node test/test-devtools.js","test:unit":"node --test test/unit/*.test.js","bench:latency":"node bench/latency.mjs","test:e2e:launch":"CHROME_BRIDGE_PORT=8799 node test/test-devtools.js --launch"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:74b9860b-1b37-416e-a550-e4651e5b056b"}},"repository":{"url":"git+https://github.com/frsorrentino/chrome-bridge.git","type":"git"},"_npmVersion":"11.20.0","description":"Chrome Bridge by frsorrentino: MCP server that lets Claude Code borrow a tab from your own logged-in Chrome and hand it back — logins, 2FA and CAPTCHAs stay with you (handoff). 60 tools; about half the cost of Claude in Chrome, measured; ChromeOS included","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.18.0","node-html-parser":"^9.0.0","@jridgewell/trace-mapping":"^0.3.31","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/chrome-bridge-mcp_1.23.2_1790520422184_0.025390706799018448","host":"s3://npm-registry-packages-npm-production"}},"1.23.3":{"name":"chrome-bridge-mcp","version":"1.23.3","keywords":["mcp","chrome","browser-automation","claude-code","chromeos","crostini","devtools","websocket","chrome-extension","accessibility","testing"],"author":{"name":"frsorrentino"},"license":"MIT","_id":"chrome-bridge-mcp@1.23.3","maintainers":[{"name":"fr.sorrentino","email":"fr.sorrentino@gmail.com"}],"homepage":"https://github.com/frsorrentino/chrome-bridge#readme","bugs":{"url":"https://github.com/frsorrentino/chrome-bridge/issues"},"bin":{"chrome-bridge":"server/cli.js","chrome-bridge-mcp":"server/index.js"},"dist":{"shasum":"4cfa6fe85ed68f313331491f1dc2fec72cf5812e","tarball":"https://registry.npmjs.org/chrome-bridge-mcp/-/chrome-bridge-mcp-1.23.3.tgz","fileCount":52,"integrity":"sha512-dYJq8uOTjBi44civV2aCP0wdSLOZSIYiznvKXXWNCs7B6cxzO0nF1n3EQyGLFBNXjA+fuIGifwMq4I7c5pTJ2Q==","signatures":[{"sig":"MEYCIQDD55n4m9SAhngaImHy29/5q9ZM/diHWoN0PokWOjuTCQIhAPvs3Yd7chu7YuHeuyJv8mF7uE2iuKuLJ/Nb7Ijtw0vX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIAZ1n74ocp0DgYLQY1ytVhHEl9XOYTgM+2dH96CFE2/aAiEAxAaZ9DkqU1vHAFVrh4rmR0d5k76jUSuZxL8wXsyBBVA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/chrome-bridge-mcp@1.23.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":637952},"main":"server/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"e1a024f6bcc67c7d57837dffd0c80a338a264536","mcpName":"io.github.frsorrentino/chrome-bridge","scripts":{"test":"node --test test/unit/*.test.js","start":"node server/index.js","measure":"node tools/measure-schema.mjs","test:e2e":"node test/test-devtools.js","test:unit":"node --test test/unit/*.test.js","bench:latency":"node bench/latency.mjs","test:e2e:launch":"CHROME_BRIDGE_PORT=8799 node test/test-devtools.js --launch"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:74b9860b-1b37-416e-a550-e4651e5b056b"}},"repository":{"url":"git+https://github.com/frsorrentino/chrome-bridge.git","type":"git"},"_npmVersion":"11.20.0","description":"Chrome Bridge by frsorrentino: MCP server that lets Claude Code borrow a tab from your own logged-in Chrome and hand it back — logins, 2FA and CAPTCHAs stay with you (handoff). 60 tools; about half the cost of Claude in Chrome, measured; ChromeOS included","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.18.0","node-html-parser":"^9.0.0","@jridgewell/trace-mapping":"^0.3.31","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/chrome-bridge-mcp_1.23.3_1790526980663_0.3340068394165856","host":"s3://npm-registry-packages-npm-production"}},"1.23.4":{"name":"chrome-bridge-mcp","version":"1.23.4","keywords":["mcp","chrome","browser-automation","claude-code","chromeos","crostini","devtools","websocket","chrome-extension","accessibility","testing"],"author":{"name":"frsorrentino"},"license":"MIT","_id":"chrome-bridge-mcp@1.23.4","maintainers":[{"name":"fr.sorrentino","email":"fr.sorrentino@gmail.com"}],"homepage":"https://github.com/frsorrentino/chrome-bridge#readme","bugs":{"url":"https://github.com/frsorrentino/chrome-bridge/issues"},"bin":{"chrome-bridge":"server/cli.js","chrome-bridge-mcp":"server/index.js"},"dist":{"shasum":"777a5286e915af9df9deb4fb60abb184391ebdbe","tarball":"https://registry.npmjs.org/chrome-bridge-mcp/-/chrome-bridge-mcp-1.23.4.tgz","fileCount":53,"integrity":"sha512-NJLo1gZKBpyLV1dfS4wh9Nn6FTEngOwETE75QT8GiL81AsgoDzNVl5KXdq706aCJyCPlV+JkhanTNsovlvPXvw==","signatures":[{"sig":"MEUCICpIDvqfAecM9sKFDYyJ6Yw/OA5YB7hywJoHWDjczUyVAiEA+BYL60fgU4vG3+shSLSlNhCO5QZcuRT8rTrXjL04HD8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDTq/I1uLb0mvzQB6ufQNag/a5+96u2DTn147HBPmCFfwIhALo+AJWa2a3+DYepYFZhDs1C5HxSH9JthVktX8uB4ixn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/chrome-bridge-mcp@1.23.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":641000},"main":"server/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"7720327ebb67a6a0f98f814448603e2feed96948","mcpName":"io.github.frsorrentino/chrome-bridge","scripts":{"test":"node --test test/unit/*.test.js","start":"node server/index.js","measure":"node tools/measure-schema.mjs","test:e2e":"node test/test-devtools.js","test:unit":"node --test test/unit/*.test.js","bench:latency":"node bench/latency.mjs","test:e2e:launch":"CHROME_BRIDGE_PORT=8799 node test/test-devtools.js --launch"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:74b9860b-1b37-416e-a550-e4651e5b056b"}},"repository":{"url":"git+https://github.com/frsorrentino/chrome-bridge.git","type":"git"},"_npmVersion":"11.20.0","description":"Chrome Bridge by frsorrentino: MCP server that lets Claude Code borrow a tab from your own logged-in Chrome and hand it back — logins, 2FA and CAPTCHAs stay with you (handoff). 60 tools; about half the cost of Claude in Chrome, measured; ChromeOS included","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.18.0","node-html-parser":"^9.0.0","@jridgewell/trace-mapping":"^0.3.31","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/chrome-bridge-mcp_1.23.4_1790531162271_0.21422538305182304","host":"s3://npm-registry-packages-npm-production"}},"1.24.0":{"name":"chrome-bridge-mcp","version":"1.24.0","keywords":["mcp","chrome","browser-automation","claude-code","chromeos","crostini","devtools","websocket","chrome-extension","accessibility","testing"],"author":{"name":"frsorrentino"},"license":"MIT","_id":"chrome-bridge-mcp@1.24.0","maintainers":[{"name":"fr.sorrentino","email":"fr.sorrentino@gmail.com"}],"homepage":"https://github.com/frsorrentino/chrome-bridge#readme","bugs":{"url":"https://github.com/frsorrentino/chrome-bridge/issues"},"bin":{"chrome-bridge":"server/cli.js","chrome-bridge-mcp":"server/index.js"},"dist":{"shasum":"59bf92817f8d8123e5b82045bfedba2a2887f7f7","tarball":"https://registry.npmjs.org/chrome-bridge-mcp/-/chrome-bridge-mcp-1.24.0.tgz","fileCount":53,"integrity":"sha512-Eh9DXJeuOS9Od1yLZVZ1uJAUvEzQGKpN2g+YC3VHqaMfXvn/uut5GiXXtVCKs+kQalO5xU8lhr5MOzmqd8U9sw==","signatures":[{"sig":"MEQCICTEoteOnbDVf/1uj4jsk6d3Jeynl9NxnhNPOM2XYb5EAiBWDHybTOVQsOgSlXurFZYRyWIi/TmSUicfcJMMjSICVQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIBJ/N/J35ObA5ImZKAyeVO1B2o9pJknJo2yAlbnpD0tWAiAVWadeEseiHxM4UZCTSPouMhSl/Pkco1P7nsbZcr36gA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/chrome-bridge-mcp@1.24.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":641985},"main":"server/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"1a97efc14f089f3e2af0c3d6f20e76cad9f8d51b","mcpName":"io.github.frsorrentino/chrome-bridge","scripts":{"test":"node --test test/unit/*.test.js","start":"node server/index.js","measure":"node tools/measure-schema.mjs","test:e2e":"node test/test-devtools.js","test:unit":"node --test test/unit/*.test.js","bench:latency":"node bench/latency.mjs","test:e2e:launch":"CHROME_BRIDGE_PORT=8799 node test/test-devtools.js --launch"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:74b9860b-1b37-416e-a550-e4651e5b056b"}},"repository":{"url":"git+https://github.com/frsorrentino/chrome-bridge.git","type":"git"},"_npmVersion":"11.20.0","description":"Chrome Bridge by frsorrentino: MCP server that lets Claude Code borrow a tab from your own logged-in Chrome and hand it back — logins, 2FA and CAPTCHAs stay with you (handoff). 60 tools; about half the cost of Claude in Chrome, measured; ChromeOS included","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.18.0","node-html-parser":"^9.0.0","@jridgewell/trace-mapping":"^0.3.31","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/chrome-bridge-mcp_1.24.0_1790607844528_0.8564135131633706","host":"s3://npm-registry-packages-npm-production"}},"1.25.0":{"name":"chrome-bridge-mcp","version":"1.25.0","keywords":["mcp","chrome","browser-automation","claude-code","chromeos","crostini","devtools","websocket","chrome-extension","accessibility","testing"],"author":{"name":"frsorrentino"},"license":"MIT","_id":"chrome-bridge-mcp@1.25.0","maintainers":[{"name":"fr.sorrentino","email":"fr.sorrentino@gmail.com"}],"homepage":"https://github.com/frsorrentino/chrome-bridge#readme","bugs":{"url":"https://github.com/frsorrentino/chrome-bridge/issues"},"bin":{"chrome-bridge":"server/cli.js","chrome-bridge-mcp":"server/index.js"},"dist":{"shasum":"6a0c7f1b9dc84872c46a0e9607992d61f24e2861","tarball":"https://registry.npmjs.org/chrome-bridge-mcp/-/chrome-bridge-mcp-1.25.0.tgz","fileCount":82,"integrity":"sha512-4TSHEKdj4vC/rp7T+hLrWNjiEeQmroKlB9AteJCVXUrUDEg4Vuir6gTvk4WYGxWYjWx0SPpge44M9WkYDKYfpw==","signatures":[{"sig":"MEUCIBAhg5907R7ozIlARRTcPjksD97FXICW9XVWxva7cyj9AiEArRlYutitvIBbKi2c9PgM7icLfiI7PosPXt1mPNjai5Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIH/hsq+HsVTXTODFa68PHbtPSmiXAG0bKVZDabG+6zbkAiBa7QYHF0uwYXe1U5gyB5SGscWu3InjZtijXYA2ojRFXA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/chrome-bridge-mcp@1.25.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":676705},"main":"server/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"51499b9f72d4d9805c90eb708be03d2ff3e9fdf1","mcpName":"io.github.frsorrentino/chrome-bridge","scripts":{"test":"node --test test/unit/*.test.js","start":"node server/index.js","measure":"node tools/measure-schema.mjs","test:e2e":"node test/test-devtools.js","test:unit":"node --test test/unit/*.test.js","bench:latency":"node bench/latency.mjs","test:e2e:launch":"CHROME_BRIDGE_PORT=8799 node test/test-devtools.js --launch"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"74b9860b-1b37-416e-a550-e4651e5b056b"}},"repository":{"url":"git+https://github.com/frsorrentino/chrome-bridge.git","type":"git"},"_npmVersion":"11.20.0","description":"Chrome Bridge by frsorrentino: MCP server that lets Claude Code borrow a tab from your own logged-in Chrome and hand it back — logins, 2FA and CAPTCHAs stay with you (handoff). 60 tools; 2.8-3.4× cheaper and up to 4.7× fewer turns than Claude in Chrome, m","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.18.0","node-html-parser":"^9.0.0","@jridgewell/trace-mapping":"^0.3.31","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/chrome-bridge-mcp_1.25.0_1790687059279_0.050289825742884986","host":"s3://npm-registry-packages-npm-production"}},"1.25.1":{"name":"chrome-bridge-mcp","version":"1.25.1","keywords":["mcp","chrome","browser-automation","claude-code","chromeos","crostini","devtools","websocket","chrome-extension","accessibility","testing"],"author":{"name":"frsorrentino"},"license":"MIT","_id":"chrome-bridge-mcp@1.25.1","maintainers":[{"name":"fr.sorrentino","email":"fr.sorrentino@gmail.com"}],"homepage":"https://github.com/frsorrentino/chrome-bridge#readme","bugs":{"url":"https://github.com/frsorrentino/chrome-bridge/issues"},"bin":{"chrome-bridge":"server/cli.js","chrome-bridge-mcp":"server/index.js"},"dist":{"shasum":"735a6b3e8de89d8abbd98cb7b53da7fe8c149033","tarball":"https://registry.npmjs.org/chrome-bridge-mcp/-/chrome-bridge-mcp-1.25.1.tgz","fileCount":82,"integrity":"sha512-/4C4tSqyx7p7OfB0pJqcPt13Irs8SxTTPvuYARiGq+pe+8itQsqyn6t5cRoDZOnVxQsxgM5laVWQleoVSxlpvA==","signatures":[{"sig":"MEQCIAhUSsW1r8JPPAQX3lJrf0OOcTK9uSR02/VOu0gdaVpJAiBRsr46YJsnI/L1gu7/z6gLzE+V90ogugTbxT5J0RB8GA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQC8Lv4ZRmldZMqHs/3oS3Rzp4nJpy4t5tIBfZTN8UImugIgQBFHIcQQFqbkZC9vnq8pqidgtt8AbK+TymSx8g0f7iA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/chrome-bridge-mcp@1.25.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":677235},"main":"server/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"c11c6d2de5c808ddb77cca6f10574d2d1b795168","mcpName":"io.github.frsorrentino/chrome-bridge","scripts":{"test":"node --test test/unit/*.test.js","start":"node server/index.js","measure":"node tools/measure-schema.mjs","test:e2e":"node test/test-devtools.js","test:unit":"node --test test/unit/*.test.js","bench:latency":"node bench/latency.mjs","test:e2e:launch":"CHROME_BRIDGE_PORT=8799 node test/test-devtools.js --launch"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"74b9860b-1b37-416e-a550-e4651e5b056b"}},"repository":{"url":"git+https://github.com/frsorrentino/chrome-bridge.git","type":"git"},"_npmVersion":"11.20.0","description":"Chrome Bridge by frsorrentino: MCP server that lets Claude Code borrow a tab from your own logged-in Chrome and hand it back — logins, 2FA and CAPTCHAs stay with you (handoff). 60 tools; 2.8-4.3× cheaper and up to 9.3× fewer turns than Claude in Chrome, m","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.18.0","node-html-parser":"^9.0.0","@jridgewell/trace-mapping":"^0.3.31","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/chrome-bridge-mcp_1.25.1_1790688654941_0.9694790991245241","host":"s3://npm-registry-packages-npm-production"}},"1.26.0":{"name":"chrome-bridge-mcp","version":"1.26.0","keywords":["mcp","chrome","browser-automation","claude-code","chromeos","crostini","devtools","websocket","chrome-extension","accessibility","testing"],"author":{"name":"frsorrentino"},"license":"MIT","_id":"chrome-bridge-mcp@1.26.0","maintainers":[{"name":"fr.sorrentino","email":"fr.sorrentino@gmail.com"}],"homepage":"https://github.com/frsorrentino/chrome-bridge#readme","bugs":{"url":"https://github.com/frsorrentino/chrome-bridge/issues"},"bin":{"chrome-bridge":"server/cli.js","chrome-bridge-mcp":"server/index.js"},"dist":{"shasum":"7739aa36ae250e8bc26835f0a90b98c716e589b7","tarball":"https://registry.npmjs.org/chrome-bridge-mcp/-/chrome-bridge-mcp-1.26.0.tgz","fileCount":83,"integrity":"sha512-29Icd8/4kG/T++vF9LZd/nBRPbcrXublcpvAiSQZdaP2f8dFf+I6QRi91XKk7pgPhdsHvds5iZRQNMow7UiS/g==","signatures":[{"sig":"MEQCIENSMPtnHnE/At9Ahny364k4kz69+C5HpyrigHSxgtojAiAsYWsQfqA5kXiSoAfs80QQB/3uWtxEiJ3jLl0oSp7Dsg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIGjo8DafHrqD+9GZj0TY3ZFYCypXyv7nIAgCYQmWEW4AAiAVkgeft8u63OvB5Eal9fWhZpJ7aq+7GHF9x2QKxpihOA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/chrome-bridge-mcp@1.26.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":686921},"main":"server/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"fb8053d251bbedd70d0694f622043e5e934f7bdf","mcpName":"io.github.frsorrentino/chrome-bridge","scripts":{"test":"node --test test/unit/*.test.js","start":"node server/index.js","measure":"node tools/measure-schema.mjs","test:e2e":"node test/test-devtools.js","test:unit":"node --test test/unit/*.test.js","bench:latency":"node bench/latency.mjs","test:e2e:launch":"CHROME_BRIDGE_PORT=8799 node test/test-devtools.js --launch"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"74b9860b-1b37-416e-a550-e4651e5b056b"}},"repository":{"url":"git+https://github.com/frsorrentino/chrome-bridge.git","type":"git"},"_npmVersion":"11.20.0","description":"Chrome Bridge by frsorrentino: MCP server that lets Claude Code borrow a tab from your own logged-in Chrome and hand it back — logins, 2FA and CAPTCHAs stay with you (handoff). 60 tools; 2.8-4.3× cheaper and up to 9.3× fewer turns than Claude in Chrome, m","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.18.0","node-html-parser":"^9.0.0","@jridgewell/trace-mapping":"^0.3.31","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/chrome-bridge-mcp_1.26.0_1790707362551_0.14065424303471863","host":"s3://npm-registry-packages-npm-production"}},"1.27.0":{"name":"chrome-bridge-mcp","version":"1.27.0","keywords":["mcp","chrome","browser-automation","claude-code","chromeos","crostini","devtools","websocket","chrome-extension","accessibility","testing"],"author":{"name":"frsorrentino"},"license":"MIT","_id":"chrome-bridge-mcp@1.27.0","maintainers":[{"name":"fr.sorrentino","email":"fr.sorrentino@gmail.com"}],"homepage":"https://github.com/frsorrentino/chrome-bridge#readme","bugs":{"url":"https://github.com/frsorrentino/chrome-bridge/issues"},"bin":{"chrome-bridge":"server/cli.js","chrome-bridge-mcp":"server/index.js"},"dist":{"shasum":"e53af28fd90be5bd0cc962394aceae330b3df7ba","tarball":"https://registry.npmjs.org/chrome-bridge-mcp/-/chrome-bridge-mcp-1.27.0.tgz","fileCount":89,"integrity":"sha512-u05xX+Gb4JcdpWpZdb6GHSh8bhUTeCiZsf6JOUcSJ3I4tp+Ukb1bdvewlhJ4F7HsZzyZSYb/TkAiQKOLwMdiGA==","signatures":[{"sig":"MEUCID+6whcGGhBCPv2vCvdHkqLcKJSLJbNYm78O0PzY0nS1AiEAs1h/EgUdvtdGDv8T/AFKtX6k8gjjI5wCCN5DkBp/bXU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDuFSAWwu+ZD9/2SNkuX0m9rS6h1IASsVKrkHFPuycepgIhAMXLdmGGZKiowndgxrnRwOm+iZWiesZHNBIuE4xU8gvy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/chrome-bridge-mcp@1.27.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":770798},"main":"server/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"1967e8ce7981d6913a1ec6eb13e68d8d8d4bffa3","mcpName":"io.github.frsorrentino/chrome-bridge","scripts":{"test":"node --test test/unit/*.test.js","start":"node server/index.js","measure":"node tools/measure-schema.mjs","test:e2e":"node test/test-devtools.js","test:unit":"node --test test/unit/*.test.js","bench:latency":"node bench/latency.mjs","test:e2e:launch":"CHROME_BRIDGE_PORT=8799 node test/test-devtools.js --launch"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"74b9860b-1b37-416e-a550-e4651e5b056b"}},"repository":{"url":"git+https://github.com/frsorrentino/chrome-bridge.git","type":"git"},"_npmVersion":"11.21.0","description":"Chrome Bridge by frsorrentino: MCP server that lets Claude Code borrow a tab from your own logged-in Chrome and hand it back — logins, 2FA and CAPTCHAs stay with you (handoff). 66 tools; 2.8-4.3× cheaper and up to 9.3× fewer turns than Claude in Chrome, m","directories":{},"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.18.0","node-html-parser":"^9.0.0","@jridgewell/trace-mapping":"^0.3.31","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"peerDependencies":{"@paulirish/trace_engine":">=0.0.65"},"peerDependenciesMeta":{"@paulirish/trace_engine":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/chrome-bridge-mcp_1.27.0_1790877927725_0.10595317192744025","host":"s3://npm-registry-packages-npm-production"}},"1.28.0":{"_id":"chrome-bridge-mcp@1.28.0","bin":{"chrome-bridge":"server/cli.js","chrome-bridge-mcp":"server/index.js"},"bugs":{"url":"https://github.com/frsorrentino/chrome-bridge/issues"},"dist":{"shasum":"4001cffda06bdc421ee0678c7e5e34d63227ac69","tarball":"https://registry.npmjs.org/chrome-bridge-mcp/-/chrome-bridge-mcp-1.28.0.tgz","fileCount":90,"integrity":"sha512-72edDVGek3ZqE3tukSXGcY1kcxbfGNiQBofS4unRcnv5CYSvo/UaR4soNrbDmXb9qJHs27QztrI6T4G7l3ck/w==","signatures":[{"sig":"MEUCICKvwjTs1yz1Ku5AcVVHQRJCts/0J5ELc0eEwoOrFE72AiEA0DlL0ta3jVwI/YAtoHPrKtXsDv2qMSkE/kcrzbhi0Hs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDLJe+VSxDfThCxTc7mF1AGap9VdhieZYw8SEEb5dYdlwIhANR0NyVoeh5VUm20L1QCOrViFVFq/vi6V1okWRVgBcdG"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/chrome-bridge-mcp@1.28.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":787828},"main":"server/index.js","name":"chrome-bridge-mcp","type":"module","author":{"name":"frsorrentino"},"engines":{"node":">=18.0.0"},"gitHead":"820499ef876e54a3de64c2f4a4cff72219863378","license":"MIT","mcpName":"io.github.frsorrentino/chrome-bridge","scripts":{"test":"node --test test/unit/*.test.js","start":"node server/index.js","measure":"node tools/measure-schema.mjs","test:e2e":"node test/test-devtools.js","test:unit":"node --test test/unit/*.test.js","bench:latency":"node bench/latency.mjs","test:e2e:launch":"CHROME_BRIDGE_PORT=8799 node test/test-devtools.js --launch"},"version":"1.28.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"74b9860b-1b37-416e-a550-e4651e5b056b"}},"homepage":"https://github.com/frsorrentino/chrome-bridge#readme","keywords":["mcp","chrome","browser-automation","claude-code","chromeos","crostini","devtools","websocket","chrome-extension","accessibility","testing"],"repository":{"url":"git+https://github.com/frsorrentino/chrome-bridge.git","type":"git"},"_npmVersion":"11.21.0","description":"Chrome Bridge by frsorrentino: MCP server that lets Claude Code borrow a tab from your own logged-in Chrome and hand it back — logins, 2FA and CAPTCHAs stay with you (handoff). 66 tools; 2.8-4.3× cheaper and up to 9.3× fewer turns than Claude in Chrome, m","directories":{},"maintainers":[{"name":"fr.sorrentino","email":"fr.sorrentino@gmail.com"}],"_nodeVersion":"20.20.2","dependencies":{"ws":"^8.18.0","node-html-parser":"^9.0.0","@jridgewell/trace-mapping":"^0.3.31","@modelcontextprotocol/sdk":"^1.12.0"},"_hasShrinkwrap":false,"peerDependencies":{"@paulirish/trace_engine":">=0.0.65"},"peerDependenciesMeta":{"@paulirish/trace_engine":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/chrome-bridge-mcp_1.28.0_1790921719630_0.3008868256222357"}}},"time":{"created":"2026-07-30T07:39:30.977Z","modified":"2026-10-02T06:15:20.086Z","1.8.0":"2026-07-30T07:39:31.227Z","1.9.0":"2026-07-30T09:38:47.602Z","1.10.0":"2026-07-30T11:02:46.469Z","1.10.1":"2026-07-30T11:30:38.316Z","1.11.0":"2026-07-30T18:49:00.237Z","1.11.1":"2026-07-30T20:28:23.186Z","1.13.0":"2026-07-31T11:01:07.769Z","1.14.0":"2026-07-31T15:00:59.926Z","1.15.0":"2026-07-31T15:24:48.127Z","1.15.1":"2026-07-31T18:25:13.552Z","1.16.0":"2026-09-02T10:21:09.079Z","1.16.1":"2026-09-02T15:01:58.102Z","1.17.0":"2026-09-11T08:27:04.651Z","1.18.0":"2026-09-22T17:35:13.655Z","1.19.0":"2026-09-23T13:23:11.101Z","1.20.0":"2026-09-24T06:48:06.911Z","1.20.1":"2026-09-24T13:38:32.510Z","1.21.0":"2026-09-24T16:21:33.084Z","1.22.0":"2026-09-25T07:31:57.966Z","1.23.0":"2026-09-26T07:10:37.803Z","1.23.2":"2026-09-27T14:47:02.427Z","1.23.3":"2026-09-27T16:36:20.759Z","1.23.4":"2026-09-27T17:46:02.362Z","1.24.0":"2026-09-28T15:04:04.628Z","1.25.0":"2026-09-29T13:04:19.373Z","1.25.1":"2026-09-29T13:30:55.046Z","1.26.0":"2026-09-29T18:42:42.652Z","1.27.0":"2026-10-01T18:05:27.835Z","1.28.0":"2026-10-02T06:15:19.752Z"},"bugs":{"url":"https://github.com/frsorrentino/chrome-bridge/issues"},"author":{"name":"frsorrentino"},"license":"MIT","homepage":"https://github.com/frsorrentino/chrome-bridge#readme","keywords":["mcp","chrome","browser-automation","claude-code","chromeos","crostini","devtools","websocket","chrome-extension","accessibility","testing"],"repository":{"url":"git+https://github.com/frsorrentino/chrome-bridge.git","type":"git"},"description":"Chrome Bridge by frsorrentino: MCP server that lets Claude Code borrow a tab from your own logged-in Chrome and hand it back — logins, 2FA and CAPTCHAs stay with you (handoff). 66 tools; 2.8-4.3× cheaper and up to 9.3× fewer turns than Claude in Chrome, m","maintainers":[{"name":"fr.sorrentino","email":"fr.sorrentino@gmail.com"}],"readme":"# Chrome Bridge\n\n> By [frsorrentino](https://github.com/frsorrentino) · npm `chrome-bridge-mcp` · not affiliated with other projects named \"chrome-bridge\".\n\n![License: MIT](https://img.shields.io/badge/license-MIT-green) ![Node 18+](https://img.shields.io/badge/node-%E2%89%A518-brightgreen) ![Chrome 135+](https://img.shields.io/badge/chrome-%E2%89%A5135-blue) ![Tests](https://img.shields.io/badge/tests-388%20unit%20%2B%2041%20e2e-brightgreen) [![Chrome Web Store](https://img.shields.io/badge/web%20store-published-blue)](https://chromewebstore.google.com/detail/chrome-bridge-for-claude/bioknpaeahidbelaljjohjofiloeodmb)\n\n**Claude Code borrows a tab from the Chrome you are already using — signed in,\nwith your extensions and your cookies — works in it, and hands it back. What\nonly a person can do (a login, a 2FA code, a CAPTCHA, a choice) comes back to\nyou through `handoff`: a banner in the page, you act, the agent continues.**\n\nMeasured against the official browser extension (paired runs, 29/09/2026, n=5\nper task, same model): filling a form, 4.7× fewer turns and 2.8× lower cost;\nfinding one row in a 1,500-row table, 2.3× fewer turns and 3.4× lower cost;\ndebugging a broken page, 9.3× fewer turns and 4.3× lower cost. 15 correct\nanswers out of 15, against 12 ([bench/RESULTS.md](bench/RESULTS.md)). ~3× the toolset and no paid plan. 60\nweb-development tools (navigation, DOM inspection, visual regression, audits,\nnetwork mocking) over a local WebSocket bridge, plus a headless instance for\nCI. Self-hosted, local-only. Works on ChromeOS.\n\n![The same form filled in 3 turns instead of 14 — 4.7× fewer turns on the form, 2.8-4.3× lower cost on form, 1,500-row table and debugging (paired runs, 29/09/2026, n=5)](assets/readme/card1-race.png)\n\n## Quickstart\n\n**Requires** Node.js 18+ and Chrome 135+.\n\n```bash\ngit clone git@github.com:frsorrentino/chrome-bridge.git\ncd chrome-bridge && ./install.sh\n```\n\n1. Open `chrome://extensions`, enable **Developer mode**, click **Load\n   unpacked**, select the `extension/` folder.\n2. Restart Claude Code.\n\nThen ask for something like *\"open localhost:3000, run an accessibility audit\nand find the Sign Up button\"*: Claude Code calls `navigate`,\n`audit` and `find_text`. Because `navigate` already returns\nelement refs, `click(ref=\"n1\")` follows with no discovery turn in between.\n\n> **On ChromeOS/Crostini** install from the [Chrome Web\n> Store](https://chromewebstore.google.com/detail/chrome-bridge-for-claude/bioknpaeahidbelaljjohjofiloeodmb)\n> instead: an unpacked extension is dropped on every reboot, because the\n> container isn't mounted when Chrome starts.\n\n> **On Windows** `install.sh` does not run from PowerShell or cmd. Use the\n> plugin path below (`claude plugin marketplace add frsorrentino/chrome-bridge`,\n> then `claude plugin install chrome-bridge@chrome-bridge`) with the extension\n> from the Web Store, or run `install.sh` from Git Bash. The plugin's error\n> log hooks run in Git Bash, as Claude Code runs every hook, and need Python\n> 3.8+ as `python3`, `python` or `py` (the Microsoft Store `python3` alias is\n> skipped); without Python they stay silent and the tools work the same. For\n> launch mode see `CHROME_BRIDGE_BROWSER` below: Google Chrome cannot load the\n> extension there, Microsoft Edge can.\n\n`install.sh` registers the MCP server with `--scope user`. To do it by hand:\n`claude mcp add --scope user chrome-bridge node /path/to/server/index.js`.\nFor `execute_js`, enable **Allow user scripts** in `chrome://extensions` →\nChrome Bridge → Details (on Chrome 135-137, enable Developer Mode instead).\n\n**As a plugin, without a clone:** inside a Claude Code session,\n`/plugin install chrome-bridge --marketplace frsorrentino/chrome-bridge`\n(one command, Claude Code 2.1.275+; on older versions `/plugin marketplace add\nfrsorrentino/chrome-bridge` then `/plugin install chrome-bridge@chrome-bridge`).\nFrom a shell, `claude plugin install` has no `--marketplace` option: run\n`claude plugin marketplace add frsorrentino/chrome-bridge`, then\n`claude plugin install chrome-bridge@chrome-bridge`. Either way the plugin\nregisters the MCP server from npm (all capabilities) together with the recipes\nskill; clients that read [Agent Plugins 1.0](https://agent-plugins.org) get the\nsame from `plugin.json` + `mcp.json`. The extension still comes from the Web\nStore or `extension/`. Pick one path: the plugin and `install.sh` would\nregister the same server twice, and so would a plugin added from the\n[Anthropic directory](https://claude.ai/directory) on claude.ai (it reaches\nClaude Code as `chrome-bridge@synced`) next to a marketplace install. In\nclaude.ai chat the plugin loads only the recipes skill: the tools need Claude\nCode, or Cowork running on your computer, where the local MCP server can start.\n\n## Your browser, your login\n\nNo blank profile, no debugging port, no cloud browser. The extension runs in\nyour Chrome, so every site you are signed into is already open to the agent:\nwebmail, the hosting panel, a client's back office, a staging site behind\nbasic auth. Tabs the agent opens are marked as its own and closed when the\nsession ends; your tabs stay yours.\n\nWhen a page asks for something only you can give, the agent does not guess and\nnever types credentials. `handoff` shows a banner in the page with what it\nneeds — \"complete the login with your 2FA, then press Done\", \"click the button\nyou mean\" — waits for you, and continues from where you left it, redirects\nincluded. It can also ask a question in the banner and read your typed reply,\nor let you pick one or more elements on the page.\n\n## Why Chrome Bridge?\n\n| | Chrome Bridge | Claude in Chrome | Chrome DevTools MCP | Playwright MCP |\n|---|---|---|---|---|\n| **ChromeOS / Crostini** | **Yes** (real host) | No | Container only | Container only |\n| **Tools** | **60** (43 core) | 22 | 29 default (56 with flags) | 24 core (71 total) |\n| **Requires paid plan** | **No** | Yes (Pro+) | No | No |\n| **Network mocking** | **Yes** (stub/headers) | No | No | Yes |\n| **Visual regression** | **Yes** (`screenshot_diff`) | No | No | No |\n| **Audits (a11y/SEO/sec)** | **Yes** (one call, report on disk) | No | Lighthouse | No |\n| **Headless / CI** | **Yes** | No | Yes | Yes |\n| **GIF / video** | No | **Yes** | Partial | No |\n| **Breakpoints / heap** | No | No | **Yes** | No |\n\nCodex for Chrome (OpenAI, May 2026) sits in the Claude in Chrome column: an\nofficial extension with the `debugger` permission, macOS and Windows only,\nthe ChatGPT app required. Claude in Chrome documents Linux desktop since\nSeptember 2026; ChromeOS and WSL stay out. Competitor figures measured on\n2026-09-01 and 2026-09-11 (`docs/analisi-2026-09-11-concorrenti.md`).\n\nIt wins on **round trips** — short element refs instead of the\nscreenshot-and-click loop, `fill_form` filling N fields in one call — and, on\nbig pages, on **payload**: table filtering is done server-side. On the form, per single turn it actually costs\nslightly *more*.\n\nThe full benchmark — method, every raw run including the unfavourable ones, and\nwhat the harness can't measure — is in\n[docs/EFFICIENCY.md](docs/EFFICIENCY.md).\n\n![Claude checks its own work: console errors, pixel diffs, network mocking and audits](assets/readme/card5-devloop.png)\n\n## Using it\n\nThe **skill** in [`skills/chrome-bridge/SKILL.md`](skills/chrome-bridge/SKILL.md)\nis what makes the tools discoverable: recipes with the phrase that triggers\neach one (\"verify the email arrives\", \"test the checkout with a test card\",\n\"which plugin slows the page\", \"what fires before consent\"), the tool sequence,\nand the zero-token CLI commands the model would otherwise never see.\n`install.sh` copies it to `~/.claude/skills/chrome-bridge`; do the same by\nhand for other clients.\n\nBeyond the MCP tools, two lanes keep work away from the model entirely.\n\n![Some jobs never touch the model: the CLI lane runs the same tools at zero tokens](assets/readme/card3-lane.png)\n\n**CLI** — batch operations, piped through `grep` or `jq` before anything reaches\nthe context:\n\n```bash\nchrome-bridge navigate --url https://example.com\nchrome-bridge read_console --level error | head -20\nchrome-bridge assert --selector \"#success\" --text \"Done\"\nchrome-bridge replay --file ./recordings/login.jsonl\n```\n\n**Launch mode** — a dedicated Chromium instance with an ephemeral profile, for\nisolated sessions or CI:\n\n```bash\nnode server/index.js --launch --headless\n```\n\nIt looks for Chromium, Microsoft Edge, Brave and last Google Chrome in their\nstandard paths on Linux, macOS and Windows; `CHROME_BRIDGE_BROWSER` picks\nanother binary. Google Chrome 137+ ignores `--load-extension`, so the\nextension never connects in it: use Chromium, Edge, Brave or Chrome for\nTesting.\n\nPair it with `session_record` + `replay` for smoke tests with no model in the\nloop. In launch mode `execute_js` falls back to `new Function` when the\nuser-script toggle isn't available.\n\n## Tools\n\n66 in total. `core` (43 tools, every tool used in 101 real sessions) loads by\ndefault; the other 23 sit in seven optional caps that the agent switches on\nmid-session with `get_status({enable: [\"visual\"]})`, with no restart\n(`--caps` still sets them at startup).\n\n![66 tools in eight groups, from clicking a button to tracing a page](assets/readme/card4-toolbox.png)\n\n| Group | N | What's in it |\n|---|---|---|\n| Core & Navigation | 13 | tabs, windows, `navigate`, `screenshot`, `tile_windows` |\n| Interaction | 11 | `click`, `fill_form`, `upload_file`, dialogs, clipboard |\n| DOM & Inspection | 12 | `read_page`, `extract`, `extract_table`, `query_dom`, `get_css_styles`, `watch_dom` |\n| Debugging & Network | 8 | `execute_js`, console, network log, mocking, `track_events` |\n| Visual & Responsive | 5 | `screenshot_diff`, viewport and zoom, media emulation |\n| Audits | 2 | `audit` (a11y, keyboard, SEO, security, links, vitals, css, resources, cache in one call), `cookie_audit` |\n| State, Storage & Files | 9 | storage, fixtures, MHTML, recording, `assert` |\n| Motion & Performance | 6 | `animations`, `frames` (long frames, CLS, INP), `perf_trace`, `screencast`, `lighthouse` and `heap_snapshot` (launch mode) |\n\nEvery tool, with the notes that matter: [docs/TOOLS.md](docs/TOOLS.md).\n\n## How it works\n\n![It drives the Chrome you are logged into, over a local WebSocket bridge](assets/readme/card2-bridge.png)\n\n```\nClaude Code  <--stdio-->  MCP Server  <--WebSocket :8765-->  Chrome Extension\n                          (server/)                          (extension/, MV3)\n```\n\nThe Node.js server handles the protocol and tool logic; the MV3 extension\nexecutes commands through Chrome APIs. User scripts (`execute_js`) run via\n`chrome.userScripts.execute()`.\n\n## Configuration and security\n\nEnvironment variables, each with a matching CLI flag:\n\n| Variable | Default | Notes |\n|---|---|---|\n| `CHROME_BRIDGE_PORT` | `8765` | |\n| `CHROME_BRIDGE_HOST` / `--host` | `127.0.0.1` | `0.0.0.0` **only** where the browser lives outside the container (ChromeOS/Crostini port-forward) — and only with a token |\n| `CHROME_BRIDGE_TOKEN` | unset | Required on both `ext_init` and `relay_init`. Strongly recommended whenever the bind isn't loopback |\n| `CHROME_BRIDGE_CAPS` / `--caps` | `core` | `core`, `audits`, `visual`, `network`, `storage`, `dom`, `files`, `all`. Optional caps can also be switched on at runtime with `get_status({enable})` |\n| `CHROME_BRIDGE_ALWAYS_LOAD` / `--always-load` | 22 most used tools | Tools kept in context when the client loads the server whole; the others carry `_meta['anthropic/alwaysLoad'] = false` and wait behind tool search (Claude Code 2.1.285+). `all` loads every tool; a comma list picks them |\n| `CHROME_BRIDGE_NO_JS` / `--no-js` | unset | No arbitrary JavaScript in the page: `execute_js` and `modify_dom` leave the schema, `wait_for(condition=function)` and `javascript:`/`data:` URLs are refused. `get_status` reports `js_evaluation` |\n| `CHROME_BRIDGE_READ_ROOT` / `--read-root` | unset | Where `upload_file` may read from. Unset: any file except keys and credentials (`~/.ssh`, `~/.aws`, `~/.gnupg`, `.env*`, `id_*`, `*.pem`, `*.key`, …), symlinks resolved first. Set: only files under this directory, whatever their name — the way to upload a certificate key on purpose |\n| `CHROME_BRIDGE_BROWSER` | unset | Launch mode only: the browser binary, e.g. `C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe`. Unset: the first of Chromium, Edge, Brave, Google Chrome found in the standard paths (on Linux Chromium, then Google Chrome). Google Chrome 137+ cannot load the extension |\n| `CHROME_BRIDGE_OBSERVE` | unset | `off` stops the local error log below. The plugin sets `hook`: its hooks keep the log and the server stays out of it |\n| `CHROME_BRIDGE_WRITE_ROOT` / `--write-root` | unset | Every path the model chooses (`save_to`, `output_path`, exports) must be under this directory, checked before the browser does any work; the server's own state under `~/.config/chrome-bridge` stays writable. The CLI is your shell and is not restricted |\n\nThe bridge binds loopback, accepts extension connections only from a\n`chrome-extension://` origin, and — when a token is set — requires it on both\nhandshakes. Without one, any local process could act as a relay and reach\n`execute_js` inside your authenticated browser session. Secondary MCP instances\nconnect via loopback and are acknowledged with `relay_init_ok`, so a foreign\nprocess holding the port fails fast instead of timing out per command.\n\n**What is *not* protected:** page content reaches the model unfiltered, so a\nhostile page's text is untrusted input. `get_storage`, `session_fixture`, HAR\nexports and screenshots are **not** redacted and may carry cookies, tokens or\npersonal data. Don't point the automation at pages holding secrets you wouldn't\npaste into a chat.\n\n### Threat model\n\nchrome-bridge gives an AI agent your real, logged-in browser. Scanners that\nrate MCP servers by capability flag it, correctly, for code execution\n(`execute_js`), requests that carry your cookies (`http_request`) and reading\nprivate page data (`get_storage`, `get_tabs`). Those are the product, not bugs.\nWhat matters is who can reach them and what a hostile page can make the agent\ndo with them.\n\n- **Who can connect:** see above — loopback bind, `chrome-extension://` origin\n  check, `CHROME_BRIDGE_TOKEN` on both handshakes.\n- **Launch mode also opens a DevTools port** on 127.0.0.1 (chosen by the\n  system), for `lighthouse` and `heap_snapshot`. CDP has no authentication:\n  any local process can drive that dedicated browser while it runs. Its profile\n  is temporary and holds nothing of yours; your own Chrome never gets a port.\n- **The debugger bar is the signal.** `click`/`press_key` with `trusted`,\n  `emulate_media via: \"debugger\"`, `perf_trace` and `screencast` attach\n  `chrome.debugger` to one tab only for that work; Chrome shows its \"started\n  debugging this browser\" bar meanwhile, and cancelling it ends the work.\n- **The real risk is prompt injection.** A page can ask the agent to run\n  JavaScript, send a request with your cookies, submit a form or upload a file.\n  Treat every page you automate as untrusted input, and review what the agent\n  proposes on sites that hold money or credentials.\n- **Reduce the surface:** `--caps core` (the default) exposes the smallest set;\n  `--no-js` removes arbitrary JavaScript; `--write-root` fences every path the\n  model writes; `upload_file` refuses keys and credentials, and `--read-root`\n  fences it to one directory. For sessions that matter, automate in a separate\n  Chrome profile.\n- **`--no-js` is not a sandbox:** `inject_css` stays, and CSS attribute\n  selectors with `url()` can leak attribute values to a remote host.\n- **What leaves your machine** is what the browser sends on the agent's behalf.\n  chrome-bridge itself has no telemetry; the error log below stays local unless\n  you approve an issue.\n\n### Local error log\n\nWhen one of its own tools fails, chrome-bridge adds a line to a **local** file,\n`${XDG_STATE_HOME:-~/.local/state}/claude-observe/chrome-bridge.jsonl` (mode\n0600, in a 0700 folder), in the [claude-observe](https://github.com/frsorrentino/claude-observe)\nformat (the plugin's copy is in `observe/`). With the plugin, a `PostToolUseFailure` hook writes it; with the npm\nserver alone, the server does. The same error seen again is one line with a\ncount.\n\n- **Kept:** the tool name, the error text after scrubbing (your home folder\n  becomes `~`; emails, URL queries, secrets and typed values are removed), the\n  names of the parameters and the length of text values, the chrome-bridge\n  version, the OS, the name of the working folder and of the Claude Code config\n  folder. With the plugin, also the Claude Code and model versions, the\n  session id and the names of the last three tools called.\n- **Never kept:** parameter values — no URLs, selectors, typed text or page\n  content.\n- **Nothing leaves your computer** unless you say yes. With the plugin, once\n  a few errors have piled up (or one has waited a few days, or one is marked\n  as a defect), a line at the end of a turn tells you so, and Claude may offer,\n  at a natural moment, to send them as one GitHub issue: it shows you the\n  anonymized text first, then asks with buttons (from your GitHub, or not now)\n  and sends only what you chose. `/chrome-bridge:observe send` does the same\n  on demand; `list`, `mark` and `add` read and triage the log. The server\n  alone never sends or offers anything.\n- **Security observations** (a read or write outside the perimeter, a secret\n  exposed, unwanted code execution, data leaving the computer) never enter a\n  public issue: `/chrome-bridge:observe send --security` prepares a private\n  vulnerability report for the maintainers, see [SECURITY.md](SECURITY.md).\n- **Turn it off:** `{\"enabled\": false}` in `~/.config/claude-observe/config.json`\n  (every plugin that uses claude-observe), or `CHROME_BRIDGE_OBSERVE=off` for\n  the server. Keep the log but stop the offers: `{\"propose\": false}`.\n\n## Troubleshooting\n\n| Symptom | Cause / fix |\n|---|---|\n| `Chrome extension not connected` | Extension disabled, or its port differs from the server's. The error names the actual host/port; check them in the popup (⚙). |\n| Port 8765 already in use | Expected: a second MCP session becomes a **relay** and shares the one bridge. Set `CHROME_BRIDGE_PORT` for a separate one. |\n| `Port N is held by a process that is not chrome-bridge` | Something else owns the port. Free it or change `CHROME_BRIDGE_PORT`. |\n| `execute_js` fails | Enable **Allow user scripts** in `chrome://extensions` → Chrome Bridge → Details (Chrome 138+; on 135-137 enable Developer Mode). |\n| `read_console` returns `note=Instrumentation not loaded` | The page was opened before the extension, \"Capture console & metrics\" is off, or the page isn't injectable (`chrome://`). Reload it. |\n| Screenshot times out, or `image readback failed` | A minimized or fully covered window stops producing frames; captures fail after 10 s. Bring the window forward. |\n| `wait_for`/`scroll` return `page_hidden: true`, pages stop updating | Same cause: Chrome does not render a hidden page and slows its timers (after a few minutes, to one wake-up per minute). `get_page_info` reports `visibility`. Bring the window on screen, or `create_tab` with `new_window` and bounds. |\n| `screenshot presets` says `NOT APPLIED` | Presets resize the window; they do not emulate a phone (no device pixel ratio, UA or touch). The window manager enforces a minimum width, and no window exceeds the screen (e.g. at most a 1536×686 viewport on a 1536×864 ChromeOS screen). For phone emulation use `emulate_media` with `device` (via debugger), or a headless browser for larger viewports. |\n| `type_text` returns `mismatch: true` | The field rejected the value. Events from an extension have `isTrusted: false`, and some widgets (date pickers, search boxes with tokenizers) discard them. Try `mode: 'keys'`, then the site's own controls (the calendar buttons), or `handoff`. |\n| `[media removed: request limit]` instead of a screenshot | Written by the MCP client, not by the bridge: too many images in one request. Use `save_to`, or `element_screenshot` with `region` and a small `scale`. |\n| Commands work, then stop | The MV3 service worker restarted and in-memory state (network log, diff baselines, HTTP auth) was reset. Re-run the monitoring call. |\n| Extension dropped on every ChromeOS reboot | Install from the Web Store instead of Load unpacked. |\n| Tool missing from the list | It's in an opt-in group. Check `get_status` → `caps_available`, then set `CHROME_BRIDGE_CAPS=all`. |\n| `claude mcp get` shows no command, arguments or environment | Expected with the plugin: since Claude Code 2.1.285 it hides them for stdio servers that plugins provide (variable names stay). `get_status` reports the server and extension versions, mode, host, port and caps; `/mcp` shows the connection. |\n| Popup says «In attesa: un altro browser è collegato», `get_status` lists `refused_browsers` | Two browsers with the extension reach the same port. The one already connected keeps the bridge; the other retries every 15 s and takes over when the first disconnects. `get_status` → `browser` names the connected one. Before this, the last one to connect took over silently. |\n\n## Documentation\n\n- [docs/TOOLS.md](docs/TOOLS.md) — all 66 tools, by group\n- [docs/CAPABILITIES.md](docs/CAPABILITIES.md) — what the bridge gets past and what it does not, one dated state per wall\n- [docs/EFFICIENCY.md](docs/EFFICIENCY.md) — the benchmark and the design behind it\n- [docs/PERFORMANCE.md](docs/PERFORMANCE.md) — latency per tool on the real path, `npm run bench:latency`\n- [bench/RESULTS.md](bench/RESULTS.md) — raw runs and inclusion rule\n- [CHANGELOG.md](CHANGELOG.md)\n\n## Tests\n\n`npm test` (Chrome-free, ~22s) · `npm run test:e2e` (needs Chrome and a\nconnected extension; with a bridge already on 8765:\n`CHROME_BRIDGE_PORT=8799 node test/test-devtools.js --launch`, which opens\nits own Chromium with `extension/`) · `npm run measure` (schema cost) ·\n`npm run bench:latency` (milliseconds per tool, launches its own Chromium,\nwrites `docs/PERFORMANCE.md`).\n\n## License\n\nMIT\n","readmeFilename":"README.md"}