Skip to main content
Glama
vKongv

Chrome Browser Control

by vKongv

Chrome Browser Control

npm version Node.js License: MIT

Lokale Chrome-Profilsteuerung für stdio-MCP-Hosts.

Dieses Projekt stellt Browser-Control-MCP-Tools über eine Manifest-V3-Chrome-Erweiterung bereit, die mit einem Loopback-WebSocket-Broker verbunden ist. Konfigurieren Sie Ihren MCP-Host so, dass er den stdio-Adapter mit demselben Pairing-Token startet, den Sie in der Erweiterung eingeben.

Repository: https://github.com/vkongv/chrome-browser-control

Voraussetzungen

  • Node.js 18+

  • Google Chrome

Related MCP server: Tabrix

Installation und Einrichtung

Bevorzugter Weg: Installieren Sie die CLI und führen Sie dann die Einrichtung durch.

npm install -g chrome-browser-control
# or, without a global install:
npx -y chrome-browser-control setup

Die CLI installiert sich als cbctl (bevorzugter Kurzname) und auch als chrome-browser-control.

cbctl setup
cbctl start
cbctl doctor

setup schreibt ~/.chrome-browser-control/config.env (Pairing-Token + Port), kopiert die entpackte Erweiterung nach ~/.chrome-browser-control/extension und gibt MCP-Host-Snippets aus. Committen Sie dieses Verzeichnis nicht.

Agent-Fertigkeit (getrennt vom npm-Paket)

Die Laufzeit-Agent-Fertigkeit unter skills/chrome-browser-control/ wird nicht im npm-Paket ausgeliefert. Nach der Installation der CLI beziehen Sie die Fertigkeit aus diesem Repository (oder von skills.sh), falls Ihr Agent-Host Fertigkeiten verwendet.

CLI-Befehle (cbctl oder chrome-browser-control):

Befehl

Zweck

cbctl setup

Benutzerkonfiguration erstellen und die Erweiterungskopie installieren

cbctl start

Den gemeinsamen Loopback-Broker starten

cbctl stop

Den Broker stoppen

cbctl status

Broker-/Konfigurationsstatus anzeigen

cbctl doctor

Lokalen Einrichtungsprüfer

cbctl mcp

Stdio-MCP-Adapter (standardmäßig nur Anhängen)

cbctl mcp-config

Host-spezifische MCP-Snippets ausgeben

cbctl broker

Broker im Vordergrund ausführen (Entwicklung)

Aus einem Git-Checkout (Mitwirkende):

git clone https://github.com/vkongv/chrome-browser-control.git
cd chrome-browser-control
npm install
npm run build
node dist/cli/main.js setup

Repo-lokale npm run broker / npm run mcp bleiben für die Entwicklung mit TypeScript-Quellen verfügbar (mit optionalem Repo .env.local).

Umgebungsvariablen

  • CHROME_BROWSER_CONTROL_TOKEN — Erforderlich. Pairing-Token mit hoher Entropie, der von Broker, MCP-Adapter und Erweiterungs-Popup gemeinsam verwendet wird.

  • CHROME_BROWSER_CONTROL_PORT — WebSocket-Broker-Port (Standard 8765).

  • CHROME_BROWSER_CONTROL_HOST — Loopback-Host für den Broker (Standard 127.0.0.1).

  • CHROME_BROWSER_CONTROL_EXTENSION_ID — Optional. Heftet den Broker an eine installierte Erweiterungs-ID.

  • CHROME_BROWSER_CONTROL_AUTOLOAD — Optional. Setzen Sie auf 1, damit mcp einen Broker starten kann, wenn keiner erreichbar ist (Wiederherstellung). Bevorzugen Sie cbctl start für den normalen Gebrauch.

  • CHROME_BROWSER_CONTROL_DISABLE_LOCAL_ENV — Optional. Setzen Sie auf 1, um das Laden des Repo .env.local zu überspringen.

Die Benutzerkonfiguration befindet sich unter ~/.chrome-browser-control/ und wird vor jedem Repo .env.local geladen. Prozess-Umgebungsvariablen haben immer Vorrang.

MCP-Anhängen-Standard: cbctl mcp verbindet sich mit einem bereits laufenden Broker. Starten Sie den Broker zuerst mit cbctl start. Für die Wiederherstellung verwenden Sie cbctl mcp --autoload oder CHROME_BROWSER_CONTROL_AUTOLOAD=1.

