GDD - AI-Controlled Browser Farm

io.github.imVSmirnov由 GitHub 账号 imVSmirnov 发布v1.5.0更新于 Oct 24, 2026

AI-controlled browser farm: N isolated Chromium instances with 36 MCP tools

概览

AI 生成的概览

在本机运行多个相互隔离的 Chromium 浏览器,让助手并行地在模拟设备上测试网页应用。

可以做什么
GDD 会启动 N 个相互隔离的 Chromium 实例,每个实例拥有独立的配置文件、Cookie、设备模拟、地理位置和网络条件,并通过 localhost 上的 HTTP 提供 39 个 MCP 工具。工具涵盖浏览器实例管理、导航、交互(点击、滑动、拖拽、滚动、输入、按键、悬停、下拉选择、对话框)、读取与截图、模拟预设、诊断(控制台、网络、性能、通知)、快速认证、JavaScript 执行以及浏览器存储与 Cookie。它提供无界面服务器、带实时浏览器网格的桌面 GUI 和 Windows GUI,三者暴露相同的工具。
适用场景
适合让助手像多个真实用户一样同时操作网页应用:多设备响应式检查、注册与表单流程、排查控制台和网络错误,或类似 CI 的浏览器运行。适合已经在使用 Claude Code、Cursor 或基于 VS Code 的 IDE 等 MCP 客户端的团队。
运行要求
在 Windows、Linux 或 macOS 上作为本地进程运行,或使用 Docker 镜像 ghcr.io/cap-of-tea/gdd。MCP 端点为 localhost:9700 上的 HTTP(桌面 GUI 为 9800);客户端通过 URL 或随附的 stdio 代理脚本连接。首次启动会自动下载 Chromium(约 80 MB)。从源码构建需要 .NET 8 SDK。未声明需要账户或 API 密钥。
安装前请注意
助手可以驱动真实浏览器:导航、输入、点击、执行 JavaScript(gdd_execute_js)、读取和清除 Cookie 与 localStorage,还能改写响应头,包括移除 X-Frame-Options 和 CSP frame-ancestors。gdd_quick_auth 会用生成的凭据注册并登录,gdd_update 会下载并安装更新并重启 GDD。可选的代理凭据来自 GDD_PROXY_USER 和 GDD_PROXY_PASS,BotToken 可设置 Telegram 机器人令牌。除非禁用,更新检查会访问 api.github.com。

安装

在 SourceWeft 中

  1. 打开 控制台中的 GDD - AI-Controlled Browser Farm,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

[GDD]

GDD — Giggly-Dazzling-Duckling

AI-controlled browser farm on your machine
Simulate multiple real users across 22 device types — test your site like it's launch day.

[Release] [Platforms] [MCP] [MCP Registry] [License]

[Claude Code] [Cursor]


How It Works

You: Open 3 iPhones and a desktop, navigate to myapp.com, test the signup form on all devices

Claude Code creates 4 browsers with device emulation, navigates each to your app, fills in the form, takes screenshots, checks console for errors — all in parallel.

text
gdd_add_players(3, device="iPhone 15 Pro")    → players [1, 2, 3]gdd_add_players(1, device="Desktop 1080p")    → player  [4]gdd_navigate(1, "https://myapp.com")          → all 4 browsers open your appgdd_tap(1, "#signup-btn")                     → taps signup on iPhonegdd_screenshot(1)                             → captures the resultgdd_get_console(1, level="error")             → checks for JS errors

GDD runs N isolated Chromium instances, each with its own profile, cookies, device emulation, geolocation, and network conditions. It exposes 39 MCP tools via HTTP on localhost:9700.

[GDD Video Wall — 3 devices testing simultaneously]


Install

GDD comes in two flavours. The Server is headless — it's just the MCP backend, runs anywhere (including boxes with no display), and is all you need for pure AI automation. The Desktop app adds a GUI: a live grid of browser thumbnails you can click into to take over a session by hand. The Server runs on port 9700, the Desktop app on 9800 — so you can run both side by side.

Server (headless) — the MCP backend:

