Playwright Stealth

com.pulsemcp由 pulsemcp.com 發布v0.2.3更新於 Oct 24, 2026

Browser automation using Playwright with optional stealth mode to bypass anti-bot protection.

發布方自己的服務:Stealth Communications

概覽

AI 產生的概覽

讓助理透過 Playwright 操作本機 Chromium 瀏覽器,可選隱匿模式,並支援截圖、錄影與代理。

可以做什麼
提供單一 browser_execute 工具,可對持續存在的 page 物件執行任意 Playwright JavaScript,另有截圖、讀取瀏覽器狀態、關閉工作階段,以及開始或停止 WebM 錄影的工具。儲存的截圖與錄影會以 MCP 資源形式提供。可選的隱匿模式會啟用 WebDriver 屬性遮蔽、User-Agent 正規化等反偵測措施。
適用情境
適合多步驟瀏覽器自動化:開啟頁面、填寫並送出表單、從動態網站擷取資料,以及用截圖或錄影做視覺驗證。隱匿模式與代理設定是針對會阻擋自動化或依 IP 限速的網站。
執行需求
透過 npx 從 npm 套件 playwright-stealth-mcp-server 在本機執行,需要 Node.js 與 Playwright 瀏覽器二進位檔。僅支援桌面端。可選環境變數用於設定隱匿模式、無頭模式、逾時、截圖與錄影儲存路徑、代理設定(PROXY_URL、PROXY_USERNAME、PROXY_PASSWORD、PROXY_BYPASS)、瀏覽器權限與 HTTPS 錯誤處理。未宣告驗證機制。
安裝前請注意
browser_execute 會在可存取 page 物件的 Node.js 環境中執行任意 JavaScript,因此只應接受可信任的輸入,不應暴露給不受信任的使用者或公開網路。代理憑證 PROXY_USERNAME 與 PROXY_PASSWORD 以環境變數提供。預設授予全部瀏覽器權限,並預設忽略 HTTPS 憑證錯誤。此伺服器可寫入設定的截圖與錄影目錄,也能送出表單或將資料傳送至第三方網站。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Playwright Stealth,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

Playwright Stealth MCP Server

A Model Context Protocol (MCP) server for browser automation using Playwright with optional stealth mode to bypass anti-bot protection.

Features

  • Simplified API: Single browser_execute tool that exposes the full Playwright API instead of many specialized tools
  • Stealth Mode: Optional anti-detection measures using playwright-extra and puppeteer-extra-plugin-stealth
  • Persistent Sessions: Browser session persists across tool calls for multi-step automation
  • Screenshot Support: Capture page screenshots for visual verification
  • Video Recording: Record browser interactions as WebM videos with explicit start/stop controls
  • Code Execution: Run arbitrary Playwright code with access to the page object
  • Full Permissions: All browser permissions (notifications, geolocation, camera, etc.) granted by default for testing web apps

Installation

bash
npx playwright-stealth-mcp-server

Or install globally:

bash
npm install -g playwright-stealth-mcp-server

Configuration

Claude Desktop Configuration

Add to your Claude Desktop config file:

Non-Stealth Mode (Standard Playwright):

json
{  "mcpServers": {    "playwright": {      "command": "npx",      "args": ["-y", "playwright-stealth-mcp-server"],      "env": {        "STEALTH_MODE": "false"      }    }  }}

Stealth Mode (Anti-bot bypass):

json
{  "mcpServers": {    "playwright-stealth": {      "command": "npx",      "args": ["-y", "playwright-stealth-mcp-server"],      "env": {        "STEALTH_MODE": "true"      }    }  }}

With Proxy (e.g., BrightData Residential Proxy):

json
{  "mcpServers": {    "playwright-proxy": {      "command": "npx",      "args": ["-y", "playwright-stealth-mcp-server"],      "env": {        "STEALTH_MODE": "true",        "PROXY_URL": "http://brd.superproxy.io:22225",        "PROXY_USERNAME": "brd-customer-XXXXX-zone-residential",        "PROXY_PASSWORD": "your-password"      }    }  }}

Environment Variables

