====== Playwright MCP v Dockeru na Alpine Linux / ARM64 ======
//Vytvořeno: **5.5.2026** | Aktualizováno: **~~LASTMOD~~**//
[[https://github.com/microsoft/playwright-mcp|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ů:
* Bundled Chromium je zkompilovaný proti **glibc** — na Alpine (musl) nespustíš, bez ohledu na architekturu
* Docker kontejner bez capability ''SYS_ADMIN'' nemá povolený namespace sandbox — Chromium padá s ''Failed to move to new namespace: Operation not permitted''
Řešení jsou dvě části:
- Použít **systémový chromium** instalovaný přes ''apk add chromium'' místo bundled
- 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í:
* ''--no-sandbox'' — zakáže Chrome sandbox, který v Dockeru bez ''SYS_ADMIN'' capability padá
* ''--disable-setuid-sandbox'' — zakáže setuid sandbox (záloha k ''--no-sandbox'')
* ''--disable-dev-shm-usage'' — Chromium místo ''/dev/shm'' použije tmp; ''/dev/shm'' může být v Dockeru omezený
* ''"$@"'' — předá všechny argumenty od Playwright dál do Chromia
===== 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:
* ''--browser chrome'' — Playwright spustí browser jako Chrome kanál, ne bundled chromium
* ''--executable-path'' — přesměruje spouštění na wrapper (ne přímo na ''/usr/bin/chromium'', který by sandboxem padl)
* ''--headless'' — nutné v Dockeru bez X serveru
* ''PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1'' — pojistka, aby se Playwright ani nepokusil o download
===== 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 =====
* [[https://github.com/microsoft/playwright-mcp|playwright-mcp – GitHub]]
* [[https://playwright.dev/|Playwright – dokumentace]]