chrome-bridge-mcp 1.29.1 → 1.29.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -332,6 +332,11 @@ its own Chromium with `extension/`) · `npm run measure` (schema cost) ·
332
332
  `npm run bench:latency` (milliseconds per tool, launches its own Chromium,
333
333
  writes `docs/PERFORMANCE.md`).
334
334
 
335
+ ## Related projects
336
+
337
+ - [agent-webbridge](https://github.com/jeet-dhandha/agent-webbridge) — drives several Chrome profiles at once, with parallel tabs
338
+ - [awb-recipes](https://github.com/jeet-dhandha/awb-recipes) — community-maintained, dated per-site recipes for automating logged-in websites
339
+
335
340
  ## License
336
341
 
337
342
  MIT
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "chrome-bridge-mcp",
3
3
  "mcpName": "io.github.frsorrentino/chrome-bridge",
4
- "version": "1.29.1",
4
+ "version": "1.29.2",
5
5
  "type": "module",
6
6
  "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, measured; ChromeOS included.",
7
7
  "main": "server/index.js",
@@ -99,7 +99,7 @@ export const MessageType = Object.freeze({
99
99
  });
100
100
 
101
101
  // Versione
102
- export const VERSION = '1.29.1';
102
+ export const VERSION = '1.29.2';
103
103
 
104
104
  // Configurazione
105
105
  export const DEFAULT_PORT = 8765;
@@ -257,7 +257,7 @@ export class WSManager {
257
257
  /**
258
258
  * Ogni connessione DEVE identificarsi col primo messaggio:
259
259
  * - { type: 'ext_init', token? } → estensione Chrome (Origin chrome-extension:// obbligatorio)
260
- * - { type: 'relay_init' } → relay client (solo loopback)
260
+ * - { type: 'relay_init' } → relay client (solo loopback, senza Origin)
261
261
  * Connessioni mute o non valide vengono terminate.
262
262
  */
263
263
  _handleNewConnection(ws, req) {
@@ -292,6 +292,14 @@ export class WSManager {
292
292
  ws.terminate();
293
293
  return;
294
294
  }
295
+ // I relay legittimi (server e CLI, ws di Node) non mandano Origin; un
296
+ // browser lo manda sempre. Senza questo controllo una pagina web
297
+ // aperta sullo stesso computer diventava un relay e pilotava Chrome.
298
+ if (origin) {
299
+ console.error(`[chrome-bridge] relay_init with origin "${origin}" — rejected`);
300
+ ws.terminate();
301
+ return;
302
+ }
295
303
  // Il token proteggeva solo ext_init: un relay locale non autenticato
296
304
  // aggirava interamente il segreto condiviso.
297
305
  if (this.token && msg.token !== this.token) {