Die Erweiterung laden

  1. Öffnen Sie Chrome mit dem Profil, das Sie mit den MCP-Tools steuern möchten.

  2. Gehen Sie zu chrome://extensions.

  3. Aktivieren Sie den Entwicklermodus.

  4. Klicken Sie auf "Entpackte Erweiterung laden".

  5. Wählen Sie ~/.chrome-browser-control/extension (wird von setup ausgegeben). Mitwirkende, die Quellen bearbeiten, können stattdessen extension/ aus dem Repository laden.

  6. Öffnen Sie das Popup der Chrome Browser Control-Erweiterung.

  7. Belassen Sie die Bridge-URL bei ws://127.0.0.1:8765, es sei denn, Sie haben den lokalen Port geändert.

  8. Fügen Sie das generierte Pairing-Token ein.

  9. Fügen Sie erlaubte Ursprünge hinzu, z. B. https://example.com, http://localhost:3000 oder * für alle normalen http://- und https://-Seiten.

  10. Klicken Sie auf "Speichern und erneut verbinden".

Die Erweiterung kann um Host-Berechtigung für die erlaubten Ursprünge bitten. Die Ablehnung dieser Anfrage verhindert Seitenaktionen für diese Ursprünge.

Die Verwendung von * ist praktisch für die lokale Entwicklung, setzt jedoch jede normale Webseite im aktuellen Chrome-Profil den MCP-Tools aus. Bevorzugen Sie explizite Ursprünge, wenn Sie nur wenige Websites benötigen. Der Wildcard-Modus fragt auch nach der optionalen Host-Berechtigung <all_urls>, damit Chrome sichtbare Viewport-Screenshots über chrome.tabs.captureVisibleTab zulässt; der Hintergrund blockiert weiterhin Nicht-http(s)-URLs und nicht erlaubte Ursprünge vor der Aufnahme.

MCP-Host-Konfiguration

Fügen Sie ein Snippet aus cbctl setup (oder mcp-config) in Cursor, Claude Desktop, Codex oder einen anderen stdio-MCP-Host ein. Um die hostspezifische Konfiguration später erneut auszudrucken:

cbctl mcp-config --host cursor
cbctl mcp-config --host claude
cbctl mcp-config --host codex
cbctl mcp-config --host yaml

Der MCP-Server-Schlüssel ist chrome_browser_control. Der Adapter-Befehl ist die installierbare CLI (cbctl bevorzugt) mit args: ["mcp"] — nicht tsx gegen server/index.ts.

YAML-ähnliches Beispiel:

mcp_servers:
  chrome_browser_control:
    command: "cbctl"
    args: ["mcp"]
    env:
      CHROME_BROWSER_CONTROL_TOKEN: "<generated-token>"
      CHROME_BROWSER_CONTROL_PORT: "8765"
    timeout: 60
    connect_timeout: 30

JSON-ähnliches Beispiel:

{
  "mcpServers": {
    "chrome_browser_control": {
      "command": "cbctl",
      "args": ["mcp"],
      "env": {
        "CHROME_BROWSER_CONTROL_TOKEN": "<generated-token>",
        "CHROME_BROWSER_CONTROL_PORT": "8765"
      }
    }
  }
}

Wenn die CLI nicht im PATH ist, verwenden Sie den von der Einrichtung ausgegebenen NPX-Fallback: npx mit args: ["-y", "chrome-browser-control", "mcp"].

Wenn Ihr MCP-Host eine Konfigurationsdatei verwendet, halten Sie diese privat und außerhalb des Repositorys.

Überprüfung

  1. Starten Sie den Broker: cbctl start

  2. Führen Sie den Einrichtungsprüfer aus: cbctl doctor

  3. Bestätigen Sie von Ihrem MCP-Host aus, indem Sie das Tool browser_status aufrufen. Wenn bereit, sollten extension.status und ping.status eine aktive Bridge-Verbindung widerspiegeln, und extension.allowedOrigins sollte Ihren konfigurierten Bereich anzeigen.

