Ghost-Browser
Headless browser automation with built-in fingerprint masking, tracker blocking, and per-session isolation.
Overview
Ghost-Browser is an MPP-signed MCP tool that provides headless browser automation with strong privacy defaults. It is designed for agent workflows that need to navigate the web without leaking fingerprinting data, without persistent state, and with automatic tracker blocking.
Each browser session is fully isolated. No cookies, storage, or fingerprinting data persist between sessions.
Installation
mpp install @q2x/ghost-browser
MCP Tools Provided
navigate
Navigate to a URL and return the page content.
Input:
{
"url": "https://example.com/page",
"waitFor": "networkidle",
"extractContent": true,
"blockTrackers": true
}
Output:
{
"url": "https://example.com/page",
"title": "Example Page",
"content": "Extracted text content...",
"html": "<html>...",
"statusCode": 200,
"trackersBlocked": 12,
"sessionId": "gs_abc123"
}
screenshot
Capture a screenshot of a page, optionally of a specific element.
Input:
{
"url": "https://example.com",
"selector": ".main-content",
"format": "webp",
"fullPage": false
}
Output: Base64-encoded image data with MIME type.
extractData
Navigate to a page and extract structured data using CSS selectors or ARIA roles.
Input:
{
"url": "https://example.com/products",
"schema": {
"products": {
"selector": ".product-card",
"fields": {
"name": ".product-name",
"price": ".product-price",
"sku": "[data-sku]"
}
}
}
}
Output:
{
"products": [
{ "name": "Widget A", "price": "£24.99", "sku": "WGT-001" },
{ "name": "Widget B", "price": "£39.99", "sku": "WGT-002" }
]
}
fillForm
Fill and optionally submit a web form.
Input:
{
"url": "https://example.com/contact",
"fields": {
"#name": "Test User",
"#email": "test@example.com",
"#message": "Automated test message"
},
"submitSelector": "button[type=submit]",
"dryRun": true
}
Set dryRun: true to fill without submitting — useful for verification.
Privacy Features
Fingerprint Masking
Ghost-Browser randomises:
- User-Agent string (from a realistic pool of browser/OS combinations)
- Canvas fingerprint
- WebGL renderer information
- Screen resolution and colour depth
- Timezone (configurable or randomised)
- Accept-Language headers
Tracker Blocking
Automatically blocks requests to known tracking domains using an EasyList-derived blocklist. Updated weekly. Blocking can be disabled per-navigation.
Session Isolation
Each call creates a fresh browser context with no shared state. Cookies, localStorage, IndexedDB, and service workers are cleared between sessions by default. Optional named sessions allow state sharing within a defined scope.
No Persistent Storage
Ghost-Browser maintains no disk state between invocations. The WASM sandbox writes only to an in-memory tmpfs, which is discarded on exit.
Capability Manifest
{
"capabilities": {
"filesystem": {
"write": ["/tmp/ghost-browser-session"]
},
"network": {
"outbound": ["*"]
},
"env": ["GHOST_BROWSER_PROXY"]
}
}
Network access is required for browser navigation. The GHOST_BROWSER_PROXY variable is optional — set it to route traffic through a proxy.
Rate Limits and Concurrency
- Maximum 5 concurrent browser sessions per process
- Navigation timeout: 30 seconds (configurable up to 120 seconds)
- Maximum page size: 50 MB
Changelog
v1.4.0 — extractData structured extraction, ARIA role selectors
v1.3.0 — Configurable session naming, improved fingerprint pool
v1.2.0 — fillForm method, dryRun mode
v1.1.0 — Tracker blocklist, weekly update mechanism
v1.0.0 — Initial release