PlatformDownloadRun
LinuxGDD-Server-Linux.tar.gzchmod +x GDD.Headless && ./GDD.Headless
macOS ARMGDD-Server-macOS-ARM.tar.gzbash Scripts/setup-macos.sh && ./GDD.Headless
macOS IntelGDD-Server-macOS-Intel.tar.gzbash Scripts/setup-macos.sh && ./GDD.Headless
WindowsGDD-Server-Windows.zip.\GDD.Headless.exe
Dockerghcr.io/cap-of-tea/gdddocker run -p 9700:9700 ghcr.io/cap-of-tea/gdd
Claude DesktopWin / Mac ARM / Mac Intel (.mcpb)Open .mcpb file — installs as desktop extension

Desktop app (GUI) — a live grid of browser thumbnails you can click into:

PlatformDownloadRun
WindowsGDD-Desktop-Windows.zipExtract, run GDD.exe (WebView2 required)
LinuxGDD-Desktop-Linux.tar.gzbash Scripts/install-deps.sh && ./GDD.Desktop
macOS ARMGDD-Desktop-macOS-ARM.tar.gzbash Scripts/setup-macos.sh && ./GDD.Desktop
macOS IntelGDD-Desktop-macOS-Intel.tar.gzbash Scripts/setup-macos.sh && ./GDD.Desktop

The Windows app uses WebView2; the Linux/macOS app (built with Avalonia) drives real Chromium windows parked off-screen. Self-contained binary, ~70 MB. No .NET installation needed. Chromium downloads automatically on first launch.

One-liner (Linux):

bash
curl -sL https://github.com/Cap-of-tea/GDD/releases/latest/download/GDD-Server-Linux.tar.gz | tar xz && chmod +x GDD.Headless && ./GDD.Headless
Docker
bash
# Run (headless, port 9700)docker run -p 9700:9700 ghcr.io/cap-of-tea/gdd
# Or build locallydocker build -t gdd .docker run -p 9700:9700 gdd

The Docker image runs in headless mode with all Chromium dependencies pre-installed.

By default, browsers launch in headed mode (visible windows). Add --headless for CI/CD. Other flags: --stealth and --stealth-max for anti-bot masking, --update to self-update, --version and --help. The Configuration section below lists every flag and environment variable.


Connect to Your AI Client

Add to .mcp.json and restart your AI client:

json
{  "mcpServers": {    "gdd": {      "url": "http://localhost:9700/mcp"    }  }}

That's it. Start GDD, tell Claude or Cursor to test your app.

Claude Desktop users: Download the .mcpb file from Releases and open it — GDD installs as a one-click desktop extension. No manual config needed.

Config file locations
ClientProject configGlobal config
Claude Code<project>/.mcp.json~/.claude/.mcp.json
Cursor<project>/.cursor/mcp.json~/.cursor/mcp.json
VS Code / Windsurf / Antigravity<project>/.vscode/mcp.jsonIDE settings.json

Global and project configs are merged — servers from both are available simultaneously. Changes are picked up only when restarting the AI client session.

VS Code-based IDEs (Windsurf, Antigravity, Copilot)

VS Code-based IDEs use a different config format than Claude Code / Cursor.

Project config — .vscode/mcp.json:

json
{  "servers": {    "gdd": {      "type": "http",      "url": "http://localhost:9700/mcp"    }  }}

Global config — open via Cmd+Shift+P → "Open User Settings (JSON)":

json
{  "mcp": {    "servers": {      "gdd": {        "type": "http",        "url": "http://localhost:9700/mcp"      }    }  }}

Global settings.json location: macOS — ~/Library/Application Support/<IDE>/User/settings.json, Linux — ~/.config/<IDE>/User/settings.json, Windows — %APPDATA%/<IDE>/User/settings.json. Replace <IDE> with your editor name (Code, Windsurf, Antigravity, etc.).

stdio-proxy alternative (.vscode/mcp.json):

json
{  "servers": {    "gdd": {      "type": "stdio",      "command": "bash",      "args": ["/absolute/path/to/Scripts/mcp-proxy.sh"]    }  }}
Permissions (Claude Code)

