# πŸš€ Browser Pilot **Agentic Browser Control – wie im Screenshot: Side Panel Chat + MCP Server + eigenstΓ€ndige Browser-KI.** Eine Chrome/Brave Extension die drei Dinge gleichzeitig kann: 1. **πŸ—¨οΈ In-Browser Agent (Side Panel)** – Chat-UI direkt im Browser, die KI steuert die Seite 2. **πŸ”Œ MCP Server** – externe KI-Clients (Claude Desktop, Cursor, du als Agent) kΓΆnnen den Browser fernsteuern 3. **πŸ› οΈ Dev Tools** – JS Console, CSS Selector Tester, direkte Tool-AusfΓΌhrung ![Architecture](https://img.shields.io/badge/MV3-Chrome%20Extension-blue) ![Zero Deps](https://img.shields.io/badge/Server-Zero%20Dependencies-green) --- ## πŸ—οΈ Architektur ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ BROWSER (Chrome/Brave) β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ Side Panel (UI) β”‚ β”‚ Background Service Worker β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β€’ Chat mit LLM │◄──►│ β€’ 22 Browser-Tools β”‚ β”‚ β”‚ β”‚ β€’ Quick Actions β”‚ β”‚ β€’ WebSocket β†’ MCP Server β”‚ β”‚ β”‚ β”‚ β€’ JS Console β”‚ β”‚ β€’ Message Router β”‚ β”‚ β”‚ β”‚ β€’ Selector Test β”‚ β”‚ β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ β”‚ Content Script β”‚β—„β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ (jede Seite) β”‚ β”‚ β”‚ β”‚ β€’ Console Capture β”‚ β”‚ β”‚ β”‚ β€’ Error Tracking β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β–² β–² β”‚ LLM API β”‚ WebSocket β”‚ (OpenRouter/Ollama/etc) β”‚ β–Ό β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ LLM Provider β”‚ β”‚ MCP Server (Node.js) β”‚ β”‚ (dein Endpoint) β”‚ β”‚ Port 9224 β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β€’ OpenRouter β”‚ β”‚ β€’ HTTP MCP Protocol β”‚ β”‚ β€’ Ollama (lokal) β”‚ β”‚ β€’ WS Bridge β”‚ β”‚ β€’ Anthropic β”‚ β”‚ β€’ Zero Dependencies β”‚ β”‚ β€’ OpenAI β”‚ β”‚ β”‚ β”‚ β€’ Custom β”‚ β”‚ Clients: β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β€’ Claude Desktop β”‚ β”‚ β€’ Cursor β”‚ β”‚ β€’ Dieser Agent (du) β”‚ β”‚ β€’ Beliebiger MCP-Clientβ”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` --- ## ⚑ Quick Start ### 1. Extension installieren ```bash # In Chrome/Brave: # 1. chrome://extensions/ ΓΆffnen # 2. Developer Mode aktivieren # 3. "Load unpacked" β†’ browser-pilot/ Ordner wΓ€hlen ``` ### 2. Side Panel nutzen (eigenstΓ€ndig im Browser) 1. Extension-Icon klicken β†’ Side Panel ΓΆffnet sich 2. βš™οΈ Settings β†’ API Key + Endpoint konfigurieren 3. Lostippen: "Was steht auf dieser Seite?" oder "Klicke auf den Login-Button" ### 3. MCP Server starten (fΓΌr externe KI-Anbindung) ```bash cd browser-pilot/server node index.js ``` ### 4. In Claude Desktop / Cursor / etc. einbinden ```json { "mcpServers": { "browser-pilot": { "type": "streamableHttp", "url": "http://127.0.0.1:9224/mcp" } } } ``` --- ## πŸ—¨οΈ Side Panel Features | Tab | Funktion | |-----|----------| | **Fragen** | Chat mit KI – stellt Fragen ΓΌber die Seite, lΓ€sst Aufgaben ausfΓΌhren | | **Handeln** | Quick Actions: Screenshot, Seitentext, Links, Formulare, Zusammenfassung | | **Dev** | JS Console (Ctrl+Enter), CSS Selector Tester mit Highlighting | ### UnterstΓΌtzte LLM Provider | Provider | Base URL | Modelle | |----------|----------|---------| | OpenRouter | `https://openrouter.ai/api/v1` | Alle (Claude, GPT, Gemini, ...) | | Ollama | `http://localhost:11434/v1` | qwen2.5, llama3, mistral, ... | | Anthropic | `https://api.anthropic.com/v1` | Claude Sonnet/Haiku/Opus | | OpenAI | `https://api.openai.com/v1` | GPT-4o, o1, ... | | Custom | Beliebig | Jeder OpenAI-kompatible Endpoint | --- ## πŸ”§ 22 Browser-Tools | Tool | Beschreibung | |------|-------------| | `browser_navigate` | Zu URL navigieren | | `browser_go_back/forward` | History-Navigation | | `browser_reload` | Seite neu laden | | `browser_get_tabs` | Alle Tabs auflisten | | `browser_switch_tab` | Tab wechseln | | `browser_close_tab` | Tab schließen | | `browser_screenshot` | Screenshot (base64 PNG) | | `browser_get_page_info` | URL, Titel, Viewport, Scroll | | `browser_get_text` | Textinhalt der Seite/Element | | `browser_get_html` | HTML der Seite/Element | | `browser_query_selector` | Elemente per CSS-Selektor | | `browser_get_interactive_elements` | Alle klickbaren Elemente | | `browser_click` | Element anklicken | | `browser_type` | Text in Input eingeben | | `browser_select` | Option in Select wΓ€hlen | | `browser_scroll` | Seite/Element scrollen | | `browser_execute_js` | Beliebiges JavaScript ausfΓΌhren | | `browser_press_key` | Taste drΓΌcken (mit Modifiern) | | `browser_wait` | Auf Element/Timeout warten | | `browser_get_console_logs` | Console-Logs auslesen | | `browser_highlight` | Element visuell hervorheben | --- ## πŸ”’ Compliance & Sicherheit - **Eigene Endpoints** – du bestimmst welches LLM, welcher Server - **Kein Cloud-Zwang** – funktioniert komplett offline mit Ollama - **Kein Tracking** – null Telemetrie, null externe Calls (außer dein LLM) - **Lokaler MCP Server** – bindet nur auf 127.0.0.1 - **Optional Auth Token** – `AUTH_TOKEN=xxx` Environment Variable - **Zero Dependencies** – Server braucht kein `npm install` --- ## πŸ“ Projektstruktur ``` browser-pilot/ β”œβ”€β”€ manifest.json # Chrome MV3 Manifest β”œβ”€β”€ background.js # Service Worker (Tools + WS Bridge) β”œβ”€β”€ content.js # Content Script (Console Capture) β”œβ”€β”€ sidepanel.html # Side Panel UI β”œβ”€β”€ sidepanel.css # Styles (Dark Theme) β”œβ”€β”€ sidepanel.js # Agent Loop + Chat Logic β”œβ”€β”€ icons/ # Extension Icons └── server/ β”œβ”€β”€ index.js # MCP Server (zero-dep, Node 18+) └── package.json ``` --- ## πŸ’‘ Beispiele ### Im Side Panel: ``` "Fasse diese Seite zusammen" "FΓΌlle das Kontaktformular mit Testdaten aus" "Finde alle Links die auf externe Seiten zeigen" "Klicke auf 'Weiter' und warte bis die nΓ€chste Seite geladen ist" "Sperre die Beobachtungsliste" (wie im Screenshot) ``` ### Via MCP (Claude Desktop / dieser Agent): ``` Tool: browser_navigate β†’ {"url": "https://servicenow.mercedes-benz.com"} Tool: browser_get_interactive_elements β†’ {} Tool: browser_click β†’ {"selector": "#resolve-btn"} Tool: browser_screenshot β†’ {} ``` --- ## πŸš€ Entwicklung ```bash # Server im Watch-Mode: cd server && node --watch index.js # Extension: Dateien editieren β†’ chrome://extensions/ β†’ Reload ``` --- MIT License. Keine AbhΓ€ngigkeiten. Dein Browser, dein LLM, deine Regeln. πŸ”₯