Tools

  • browser_status: Prüft, ob der MCP-Adapter den Broker erreichen kann und ob die Chrome-Erweiterung auf ping antwortet. Wenn bereit, spiegeln extension.status und ping.status die aktive Bridge-Verbindung wider (nicht einen veralteten getrennten Standard), extension.allowedOrigins zeigt den konfigurierten Bereich (einschließlich * (alle http/https-Web-Ursprünge), wenn der Wildcard-Modus aktiviert ist), extension.session zeigt den Sitzungsnamen/beanspruchte Tabs, und protocolVersion / features bestätigen den geladenen entpackten Erweiterungscode. Protokollversion 6 enthält den Feature-Marker document-targeting.

  • name_session: Legt einen menschenlesbaren Sitzungsnamen für Status/Debugging fest.

  • list_tabs: Listet Tabs auf, deren URL-Ursprung im Erweiterungs-Popup erlaubt ist. Wenn jeder geöffnete Tab herausgefiltert wird, wird { tabs: [], detail, hiddenTabCount, allowedOrigins? } anstelle eines bloßen [] zurückgegeben. Der Wildcard-Modus wird in allowedOrigins deutlich gekennzeichnet.

  • list_frames: Listet aktuelle Frame-Dokumente für einen erlaubten Tab unter Verwendung der Chrome-Frame-Registrierung auf. Betriebsfähige aktive HTTP(S)-Dokumente enthalten eine documentId; richtlinienblockierte, host-berechtigungsverweigerte, nicht unterstützte, umzäunte und nicht aktive Zeilen behalten nur Rangfolge/Status bei und schwärzen URL und Dokumentidentität.

  • claim_tab: Beansprucht einen erlaubten Tab für diese Browser-Control-Sitzung und gibt eine sessionTabId zurück. Beanspruchungen sind Routing-Zustände, keine exklusiven Browser-Sperren.

  • release_tab: Gibt eine Beanspruchung durch sessionTabId oder tabId frei, ohne den Tab zu schließen.

  • finalize_tabs: Gibt den Beanspruchungszustand für die Sitzung frei, ohne Tabs zu schließen. Übergeben Sie keep-Einträge, um Übergabe-/auslieferbare Beanspruchungen zu erhalten.

  • snapshot: Gibt eine vereinfachte DOM-Momentaufnahme für ein erlaubtes Dokument zurück. Standardmäßig ist dies eine kompakte Automatisierungs-Momentaufnahme, die prägnante aktionierbare Elemente, eine Textvorschau (500 Zeichen), weggelassene Zählungen und Regionszusammenfassungen enthält. Übergeben Sie mode: "full" für ausführliche Elementmetadaten und ein text-Feld (standardmäßig 4000 Zeichen). Übergeben Sie mode: "visible" für ansichtsfenster-/schnittstellenbewusste Elemente mit Grenzen und Scroll-Metadaten. Übergeben Sie textLimit (bis zu 100000), wenn Sie mehr Seitenkörpertext benötigen – überprüfen Sie textBytesOmitted, um zu sehen, ob Inhalt abgeschnitten wurde.

  • visible_snapshot: Praktisches Tool für snapshot({ mode: "visible" }).

  • navigate: Navigiert den aktiven Tab oder einen angegebenen tabId zu einer erlaubten URL und wartet dann, wenn möglich, darauf, dass der Tab das Laden abschließt. Standardmäßig bleibt der Fokus unverändert (Hintergrund-Tabs bleiben im Hintergrund; der fokussierte Tab wird nicht deaktiviert). Übergeben Sie active: true nur, wenn der Tab sichtbar werden muss. Wenn das Laden zeitlich überschritten wird, enthält das Ergebnis pending: true und eine warning. Unterstützt after-Beobachtungen nach der Lade-Wartezeit.

  • click: Klickt auf ein Element per Snapshot-Referenz auf einem erlaubten Tab. Unterstützt after-Beobachtungen.

  • type: Gibt Text in ein Element per Snapshot-Referenz auf einem erlaubten Tab ein. Passwortähnliche Felder werden blockiert, es sei denn, force=true. Unterstützt after-Beobachtungen.

  • scroll: Scrollt einen erlaubten Tab um deltaX und deltaY. Optionale x/y-Ansichtsfensterkoordinaten scrollen ein scrollbares Element unter diesem Punkt, wenn eines gefunden wird. Scrollen paginiert keinen Snapshot-Text – Snapshots verwenden den vollständigen document.body innerText. Erhöhen Sie textLimit bei snapshot anstelle von Scroll-Nähen, es sei denn, die Seite lädt Inhalte lazy. Unterstützt after-Beobachtungen.

  • query_elements: Gibt begrenzte Referenzen/Rollen/Beschriftungen/Grenzen für Elemente zurück, die nach CSS-Selektor, Rolle, Text und Sichtbarkeit gefiltert wurden.

  • extract_elements: Extrahiert begrenzte Text-/HTML-/Link-/Zeitdaten aus einem CSS-Selektor. Die HTML-Extraktion schwärzt Passwort-/OTP-/versteckte Token-Attributwerte und markiert sensible Elemente anstatt geheime Werte preiszugeben. Dies ist die unterstützte Alternative zur rohen JavaScript-Auswertung.

  • screenshot: Erfasst den sichtbaren Viewport eines erlaubten Tabs als Daten-URL. Optionales ref oder bounds (+ padding) beschneiden nach der Aufnahme; leere Zuschnitte schlagen vor captureVisibleTab fehl. Unbeschnittene Antworten lassen Zuschnittsfelder weg. Die MV3-Erfassung ist nur auf den Viewport beschränkt; inaktive Ziel-Tabs können vor der Aufnahme aktiviert werden. Chrome erfordert <all_urls> oder activeTab für captureVisibleTab; diese Erweiterung fordert optionales <all_urls> nur im Wildcard-Modus (*) an, daher benötigen Wildcard-Screenshots diese Popup-Gewährung.

  • keypress: Sendet übliche DOM-Tastaturereignisse an die Seite. Browser-/Betriebssystemebenen-Verknüpfungen sind unter MV3 nicht garantiert. Unterstützt after-Beobachtungen.

  • click_at: Sendet Mausereignisse an Ansichtsfensterkoordinaten. Unterstützt after-Beobachtungen.

  • wait_for: Wartet auf begrenzte Selektor-/Text-/URL-Teilzeichenfolgen-Bedingungen und gibt Übereinstimmungs-/Zeitüberschreitungsnachweise zurück.

  • page_status: Gibt Titel, URL, Bereitschafts-/Sichtbarkeitszustand, Ansichtsfenster-/Scroll-Zustand und Ressourcenzählungen nach Initiatortyp zurück. Es werden keine Anforderungsheader oder Antwortkörper offengelegt.

  • console_logs: Gibt begrenzte Konsolenprotokolle zurück, die nach der Injektion des Content-Skripts erfasst wurden. Es kann keine ältere Seitenkonsolenhistorie einsehen.

  • collect_scroll: Scrollt eine begrenzte Anzahl von Schritten (harte Obergrenze, wenn until gesetzt ist), extrahiert ausgewählte Elemente pro Schritt, zielt optional auf einen verschachtelten Scroll-Container über scroll, wendet eine aggregierte Elementobergrenze an (maxItems, Standard 100) und dedupliziert optional nach Text oder href für Lazy-Feeds. Optionales until.noNewItemsForSteps / until.stopBeforeDatetime (ISO-8601; erfordert includeTimes) setzt stoppedReason. Ergebnisse enthalten weggelassene/abgeschnittene Zählungen. Unterstützt after-Beobachtungen.

  • perform_actions: Führt bis zu 10 sequenzielle Seitenaktionen (click, type, scroll, keypress) in einem Broker-Roundtrip aus. Fail-Fast beim ersten Schrittfehler; terminale after-Beobachtungen werden nur ausgeführt, wenn jeder Schritt erfolgreich ist. Koordinatenklicks bleiben beim Einzeltool click_at. Schritte können kein after, tabId oder sessionTabId enthalten.

