Chrome Browser Control
Chrome Browser Control
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 setupDie CLI installiert sich als cbctl (bevorzugter Kurzname) und auch als chrome-browser-control.
cbctl setup
cbctl start
cbctl doctorsetup 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 |
| Benutzerkonfiguration erstellen und die Erweiterungskopie installieren |
| Den gemeinsamen Loopback-Broker starten |
| Den Broker stoppen |
| Broker-/Konfigurationsstatus anzeigen |
| Lokalen Einrichtungsprüfer |
| Stdio-MCP-Adapter (standardmäßig nur Anhängen) |
| Host-spezifische MCP-Snippets ausgeben |
| 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 setupRepo-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 (Standard8765).CHROME_BROWSER_CONTROL_HOST— Loopback-Host für den Broker (Standard127.0.0.1).CHROME_BROWSER_CONTROL_EXTENSION_ID— Optional. Heftet den Broker an eine installierte Erweiterungs-ID.CHROME_BROWSER_CONTROL_AUTOLOAD— Optional. Setzen Sie auf1, damitmcpeinen Broker starten kann, wenn keiner erreichbar ist (Wiederherstellung). Bevorzugen Siecbctl startfür den normalen Gebrauch.CHROME_BROWSER_CONTROL_DISABLE_LOCAL_ENV— Optional. Setzen Sie auf1, um das Laden des Repo.env.localzu ü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
Öffnen Sie Chrome mit dem Profil, das Sie mit den MCP-Tools steuern möchten.
Gehen Sie zu
chrome://extensions.Aktivieren Sie den Entwicklermodus.
Klicken Sie auf "Entpackte Erweiterung laden".
Wählen Sie
~/.chrome-browser-control/extension(wird vonsetupausgegeben). Mitwirkende, die Quellen bearbeiten, können stattdessenextension/aus dem Repository laden.Öffnen Sie das Popup der Chrome Browser Control-Erweiterung.
Belassen Sie die Bridge-URL bei
ws://127.0.0.1:8765, es sei denn, Sie haben den lokalen Port geändert.Fügen Sie das generierte Pairing-Token ein.
Fügen Sie erlaubte Ursprünge hinzu, z. B.
https://example.com,http://localhost:3000oder*für alle normalenhttp://- undhttps://-Seiten.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 yamlDer 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: 30JSON-ä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
Starten Sie den Broker:
cbctl startFühren Sie den Einrichtungsprüfer aus:
cbctl doctorBestätigen Sie von Ihrem MCP-Host aus, indem Sie das Tool
browser_statusaufrufen. Wenn bereit, solltenextension.statusundping.statuseine aktive Bridge-Verbindung widerspiegeln, undextension.allowedOriginssollte Ihren konfigurierten Bereich anzeigen.
Tools
browser_status: Prüft, ob der MCP-Adapter den Broker erreichen kann und ob die Chrome-Erweiterung aufpingantwortet. Wenn bereit, spiegelnextension.statusundping.statusdie aktive Bridge-Verbindung wider (nicht einen veralteten getrennten Standard),extension.allowedOriginszeigt den konfigurierten Bereich (einschließlich* (alle http/https-Web-Ursprünge), wenn der Wildcard-Modus aktiviert ist),extension.sessionzeigt den Sitzungsnamen/beanspruchte Tabs, undprotocolVersion/featuresbestätigen den geladenen entpackten Erweiterungscode. Protokollversion6enthält den Feature-Markerdocument-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 inallowedOriginsdeutlich 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 einedocumentId; 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 einesessionTabIdzurück. Beanspruchungen sind Routing-Zustände, keine exklusiven Browser-Sperren.release_tab: Gibt eine Beanspruchung durchsessionTabIdodertabIdfrei, ohne den Tab zu schließen.finalize_tabs: Gibt den Beanspruchungszustand für die Sitzung frei, ohne Tabs zu schließen. Übergeben Siekeep-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 Siemode: "full"für ausführliche Elementmetadaten und eintext-Feld (standardmäßig 4000 Zeichen). Übergeben Siemode: "visible"für ansichtsfenster-/schnittstellenbewusste Elemente mit Grenzen und Scroll-Metadaten. Übergeben SietextLimit(bis zu100000), wenn Sie mehr Seitenkörpertext benötigen – überprüfen SietextBytesOmitted, um zu sehen, ob Inhalt abgeschnitten wurde.visible_snapshot: Praktisches Tool fürsnapshot({ mode: "visible" }).navigate: Navigiert den aktiven Tab oder einen angegebenentabIdzu 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 Sieactive: truenur, wenn der Tab sichtbar werden muss. Wenn das Laden zeitlich überschritten wird, enthält das Ergebnispending: trueund einewarning. Unterstütztafter-Beobachtungen nach der Lade-Wartezeit.click: Klickt auf ein Element per Snapshot-Referenz auf einem erlaubten Tab. Unterstütztafter-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ütztafter-Beobachtungen.scroll: Scrollt einen erlaubten Tab umdeltaXunddeltaY. Optionalex/y-Ansichtsfensterkoordinaten scrollen ein scrollbares Element unter diesem Punkt, wenn eines gefunden wird. Scrollen paginiert keinen Snapshot-Text – Snapshots verwenden den vollständigendocument.bodyinnerText. Erhöhen SietextLimitbeisnapshotanstelle von Scroll-Nähen, es sei denn, die Seite lädt Inhalte lazy. Unterstütztafter-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. Optionalesrefoderbounds(+padding) beschneiden nach der Aufnahme; leere Zuschnitte schlagen vorcaptureVisibleTabfehl. 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>oderactiveTabfürcaptureVisibleTab; 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ütztafter-Beobachtungen.click_at: Sendet Mausereignisse an Ansichtsfensterkoordinaten. Unterstütztafter-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, wennuntilgesetzt ist), extrahiert ausgewählte Elemente pro Schritt, zielt optional auf einen verschachtelten Scroll-Container überscroll, wendet eine aggregierte Elementobergrenze an (maxItems, Standard 100) und dedupliziert optional nach Text oder href für Lazy-Feeds. Optionalesuntil.noNewItemsForSteps/until.stopBeforeDatetime(ISO-8601; erfordertincludeTimes) setztstoppedReason. Ergebnisse enthalten weggelassene/abgeschnittene Zählungen. Unterstütztafter-Beobachtungen.perform_actions: Führt bis zu 10 sequenzielle Seitenaktionen (click,type,scroll,keypress) in einem Broker-Roundtrip aus. Fail-Fast beim ersten Schrittfehler; terminaleafter-Beobachtungen werden nur ausgeführt, wenn jeder Schritt erfolgreich ist. Koordinatenklicks bleiben beim Einzeltoolclick_at. Schritte können keinafter,tabIdodersessionTabIdenthalten.
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 auditnpm 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
snapshoterneut 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>oderactiveTab. Dieses Projekt fordert optionales<all_urls>als Host-Berechtigung nur für Wildcard-Screenshots an. Wennscreenshotmeldet, 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.keypressundclick_atverwenden 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_TOKENauf 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,localhostoder::1.Die Erweiterung verbindet sich nur mit
ws://127.0.0.1,ws://localhostoderws://[::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.comoder geben Sie*ein, um alle normalenhttp://- undhttps://-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.
typeblockiert sie, es sei denn,force=true.Optional
CHROME_BROWSER_CONTROL_EXTENSION_IDfixiert 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.
This server cannot be installed
Maintenance
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
- FlicenseNot gradedqualityDmaintenanceEnables 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
- AlicenseNot gradedqualityCmaintenanceEnables MCP clients to control and interact with the user's real Chrome browser session, leveraging existing logins, cookies, and extensions for AI-driven automation.5MIT
- AlicenseNot gradedqualityCmaintenanceEnables browser automation over MCP using a real Chrome browser with existing profile, supporting real tabs, downloads, cookies, and RPA workflows.71MIT
- FlicenseNot gradedqualityCmaintenanceDrive 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
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.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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