VariableDescriptionDefault
STEALTH_MODEEnable stealth mode with anti-detection measuresfalse
STEALTH_USER_AGENTCustom User-Agent string (stealth mode only)Browser default
STEALTH_MASK_LINUXMask Linux in User-Agent as Windows; set to false to avoid fingerprint mismatchtrue
STEALTH_LOCALECustom locale for Accept-Language header (stealth mode only)en-US,en
HEADLESSRun browser in headless modetrue
TIMEOUTDefault timeout for Playwright actions (click, fill, etc.) in milliseconds30000
NAVIGATION_TIMEOUTDefault timeout for page navigation (goto, reload, etc.) in milliseconds60000
SCREENSHOT_STORAGE_PATHDirectory for storing screenshots/tmp/playwright-screenshots
VIDEO_STORAGE_PATHDirectory for storing video recordings/tmp/playwright-videos
PROXY_URLProxy server URL (e.g., http://proxy.example.com:8080)-
PROXY_USERNAMEProxy authentication username-
PROXY_PASSWORDProxy authentication password-
PROXY_BYPASSComma-separated list of hosts to bypass proxy-
BROWSER_PERMISSIONSComma-separated list of browser permissions to grant (see below)All permissions
IGNORE_HTTPS_ERRORSIgnore HTTPS certificate errors (set to false for stricter security)true

Available Tools

browser_execute

Execute Playwright code with access to the page object.

Parameters:

  • code (required): JavaScript code to execute. The page object is available in scope.
  • timeout (optional): Execution timeout in milliseconds.

Example:

javascript
await page.goto('https://example.com');const title = await page.title();return title;

browser_screenshot

Take a screenshot of the current page, a specific element, or a page region. Screenshots are saved to filesystem storage and can be accessed later via MCP resources.

Parameters:

  • fullPage (optional): Capture full scrollable page. Default: false
  • selector (optional): CSS selector of a specific element to screenshot (e.g., #main-content, .hero-banner, table.results)
  • clip (optional): Region of the page to screenshot as {x, y, width, height} in pixels
  • resultHandling (optional): How to handle the result:
    • saveAndReturn (default): Saves to storage AND returns inline base64 image
    • saveOnly: Saves to storage and returns only the resource URI (more efficient for large screenshots)

Note: fullPage, selector, and clip are mutually exclusive. Only one can be specified per call.

Returns:

  • With saveAndReturn: Inline base64 PNG image plus a resource_link with the file URI
  • With saveOnly: Only a resource_link with the file:// URI to the saved screenshot

browser_get_state

Get the current browser state including URL, title, and configuration.

browser_close

Close the browser session. A new browser will be launched on the next browser_execute call.

browser_start_recording

Start recording the browser session as a WebM video.

This tool recycles the browser context with video recording enabled. Session state (cookies, localStorage, sessionStorage) is automatically preserved across the context recycling.

If called while already recording, the current recording is automatically stopped and saved before starting a new one.

browser_stop_recording

Stop recording and save the video.

Returns a resource_link with the file:// URI to the saved video (WebM format). Session state is preserved — the browser navigates back to the previous URL automatically.

Returns an error if no recording is active.

MCP Resources

The server exposes saved screenshots and video recordings as MCP resources. Clients can use:

  • resources/list: List all saved screenshots and videos with their URIs and metadata
  • resources/read: Read a screenshot or video by its file:// URI

This allows clients to access previously captured screenshots and recordings without needing to take new ones.

Usage Examples

Navigate and Extract Data

javascript
// Navigate to a pageawait page.goto('https://news.ycombinator.com');
// Extract headlinesconst headlines = await page.$$eval('.titleline > a', (links) =>  links.slice(0, 5).map((a) => a.textContent));
return headlines;

Fill and Submit a Form

javascript
await page.goto('https://example.com/login');
// Fill credentialsawait page.fill('input[name="email"]', '[email protected]');await page.fill('input[name="password"]', 'password123');
// Submit formawait page.click('button[type="submit"]');
// Wait for navigationawait page.waitForNavigation();
return await page.title();

Handle Dynamic Content

javascript
await page.goto('https://spa-example.com');
// Wait for element to appearawait page.waitForSelector('.loaded-content');
// Click to load moreawait page.click('.load-more-button');
// Wait for new contentawait page.waitForSelector('.new-items');
const items = await page.$$eval('.item', (els) => els.map((el) => el.textContent));return items;

Security Considerations

Important: The browser_execute tool executes arbitrary JavaScript code. This design provides full Playwright API access but has security implications:

  • Only use this server with trusted input (e.g., from an LLM in a controlled environment)
  • The code runs in a Node.js context with access to the page object
  • Do not expose this server to untrusted users or public networks

This is intentional for maximum flexibility - it allows LLMs to leverage their existing Playwright knowledge. For production use, ensure proper access controls are in place.

When to Use Stealth Mode

Enable stealth mode (STEALTH_MODE=true) when:

  • Accessing sites with Cloudflare protection
  • Sites that block automation tools
  • Pages that detect headless browsers
  • OAuth flows that trigger CAPTCHA challenges

Stealth mode includes:

  • WebDriver property masking
  • Chrome automation flag removal
  • User-Agent normalization
  • Plugin/mime type spoofing
  • Navigator property patching

Fingerprint Configuration

When running in Docker/Linux environments, bot detection systems may identify a fingerprint mismatch between the User-Agent header and other browser signals like navigator.platform. Use these environment variables to configure consistent fingerprints:

Example: macOS Fingerprint (for Docker/Linux)

json
{  "mcpServers": {    "playwright-stealth": {      "command": "npx",      "args": ["-y", "playwright-stealth-mcp-server"],      "env": {        "STEALTH_MODE": "true",        "STEALTH_USER_AGENT": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",        "STEALTH_MASK_LINUX": "false"      }    }  }}

Why this matters:

  • By default, stealth mode masks Linux as Windows in the User-Agent header only
  • However, navigator.platform still reports the actual OS (e.g., "Linux x86_64")
  • This mismatch between User-Agent and platform triggers bot detection
  • Setting STEALTH_MASK_LINUX=false disables this masking, allowing the real platform to show
  • Combined with a custom STEALTH_USER_AGENT, you can present a consistent fingerprint

When to Use Proxy

Configure proxy settings when:

  • Scraping sites that rate-limit by IP address
  • Accessing geo-restricted content
  • Avoiding IP-based blocks or bans
  • Rotating IPs for large-scale data collection

The server supports HTTP/HTTPS proxies with optional authentication, making it compatible with:

  • BrightData (Residential, Datacenter, ISP proxies)
  • Oxylabs, Smartproxy, and other residential proxy providers
  • Self-hosted proxy servers
  • Corporate HTTP proxies

Note: When proxy is configured, the server performs a health check on startup to verify the proxy connection works. If the health check fails, the server will exit with an error.

HTTPS Certificate Errors

By default, the server ignores HTTPS certificate errors (IGNORE_HTTPS_ERRORS=true). This is convenient for common automation scenarios:

  • Docker environments where SSL certificates may not match hostnames
  • Corporate networks with MITM proxies that re-sign certificates
  • Self-signed certificates in development or staging environments
  • Residential proxies that perform HTTPS inspection

To enable strict certificate validation, set IGNORE_HTTPS_ERRORS=false:

json
{  "mcpServers": {    "playwright": {      "command": "npx",      "args": ["-y", "playwright-stealth-mcp-server"],      "env": {        "IGNORE_HTTPS_ERRORS": "false"      }    }  }}

Security Note: For production environments where certificate validation is important, set IGNORE_HTTPS_ERRORS=false to protect against man-in-the-middle attacks.

Browser Permissions

By default, the server grants all browser permissions to the browser context. This enables testing of features that require permissions such as:

  • Web Push Notifications (notifications)
  • Geolocation (geolocation)
  • Camera/Microphone (camera, microphone)
  • Clipboard (clipboard-read, clipboard-write)
  • MIDI devices (midi, midi-sysex)
  • Sensors (accelerometer, gyroscope, magnetometer, ambient-light-sensor)
  • Other (background-sync, local-fonts, payment-handler, storage-access)

Constraining Permissions

If you need to restrict permissions (e.g., for security testing or to simulate a user who denies permissions), use the BROWSER_PERMISSIONS environment variable:

json
{  "mcpServers": {    "playwright": {      "command": "npx",      "args": ["-y", "playwright-stealth-mcp-server"],      "env": {        "BROWSER_PERMISSIONS": "notifications,clipboard-read,clipboard-write"      }    }  }}

This will grant only the specified permissions. All other permission requests will be denied.

Note: Invalid permission names are silently ignored with a warning in the server logs. If a permission is not recognized, it will be skipped.

Browser Compatibility: Permission support varies by browser. This server uses Chromium by default, where all listed permissions are supported. If using Firefox or WebKit, some permissions may not work.

Testing Web Push Notifications

With the default configuration (all permissions granted), you can test web push notifications:

javascript
// Check if notifications are supported and grantedconst permission = await page.evaluate(() => Notification.permission);console.log('Notification permission:', permission); // Should be "granted"
// Request notification permission (will auto-grant)await page.evaluate(async () => {  const result = await Notification.requestPermission();  console.log('Permission result:', result);});
// Create a test notificationawait page.evaluate(() => {  new Notification('Test Notification', {    body: 'This is a test notification from Playwright',  });});

Development

bash
# Install dependenciesnpm run install-all
# Build the projectnpm run build
# Run in development modenpm run dev
# Run testsnpm test
# Run integration testsnpm run test:integration
# Run manual tests (requires Playwright browsers)npm run test:manual:setupnpm run test:manual

Architecture

This MCP server uses a simplified design inspired by playwriter:

  • Single browser_execute tool instead of many specialized tools
  • Reduces context window usage for LLMs
  • Leverages existing Playwright knowledge in LLM training data
  • Full API access without artificial constraints

License

MIT

來源:experimental/playwright-stealth/README.md,提交 0ed34de

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v0.2.3最新Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

其他 Stealth 整合