Playwright MCP
offiziellOffizieller Playwright MCP-Server für Browserautomatisierung, Seiteninspektion, Screenshots und Webinteraktion von Claude, Cursor und anderen KI-Agenten.
Was kann man mit Playwright MCP machen?
- Browser-Automatisierung über Accessibility-Snapshots — Bitten Sie Ihre KI, Seiten zu navigieren und mit Elementen zu interagieren, indem sie strukturierte Accessibility-Daten verwendet – keine Screenshots erforderlich.
- Persistente Browsing-Sitzungen — Behalten Sie eingeloggte Zustände über Gespräche hinweg mit einem persistenten Profil bei, oder nutzen Sie isolierte Sitzungen für saubere Tests.
- Multi-Browser-Unterstützung — Automatisieren Sie Aufgaben in Chromium, Firefox oder WebKit, mit Optionen für Headless-Modus und Geräteemulation.
- Benutzerdefinierte Browser-Konfiguration — Konfigurieren Sie Viewport-Größe, User-Agent, Proxy-Einstellungen und Berechtigungen, um Ihren Testanforderungen zu entsprechen.
- Browser-Erweiterungsintegration — Verbinden Sie sich mit Ihrem bestehenden Chrome- oder Edge-Browser, um aktuelle Tabs und eingeloggte Sitzungen zu nutzen.
Dokumentation
Playwright MCP
Ein Model Context Protocol (MCP)-Server, der Browser-Automatisierungsfunktionen mit Playwright bereitstellt. Dieser Server ermöglicht es LLMs, über strukturierte Accessibility-Snapshots mit Webseiten zu interagieren, wodurch Screenshots oder visuell abgestimmte Modelle nicht mehr erforderlich sind.
Playwright MCP vs. Playwright CLI
Dieses Paket bietet eine MCP-Schnittstelle zu Playwright. Wenn Sie einen Coding-Agenten verwenden, profitieren Sie möglicherweise eher von der CLI+SKILLS-Variante.
-
CLI: Moderne Coding-Agenten bevorzugen zunehmend CLI-basierte Workflows, die als SKILLs bereitgestellt werden, gegenüber MCP, da CLI-Aufrufe token-effizienter sind: Sie vermeiden das Laden großer Tool-Schemas und ausführlicher Accessibility-Bäume in den Modellkontext und ermöglichen es Agenten, über präzise, zweckgerichtete Befehle zu handeln. Dies macht CLI + SKILLs besser geeignet für hochdurchsatzfähige Coding-Agenten, die Browser-Automatisierung mit großen Codebasen, Tests und Reasoning innerhalb begrenzter Kontextfenster in Einklang bringen müssen.
Erfahren Sie mehr über Playwright CLI mit SKILLS. -
MCP: MCP bleibt relevant für spezialisierte agentische Schleifen, die von persistentem Zustand, reichhaltiger Introspection und iterativem Reasoning über die Seitenstruktur profitieren, wie z. B. explorative Automatisierung, selbstheilende Tests oder langlaufende autonome Workflows, bei denen die Aufrechterhaltung eines kontinuierlichen Browserkontexts die Token-Kostenbedenken überwiegt.
Hauptfunktionen
- Schnell und leichtgewichtig. Verwendet Playwrights Accessibility-Baum, nicht pixelbasierte Eingaben.
- LLM-freundlich. Keine Vision-Modelle erforderlich, arbeitet ausschließlich mit strukturierten Daten.
- Deterministische Tool-Anwendung. Vermeidet Mehrdeutigkeiten, die bei screenshot-basierten Ansätzen üblich sind.
Anforderungen
- Node.js 18 oder neuer
- VS Code, Cursor, Windsurf, Claude Desktop, Goose, Grok, Junie oder ein anderer MCP-Client
Erste Schritte
Installieren Sie zunächst den Playwright MCP-Server mit Ihrem Client.
Standardkonfiguration funktioniert in den meisten Tools:
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest"
]
}
}
}
Amp
Fügen Sie ihn über den Bildschirm „Amp VS Code Extension-Einstellungen“ oder durch Aktualisieren Ihrer settings.json-Datei hinzu:
"amp.mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest"
]
}
}
Amp CLI-Setup:
Fügen Sie ihn über den folgenden Befehl amp mcp add hinzu:
amp mcp add playwright -- npx @playwright/mcp@latest
Antigravity
Fügen Sie ihn über die Antigravity-Einstellungen oder durch Aktualisieren Ihrer Konfigurationsdatei hinzu:
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest"
]
}
}
}
Claude Code
Verwenden Sie die Claude Code CLI, um den Playwright MCP-Server hinzuzufügen:
claude mcp add playwright npx @playwright/mcp@latest
Claude Desktop
Befolgen Sie die MCP-Installations-Anleitung und verwenden Sie die obige Standardkonfiguration.
Cline
Befolgen Sie die Anweisungen im Abschnitt Konfigurieren von MCP-Servern
Beispiel: Lokales Setup
Fügen Sie Folgendes zu Ihrer cline_mcp_settings.json-Datei hinzu:
{
"mcpServers": {
"playwright": {
"type": "stdio",
"command": "npx",
"timeout": 30,
"args": [
"-y",
"@playwright/mcp@latest"
],
"disabled": false
}
}
}
Codex
Verwenden Sie die Codex CLI, um den Playwright MCP-Server hinzuzufügen:
codex mcp add playwright npx "@playwright/mcp@latest"
Alternativ können Sie die Konfigurationsdatei ~/.codex/config.toml erstellen oder bearbeiten und Folgendes hinzufügen:
[mcp_servers.playwright]
command = "npx"
args = ["@playwright/mcp@latest"]
Weitere Informationen finden Sie in der Codex MCP-Dokumentation.
Copilot
Verwenden Sie die Copilot CLI, um den Playwright MCP-Server interaktiv hinzuzufügen:
/mcp add
Alternativ können Sie die Konfigurationsdatei ~/.copilot/mcp-config.json erstellen oder bearbeiten und Folgendes hinzufügen:
{
"mcpServers": {
"playwright": {
"type": "local",
"command": "npx",
"tools": [
"*"
],
"args": [
"@playwright/mcp@latest"
]
}
}
}
Weitere Informationen finden Sie in der Copilot CLI-Dokumentation.
Cursor
Klicken Sie auf die Schaltfläche, um zu installieren:
Oder installieren Sie manuell:
Gehen Sie zu Cursor Settings -> MCP -> Add new MCP Server. Benennen Sie es nach Ihren Wünschen, verwenden Sie den Typ command mit dem Befehl npx @playwright/mcp@latest. Sie können die Konfiguration auch überprüfen oder Argumente wie Befehle hinzufügen, indem Sie auf Edit klicken.
Factory
Verwenden Sie die Factory CLI, um den Playwright MCP-Server hinzuzufügen:
droid mcp add playwright "npx @playwright/mcp@latest"
Alternativ geben Sie /mcp im Factory-Droid ein, um eine interaktive Benutzeroberfläche zur Verwaltung von MCP-Servern zu öffnen.
Weitere Informationen finden Sie in der Factory MCP-Dokumentation.
Gemini CLI
Befolgen Sie die MCP-Installations-Anleitung und verwenden Sie die obige Standardkonfiguration.
Goose
Klicken Sie auf die Schaltfläche, um zu installieren:
Oder installieren Sie manuell:
Gehen Sie zu Advanced settings -> Extensions -> Add custom extension. Benennen Sie es nach Ihren Wünschen, verwenden Sie den Typ STDIO und setzen Sie command auf npx @playwright/mcp. Klicken Sie auf „Add Extension“.
Grok
Verwenden Sie die Grok CLI, um den Playwright MCP-Server hinzuzufügen:
grok mcp add playwright -- npx @playwright/mcp@latest
Alternativ können Sie die Konfigurationsdatei ~/.grok/config.toml erstellen oder bearbeiten und Folgendes hinzufügen:
[mcp_servers.playwright]
command = "npx"
args = ["@playwright/mcp@latest"]
Weitere Informationen finden Sie in der Grok MCP-Dokumentation.
Junie
So fügen Sie den Playwright MCP-Server in der Junie CLI hinzu:
- Geben Sie
/mcpein - Drücken Sie
Ctrl+A, um einen neuen MCP-Server hinzuzufügen - Wählen Sie Playwright aus der Liste
Alternativ fügen Sie Folgendes zu .junie/mcp/mcp.json hinzu:
{
"mcpServers": {
"Playwright": {
"command": "npx",
"args": [
"-y",
"@playwright/mcp@latest"
]
}
}
}
Weitere Informationen finden Sie in der Junie MCP-Konfigurationsdokumentation.
Kiro
Befolgen Sie die Dokumentation zu MCP-Servern. Zum Beispiel in .kiro/settings/mcp.json:
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest"
]
}
}
}
LM Studio
Klicken Sie auf die Schaltfläche, um zu installieren:
Oder installieren Sie manuell:
Gehen Sie in der rechten Seitenleiste zu Program -> Install -> Edit mcp.json. Verwenden Sie die obige Standardkonfiguration.
opencode
Befolgen Sie die Dokumentation zu MCP-Servern. Zum Beispiel in ~/.config/opencode/opencode.json:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"playwright": {
"type": "local",
"command": [
"npx",
"@playwright/mcp@latest"
],
"enabled": true
}
}
}
Qodo Gen
Öffnen Sie das Qodo Gen-Chat-Panel in VSCode oder IntelliJ → Connect more tools → + Add new MCP → Fügen Sie die obige Standardkonfiguration ein.
Klicken Sie auf Save.
VS Code
Klicken Sie auf die Schaltfläche, um zu installieren:
Oder installieren Sie manuell:
Befolgen Sie die MCP-Installations-Anleitung und verwenden Sie die obige Standardkonfiguration. Sie können den Playwright MCP-Server auch über die VS Code CLI installieren:
# For VS Code
code --add-mcp '{"name":"playwright","command":"npx","args":["@playwright/mcp@latest"]}'
Nach der Installation steht der Playwright MCP-Server für die Verwendung mit Ihrem GitHub Copilot-Agenten in VS Code zur Verfügung.
Warp
Gehen Sie zu Settings -> AI -> Manage MCP Servers -> + Add, um einen MCP-Server hinzuzufügen. Verwenden Sie die obige Standardkonfiguration.
Alternativ verwenden Sie den Slash-Befehl /add-mcp in der Warp-Eingabeaufforderung und fügen die obige Standardkonfiguration ein:
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest"
]
}
}
}
Windsurf
Befolgen Sie die Windsurf MCP-Dokumentation. Verwenden Sie die obige Standardkonfiguration.
Konfiguration
Der Playwright MCP-Server unterstützt die folgenden Argumente. Sie können in der obigen JSON-Konfiguration als Teil der "args"-Liste angegeben werden:
| Option | Beschreibung |
|---|---|
| --allowed-hosts <hosts...> | Kommagetrennte Liste von Hosts, von denen dieser Server ausliefern darf. Standardmäßig der Host, an den der Server gebunden ist. Verwenden Sie '*' um die Host-Prüfung zu deaktivieren. env PLAYWRIGHT_MCP_ALLOWED_HOSTS |
| --allowed-origins | Semikolongetrennte Liste von VERTRAUENSWÜRDIGEN Origins, denen der Browser Anfragen erlauben darf. Standardmäßig sind alle erlaubt. Wichtig: dient nicht als Sicherheitsgrenze und beeinflusst keine Weiterleitungen. env PLAYWRIGHT_MCP_ALLOWED_ORIGINS |
| --allow-unrestricted-file-access | Zugriff auf Dateien außerhalb der Workspace-Roots erlauben. Erlaubt auch uneingeschränkten Zugriff auf file://-URLs. Standardmäßig ist der Dateisystemzugriff nur auf Workspace-Root-Verzeichnisse (oder cwd, wenn keine Roots konfiguriert sind) beschränkt, und die Navigation zu file://-URLs ist blockiert. env PLAYWRIGHT_MCP_ALLOW_UNRESTRICTED_FILE_ACCESS |
| --blocked-origins | Semikolongetrennte Liste von Origins, die der Browser nicht anfragen darf. Die Blocklist wird vor der Allowlist ausgewertet. Wenn ohne Allowlist verwendet, werden Anfragen, die nicht der Blocklist entsprechen, weiterhin erlaubt. Wichtig: dient nicht als Sicherheitsgrenze und beeinflusst keine Weiterleitungen. env PLAYWRIGHT_MCP_BLOCKED_ORIGINS |
| --block-service-workers | Service Worker blockieren env PLAYWRIGHT_MCP_BLOCK_SERVICE_WORKERS |
| --browser | Browser- oder Chrome-Kanal, der verwendet werden soll, mögliche Werte: chrome, firefox, webkit, msedge. env PLAYWRIGHT_MCP_BROWSER |
| --caps | Kommagetrennte Liste zusätzlicher zu aktivierender Fähigkeiten, mögliche Werte: vision, pdf, devtools. env PLAYWRIGHT_MCP_CAPS |
| --cdp-endpoint | CDP-Endpunkt, mit dem eine Verbindung hergestellt werden soll. env PLAYWRIGHT_MCP_CDP_ENDPOINT |
| --cdp-header <headers...> | CDP-Header, die mit der Verbindungsanfrage gesendet werden sollen, mehrere können angegeben werden. env PLAYWRIGHT_MCP_CDP_HEADERS |
| --cdp-timeout | Timeout in Millisekunden für die Verbindung zum CDP-Endpunkt, Standard 30000ms env PLAYWRIGHT_MCP_CDP_TIMEOUT |
| --codegen | Sprache für die Codegenerierung angeben, mögliche Werte: "typescript", "python", "java", "csharp", "none". Standard ist "typescript". env PLAYWRIGHT_MCP_CODEGEN |
| --config | Pfad zur Konfigurationsdatei. env PLAYWRIGHT_MCP_CONFIG |
| --console-level | Ebene der zurückzugebenden Konsolenmeldungen: "error", "warning", "info", "debug". Jede Ebene enthält die Meldungen der schwerwiegenderen Ebenen. env PLAYWRIGHT_MCP_CONSOLE_LEVEL |
| --device | Zu emulierendes Gerät, zum Beispiel: "iPhone 15" env PLAYWRIGHT_MCP_DEVICE |
| --mobile | Ein generisches mobiles Gerät emulieren (Pixel 10 für Chromium, iPhone 17 für WebKit). Mobile Seiten sind normalerweise leichter, was Tokens spart. Kann nicht mit --device kombiniert werden. env PLAYWRIGHT_MCP_MOBILE |
| --executable-path | Pfad zur Browser-Ausführungsdatei. env PLAYWRIGHT_MCP_EXECUTABLE_PATH |
| --extension | Verbindung zu einer laufenden Browser-Instanz herstellen (nur Edge/Chrome). Erfordert die Installation der "Playwright Extension". env PLAYWRIGHT_MCP_EXTENSION |
| --endpoint | Gebundener Browser-Endpunkt, mit dem eine Verbindung hergestellt werden soll. env PLAYWRIGHT_MCP_ENDPOINT |
| --file-paths | Wie Dateipfade in Tool-Ergebnissen dargestellt werden, "relative" zum Workspace-Root oder "absolute". Standard ist "relative". env PLAYWRIGHT_MCP_FILE_PATHS |
| --grant-permissions <permissions...> | Liste der Berechtigungen, die dem Browser-Kontext gewährt werden sollen, zum Beispiel "geolocation", "clipboard-read", "clipboard-write". env PLAYWRIGHT_MCP_GRANT_PERMISSIONS |
| --headless | Browser im Headless-Modus ausführen, standardmäßig mit Oberfläche env PLAYWRIGHT_MCP_HEADLESS |
| --host | Host, an den der Server gebunden werden soll. Standard ist localhost. Verwenden Sie 0.0.0.0, um an alle Schnittstellen zu binden. env PLAYWRIGHT_MCP_HOST |
| --idle-timeout | Browser nach dieser Anzahl Millisekunden ohne abgeschlossenen Tool-Aufruf schließen, der nächste Tool-Aufruf startet ihn neu. Standard ist eine Stunde für Headless-Browser, nie für Browser mit Oberfläche, 0 deaktiviert. env PLAYWRIGHT_MCP_IDLE_TIMEOUT |
| --ignore-https-errors | HTTPS-Fehler ignorieren env PLAYWRIGHT_MCP_IGNORE_HTTPS_ERRORS |
| --init-page <path...> | Pfad zur TypeScript-Datei, die auf dem Playwright-Seitenobjekt ausgewertet werden soll env PLAYWRIGHT_MCP_INIT_PAGE |
| --init-script <path...> | Pfad zur JavaScript-Datei, die als Initialisierungsskript hinzugefügt werden soll. Das Skript wird auf jeder Seite vor allen Skripten der Seite ausgewertet. Kann mehrfach angegeben werden. env PLAYWRIGHT_MCP_INIT_SCRIPT |
| --isolated | Browser-Profil im Speicher halten, nicht auf der Festplatte speichern. env PLAYWRIGHT_MCP_ISOLATED |
| --image-responses | Ob Bildantworten an den Client gesendet werden sollen. Kann "allow", "omit" oder "only" sein. Mit "only" besteht eine Antwort, die ein Bild enthält, nur aus den Bildteilen, ohne den Textteil. Standard ist "allow". env PLAYWRIGHT_MCP_IMAGE_RESPONSES |
| --no-sandbox | Sandbox für alle Prozessarten deaktivieren, die normalerweise sandboxiert sind. env PLAYWRIGHT_MCP_NO_SANDBOX |
| --no-webmcp | Tools nicht sammeln oder bereitstellen, die eine Seite über die WebMCP-API registriert. env PLAYWRIGHT_MCP_WEBMCP=false |
| --output-dir | Pfad zum Verzeichnis für automatisch benannte Ausgabedateien, zum Beispiel ein Screenshot ohne expliziten Dateinamen. Dateien mit explizitem Namen werden stattdessen relativ zum Workspace-Root aufgelöst und sind von dieser Option nicht betroffen. env PLAYWRIGHT_MCP_OUTPUT_DIR |
| --output-max-size | Schwellenwert für das Entfernen alter Ausgabedateien, in Bytes. env PLAYWRIGHT_MCP_OUTPUT_MAX_SIZE |
| --port | Port, auf dem für SSE-Transport gelauscht werden soll. env PLAYWRIGHT_MCP_PORT |
| --profile-dir-name | Name des Profilverzeichnisses im Benutzerdatenverzeichnis, mit dem mit --extension verbunden werden soll, zum Beispiel "Profile 1". Standard ist das zuletzt verwendete Profil, in dem die Erweiterung installiert ist. env PLAYWRIGHT_MCP_PROFILE_DIR_NAME |
| --proxy-bypass | Kommagetrennte Domains, die den Proxy umgehen sollen, zum Beispiel ".com,chromium.org,.domain.com" env PLAYWRIGHT_MCP_PROXY_BYPASS |
| --proxy-server | Proxy-Server angeben, zum Beispiel "http://myproxy:3128" oder "socks5://myproxy:8080" env PLAYWRIGHT_MCP_PROXY_SERVER |
| --sandbox | Sandbox für alle Prozessarten aktivieren, die normalerweise nicht sandboxiert sind. env PLAYWRIGHT_MCP_SANDBOX |
| --save-session | Ob die Playwright-MCP-Sitzung im Ausgabeverzeichnis gespeichert werden soll. env PLAYWRIGHT_MCP_SAVE_SESSION |
| --secrets | Pfad zu einer Datei mit Geheimnissen im dotenv-Format env PLAYWRIGHT_MCP_SECRETS_FILE |
| --shared-browser-context | Denselben Browser-Kontext zwischen allen verbundenen HTTP-Clients wiederverwenden. env PLAYWRIGHT_MCP_SHARED_BROWSER_CONTEXT |
| --snapshot-boxes | Begrenzungsrahmen jedes Elements als [box=x,y,width,height] in Snapshots einfügen. Koordinaten sind viewport-relativ, in CSS-Pixeln. env PLAYWRIGHT_MCP_SNAPSHOT_BOXES |
| --snapshot-mode | Beim Erstellen von Snapshots für Antworten den zu verwendenden Modus angeben. Kann "full" oder "none" sein. Standard ist "full". env PLAYWRIGHT_MCP_SNAPSHOT_MODE |
| --storage-state | Pfad zur Speicherzustandsdatei für isolierte Sitzungen. env PLAYWRIGHT_MCP_STORAGE_STATE |
| --test-id-attribute | Attribut für Test-IDs angeben, Standard ist "data-testid" env PLAYWRIGHT_MCP_TEST_ID_ATTRIBUTE |
| --timeout-action | Aktions-Timeout in Millisekunden angeben, Standard 5000ms env PLAYWRIGHT_MCP_TIMEOUT_ACTION |
| --timeout-navigation | Navigations-Timeout in Millisekunden angeben, Standard 60000ms env PLAYWRIGHT_MCP_TIMEOUT_NAVIGATION |
| --timeout-settle | Wie lange nach jeder Aktion auf das Abschließen ausgelöster Arbeit gewartet werden soll, in Millisekunden, Standard 500ms env PLAYWRIGHT_MCP_TIMEOUT_SETTLE |
| --user-agent | User-Agent-String angeben env PLAYWRIGHT_MCP_USER_AGENT |
| --user-data-dir | Pfad zum Benutzerdatenverzeichnis. Wenn nicht angegeben, wird ein temporäres Verzeichnis erstellt. env PLAYWRIGHT_MCP_USER_DATA_DIR |
| --viewport-size | Browser-Viewport-Größe in Pixeln angeben, zum Beispiel "1280x720" env PLAYWRIGHT_MCP_VIEWPORT_SIZE |
Benutzerprofil
Sie können Playwright MCP mit einem persistenten Profil wie einen normalen Browser ausführen (Standard), in isolierten Kontexten für Testsitzungen, oder über die Browser-Erweiterung eine Verbindung zu Ihrem vorhandenen Browser herstellen.
Persistentes Profil
Alle angemeldeten Informationen werden im persistenten Profil gespeichert. Sie können es zwischen Sitzungen löschen, wenn Sie den Offline-Zustand löschen möchten.
Das persistente Profil befindet sich an den folgenden Speicherorten, und Sie können es mit dem Argument --user-data-dir überschreiben.
# Windows
%USERPROFILE%\AppData\Local\ms-playwright\mcp-{channel}-{workspace-hash}
# macOS
- ~/Library/Caches/ms-playwright/mcp-{channel}-{workspace-hash}
# Linux
- ~/.cache/ms-playwright/mcp-{channel}-{workspace-hash}
{workspace-hash} wird aus dem Workspace-Root des MCP-Clients abgeleitet, sodass verschiedene Projekte automatisch separate Profile erhalten.
[!IMPORTANT] Ein persistentes Profil kann jeweils nur von einer Browser-Instanz verwendet werden, daher kollidieren gleichzeitige MCP-Clients, die denselben Workspace teilen. Um mehrere Clients parallel auszuführen, starten Sie jeden zusätzlichen Client mit
--isolatedoder weisen Sie ihn auf ein separates--user-data-dir.
Isoliert
Im isolierten Modus wird jede Sitzung im isolierten Profil gestartet. Jedes Mal, wenn Sie MCP bitten, den Browser zu schließen,
wird die Sitzung geschlossen und der gesamte Speicherzustand dieser Sitzung geht verloren. Sie können den anfänglichen Speicherzustand
über die contextOptions der Konfiguration oder über das Argument --storage-state bereitstellen. Erfahren Sie mehr über den Speicherzustand hier.
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest",
"--isolated",
"--storage-state={path/to/storage.json}"
]
}
}
}
Browser-Erweiterung
Die Playwright-MCP-Chrome-Erweiterung ermöglicht es Ihnen, eine Verbindung zu vorhandenen Browser-Tabs herzustellen und Ihre angemeldeten Sitzungen und den Browserzustand zu nutzen. Siehe microsoft/playwright › packages/extension für Installations- und Einrichtungsanweisungen.
Anfangszustand
Es gibt mehrere Möglichkeiten, den Anfangszustand für den Browser-Kontext oder eine Seite bereitzustellen.
Für den Speicherzustand können Sie entweder:
- Mit einem Benutzerdatenverzeichnis über das Argument
--user-data-dirstarten. Dadurch werden alle Browserdaten zwischen den Sitzungen gespeichert. - Mit einer Speicherzustandsdatei über das Argument
--storage-statestarten. Dadurch werden Cookies und lokaler Speicher aus der Datei in einen isolierten Browser-Kontext geladen.
Für den Seitenzustand können Sie verwenden:
--init-page, um auf eine TypeScript-Datei zu verweisen, die auf dem Playwright-Seitenobjekt ausgewertet wird. Dadurch können Sie beliebigen Code ausführen, um die Seite einzurichten.
// init-page.ts
export default async ({ page }) => {
await page.context().grantPermissions(['geolocation']);
await page.context().setGeolocation({ latitude: 37.7749, longitude: -122.4194 });
await page.setViewportSize({ width: 1280, height: 720 });
};
--init-script, um auf eine JavaScript-Datei zu verweisen, die als Initialisierungsskript hinzugefügt wird. Das Skript wird auf jeder Seite vor allen Skripten der Seite ausgewertet. Dies ist nützlich, um Browser-APIs zu überschreiben oder die Umgebung einzurichten.
// init-script.js
window.isPlaywrightMCP = true;
Konfigurationsdatei
Der Playwright-MCP-Server kann mit einer JSON-Konfigurationsdatei konfiguriert werden. Sie können die Konfigurationsdatei
über die Befehlszeilenoption --config angeben:
npx @playwright/mcp@latest --config path/to/config.json
Schema der Konfigurationsdatei
{
/**
* The browser to use.
*/
browser?: {
/**
* The type of browser to use.
*/
browserName?: 'chromium' | 'firefox' | 'webkit';
/**
* Keep the browser profile in memory, do not save it to disk.
*/
isolated?: boolean;
/**
* Path to a user data directory for browser profile persistence.
* Temporary directory is created by default.
*/
userDataDir?: string;
/**
* Launch options passed to
* @see https://playwright.dev/docs/api/class-browsertype#browser-type-launch-persistent-context
*
* This is useful for settings options like `channel`, `headless`, `executablePath`, etc.
*/
launchOptions?: playwright.LaunchOptions;
/**
* Context options for the browser context.
*
* This is useful for settings options like `viewport`.
*/
contextOptions?: playwright.BrowserContextOptions;
/**
* Chrome DevTools Protocol endpoint to connect to an existing browser instance in case of Chromium family browsers.
*/
cdpEndpoint?: string;
/**
* CDP headers to send with the connect request.
*/
cdpHeaders?: Record<string, string>;
/**
* Timeout in milliseconds for connecting to CDP endpoint. Defaults to 30000 (30 seconds). Pass 0 to disable timeout.
*/
cdpTimeout?: number;
/**
* Remote endpoint to connect to an existing Playwright server. May be a
* WebSocket URL string, or a [ConnectOptions] object that mirrors the
* `connectOptions` shape used by the test runner. When passed as an object,
* `exposeNetwork`, `headers`, `slowMo`, and `timeout` are forwarded to the
* underlying connect call.
*/
remoteEndpoint?: string | playwright.ConnectOptions & { endpoint: string };
/**
* Paths to TypeScript files to add as initialization scripts for Playwright page.
*/
initPage?: string[];
/**
* Paths to JavaScript files to add as initialization scripts.
* The scripts will be evaluated in every page before any of the page's scripts.
*/
initScript?: string[];
},
/**
* Connect to a running browser instance (Edge/Chrome only). If specified, `browser`
* config is ignored.
* Requires the "Playwright Extension" to be installed.
*/
extension?: boolean;
server?: {
/**
* The port to listen on for SSE or MCP transport.
*/
port?: number;
/**
* The host to bind the server to. Default is localhost. Use 0.0.0.0 to bind to all interfaces.
*/
host?: string;
/**
* The hosts this server is allowed to serve from. Defaults to the host server is bound to.
* This is not for CORS, but rather for the DNS rebinding protection.
*/
allowedHosts?: string[];
},
/**
* List of enabled tool capabilities. Possible values:
* - 'core': Core browser automation features.
* - 'pdf': PDF generation and manipulation.
* - 'vision': Coordinate-based interactions.
* - 'devtools': Developer tools features.
*/
capabilities?: ToolCapability[];
/**
* Whether to save the Playwright session into the output directory.
*/
saveSession?: boolean;
/**
* Whether to collect and expose the tools that a page registers through the
* experimental WebMCP API. Enabled by default.
*/
webmcp?: boolean;
/**
* Reuse the same browser context between all connected HTTP clients.
*/
sharedBrowserContext?: boolean;
/**
* Secrets are used to replace matching plain text in the tool responses to prevent the LLM
* from accidentally getting sensitive data. It is a convenience and not a security feature,
* make sure to always examine information coming in and from the tool on the client.
*/
secrets?: Record<string, string>;
/**
* The directory for automatically named output files, for example a screenshot taken without an
* explicit file name. Files with an explicit name are resolved against the workspace root instead
* and are not affected by this option.
*/
outputDir?: string;
/**
* Threshold for evicting old output files, in bytes.
*/
outputMaxSize?: number;
console?: {
/**
* The level of console messages to return. Each level includes the messages of more severe levels. Defaults to "info".
*/
level?: 'error' | 'warning' | 'info' | 'debug';
},
network?: {
/**
* List of origins to allow the browser to request. Default is to allow all. Origins matching both `allowedOrigins` and `blockedOrigins` will be blocked.
*
* Supported formats:
* - Full origin: `https://example.com:8080` - matches only that origin
* - Wildcard port: `http://localhost:*` - matches any port on localhost with http protocol
*/
allowedOrigins?: string[];
/**
* List of origins to block the browser to request. Origins matching both `allowedOrigins` and `blockedOrigins` will be blocked.
*
* Supported formats:
* - Full origin: `https://example.com:8080` - matches only that origin
* - Wildcard port: `http://localhost:*` - matches any port on localhost with http protocol
*/
blockedOrigins?: string[];
};
/**
* Specify the attribute to use for test ids, defaults to "data-testid".
*/
testIdAttribute?: string;
timeouts?: {
/*
* Configures default action timeout: https://playwright.dev/docs/api/class-page#page-set-default-timeout. Defaults to 5000ms.
*/
action?: number;
/*
* Configures default navigation timeout: https://playwright.dev/docs/api/class-page#page-set-default-navigation-timeout. Defaults to 60000ms.
*/
navigation?: number;
/**
* Configures default expect timeout: https://playwright.dev/docs/test-timeouts#expect-timeout. Defaults to 5000ms.
*/
expect?: number;
/**
* How long to wait after each action for triggered work (navigations, requests) to settle before responding. Defaults to 500ms.
*/
settle?: number;
/**
* Close the browser after this many milliseconds without a tool call, and relaunch it on the next one.
* Defaults to one hour for headless browsers Playwright launched, and to no timeout for headed or attached ones. Pass 0 to disable.
* The CLI shuts the whole session down instead of relaunching.
*/
idle?: number;
};
/**
* Whether to send image responses to the client. Can be "allow", "omit", or "only". Defaults to "allow".
* With "only", a response that carries an image consists of the image parts alone, without the text part.
*/
imageResponses?: 'allow' | 'omit' | 'only';
/**
* How file paths are rendered in tool results. Can be "relative" to the workspace root or "absolute". Defaults to "relative".
*/
filePaths?: 'relative' | 'absolute';
snapshot?: {
/**
* When taking snapshots for responses, specifies the mode to use.
*/
mode?: 'full' | 'none';
/**
* Whether to include each element's bounding box as [box=x,y,width,height] in snapshots.
* Coordinates are viewport-relative, in CSS pixels (Element.getBoundingClientRect).
*/
boxes?: boolean;
};
/**
* allowUnrestrictedFileAccess acts as a guardrail to prevent the LLM from accidentally
* wandering outside its intended workspace. It is a convenience defense to catch unintended
* file access, not a secure boundary; a deliberate attempt to reach other directories can be
* easily worked around, so always rely on client-level permissions for true security.
*/
allowUnrestrictedFileAccess?: boolean;
/**
* Specify the language to use for code generation.
*/
codegen?: 'typescript' | 'python' | 'java' | 'csharp' | 'none';
}
Eigenständiger MCP-Server
Wenn Sie einen Browser mit Oberfläche auf einem System ohne Anzeige oder aus Worker-Prozessen der IDEs ausführen,
führen Sie den MCP-Server aus einer Umgebung mit DISPLAY aus und übergeben Sie das Flag --port, um den HTTP-Transport zu aktivieren.
npx @playwright/mcp@latest --port 8931
Und dann setzen Sie in der MCP-Client-Konfiguration url auf den HTTP-Endpunkt:
{
"mcpServers": {
"playwright": {
"url": "http://localhost:8931/mcp"
}
}
}
Sicherheit
Playwright MCP ist keine Sicherheitsgrenze. Siehe MCP Security Best Practices für Hinweise zur Absicherung Ihrer Bereitstellung.
Docker
HINWEIS: Die Docker-Implementierung unterstützt derzeit nur headless Chromium.
{
"mcpServers": {
"playwright": {
"command": "docker",
"args": ["run", "-i", "--rm", "--init", "--pull=always", "mcr.microsoft.com/playwright/mcp"]
}
}
}
Oder wenn Sie den Container lieber als langlebigen Dienst ausführen möchten, anstatt ihn vom MCP-Client starten zu lassen, verwenden Sie:
docker run -d -i --rm --init --pull=always \
--entrypoint node \
--name playwright \
-p 8931:8931 \
mcr.microsoft.com/playwright/mcp \
/app/cli.js --headless --browser chromium --no-sandbox --port 8931 --host 0.0.0.0
Der Server lauscht auf Host-Port 8931 und kann von jedem MCP-Client erreicht werden.
Sie können das Docker-Image selbst erstellen.
docker build -t mcr.microsoft.com/playwright/mcp .
Programmatische Verwendung
import http from 'http';
import { createConnection } from '@playwright/mcp';
import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';
http.createServer(async (req, res) => {
// ...
// Creates a headless Playwright MCP server with SSE transport
const connection = await createConnection({ browser: { launchOptions: { headless: true } } });
const transport = new SSEServerTransport('/messages', res);
await connection.connect(transport);
// ...
});
Werkzeuge
Kernautomatisierung
- browser_click
- Titel: Klicken
- Beschreibung: Klick auf einer Webseite ausführen
- Parameter:
element(Zeichenkette, optional): Für Menschen lesbare Elementbeschreibung, die verwendet wird, um die Berechtigung zur Interaktion mit dem Element zu erhaltentarget(Zeichenkette): Exakte Ziel-Elementreferenz aus dem Seiten-Snapshot oder ein eindeutiger Element-SelektordoubleClick(boolesch, optional): Ob ein Doppelklick anstelle eines einfachen Klicks ausgeführt werden sollbutton(Zeichenkette, optional): Zu klickende Maustaste, Standard ist linksmodifiers(Array, optional): Zu drückende Modifikatortasten
- Schreibgeschützt: false
- browser_close
- Titel: Browser schließen
- Beschreibung: Die Seite schließen
- Parameter: Keine
- Schreibgeschützt: false
- browser_console_messages
- Titel: Konsolenmeldungen abrufen
- Beschreibung: Gibt alle Konsolenmeldungen zurück
- Parameter:
level(Zeichenkette): Ebene der zurückzugebenden Konsolenmeldungen. Jede Ebene enthält die Meldungen der schwerwiegenderen Ebenen. Standard ist „info".all(boolesch, optional): Alle Konsolenmeldungen seit Beginn der Sitzung zurückgeben, nicht nur seit der letzten Navigation. Standard ist false.filename(Zeichenkette, optional): Dateiname zum Speichern der Konsolenmeldungen. Relative Dateinamen werden relativ zum Arbeitsbereichsstammverzeichnis aufgelöst. Wenn nicht angegeben, werden Meldungen als Text zurückgegeben.
- Schreibgeschützt: true
- browser_drag
- Titel: Maus ziehen
- Beschreibung: Ziehen und Ablegen zwischen zwei Elementen ausführen
- Parameter:
startElement(Zeichenkette, optional): Für Menschen lesbare Quell-Elementbeschreibung, die verwendet wird, um die Berechtigung zur Interaktion mit dem Element zu erhaltenstartTarget(Zeichenkette): Exakte Ziel-Elementreferenz aus dem Seiten-Snapshot oder ein eindeutiger Element-SelektorendElement(Zeichenkette, optional): Für Menschen lesbare Ziel-Elementbeschreibung, die verwendet wird, um die Berechtigung zur Interaktion mit dem Element zu erhaltenendTarget(Zeichenkette): Exakte Ziel-Elementreferenz aus dem Seiten-Snapshot oder ein eindeutiger Element-Selektor
- Schreibgeschützt: false
- browser_drop
- Titel: Dateien oder Daten auf ein Element ablegen
- Beschreibung: Dateien oder MIME-typisierte Daten auf ein Element ablegen, als ob sie von außerhalb der Seite gezogen würden. Mindestens eines von „paths" oder „data" muss angegeben werden.
- Parameter:
element(Zeichenkette, optional): Für Menschen lesbare Elementbeschreibung, die verwendet wird, um die Berechtigung zur Interaktion mit dem Element zu erhaltentarget(Zeichenkette): Exakte Ziel-Elementreferenz aus dem Seiten-Snapshot oder ein eindeutiger Element-Selektorpaths(Array, optional): Absolute Pfade zu Dateien, die auf das Element abgelegt werden sollen.data(Objekt, optional): Abzulegende Daten als Zuordnung von MIME-Typ zu Zeichenkettenwert (z. B. {"text/plain": "hello", "text/uri-list": "https://example.com"}).
- Schreibgeschützt: false
- browser_emulate_media
- Titel: Medienfunktionen emulieren
- Beschreibung: CSS-Medienfunktionen für die Seite emulieren, z. B. zwischen hellem und dunklem Farbschema wechseln. Ausgelassene Parameter bleiben unverändert; null löscht eine Überschreibung.
- Parameter:
colorScheme(optional): Emuliert die Medienfunktion prefers-color-schemereducedMotion(optional): Emuliert die Medienfunktion prefers-reduced-motionforcedColors(optional): Emuliert die Medienfunktion forced-colorscontrast(optional): Emuliert die Medienfunktion prefers-contrastmedia(optional): Ändert den CSS-Medientyp der Seite
- Schreibgeschützt: false
- browser_evaluate
- Titel: JavaScript auswerten
- Beschreibung: JavaScript-Ausdruck auf Seite oder Element auswerten
- Parameter:
element(Zeichenkette, optional): Für Menschen lesbare Elementbeschreibung, die verwendet wird, um die Berechtigung zur Interaktion mit dem Element zu erhaltentarget(Zeichenkette, optional): Exakte Ziel-Elementreferenz aus dem Seiten-Snapshot oder ein eindeutiger Element-Selektorfunction(Zeichenkette): () => { /* code / } oder (element) => { / code */ }, wenn ein Element angegeben istfilename(Zeichenkette, optional): Dateiname zum Speichern des Ergebnisses. Relative Dateinamen werden relativ zum Arbeitsbereichsstammverzeichnis aufgelöst. Wenn nicht angegeben, wird das Ergebnis als Text zurückgegeben.
- Schreibgeschützt: false
- browser_file_upload
- Titel: Dateien hochladen
- Beschreibung: Eine oder mehrere Dateien hochladen
- Parameter:
paths(Array, optional): Die absoluten Pfade zu den hochzuladenden Dateien. Kann eine einzelne Datei oder mehrere Dateien sein. Wenn ausgelassen, wird die Dateiauswahl abgebrochen.
- Schreibgeschützt: false
- browser_fill_form
- Titel: Formular ausfüllen
- Beschreibung: Mehrere Formularfelder ausfüllen
- Parameter:
fields(Array): Auszufüllende Felder
- Schreibgeschützt: false
- browser_find
- Titel: Im Seiten-Snapshot suchen
- Beschreibung: Den Barrierefreiheits-Snapshot der aktuellen Seite nach Text oder einem regulären Ausdruck durchsuchen. Gibt passende Snapshot-Knoten mit einigen Zeilen umgebendem Kontext zurück (wie Suchausschnitte), jeweils unter ihrem Pfad von der Wurzel des Baums angezeigt, was kostengünstiger ist als das Erfassen des gesamten Snapshots, wenn Sie nur ein Element und seine Referenz lokalisieren müssen.
- Parameter:
text(Zeichenkette, optional): Klartext, nach dem im Seiten-Snapshot gesucht werden soll (Groß-/Kleinschreibung nicht beachtende Teilzeichenketten-Übereinstimmung). Geben Sie entweder Text oder Regex an, nicht beides.regex(Zeichenkette, optional): Regulärer Ausdruck, nach dem im Seiten-Snapshot gesucht werden soll. Die Übereinstimmung ist standardmäßig Groß-/Kleinschreibung beachtend; schließen Sie das Muster in Schrägstriche ein, um Flags hinzuzufügen, z. B. „/error/i" für Groß-/Kleinschreibung nicht beachtend. Geben Sie entweder Text oder Regex an, nicht beides.filename(Zeichenkette, optional): Ergebnisse in einer Datei speichern, anstatt sie in der Antwort zurückzugeben. Relative Dateinamen werden relativ zum Arbeitsbereichsstammverzeichnis aufgelöst.
- Schreibgeschützt: true
- browser_handle_dialog
- Titel: Dialog behandeln
- Beschreibung: Einen Dialog behandeln
- Parameter:
accept(boolesch): Ob der Dialog akzeptiert werden soll.promptText(Zeichenkette, optional): Der Text der Eingabeaufforderung im Falle eines Prompt-Dialogs.
- Schreibgeschützt: false
- browser_hover
- Titel: Maus darüber bewegen
- Beschreibung: Über Element auf der Seite fahren
- Parameter:
element(Zeichenkette, optional): Für Menschen lesbare Elementbeschreibung, die verwendet wird, um die Berechtigung zur Interaktion mit dem Element zu erhaltentarget(Zeichenkette): Exakte Ziel-Elementreferenz aus dem Seiten-Snapshot oder ein eindeutiger Element-Selektor
- Schreibgeschützt: false
- browser_navigate
- Titel: Zu einer URL navigieren
- Beschreibung: Zu einer URL navigieren
- Parameter:
url(Zeichenkette): Die URL, zu der navigiert werden soll
- Schreibgeschützt: false
- browser_navigate_back
- Titel: Zurück gehen
- Beschreibung: Zur vorherigen Seite im Verlauf zurückgehen
- Parameter: Keine
- Schreibgeschützt: false
- browser_network_request
- Titel: Netzwerkanfragedetails anzeigen
- Beschreibung: Gibt vollständige Details (Header und Body) einer einzelnen Netzwerkanfrage zurück, oder einen einzelnen Teil, wenn
partgesetzt ist. Verwenden Sie die Nummer aus browser_network_requests. - Parameter:
index(Ganzzahl): 1-basierter Index der Anfrage, wie von browser_network_requests ausgegeben.part(Zeichenkette, optional): Nur diesen Teil der Anfrage zurückgeben. Weglassen, um vollständige Details zurückzugeben.filename(Zeichenkette, optional): Dateiname zum Speichern des Ergebnisses. Relative Dateinamen werden relativ zum Arbeitsbereichsstammverzeichnis aufgelöst. Wenn nicht angegeben, wird die Ausgabe als Text zurückgegeben.
- Schreibgeschützt: true
- browser_network_requests
- Titel: Netzwerkanfragen auflisten
- Beschreibung: Gibt eine nummerierte Liste der Netzwerkanfragen seit dem Laden der Seite zurück. Verwenden Sie browser_network_request mit der Nummer, um vollständige Details zu erhalten.
- Parameter:
static(boolesch): Ob erfolgreiche statische Ressourcen wie Bilder, Schriftarten, Skripte usw. einbezogen werden sollen. Standard ist false.filter(Zeichenkette, optional): Nur Anfragen zurückgeben, deren URL diesem Regexp entspricht (z. B. „/api/.*user").filename(Zeichenkette, optional): Dateiname zum Speichern der Netzwerkanfragen. Relative Dateinamen werden relativ zum Arbeitsbereichsstammverzeichnis aufgelöst. Wenn nicht angegeben, werden Anfragen als Text zurückgegeben.
- Schreibgeschützt: true
- browser_press_key
- Titel: Eine Taste drücken
- Beschreibung: Eine Taste auf der Tastatur drücken
- Parameter:
key(Zeichenkette): Name der zu drückenden Taste oder ein zu erzeugendes Zeichen, wieArrowLeftodera
- Schreibgeschützt: false
- browser_resize
- Titel: Browserfenster skalieren
- Beschreibung: Das Browserfenster skalieren
- Parameter:
width(Zahl): Breite des Browserfenstersheight(Zahl): Höhe des Browserfensters
- Schreibgeschützt: false
- browser_run_code_unsafe
- Titel: Playwright-Code ausführen (unsicher)
- Beschreibung: Ein Playwright-Codefragment ausführen. Unsicher: führt beliebiges JavaScript im Playwright-Serverprozess aus und ist RCE-äquivalent.
- Parameter:
code(Zeichenkette, optional): Eine JavaScript-Funktion, die auszuführenden Playwright-Code enthält. Sie wird mit einem einzelnen Argument, page, aufgerufen, das Sie für jede Seiteninteraktion verwenden können. Zum Beispiel:async (page) => { await page.getByRole('button', { name: 'Submit' }).click(); return await page.title(); }filename(Zeichenkette, optional): Code aus der angegebenen Datei laden. Relative Dateinamen werden relativ zum Arbeitsbereichsstammverzeichnis aufgelöst. Wenn sowohl Code als auch Dateiname angegeben sind, wird Code ignoriert.
- Schreibgeschützt: false
- browser_select_option
- Titel: Option auswählen
- Beschreibung: Eine Option in einem Dropdown auswählen
- Parameter:
element(Zeichenkette, optional): Für Menschen lesbare Elementbeschreibung, die verwendet wird, um die Berechtigung zur Interaktion mit dem Element zu erhaltentarget(Zeichenkette): Exakte Ziel-Elementreferenz aus dem Seiten-Snapshot oder ein eindeutiger Element-Selektorvalues(Array): Array von Werten, die im Dropdown ausgewählt werden sollen. Dies kann ein einzelner Wert oder mehrere Werte sein.
- Schreibgeschützt: false
- browser_snapshot
- Titel: Seiten-Snapshot
- Beschreibung: Erfasst einen Accessibility-Snapshot der aktuellen Seite; dies ist besser als ein Screenshot
- Parameter:
target(string, optional): Exakte Ziel-Elementreferenz aus dem Seiten-Snapshot oder ein eindeutiger Element-Selektorfilename(string, optional): Snapshot in einer Datei speichern, anstatt ihn in der Antwort zurückzugeben. Relative Dateinamen werden relativ zum Workspace-Root aufgelöst.depth(number, optional): Begrenzt die Tiefe des Snapshot-Baumsboxes(boolean, optional): Bindet die Bounding Box jedes Elements als [box=x,y,width,height] in den Snapshot ein. Koordinaten sind viewport-relativ, in CSS-Pixeln (Element.getBoundingClientRect)
- Schreibgeschützt: true
- browser_take_screenshot
- Titel: Screenshot aufnehmen
- Beschreibung: Nimmt einen Screenshot der aktuellen Seite auf. Sie können keine Aktionen basierend auf dem Screenshot ausführen; verwenden Sie browser_snapshot für Aktionen.
- Parameter:
element(string, optional): Lesbare Elementbeschreibung, die verwendet wird, um die Berechtigung zur Interaktion mit dem Element zu erhaltentarget(string, optional): Exakte Ziel-Elementreferenz aus dem Seiten-Snapshot oder ein eindeutiger Element-Selektortype(string, optional): Bildformat für den Screenshot. Wenn nicht gesetzt, wird es aus der Dateinamenerweiterung abgeleitet, andernfalls png.filename(string, optional): Dateiname zum Speichern des Screenshots. Relative Dateinamen werden relativ zum Workspace-Root aufgelöst. Wenn nicht angegeben, wird der Screenshot im Ausgabeverzeichnis alspage-{timestamp}.{png|jpeg|webp}gespeichert.fullPage(boolean, optional): Wenn true, wird ein Screenshot der gesamten scrollbaren Seite aufgenommen, anstatt des aktuell sichtbaren Viewports. Kann nicht mit Element-Screenshots verwendet werden.scale(string): Bildauflösungs-Skalierung. "css" erzeugt einen Screenshot in CSS-Pixeln (kleiner, konsistent über Geräte hinweg). "device" erzeugt einen hochauflösenden Screenshot mit Gerätepixeln (größer, berücksichtigt das Gerätepixelverhältnis). Standard ist css.
- Schreibgeschützt: true
- browser_type
- Titel: Text eingeben
- Beschreibung: Text in ein bearbeitbares Element eingeben
- Parameter:
element(string, optional): Lesbare Elementbeschreibung, die verwendet wird, um die Berechtigung zur Interaktion mit dem Element zu erhaltentarget(string): Exakte Ziel-Elementreferenz aus dem Seiten-Snapshot oder ein eindeutiger Element-Selektortext(string): Text, der in das Element eingegeben werden sollsubmit(boolean, optional): Ob der eingegebene Text übermittelt werden soll (danach Enter drücken)slowly(boolean, optional): Ob der Text zeichenweise eingegeben werden soll. Nützlich zum Auslösen von Tastatur-Handlern auf der Seite. Standardmäßig wird der gesamte Text auf einmal eingefügt.
- Schreibgeschützt: false
- browser_wait_for
- Titel: Warten auf
- Beschreibung: Warten, bis Text erscheint oder verschwindet oder eine bestimmte Zeit vergangen ist
- Parameter:
time(number, optional): Die Wartezeit in Sekunden, höchstens 30text(string, optional): Der Text, auf den gewartet werden solltextGone(string, optional): Der Text, auf dessen Verschwinden gewartet werden soll
- Schreibgeschützt: false
Tab-Verwaltung
- browser_tabs
- Titel: Tabs verwalten
- Beschreibung: Browser-Tab auflisten, erstellen, schließen oder auswählen.
- Parameter:
action(string): Auszuführende Operationindex(number, optional): Tab-Index, verwendet für close/select. Wenn bei close weggelassen, wird der aktuelle Tab geschlossen.url(string, optional): URL, zu der im neuen Tab navigiert werden soll, verwendet für new.
- Schreibgeschützt: false
Browser-Installation
Konfiguration (Opt-in über --caps=config)
- browser_get_config
- Titel: Konfiguration abrufen
- Beschreibung: Die endgültig aufgelöste Konfiguration nach dem Zusammenführen von CLI-Optionen, Umgebungsvariablen und Konfigurationsdatei abrufen.
- Parameter: Keine
- Schreibgeschützt: true
Netzwerk (Opt-in über --caps=network)
- browser_network_state_set
- Titel: Netzwerkstatus festlegen
- Beschreibung: Setzt den Browser-Netzwerkstatus auf online oder offline. Wenn offline, schlagen alle Netzwerkanfragen fehl.
- Parameter:
state(string): Auf "offline" setzen, um den Offline-Modus zu simulieren, "online" zur Wiederherstellung der Netzwerkverbindung
- Schreibgeschützt: false
- browser_route
- Titel: Netzwerkanfragen mocken
- Beschreibung: Eine Route einrichten, um Netzwerkanfragen zu mocken, die einem URL-Muster entsprechen
- Parameter:
pattern(string): URL-Muster zum Abgleichen (z. B. "/api/users", "/*.{png,jpg}")status(number, optional): HTTP-Statuscode, der zurückgegeben werden soll (Standard: 200)body(string, optional): Antworttext (Text- oder JSON-String)contentType(string, optional): Content-Type-Header (z. B. "application/json", "text/html")headers(array, optional): Header, die im Format "Name: Wert" hinzugefügt werden sollenremoveHeaders(string, optional): Kommagetrennte Liste von Header-Namen, die aus der Anfrage entfernt werden sollen
- Schreibgeschützt: false
- browser_route_list
- Titel: Netzwerk-Routen auflisten
- Beschreibung: Alle aktiven Netzwerk-Routen auflisten
- Parameter: Keine
- Schreibgeschützt: true
- browser_unroute
- Titel: Netzwerk-Routen entfernen
- Beschreibung: Netzwerk-Routen entfernen, die einem Muster entsprechen (oder alle Routen, wenn kein Muster angegeben ist)
- Parameter:
pattern(string, optional): URL-Muster zum Entfernen der Route (weglassen, um alle Routen zu entfernen)
- Schreibgeschützt: false
Speicher (Opt-in über --caps=storage)
- browser_cookie_clear
- Titel: Cookies löschen
- Beschreibung: Alle Cookies löschen
- Parameter: Keine
- Schreibgeschützt: false
- browser_cookie_delete
- Titel: Cookie löschen
- Beschreibung: Ein bestimmtes Cookie löschen
- Parameter:
name(string): Name des zu löschenden Cookies
- Schreibgeschützt: false
- browser_cookie_get
- Titel: Cookie abrufen
- Beschreibung: Ein bestimmtes Cookie nach Namen abrufen
- Parameter:
name(string): Name des abzurufenden Cookies
- Schreibgeschützt: true
- browser_cookie_list
- Titel: Cookies auflisten
- Beschreibung: Alle Cookies auflisten (optional nach Domain/Pfad gefiltert)
- Parameter:
domain(string, optional): Cookies nach Domain filternpath(string, optional): Cookies nach Pfad filtern
- Schreibgeschützt: true
- browser_cookie_set
- Titel: Cookie setzen
- Beschreibung: Ein Cookie mit optionalen Flags setzen (domain, path, expires, httpOnly, secure, sameSite)
- Parameter:
name(string): Cookie-Namevalue(string): Cookie-Wertdomain(string, optional): Cookie-Domainpath(string, optional): Cookie-Pfadexpires(number, optional): Cookie-Ablauf als Unix-ZeitstempelhttpOnly(boolean, optional): Ob das Cookie HTTP-only istsecure(boolean, optional): Ob das Cookie sicher istsameSite(string, optional): Cookie-SameSite-Attribut
- Schreibgeschützt: false
- browser_localstorage_clear
- Titel: localStorage löschen
- Beschreibung: Alle localStorage löschen
- Parameter: Keine
- Schreibgeschützt: false
- browser_localstorage_delete
- Titel: localStorage-Element löschen
- Beschreibung: Ein localStorage-Element löschen
- Parameter:
key(string): Zu löschender Schlüssel
- Schreibgeschützt: false
- browser_localstorage_get
- Titel: localStorage-Element abrufen
- Beschreibung: Ein localStorage-Element nach Schlüssel abrufen
- Parameter:
key(string): Abzurufender Schlüssel
- Schreibgeschützt: true
- browser_localstorage_list
- Titel: localStorage auflisten
- Beschreibung: Alle localStorage-Schlüssel-Wert-Paare auflisten
- Parameter: Keine
- Schreibgeschützt: true
- browser_localstorage_set
- Titel: localStorage-Element setzen
- Beschreibung: Ein localStorage-Element setzen
- Parameter:
key(string): Zu setzender Schlüsselvalue(string): Zu setzender Wert
- Schreibgeschützt: false
- browser_sessionstorage_clear
- Titel: sessionStorage löschen
- Beschreibung: Alle sessionStorage löschen
- Parameter: Keine
- Schreibgeschützt: false
- browser_sessionstorage_delete
- Titel: sessionStorage-Element löschen
- Beschreibung: Ein sessionStorage-Element löschen
- Parameter:
key(string): Zu löschender Schlüssel
- Schreibgeschützt: false
- browser_sessionstorage_get
- Titel: sessionStorage-Element abrufen
- Beschreibung: Ein sessionStorage-Element nach Schlüssel abrufen
- Parameter:
key(string): Abzurufender Schlüssel
- Schreibgeschützt: true
- browser_sessionstorage_list
- Titel: sessionStorage auflisten
- Beschreibung: Alle sessionStorage-Schlüssel-Wert-Paare auflisten
- Parameter: Keine
- Schreibgeschützt: true
- browser_sessionstorage_set
- Titel: sessionStorage-Element setzen
- Beschreibung: Ein sessionStorage-Element setzen
- Parameter:
key(string): Zu setzender Schlüsselvalue(string): Zu setzender Wert
- Schreibgeschützt: false
- browser_set_storage_state
- Titel: Speicherzustand wiederherstellen
- Beschreibung: Speicherzustand (Cookies, lokaler Speicher) aus einer Datei wiederherstellen. Dies löscht vorhandene Cookies und lokalen Speicher, bevor wiederhergestellt wird.
- Parameter:
filename(string): Pfad zur Speicherzustandsdatei, aus der wiederhergestellt werden soll. Relative Dateinamen werden relativ zum Workspace-Root aufgelöst.
- Schreibgeschützt: false
- browser_storage_state
- Titel: Speicherzustand speichern
- Beschreibung: Speicherzustand (Cookies, lokaler Speicher) zur späteren Wiederverwendung in einer Datei speichern
- Parameter:
filename(string, optional): Dateiname zum Speichern des Speicherzustands. Relative Dateinamen werden relativ zum Workspace-Root aufgelöst. Wenn nicht angegeben, wird der Speicherzustand im Ausgabeverzeichnis alsstorage-state-{timestamp}.jsongespeichert.
- Schreibgeschützt: true
DevTools (Opt-in über --caps=devtools)
- browser_annotate
- Titel: Aktuelle Seite annotieren
- Beschreibung: Öffnet das Playwright-Dashboard im Annotationsmodus für die aktuelle Seite und wartet, bis der Benutzer Annotationen zeichnet. Gibt den annotierten Screenshot, den ARIA-Snapshot und die Liste der Annotationen zurück.
- Parameter: Keine
- Schreibgeschützt: true
- browser_hide_highlight
- Titel: Element-Hervorhebung ausblenden
- Beschreibung: Eine zuvor für das Element hinzugefügte Hervorhebungsüberlagerung entfernen.
- Parameter:
element(string, optional): Lesbare Elementbeschreibung, die beim Hinzufügen der Hervorhebung verwendet wurde; muss mit dem Wert übereinstimmen, der an browser_highlight übergeben wurde.target(string, optional): Exakte Ziel-Elementreferenz aus dem Seiten-Snapshot oder ein eindeutiger Element-Selektor
- Schreibgeschützt: true
- browser_highlight
- Titel: Element hervorheben
- Beschreibung: Zeigt eine dauerhafte Hervorhebungsüberlagerung um das Element auf der Seite an.
- Parameter:
element(string, optional): Für Menschen lesbare Elementbeschreibung, die verwendet wird, um die Berechtigung zur Interaktion mit dem Element zu erhaltentarget(string): Exakte Ziel-Elementreferenz aus dem Seiten-Snapshot oder ein eindeutiger Element-Selektorstyle(string, optional): Zusätzliches Inline-CSS, das auf die Hervorhebungsüberlagerung angewendet wird, z. B. "outline: 2px dashed red".
- Schreibgeschützt: true
- browser_resume
- Titel: Pausierte Skriptausführung fortsetzen
- Beschreibung: Setzt die Skriptausführung fort, nachdem sie pausiert wurde. Wenn mit step auf true aufgerufen, wird die Ausführung vor der nächsten Aktion erneut pausiert.
- Parameter:
step(boolean, optional): Wenn true, wird die Ausführung vor der nächsten Aktion erneut pausiert, was schrittweises Debugging ermöglicht.location(string, optional): Pausiert die Ausführung an einer bestimmten :, z. B. "example.spec.ts:42".
- Schreibgeschützt: false
- browser_start_recording
- Titel: Aufzeichnung von Benutzeraktionen starten
- Beschreibung: Startet die Aufzeichnung von Aktionen, die der Benutzer im Browser ausführt, als Playwright-Code. Verwenden Sie es, wenn der Benutzer einen Ablauf manuell demonstrieren möchte. Rufen Sie browser_stop_recording auf, wenn der Benutzer sagt, dass er fertig ist, um die aufgezeichneten Aktionen abzurufen.
- Parameter: Keine
- Schreibgeschützt: true
- browser_start_tracing
- Titel: Tracing starten
- Beschreibung: Startet die Trace-Aufzeichnung
- Parameter: Keine
- Schreibgeschützt: true
- browser_start_video
- Titel: Video starten
- Beschreibung: Startet die Videoaufzeichnung
- Parameter:
filename(string, optional): Dateiname, unter dem das Video gespeichert werden soll. Relative Dateinamen werden relativ zum Arbeitsbereichsstamm aufgelöst. Wenn nicht angegeben, wird das Video im Ausgabeverzeichnis alsvideo-{timestamp}.webmgespeichert.size(object, optional): Videogrößefps(number, optional): Bildrate des Videos in Bildern pro Sekunde, Standard ist 25cursor(boolean, optional): Rendert einen animierten Mauszeiger, der zu jedem Aktionspunkt wandert. Verlangsamt Aktionen um 800 ms, damit der Zeiger Zeit hat, zu wandern.
- Schreibgeschützt: true
- browser_stop_recording
- Titel: Aufzeichnung von Benutzeraktionen stoppen
- Beschreibung: Stoppt die mit browser_start_recording gestartete Aufzeichnung und gibt die aufgezeichneten Aktionen als Playwright-Code zurück.
- Parameter: Keine
- Schreibgeschützt: true
- browser_stop_tracing
- Titel: Tracing stoppen
- Beschreibung: Stoppt die Trace-Aufzeichnung
- Parameter: Keine
- Schreibgeschützt: true
- browser_stop_video
- Titel: Video stoppen
- Beschreibung: Stoppt die Videoaufzeichnung
- Parameter: Keine
- Schreibgeschützt: true
- browser_video_chapter
- Titel: Videokapitel
- Beschreibung: Fügt der Videoaufzeichnung eine Kapitelmarkierung hinzu. Zeigt eine Vollbild-Kapitelkarte mit unscharfem Hintergrund an.
- Parameter:
title(string): Kapiteltiteldescription(string, optional): Kapitelbeschreibungduration(number, optional): Dauer in Millisekunden, wie lange die Kapitelkarte angezeigt wird
- Schreibgeschützt: true
- browser_video_hide_actions
- Titel: Aktionsüberlagerungen ausblenden
- Beschreibung: Stoppt die Annotation von Aktionen, die auf der Seite ausgeführt werden.
- Parameter: Keine
- Schreibgeschützt: true
- browser_video_show_actions
- Titel: Aktionsüberlagerungen anzeigen
- Beschreibung: Annotiert nachfolgende Aktionen, die auf der Seite ausgeführt werden, mit einer Beschriftung, die die Aktion benennt und, wenn gestaltet, den Aktionspunkt markiert und das Zielelement hervorhebt. Nützlich während der Videoaufzeichnung oder beim Screencasting.
- Parameter:
duration(number, optional): Wie lange jede Aktionsannotation auf dem Bildschirm bleibt, in Millisekunden. Standard ist 500.position(string, optional): Wo der Aktionsname relativ zur Seite platziert werden soll. Standard ist oben rechts.cursor(string, optional): Zeigerdekoration für Zeigeraktionen. "pointer" (Standard) animiert einen Mauszeiger vom vorherigen Aktionspunkt zum nächsten; "none" deaktiviert die Zeigerdekoration.style(object, optional): Stile der Aktionsdekorationen.
- Schreibgeschützt: true
Koordinatenbasiert (opt-in über --caps=vision)
- browser_mouse_click_xy
- Titel: Klicken
- Beschreibung: Klickt die Maustaste an einer bestimmten Position
- Parameter:
x(number): X-Koordinatey(number): Y-Koordinatebutton(string, optional): Zu klickende Taste, Standard ist linksclickCount(number, optional): Anzahl der Klicks, Standard ist 1delay(number, optional): Zeit zwischen Maus gedrückt und Maus losgelassen in Millisekunden, Standard ist 0
- Schreibgeschützt: false
- browser_mouse_down
- Titel: Maus gedrückt halten
- Beschreibung: Maus gedrückt halten
- Parameter:
button(string, optional): Zu drückende Taste, Standard ist links
- Schreibgeschützt: false
- browser_mouse_drag_xy
- Titel: Maus ziehen
- Beschreibung: Linke Maustaste an eine bestimmte Position ziehen
- Parameter:
startX(number): Start-X-KoordinatestartY(number): Start-Y-KoordinateendX(number): End-X-KoordinateendY(number): End-Y-Koordinate
- Schreibgeschützt: false
- browser_mouse_move_xy
- Titel: Maus bewegen
- Beschreibung: Maus an eine bestimmte Position bewegen
- Parameter:
x(number): X-Koordinatey(number): Y-Koordinate
- Schreibgeschützt: false
- browser_mouse_up
- Titel: Maus loslassen
- Beschreibung: Maus loslassen
- Parameter:
button(string, optional): Loszulassende Taste, Standard ist links
- Schreibgeschützt: false
- browser_mouse_wheel
- Titel: Mausrad scrollen
- Beschreibung: Mausrad scrollen
- Parameter:
deltaX(number): X-DeltadeltaY(number): Y-Delta
- Schreibgeschützt: false
PDF-Erzeugung (opt-in über --caps=pdf)
- browser_pdf_save
- Titel: Als PDF speichern
- Beschreibung: Seite als PDF speichern
- Parameter:
filename(string, optional): Dateiname, unter dem das PDF gespeichert werden soll. Relative Dateinamen werden relativ zum Arbeitsbereichsstamm aufgelöst. Wenn nicht angegeben, wird das PDF im Ausgabeverzeichnis alspage-{timestamp}.pdfgespeichert.
- Schreibgeschützt: true
Test-Assertions (opt-in über --caps=testing)
- browser_generate_locator
- Titel: Locator für Element erstellen
- Beschreibung: Generiert einen Locator für das angegebene Element zur Verwendung in Tests
- Parameter:
element(string, optional): Für Menschen lesbare Elementbeschreibung, die verwendet wird, um die Berechtigung zur Interaktion mit dem Element zu erhaltentarget(string): Exakte Ziel-Elementreferenz aus dem Seiten-Snapshot oder ein eindeutiger Element-Selektor
- Schreibgeschützt: true
- browser_verify_element_visible
- Titel: Element sichtbar überprüfen
- Beschreibung: Überprüft, ob das Element auf der Seite sichtbar ist
- Parameter:
role(string): ROLLE des Elements. Kann im Snapshot wie folgt gefunden werden:- {ROLE} "Accessible Name":accessibleName(string): ZUGÄNGLICHER_NAME des Elements. Kann im Snapshot wie folgt gefunden werden:- role "{ACCESSIBLE_NAME}"
- Schreibgeschützt: false
- browser_verify_list_visible
- Titel: Liste sichtbar überprüfen
- Beschreibung: Überprüft, ob die Liste auf der Seite sichtbar ist
- Parameter:
element(string): Für Menschen lesbare Listenbeschreibungtarget(string): Exakte Ziel-Elementreferenz, die auf die Liste zeigtitems(array): Zu überprüfende Elemente
- Schreibgeschützt: false
- browser_verify_text_visible
- Titel: Text sichtbar überprüfen
- Beschreibung: Überprüft, ob der Text auf der Seite sichtbar ist. Bevorzugen Sie browser_verify_element_visible, wenn möglich.
- Parameter:
text(string): TEXT zur Überprüfung. Kann im Snapshot wie folgt gefunden werden:- role "Accessible Name": {TEXT}oder wie folgt:- text: {TEXT}
- Schreibgeschützt: false
- browser_verify_value
- Titel: Wert überprüfen
- Beschreibung: Elementwert überprüfen
- Parameter:
type(string): Typ des Elementselement(string): Für Menschen lesbare Elementbeschreibungtarget(string): Exakte Ziel-Elementreferenz aus dem Seiten-Snapshotvalue(string): Zu überprüfender Wert. Für Kontrollkästchen verwenden Sie "true" oder "false".
- Schreibgeschützt: false