Frame-Dokument-Anvisierung

DOM-/Inhalts-Tools akzeptieren eine optionale documentId, die von list_frames zurückgegeben wird. Das Weglassen bewahrt das bestehende Verhalten und zielt auf das aktuelle oberste Dokument für jede Operation ab. Die Angabe wählt genau dieses Dokument aus: Wenn das Iframe navigiert, verschwindet, zu einem anderen Tab wechselt, nicht mehr unterstützt wird oder der Zugriff verloren geht, schlägt die Operation fehl, anstatt auf den obersten Frame oder einen Ersatz mit derselben frameId zurückzugreifen.

Jedes Inhaltsergebnis enthält die vom Hintergrund bestätigten documentId, frameId, isTopFrame und coordinateSpace. Koordinaten des obersten Frames verwenden tabViewport; iframe visible_snapshot-Grenzen, click_at und Koordinaten-Scrolling verwenden frameViewport. Iframe-lokale Grenzen können nicht an das Zuschneiden von Screenshots übergeben werden, da screenshot ein reines Tab-Viewport-Tool bleibt. navigate, screenshot und list_frames akzeptieren nur Tab-Ziele; perform_actions.documentId gilt für den gesamten Batch und kann nicht durch einen Schritt überschrieben werden.

Dokumentfehler behalten eines dieser Präfixe, auch innerhalb von Batch-Schrittfehlern und after-Fehlern: DOCUMENT_STALE:, DOCUMENT_POLICY_DENIED:, DOCUMENT_HOST_PERMISSION_DENIED: oder DOCUMENT_UNSUPPORTED:. V1 unterstützt nur aktive HTTP(S)-Dokumente der äußersten Ebene/Subframes. Es schließt absichtlich about:blank, about:srcdoc, blob:, data:, Origin-Fallback-Frames, iframe-Navigation und iframe-zu-Tab-Screenshot-Koordinatenübersetzung aus.

