ai:mcp:servery:playwright-mcp-alpine-arm64

Toto je starší verze dokumentu!


Playwright MCP v Dockeru na Alpine Linux / ARM64

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

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. Výchozí konfigurace počítá s tím, že si Playwright stáhne vlastní Chromium. V prostředí Docker na Alpine Linuxu s architekturou ARM64 to nefunguje, a je potřeba použít systémový chromium s wrapper skriptem.

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:

  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

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

Playwright předává executovatelný 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

Do ~/.claude.json do sekce mcpServers přidej:

"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"
  }
}

Klíčové parametry:

  • –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
  • –isolated — browser session je in-memory; cookies a stav se neuloží zpět na disk

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
}

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.

Funkčně jde o ekvivalentní náhradu. Co se nezměnilo: @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 změnilo: pouze to, která binárka Chromia se spustí:

  • Standardní setup (amd64, glibc): Playwright stáhne svůj bundled Chromium do ~/.cache/ms-playwright/
  • Tento setup (Alpine, ARM64, Docker): –executable-path přesměruje na wrapper → wrapper spustí systémový /usr/bin/chromium s –no-sandbox flagy

Drobný rozdíl: verze Chromia. Playwright si normálně tahá konkrétní pinnou verzi, 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.

  • ai/mcp/servery/playwright-mcp-alpine-arm64.1777973458.txt.gz
  • Poslední úprava: 05.05.2026 11:30
  • autor: Petr Nosek