By default, Claude Code asks for confirmation on every MCP tool call. To allow GDD tools without prompts, add to ~/.claude/settings.json:

json
{  "permissions": {    "allow": [      "mcp__gdd__*"    ]  }}

This single wildcard covers all 39 GDD tools. Restart Claude Code after editing.

Auto-launch via stdio proxy (alternative)

Proxy scripts start GDD automatically when your AI client connects:

Windows:

json
{  "mcpServers": {    "gdd": {      "command": "powershell",      "args": ["-ExecutionPolicy", "Bypass", "-File", "C:/path/to/Scripts/mcp-proxy.ps1"]    }  }}

Linux / macOS:

json
{  "mcpServers": {    "gdd": {      "command": "bash",      "args": ["/path/to/Scripts/mcp-proxy.sh"]    }  }}

Add "--headless" to the args array for CI/CD.

Tip: On first launch, GDD downloads Chromium (~80 MB). If your AI client times out, run GDD manually first, then reconnect.

Autostart as service (macOS / Linux)

macOS (launchd):

bash
bash Scripts/install-launchd.sh            # headed (default)bash Scripts/install-launchd.sh --headless  # for CI/CD

Manage: launchctl list | grep gdd / bash Scripts/install-launchd.sh --uninstall

Linux (systemd):

bash
mkdir -p ~/.config/systemd/usercat > ~/.config/systemd/user/gdd.service << 'EOF'[Unit]Description=GDD Multi-Browser Testing Server[Service]ExecStart=/path/to/GDD.HeadlessWorkingDirectory=/path/to/gdd-directoryRestart=on-failure[Install]WantedBy=default.targetEOF
systemctl --user daemon-reloadsystemctl --user enable --now gdd
Direct HTTP (without AI client)
bash
curl -X POST http://localhost:9700/mcp -H "Content-Type: application/json" \  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"gdd_add_players","arguments":{"count":1}}}'

GDD uses standard JSON-RPC 2.0 — works with curl, Python, Node.js, or any HTTP client.


Features

  • Multi-device — Run N isolated Chromium instances with 22 device presets (phones, tablets, desktops)
  • AI-native — 39 MCP tools for Claude Code, Cursor, or any MCP-compatible client
  • Cross-platform — Native GUI with a live video wall on Windows, Linux & macOS, plus a headless server for CI/CD
  • Full interaction — Navigate, tap, type, press keys and shortcuts, drag, swipe, scroll, hover, handle dialogs, take screenshots
  • Real keyboard — Typing sends genuine, trusted keystrokes (the full keydown→input chain), so input masks, autocomplete and maxlength behave exactly as they do for a real user, and rich-text (contenteditable) editors work; gdd_press handles single keys and shortcuts like Enter, Tab, Escape and Ctrl+A
  • Physical keyboard layouts — Keystrokes carry the real code/keyCode of the emulated locale's keyboard: Russian ЙЦУКЕН puts «а» on the physical KeyF, French AZERTY and German QWERTZ remap their keys, dead-key accents and AltGr symbols work. The layout follows gdd_set_language automatically (US, RU, DE, FR)
  • Human-like input — humanize=true drives a continuous cursor path (cubic Bézier with easing and micro-jitter) that carries over between clicks, hovers and drags; taps fire a single device-appropriate input (touch or mouse), never both
  • Anti-bot stealth — opt-in --stealth masks the usual automation tells (navigator.webdriver, etc.); --stealth-max adds headless/datacenter evasions (coherent user-agent client hints, a plausible WebGL vendor, realistic device metrics) — on a headless container this halved CreepJS's headless score
  • Proxy support — Route every browser through an upstream proxy with GDD_PROXY (with optional auth)
  • Header rewriting — gdd_set_headers can strip X-Frame-Options/CSP frame-ancestors to load a site in an iframe, or add/replace response headers
  • Device emulation — Screen size, DPR, touch, user agent, geolocation, timezone, language
  • Network control — Simulate 4G, Fast 3G, Slow 3G, or offline per browser
  • Diagnostics — Console errors, network traffic, performance metrics, push notifications
  • Error beacon — Every tool response warns about JS errors across all browsers automatically
  • Docker-ready — Official image on GHCR (ghcr.io/cap-of-tea/gdd), listed on the MCP Registry
  • Self-updating — Built-in version check and one-command update