Handeln, dann beobachten

Die Aktionswerkzeuge navigate, click, type, scroll, keypress, click_at, collect_scroll und perform_actions akzeptieren ein optionales after-Objekt. Die Erweiterung entfernt after, bevor sie die Basisaktion an das Content-Script sendet, und führt dann die angeforderten Beobachtungen in dieser festen Reihenfolge aus: waitFor, snapshot, pageStatus. Die Antwort ist das Ergebnis der Basisaktion plus ein after-Objekt mit den Beobachtungsergebnissen.

Bei perform_actions gilt after nur für den gesamten Batch: Einzelne Schritte können kein after enthalten, und terminale Beobachtungen werden übersprungen, wenn ein Schritt fehlschlägt. Teilweise Batch-Fehler geben strukturierte Schrittergebnisse mit failedIndex und completedCount zurück, während der Bridge-Erfolg erhalten bleibt, damit Agenten die Nutzlast inspizieren können.

{
  "ref": "h12",
  "after": {
    "waitFor": { "selector": ".results", "timeoutMs": 5000 },
    "snapshot": { "mode": "visible", "limit": 40 },
    "pageStatus": true
  }
}

after.waitFor muss mindestens eines von text, selector oder urlIncludes enthalten; timeoutMs ist optional und auf 20000 begrenzt, damit die gesamte Handeln-dann-beobachten-Kette innerhalb des Standard-Broker-Anfrage-Timeouts bleibt. after.snapshot kann true für Standard-Snapshot-Optionen oder ein Objekt mit mode, textLimit und/oder limit sein. Ungültige after-Anfragen werden abgelehnt, bevor die Basisaktion ausgeführt wird.

Wenn die Basisaktion erfolgreich ist, aber eine after-Beobachtung fehlschlägt, enthält die Antwort weiterhin das Ergebnis der Basisaktion und setzt after auf { "ok": false, "error": "..." }.

Snapshot-Modi und Referenzen

Standardmäßige kompakte Snapshots sind darauf ausgelegt, die Modellkontextnutzung zu reduzieren, während die Browserautomatisierung erhalten bleibt. Ein kompakter Snapshot sieht so aus:

{
  "title": "Example Domain",
  "url": "https://example.com/",
  "mode": "compact",
  "elements": [{ "ref": "h1", "role": "link", "label": "Learn more" }],
  "omittedElements": 0,
  "textPreview": "Example Domain ...",
  "textBytesOmitted": 0,
  "regions": []
}

Verwenden Sie den Vollmodus nur, wenn Sie die alten ausführlichen Elementmetadaten benötigen:

{ "mode": "full", "tabId": 123 }

Verwenden Sie den sichtbaren Modus für viewport-gebundene Arbeiten, virtualisierte Seiten und Klick-Koordinatenplanung:

{ "mode": "visible", "sessionTabId": "tab-1" }

Um lange Seiteninhalte zu lesen (z. B. API-Dokumentation), erhöhen Sie textLimit, anstatt Broker-Skripte oder CDP-Workarounds zu verwenden:

{ "mode": "full", "textLimit": 100000, "tabId": 123 }

Der kompakte Modus respektiert ebenfalls textLimit; der Textkörper wird in textPreview zurückgegeben (es gibt kein text-Feld im kompakten Modus). Wenn textBytesOmitted größer als Null ist, erhöhen Sie textLimit oder scrollen Sie die Seite und machen Sie erneut einen Snapshot, nur wenn Inhalte unterhalb der Falz lazy-geladen werden.

Refs sind dokumentbezogene In-Memory-IDs (h...), die aus der Elementidentität zugewiesen werden, nicht aus der Ausgabereihenfolge. Sie bleiben bei DOM-Einfügungen/Umordnungen im selben Dokument stabil, und click/type werden über den Ref-Store des Content-Scripts aufgelöst. Refs können zwischen Frame-Dokumenten kollidieren, daher behalten Sie die documentId des Ergebnisses und übergeben Sie sie bei späteren iframe-Aktionen. Das Navigieren zu einer anderen Seite lädt ein neues Dokument, daher wird erwartet, dass alte Refs sauber fehlschlagen; machen Sie nach der Navigation oder größeren Seitenänderungen einen neuen Snapshot. Der Ref-Store entfernt getrennte, abgelaufene und überkapazitäre Einträge und löscht veraltete data-cbc-ref-Attribute, sodass entfernte Refs nicht versehentlich wiederverwendet werden können.

Tab-Sitzungen

Bevorzugen Sie claim_tab vor mehrschrittigen Browserarbeiten:

{ "tabId": 123 }

Die zurückgegebene sessionTabId kann an snapshot, navigate, click, type, scroll, query_elements, extract_elements, screenshot, wait_for und verwandte Seitenwerkzeuge übergeben werden. Wenn eine Sitzung einen aktuellen Claim hat, werden Seitenaktionen ohne explizite tabId oder sessionTabId an diesen Claim weitergeleitet. Wenn kein Claim existiert, bleibt der Legacy-Active-Tab-Fallback bestehen.

Claims sind nur beratende MCP-Routing-Zustände. Sie hindern den Benutzer nicht daran, einen Tab zu wechseln, zu schließen oder zu navigieren. Verwenden Sie release_tab oder finalize_tabs, wenn eine Aufgabe abgeschlossen ist; keines der Werkzeuge schließt Browser-Tabs.

Entwicklungskontrollen

npm test
npm run build
cbctl doctor
# or: node dist/cli/main.js doctor
npm run benchmark:compact-snapshots
npm audit

npm run benchmark:snapshots ist ein Alias für denselben Kompakt-vs-Voll-Benchmark. Der Benchmark gibt kompakte Bytes, volle Bytes und den Reduktionsprozentsatz aus; der kompakte Modus sollte auf dem dichten Fixture mindestens 50 % kleiner sein.

Nach dem Bearbeiten von Dateien unter extension/ laden Sie die entpackte Erweiterung auf chrome://extensions neu, bevor Sie Browser-E2E-Prüfungen ausführen. Nach Adapter-/Server-Änderungen bauen Sie den MCP-Host ebenfalls neu und starten ihn neu. Ein veralteter geladener Background-Service-Worker oder Tool-Katalog kann weiterhin älteres Verhalten bereitstellen; browser_status sollte adapter.registeredToolCount: 24, Erweiterungsprotokollversion 6 und den document-targeting-Feature-Marker melden, wenn beide Seiten aktuell sind.

