stealth-browser-mcp
stealth-browser-mcp
Ein MCP-Server, der einem KI-Assistenten einen echten Chrome-Browser zur Verfügung stellt, der angemeldet bleibt.
Die meisten Browser-Automatisierungstools geben dem Modell einen frischen, leeren Browser. Dieser hier steuert ein persistentes Chrome-Profil, sodass das Modell, sobald du dich selbst auf einer Website angemeldet hast – egal ob mit 2FA, CAPTCHA oder Gerätefreigabe – diese Sitzung auch bei späteren Läufen weiterverwenden kann, ohne jemals dein Passwort zu sehen.
Für Websites, die eine skriptgesteuerte Anmeldung nicht tolerieren, bietet er zwei Notluken: Anmeldedaten, die zum Ausfüllzeitpunkt aus dem macOS-Schlüsselbund gezogen werden, und WebAuthn-Passkeys, die über den virtuellen Authentifikator von Chrome abgespielt werden.
[!WARNUNG] Dies ist ein Werkzeug für Profis. Es gibt einem Sprachmodell die Kontrolle über einen Browser, der deine aktiven Sitzungen enthält, und es ist in der Lage, deine gespeicherten Passwörter in Seiten einzutippen, die das Modell auswählt. Lies SECURITY.md und Verantwortungsvoller Umgang, bevor du es auf etwas richtest, das dir wichtig ist.
Inhalt
Related MCP server: agent-browser-mcp
So funktioniert es
MCP client (Claude Code, Claude Desktop, Cursor, …)
│
│ JSON-RPC over stdio
▼
┌───────────────────────────┐
│ stealth-browser-mcp │
│ 16 tools, one browser │
└─────┬───────────────┬─────┘
│ │
credentials │ │ CDP + Puppeteer
▼ ▼
┌───────────────────┐ ┌───────────────────────┐
│ macOS Keychain │ │ Google Chrome │
│ stealth-mcp:* │ │ + stealth plugin │
│ passwords, │ │ + WebAuthn virtual │
│ passkey material │ │ authenticator │
└───────────────────┘ └───────────┬───────────┘
│
▼
┌─────────────────────────┐
│ Persistent profile dir │
│ cookies · localStorage │
│ IndexedDB · sessions │
└─────────────────────────┘Drei Komponenten leisten die Arbeit:
Persistenz. Chrome wird mit einem festen userDataDir gestartet statt mit einem Wegwerf-Verzeichnis. Melde dich einmal interaktiv an und die Cookies überleben jeden späteren Lauf – der übliche Grund, warum Automatisierung auf echten Websites scheitert, verschwindet.
Stealth. puppeteer-extra-plugin-stealth patcht die bekannten Automatisierungs-Merkmale, und der Server legt noch ein paar weitere obendrauf: navigator.webdriver ist undefined, window.chrome.runtime ist vorhanden, HeadlessChrome wird aus dem User-Agent entfernt, und --disable-blink-features=AutomationControlled wird gesetzt. Klicks bewegen die Maus entlang eines Pfads zu einem verrauschten Punkt innerhalb des Ziels; getippt wird Zeichen für Zeichen mit 30–100 ms Abständen.
Wiederverwendung statt Erstellung von Sitzungen. Das Designziel ist, die Automatisierung von Anmeldungen ganz zu vermeiden. Schlüsselbund-Autofill und Passkey-Wiedergabe existieren für die Fälle, in denen das nicht möglich ist.
Voraussetzungen
Node.js 18 oder neuer
Google Chrome. Das gebündelte Chromium von Puppeteer funktioniert, aber ein echtes Chrome-Build ist deutlich schwerer zu erkennen.
macOS, wenn du die Schlüsselbund- und Passkey-Funktionen nutzen möchtest. Alles andere – Navigation, Extraktion, Screenshots, das persistente Profil – ist plattformübergreifend. Die Schlüsselbund-Ebene ruft
/usr/bin/securityauf und schlägt auf anderen Plattformen fehl; die Browser-Tools fassen es nicht an.
Installation
git clone https://github.com/lauyuen/stealth-browser-mcp.git
cd stealth-browser-mcp
npm installOptional kannst du die Beispiel-Umgebungsdatei kopieren und bearbeiten:
cp .env.example .envBestätige, dass der Browser startet und die Umgehungen aktiv sind:
npm run check-stealthMit einem MCP-Client verbinden
Der Server spricht stdio. Richte deinen Client mit einem absoluten Pfad auf src/server.js aus.
Claude Code
claude mcp add stealth-browser -- node /absolute/path/to/stealth-browser-mcp/src/server.jsClaude Desktop – ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"stealth-browser": {
"command": "node",
"args": ["/absolute/path/to/stealth-browser-mcp/src/server.js"]
}
}
}Jeder andere MCP-Client – gleiche Struktur, plus optionaler Profil-Override:
{
"mcpServers": {
"stealth-browser": {
"command": "node",
"args": ["/absolute/path/to/stealth-browser-mcp/src/server.js"],
"env": {
"BROWSER_PROFILE_DIR": "/absolute/path/to/a/private/profile/dir"
}
}
}
}Starte den Client danach neu. browser_status ist der schnellste Weg, um zu bestätigen, dass die Verbindung aktiv ist.
Die erste Anmeldung
Bevor das Modell eine Website nutzen kann, musst du das Profil selbst vorbereiten:
npm run login -- https://example.comEin sichtbares Chrome-Fenster öffnet sich mit demselben Profil, das auch der MCP-Server verwenden wird. Melde dich normal an – Passwortmanager, 2FA-Aufforderungen, CAPTCHAs, „Dieses Gerät merken", alles davon. Drücke Enter im Terminal, wenn du fertig bist, und die Sitzung wird auf die Festplatte geschrieben.
Jeder spätere MCP-Lauf erbt diese Sitzung. Wiederhole das pro Website. Sitzungen laufen nach dem eigenen Zeitplan der Website ab, also führe dies erneut aus, wenn eine Website dich abmeldet.
Tool-Referenz
Navigation und Interaktion
Tool | Argumente | Hinweise |
|
|
|
|
| Scrollt das Element in den sichtbaren Bereich und bewegt dann die Maus zu einem verrauschten Punkt darin, bevor geklickt wird. |
|
| Tippt ein Zeichen nach dem anderen mit zufälligen Verzögerungen. |
|
|
|
|
| Wartet auf ein Element, schläft, oder beides. |
Seite lesen
Tool | Argumente | Hinweise |
|
| Entfernt Skripte und Styles; gibt Text plus strukturierte Links und Formularfelder zurück. Der günstigste Weg, ein Modell eine Seite lesen zu lassen. |
|
| Rohes |
|
| Gibt ein PNG als MCP-Bildinhalt zurück. |
|
| Führt JavaScript im Seitenkontext aus und gibt das Ergebnis zurück. Siehe die Warnung in SECURITY.md. |
Sitzung und Authentifizierung
Tool | Argumente | Hinweise |
|
| Liest das Passwort aus dem Schlüsselbund und tippt es ein. Das Geheimnis wird dem Modell nie zurückgegeben. |
|
| Schreibt in den Schlüsselbund unter |
|
| Mit beiden Argumenten wird ein gespeicherter Passkey injiziert. Mit keinem wird ein leerer Authentifikator für die Registrierung angehängt. |
|
| Erfasst eine frisch registrierte Anmeldedaten und speichert sie. |
Browser-Lebenszyklus
Tool | Argumente | Hinweise |
| — | Verbindungsstatus, Anzahl der Tabs, aktuelle URL, Profilpfad, ob ein Authentifikator angehängt ist. |
|
| Öffnet die aktuelle Sitzung erneut in einem sichtbaren Fenster, damit du ein CAPTCHA lösen oder eine 2FA-Aufforderung von Hand bestätigen kannst, und übergibt dann die Kontrolle zurück. |
| — | Schließt sauber und schreibt Cookies auf die Festplatte. |
Der Browser startet standardmäßig headless und wird über Aufrufe hinweg wiederverwendet.
browser_open_interactive_window ist das einzige Tool, das ihn in ein sichtbares Fenster umschaltet.
Anmeldedaten im Schlüsselbund speichern
Passwörter liegen im macOS-Schlüsselbund unter dem Dienstpräfix stealth-mcp: – niemals in einer Datei in diesem Repository und niemals im Kontext des Modells.
npm run keychain set github you@example.com # prompts; input is not echoed
npm run keychain get github you@example.com # confirms presence, prints length only
npm run keychain delete github you@example.comDas Modell löst dann eine Anmeldung aus, ohne das Geheimnis jemals zu erfahren:
// browser_autofill_login
{
"service": "github",
"account": "you@example.com",
"usernameSelector": "#login_field",
"passwordSelector": "#password",
"submitSelector": "input[type='submit']"
}service ist ein beliebiges Label, das du wählst – es muss nur zwischen CLI und Tool-Aufruf übereinstimmen.
Du kannst das Passwort für Skriptzwecke auch als abschließendes CLI-Argument übergeben, aber es landet dann in deinem Shell-Verlauf und in der Prozessliste, weshalb der Befehl dich warnt, wenn du das tust.
Passkeys
Chrome stellt über das DevTools-Protokoll einen WebAuthn-virtuellen Authentifikator bereit – einen Software-Authentifikator, der zum Testen von WebAuthn-Abläufen gedacht ist. Dieser Server steuert ihn und persistiert das resultierende Schlüsselmaterial im Schlüsselbund, sodass es Läufe überdauert.
Registrieren eines Automatisierungs-Passkeys
passkey_enable_virtual_authenticatorohne Argumente aufrufen.Navigiere zum „Passkey hinzufügen"-Ablauf der Website und schließe ihn ab. Der virtuelle Authentifikator beantwortet die Challenge; es erscheint keine OS-Aufforderung.
passkey_save_registrationmit derrpIdder Website und deinem Konto aufrufen.
Spätere Verwendung
passkey_enable_virtual_authenticator mit rpId und account injiziert die gespeicherte Anmeldedaten, bevor du navigierst, und die Website meldet dich ohne Aufforderung an.
[!VORSICHT] Ein so gehaltener Passkey ist eine Datei, kein Hardware-Schlüssel. Er kann kopiert werden – genau die Eigenschaft, die echte Passkeys verhindern sollen. Registriere damit nur Automatisierungs-Passkeys. Verwende ihn nicht für den Passkey, der deine E-Mail, deine Bank oder irgendetwas anderes schützt, dessen Verlust schwerwiegend wäre.
Konfiguration
Alle Einstellungen sind Umgebungsvariablen, die aus der Prozessumgebung oder einer .env-Datei gelesen werden. Siehe .env.example.
Variable | Standard | Zweck |
|
| Persistentes Chrome-Profil. Enthält aktive Sitzungen – halte es privat und außerhalb der Versionskontrolle. |
| Plattformstandard | Chrome-Binärdatei, die gesteuert werden soll. Fällt auf Puppeteers Chromium zurück, wenn der Pfad nicht existiert. |
|
| Navigations- und Selektor-Timeout in Millisekunden. |
Chrome-Startflags und das Standard-Viewport von 1280×800 befinden sich in
src/config.js. Mehrere Flags tauschen Sicherheit gegen Kompatibilität – SECURITY.md erklärt, welche und warum du sie möglicherweise entfernen möchtest.
Stealth verifizieren
npm run check-stealthMeldet navigator.webdriver, window.chrome, window.chrome.runtime, die
Plugin-Anzahl, navigator.languages und den effektiven User-Agent und gibt
dann das aufgelöste Profil und die Chrome-Pfade aus.
Für eine strengere Prüfung richten Sie den Browser auf eine Fingerprinting-Seite — zum Beispiel
bot.sannysoft.com oder abrahamjuliot.github.io/creepjs — mit
browser_navigate gefolgt von browser_screenshot.
Kein Stealth-Setup ist unerkennbar. Gut verteidigte Websites kombinieren Fingerprinting mit Verhaltensanalyse, IP-Reputation und Kontohistorie und werden Automatisierung trotzdem erkennen. Behandeln Sie dies als „löst die offensichtlichen Prüfungen nicht aus", nicht als Unsichtbarkeit.
Fehlerbehebung
„Failed to launch the browser process" / Profil ist gesperrt. Chrome erlaubt
einen Prozess pro Profilverzeichnis. Schließen Sie jedes Chrome, das Sie manuell
gegen dasselbe Verzeichnis gestartet haben. Der Server löscht veraltete Singleton*-Sperrdateien beim
Start und verbindet sich über seinen DevTools-Port wieder mit einer laufenden Instanz, aber ein
laufendes Chrome, das das Profil besitzt, gewinnt.
Eine Website meldet das Modell ab oder blockiert es. Die gespeicherte Sitzung ist
abgelaufen. Führen Sie npm run login -- <url> erneut aus.
Selektoren stimmen nicht überein. Rufen Sie browser_extract_html mit einem engen Selektor auf
und lassen Sie das Modell das echte Markup lesen, statt zu raten. Single-Page-Apps
binden Eingaben oft spät ein — zuerst browser_wait_for verwenden.
Ein CAPTCHA erscheint. Rufen Sie browser_open_interactive_window auf, lösen Sie es
selbst und fahren Sie fort. Der gelöste Zustand bleibt im Profil erhalten.
Keychain-Fehler unter Linux oder Windows. Erwartet — diese Ebene ist nur für macOS. Die Browser-Tools funktionieren überall; die Anmeldedaten- und Passkey-Tools nicht.
Verantwortungsvolle Nutzung
Dieses Projekt existiert, damit ein Assistent auf Websites agieren kann, auf denen Sie bereits ein Konto haben, mit Sitzungen, die Sie selbst eingerichtet haben. Das ist der beabsichtigte Umfang, und das Design mit persistentem Profil spiegelt das wider.
Anti-Erkennung und Anmeldedaten-Automatisierung können offensichtlich auch anderswohin gerichtet werden. Bevor Sie es gegen eine Website ausführen, bedenken Sie:
Die Nutzungsbedingungen der Website. Viele verbieten automatisierten Zugriff ausdrücklich. Das Umgehen einer Bot-Abwehr kann einen Vertrag verletzen, dem Sie zugestimmt haben, und in manchen Rechtsräumen zieht unbefugter Zugriff strafrechtliche Haftung nach sich. In der Lage zu sein, eine Kontrolle zu umgehen, ist keine Erlaubnis dazu.
Einwilligung. Automatisieren Sie Konten, die Ihnen gehören oder für die Sie eine schriftliche Autorisierung haben, in deren Namen zu handeln. Die Anmeldedaten einer anderen Person in Ihrer Keychain sind keine Einwilligung.
Last. Begrenzen Sie Ihre Rate. Respektieren Sie
robots.txt, wo es gilt. Automatisierung, die eine Website echtes Geld kostet, ist ein guter Weg, die Technik für alle sperren zu lassen.Daten anderer Personen. Seiten, die das Modell liest, fließen in den Provider Ihres MCP-Clients. Leiten Sie keine persönlichen Informationen Dritter darüber.
Beiträge, die in erster Linie dazu dienen, den Schutz einer bestimmten Website zu umgehen, Anmeldedaten zu ernten oder Missbrauch zu skalieren, werden nicht übernommen.
Lizenz
MIT © Yuen Lau
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 gradedqualityNot gradedmaintenanceEnables AI agents to authenticate with websites using a real Chromium browser with anti-detection measures and human-in-the-loop support for captchas and 2FA. Features stealth browsing, human-like interactions, and persistent session storage to automate and resume login workflows.
- AlicenseBqualityFmaintenanceEnables AI agents to directly control your real Chrome browser with full context including login sessions, cookies, and open tabs. It provides tools for page scanning, JavaScript execution, CDP control, screenshots, and physical mouse/keyboard input for authentic browser automation.20239MIT
- AlicenseNot gradedqualityCmaintenanceLets AI assistants control your real Chrome browser to perform web tasks like reading pages, taking screenshots, clicking, and typing, using your existing logged-in sessions.131MIT
- AlicenseAqualityBmaintenanceGives your AI agent a persistent browser identity with anti-detection, credential vault, and multi-persona support for automated web browsing, login, and signup.318MIT
Related MCP Connectors
Browser MCP for logged-in tasks. Uses your Chrome — credentials stay local. Zero-token replay.
AI-powered browser automation — navigate, click, fill forms, and extract data from any website.
Stealth web browser for agents: search, fetch, click and type through persistent sessions over 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/lauyuen/stealth-browser-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server