MCP Tools (39)

Player Management

ToolDescription
gdd_add_playersAdd N browser instances with optional device preset
gdd_remove_playerRemove a browser instance by player ID
gdd_list_windowsList all active browsers with current state

Navigation

ToolDescription
gdd_navigateNavigate to a URL
gdd_waitWait for a CSS selector to appear (with timeout)
gdd_reloadReload page (hard=true bypasses cache)
gdd_backNavigate back
gdd_forwardNavigate forward

Interaction

ToolDescription
gdd_tapTap element by CSS selector or coordinates; sends a single device-appropriate input (touch on touch devices, mouse on desktop), never both. humanize=true adds a continuous human-like cursor path
gdd_swipeSwipe gesture (up/down/left/right)
gdd_dragDrag an element to (x, y) or onto another element via real pointer events (drives dnd-kit & HTML5 drag-and-drop)
gdd_scrollScroll page or element
gdd_typeType text with real, trusted keystrokes (CDP dispatchKeyEvent — masks, autocomplete and maxlength behave as for a real user; works on contenteditable). Physical key codes follow the emulated layout (US/RU/DE/FR); humanize=true adds per-key jitter; paste=true inserts in one shot
gdd_pressPress a single key or shortcut (Enter, Tab, Escape, Arrow keys, F1–F12, or a character) with optional modifiers (Control/Alt/Shift/Meta); character keys follow the emulated layout
gdd_hoverHover over element. humanize=true adds a continuous human-like cursor path
gdd_selectSelect option from <select> dropdown
gdd_dialogHandle JS alert/confirm/prompt dialogs

Reading & Screenshots

ToolDescription
gdd_readRead text content of an element
gdd_read_allRead text from all matching elements
gdd_screenshotCapture JPEG screenshot at CSS pixel resolution

Emulation

ToolDescription
gdd_set_deviceSet device preset (22 devices: phones, tablets, desktops)
gdd_set_viewportSet custom viewport dimensions
gdd_set_locationSet geolocation, timezone, and locale
gdd_set_networkSet network conditions (4G, 3G, offline)
gdd_set_languageSet browser language
gdd_set_headersRewrite response headers — strip X-Frame-Options/CSP to allow framing

State & Diagnostics

ToolDescription
gdd_get_stateBrowser state: URL, title, device, auth status
gdd_get_consoleConsole output and uncaught exceptions
gdd_get_networkNetwork requests with timing and status
gdd_get_notificationsReceived push notifications
gdd_get_performancePerformance metrics (JS heap, DOM nodes, FPS)
gdd_clear_logsClear console and/or network logs

Auth & Execution

ToolDescription
gdd_quick_authAuto-register and login with generated credentials
gdd_execute_jsExecute JavaScript and return result

Browser Storage

ToolDescription
gdd_storageRead/write/clear localStorage/sessionStorage
gdd_cookiesRead or clear browser cookies

Help & Updates

ToolDescription
gdd_get_manualFull GDD manual for AI self-learning
gdd_check_updateCheck for newer versions
gdd_updateDownload and install update (restarts GDD)

Device Presets (22)

Phones (11)

DeviceResolutionScaleTouch
iPhone SE375 x 6672.0xYes
iPhone 14390 x 8443.0xYes
iPhone 15 Pro393 x 8523.0xYes
iPhone 15 Pro Max430 x 9323.0xYes
iPhone 16 Pro402 x 8743.0xYes
iPhone 16 Pro Max440 x 9563.0xYes
Pixel 9412 x 9152.625xYes
Pixel 9 Pro412 x 9152.625xYes
Galaxy S24360 x 7803.0xYes
Galaxy S24 Ultra412 x 9153.0xYes
OnePlus 12412 x 9153.5xYes