Einschränkungen

  • Dies ist ein Prototyp mit einem gemeinsamen lokalen Token, keine Multi-Benutzer-Authentifizierung.

  • Browser-Tool-Aufrufe werden global am Broker serialisiert.

  • Content-Skripte verwenden DOM-Snapshots, nicht den vollständigen Chrome-Barrierefreiheitsbaum.

  • Refs sind dokumentbezogene In-Memory-Handles. Führen Sie snapshot erneut aus nach Navigation, Neuladungen, größeren DOM-Änderungen oder Fehlern durch veraltete Refs.

  • Sichtbare Screenshots sind nur Viewport. Das Erfassen eines inaktiven Tabs kann diesen aktivieren, da Chrome MV3 den sichtbaren Tab in einem Fenster erfasst.

  • Chrome-Screenshot-Erfassung erfordert <all_urls> oder activeTab. Dieses Projekt fordert optionales <all_urls> als Host-Berechtigung nur für Wildcard-Screenshots an. Wenn screenshot meldet, dass diese Berechtigung fehlt, laden Sie die Erweiterung nach Manifest-Updates neu, öffnen Sie das Popup, speichern Sie die Einstellungen und gewähren Sie die Aufforderung.

  • keypress und click_at verwenden DOM-Ereignisse, keine CDP-Eingabeausgabe. Sie sind nützlich für Seiten-Handler, lösen aber möglicherweise keine privilegierten Browser-Tastenkombinationen oder jeden frameworkspezifischen Eingabepfad aus.

  • Konsolenprotokolle werden nur nach der Content-Script-Injektion erfasst und sind begrenzt.

  • Ressourcenzusammenfassungen sind nur Zählungen aus der Performance-API; Anforderungsheader, Antwortkörper, Cookies, Speicher, Verlauf, Lesezeichen und Downloads werden absichtlich nicht offengelegt.

  • Browser-Verlauf-, Lesezeichen-, Download- und Cookie-Werkzeuge werden absichtlich nicht offengelegt.

Sicherheit

  • Es wird kein Standard-Token akzeptiert. Setzen Sie CHROME_BROWSER_CONTROL_TOKEN auf einen hochgradig entropischen URL-sicheren Wert sowohl für den Broker als auch den MCP-Adapter, und fügen Sie denselben Wert in das Erweiterungs-Popup ein.

  • Der Broker bindet nur an Loopback-Hosts: 127.0.0.1, localhost oder ::1.

  • Die Erweiterung verbindet sich nur mit ws://127.0.0.1, ws://localhost oder ws://[::1] mit einem optionalen Port.

  • Der Seitenzugriff wird durch im Popup konfigurierte erlaubte Ursprünge eingeschränkt. Verwenden Sie explizite Einträge wie https://example.com oder geben Sie * ein, um alle normalen http://- und https://-Webseiten zuzulassen. Tabs und Seitenaktionen außerhalb des konfigurierten Bereichs werden blockiert.

  • Überprüfungen der erlaubten Ursprünge erfolgen im Erweiterungshintergrund vor Inhaltsaktionen, Screenshots und Tab-Claims.

  • Passwortähnliche und OTP-Felder werden anhand von Eingabetyp, Autovervollständigung, Namen, IDs, Labels und Platzhaltern erkannt. type blockiert sie, es sei denn, force=true.

  • Optional CHROME_BROWSER_CONTROL_EXTENSION_ID fixiert den Broker auf eine installierte Erweiterungs-ID.

  • CDP-Fallback wird vom MCP-Adapter nicht unterstützt, da es die Erweiterungspaarung umgeht.

Binden Sie den Broker niemals an eine Nicht-Loopback-Schnittstelle und committen Sie keine Tokens, lokale Konfigurationsdateien, Protokolle oder persönliche Einrichtungshinweise.

Maintainer-Veröffentlichung

Erste öffentliche npm-Veröffentlichungen sind manuell. Maintainer folgen docs/publish-checklist.md. Fügen Sie keine Auto-Publish-on-Push oder langlebige npm-Tokens in CI für den Standard-Release-Pfad hinzu.

A
license - permissive license
Not graded
quality - not tested
A
maintenance

Maintenance

Maintainers
Response time
2wRelease cycle
3Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to control the Google Chrome browser through a Node.js WebSocket bridge and a dedicated browser extension. It provides tools for capturing screenshots, executing JavaScript, managing tabs, and extracting page content via the MCP protocol.
    2
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables browser automation over MCP using a real Chrome browser with existing profile, supporting real tabs, downloads, cookies, and RPA workflows.
    71
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Drive your real, signed-in Chrome browser from any MCP client, enabling browser automation such as navigation, clicking, typing, and screenshots through standard MCP tools.
    1

View all related MCP servers

Related MCP Connectors

  • Hosted real Google Chrome MCP with per-user persistent state. Navigate, click, type, screenshot.

  • Browser MCP for logged-in tasks. Uses your Chrome — credentials stay local. Zero-token replay.

  • Live browser debugging for AI assistants — DOM, console, network via MCP.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/vKongv/chrome-browser-control'

If you have feedback or need assistance with the MCP directory API, please join our Discord server