Obsah

Playwright MCP v Dockeru na Alpine Linux / ARM64

Vytvořeno: 5.5.2026 | Aktualizováno: 05.05.2026 11:31

Playwright MCP (`@playwright/mcp`) je MCP server, který AI umožňuje ovládat webový prohlížeč — navigovat stránky, klikat, vyplňovat formuláře nebo pořizovat screenshoty.

Pouze pro Alpine Linux / ARM64: Na amd64 s běžnou distribucí (Ubuntu, Debian, Fedora) standardní konfigurace funguje bez úprav — Playwright stáhne bundled Chromium automaticky. Tento postup je potřeba jen při kombinaci Alpine Linux (musl libc) + ARM64 + Docker bez `SYS_ADMIN` capability.

Proč to nefunguje ve výchozí konfiguraci

Playwright při startu stáhne nebo spustí vlastní bundled Chromium. Na Alpine (musl libc) a ARM64 to selže ze dvou důvodů:

Řešení jsou dvě části:

  1. Použít systémový chromium instalovaný přes apk add chromium místo bundled
  2. Vytvořit wrapper skript, který injectuje –no-sandbox flagy — ty nelze předat přes parametr –executable-path Playwright MCP přímo

Příprava systémového Chromia

Na Alpine nainstaluj Chromium přes apk:

apk add chromium

Chromium se nainstaluje do /usr/bin/chromium (symlink na /usr/lib/chromium/chromium-launcher.sh). Ověř:

chromium --version
# Chromium 147.x.x Alpine Linux

Wrapper skript

Playwright předává spustitelný soubor přes –executable-path, ale sandbox flagy tak předat nelze. Wrapper skript pouští systémový chromium s potřebnými flagy a předává mu všechny ostatní argumenty od Playwright.

Vytvoř soubor /home/aiwork/tools/chromium-wrapper/chromium-mcp-wrapper.sh:

#!/bin/sh
exec /usr/bin/chromium --no-sandbox --disable-setuid-sandbox --disable-dev-shm-usage "$@"

Nastav spustitelná práva:

chmod +x /home/aiwork/tools/chromium-wrapper/chromium-mcp-wrapper.sh

Co jednotlivé flagy dělají:

Konfigurace pro Claude Code

Do ~/.claude.json do sekce mcpServers přidej (nebo uprav existující záznam playwright):

"playwright": {
  "type": "stdio",
  "command": "npx",
  "args": [
    "@playwright/mcp@latest",
    "--isolated",
    "--headless",
    "--browser",
    "chrome",
    "--executable-path",
    "/home/aiwork/tools/chromium-wrapper/chromium-mcp-wrapper.sh",
    "--storage-state=/home/aiwork/tools/playwright-storage/storage.json"
  ],
  "env": {
    "PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD": "1"
  }
}

Oproti standardní konfiguraci jsou klíčové tyto změny:

Konfigurace pro OpenCode

Do ~/.config/opencode/opencode.json do sekce mcp přidej nebo uprav existující záznam playwright:

"playwright": {
  "type": "local",
  "command": [
    "npx",
    "@playwright/mcp@latest",
    "--isolated",
    "--headless",
    "--browser",
    "chrome",
    "--executable-path",
    "/home/aiwork/tools/chromium-wrapper/chromium-mcp-wrapper.sh",
    "--storage-state=/home/aiwork/tools/playwright-storage/storage.json"
  ],
  "environment": {
    "PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD": "1"
  },
  "enabled": true
}

Oproti standardní konfiguraci jsou klíčové stejné změny jako u Claude Code — přidání –browser chrome, –executable-path na wrapper, –headless a env proměnná PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1.

Ověření

Funkčnost lze ověřit přímým MCP voláním před restartem — pošli inicializaci a browser_navigate přes stdin:

cd /tmp && (
  printf '{"jsonrpc":"2.0","method":"initialize","id":1,"params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1"}}}\n'
  printf '{"jsonrpc":"2.0","method":"tools/call","id":2,"params":{"name":"browser_navigate","arguments":{"url":"https://example.com"}}}\n'
  sleep 10
) | PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 npx @playwright/mcp@latest \
    --headless --browser chrome \
    --executable-path /home/aiwork/tools/chromium-wrapper/chromium-mcp-wrapper.sh \
    --isolated

Pokud druhá JSON odpověď obsahuje Page URL: https://example.com/ a Page Title: Example Domain, vše funguje.

Po ověření restartuj Claude Code (nebo zadej /exit a znovu spusť) nebo OpenCode, aby načetly nový MCP server. V Claude Code pak /mcp ukáže playwright v seznamu.

Vztah k standardní konfiguraci

Funkčně jde o ekvivalentní náhradu. @playwright/mcp@latest je pořád stejný MCP server, který řídí Chromium přes CDP (Chrome DevTools Protocol). Všechny tooly (browser_navigate, browser_click, browser_snapshot atd.) jsou identické.

Co se liší pouze na Alpine/ARM64:

Standardní (amd64, glibc) Tento setup (Alpine, ARM64, Docker)
Chromium Playwright stáhne bundled build do ~/.cache/ms-playwright/ Systémový /usr/bin/chromium z apk
Sandbox Funguje standardně Musí být vypnutý (–no-sandbox) přes wrapper
–executable-path Nepotřeba Povinný — směruje na wrapper
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD Nepotřeba Nutné nastavit na 1
–headless Volitelný Povinný (bez X serveru)

Drobný rozdíl: verze Chromia. Playwright normálně používá přesně pinnou verzi (standardně 131–137), tady se používá to, co je v Alpine repo (v3.23: verze 147). Pro běžné úkoly jako navigace, klikání, scraping nebo screenshoty je to bez praktického rozdílu.

Zdroje