Tablets (6)

DeviceResolutionScale
iPad Mini744 x 11332.0x
iPad Air820 x 11802.0x
iPad Pro 11"834 x 11942.0x
iPad Pro 13"1024 x 13662.0x
Galaxy Tab S9800 x 12802.0x
Pixel Tablet800 x 12802.0x

Desktops (5)

DeviceResolutionScale
Laptop HD1366 x 7681.0x
Laptop HiDPI1440 x 9002.0x
Desktop 1080p1920 x 10801.0x
Desktop 1440p2560 x 14401.0x
Desktop 4K3840 x 21602.0x

Architecture

text
Client (AI agent / curl / script)         │ POST /mcp (JSON-RPC 2.0)         ▼    McpServer (:9700)    Streamable HTTP + SSE         │         ▼    McpToolRegistry (39 tools)    Player · Navigation · Interaction · Read    Emulation · Auth · State · Diagnostics         │         ▼    IPlayerManager    MainViewModel (WPF) / DesktopPlayerManager (Avalonia) / HeadlessPlayerManager         │         ▼    IBrowserEngine Instances    WebView2 (Win GUI)  |  Playwright (Desktop GUI + headed/headless server)    Each: own profile, CDP session, emulation

Editions

GDD ships as three apps over one shared core. The two GUIs differ only in the desktop toolkit (WebView2 on Windows, Avalonia on Linux/macOS); all three expose the same 39 MCP tools.

Windows GUIDesktop GUIServer
BinaryGDD.exeGDD.DesktopGDD.Headless (add --headless for no windows)
EngineWebView2Playwright (headed)Playwright (headed/headless)
UIWPF video wallAvalonia video wallnone — HTTP API only
MCP port970098009700
PlatformsWindowsLinux, macOSWindows, Linux, macOS

Tech Stack

LayerTechnology
Runtime.NET 8.0 (self-contained)
UI (Windows)WPF + CommunityToolkit.Mvvm
UI (Linux/macOS)Avalonia + CommunityToolkit.Mvvm
Browser (Windows GUI)Microsoft WebView2
Browser (Desktop GUI + Server)Microsoft Playwright
ProtocolMCP (Model Context Protocol)
Browser ControlChrome DevTools Protocol (CDP)
LoggingSerilog
Project Structure
text
BrowserXn.sln├── src/│   ├── GDD.Core/              ← Shared library (net8.0)│   │   ├── Abstractions/      ← IBrowserEngine, IPlayerManager, ...│   │   ├── Mcp/               ← MCP server, tools, protocol│   │   ├── Models/            ← Device, Location, Network presets│   │   ├── Services/          ← CDP, Emulation, Monitoring services│   │   └── Collections/       ← RingBuffer│   ├── BrowserXn/             ← Windows GUI (WPF + WebView2)│   │   ├── Engines/           ← WebView2ControlAdapter│   │   ├── ViewModels/        ← MVVM (MainViewModel : IPlayerManager)│   │   ├── Views/             ← XAML + VideoWallPanel│   │   └── ...│   ├── GDD.Desktop/           ← Linux/macOS GUI (Avalonia + Playwright)│   │   ├── Engines/           ← PlaywrightHeadedEngine (headed, parked off-screen)│   │   ├── ViewModels/        ← MainViewModel (DesktopPlayerManager)│   │   ├── Views/             ← AXAML + VideoWallPanel│   │   └── Scripts/           ← mcp-proxy.sh, setup-macos.sh, install-deps.sh│   └── GDD.Headless/          ← Cross-platform server (Playwright)│       ├── Engines/           ← PlaywrightEngine│       ├── Platform/          ← HeadlessPlayerManager│       └── Scripts/           ← mcp-proxy.sh, mcp-proxy.ps1└── .github/workflows/         ← CI/CD (8 build targets + auto-release)

Configuration

appsettings.json next to the executable:

json
{  "GDD": {    "FrontendUrl": "about:blank",    "BackendUrl": "http://localhost:8080/api/v1",    "BotToken": "",    "McpPort": 9700,    "DataFolderRoot": "",    "Stealth": false  }}
KeyDescriptionDefault
FrontendUrlDefault URL for new browsersabout:blank
BackendUrlBackend API for auth servicehttp://localhost:8080/api/v1
BotTokenTelegram bot token (for TG testing)—
McpPortMCP server port (auto-fallback +1..+9)9700
DataFolderRootBrowser profile storage root%LOCALAPPDATA%\GDD\Profiles (Win), ~/.local/share/GDD/Profiles (Linux/macOS)
HeadedVisible browser windowstrue (override with --headless)
StealthOpt-in anti-bot masking — launches Chromium with AutomationControlled disabled and hides the usual automation tells (navigator.webdriver, etc.). Playwright engines (GDD.Desktop, GDD Server) onlyfalse

Command-line flags

FlagDescription
--headedVisible browser windows (default)
--headlessNo UI — for CI/CD
--stealthEnable anti-bot masking (same as GDD_STEALTH=true)
--stealth-maxFull stealth — client-hints UA metadata, WebGL/device/timezone spoofing; implies --stealth (same as GDD_STEALTH_MAX=true)
--updateCheck for a newer version and install it if available
--versionPrint the version and exit
--helpShow usage and exit

Environment variables

Handy for Docker and CI, where an appsettings.json file is awkward:

VariableDescription
GDD_STEALTHtrue/1 to enable anti-bot masking (same as --stealth)
GDD_STEALTH_MAXtrue/1 for full stealth (same as --stealth-max)
GDD_PROXYUpstream proxy for every browser, e.g. http://host:3128 or socks5://host:1080 (Server / Playwright engines)
GDD_PROXY_USER / GDD_PROXY_PASSCredentials for an authenticated proxy
GDD_CHROME_CHANNELLaunch an installed Chrome build (e.g. chrome, chrome-beta) instead of bundled Chromium
GDD_PLAYER_IDLE_TIMEOUT_MINUTESHeadless server only. Auto-remove a player untouched for this many minutes, reclaiming its browser. Default 30; set 0 to disable. Prevents memory piling up when remote clients disconnect without removing their players
GDD_TRACEtrue/1 for verbose trace logging
Building from Source

Requires .NET 8 SDK.

bash
# Windows GUI (requires Windows 10/11 + WebView2)dotnet publish src/BrowserXn/BrowserXn.csproj -c Release -p:PublishSingleFile=true -o ./publish/win-gui
# Cross-platform headlessdotnet publish src/GDD.Headless/GDD.Headless.csproj -c Release -r linux-x64 --self-contained -o ./publish/linux-x64dotnet publish src/GDD.Headless/GDD.Headless.csproj -c Release -r osx-arm64 --self-contained -o ./publish/osx-arm64dotnet publish src/GDD.Headless/GDD.Headless.csproj -c Release -r win-x64 --self-contained -o ./publish/win-x64

Chromium installs automatically on first run.


Documentation

Privacy

Privacy Policy

GDD runs entirely on your local machine. No telemetry, no analytics, no data collection.

  • No data leaves your machine — all browser profiles, screenshots, logs, and cookies stay in local storage
  • Browser profiles — stored in %LOCALAPPDATA%\GDD\Profiles (Windows) or ~/.local/share/GDD/Profiles (Linux/macOS)
  • No third-party services — GDD does not contact any external APIs except GitHub Releases for optional update checks
  • Update checks — gdd_check_update makes a single read-only request to api.github.com. Opt out by not calling the tool, or set CheckForUpdates: false in appsettings.json
  • MCP server — listens on localhost only (default port 9700), never exposed to the network

Contact: [email protected]


License

imVS©, free for personal use.

Source Available — Non-Commercial. Free for personal use, education, and research. Commercial use requires a paid license. See LICENSE for full terms.

Commercial licensing: [email protected]

来源:README.md,提交 12a4e4f

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

1
  1. v1.5.0最新Sep 16, 2026

评分

已满足适用检查项的 40%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分

    请在仓库或注册中心条目中声明许可证。