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?
- Barrierefreiheits-Baum-Durchsuchen — Bitten Sie Ihre KI, Seiten zu navigieren und strukturierte Barrierefreiheits-Snapshots zu lesen, kein Vision-Modell erforderlich.
- Persistente Browser-Sitzungen — Behalten Sie den Anmeldestatus über Unterhaltungen hinweg mit
--user-data-diroder--storage-statefür authentifizierte Workflows bei. - Multi-Browser-Automatisierung — Steuern Sie Chromium, Firefox, WebKit oder Edge mit dem
--browser-Flag für tests über mehrere Engines hinweg. - Geräteemulation — Simulieren Sie mobile Geräte wie „iPhone 15“ über
--deviceoder den generischen--mobile-Modus für responsives Testen. - Codegenerierung — Generieren Sie Playwright-Testskripte in TypeScript, Python, Java oder C# mit der Option
--codegen. - Isolierte Testkontexte — Führen Sie Sitzungen mit dem
--isolated-Flag aus, um nach jedem Schließen des Browsers den gesamten Zustand zu verwerfen.
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. Dadurch eignet sich CLI + SKILLs besser für leistungsstarke 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 Amp VS Code-Erweiterungseinstellungsbildschirm 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 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 MCP-Server-Dokumentation. 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 MCP-Server-Dokumentation. 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 Sie 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 wird der Host verwendet, an den der Server gebunden ist. Übergeben 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 werden alle erlaubt. Wichtig: dient nicht als Sicherheitsgrenze und beeinflusst keine Weiterleitungen. env PLAYWRIGHT_MCP_ALLOWED_ORIGINS |
| --allow-unrestricted-file-access | Erlaubt Zugriff auf Dateien außerhalb der Workspace-Wurzeln. Erlaubt auch uneingeschränkten Zugriff auf file://-URLs. Standardmäßig ist der Dateisystemzugriff nur auf Workspace-Wurzelverzeichnisse (oder das aktuelle Arbeitsverzeichnis, wenn keine Wurzeln 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 sie ohne die Allowlist verwendet wird, sind 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, Standardwert 30000ms env PLAYWRIGHT_MCP_CDP_TIMEOUT |
| --codegen | Gibt die Sprache für die Codegenerierung an, 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 | Emuliert ein generisches mobiles Gerät (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 | Verbindet sich mit einer laufenden Browser-Instanz (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 |
| --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 | Führt den Browser im Headless-Modus aus, standardmäßig mit grafischer 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 |
| --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 mehrmals angegeben werden. env PLAYWRIGHT_MCP_INIT_SCRIPT |
| --isolated | Hält das Browser-Profil im Speicher, speichert es nicht auf der Festplatte. env PLAYWRIGHT_MCP_ISOLATED |
| --image-responses | Gibt an, ob Bildantworten an den Client gesendet werden sollen. Kann "allow" oder "omit" sein, Standard ist "allow". env PLAYWRIGHT_MCP_IMAGE_RESPONSES |
| --no-sandbox | Deaktiviert die Sandbox für alle Prozesstypen, die normalerweise in einer Sandbox ausgeführt werden. env PLAYWRIGHT_MCP_NO_SANDBOX |
| --output-dir | Pfad zum Verzeichnis für Ausgabedateien. 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 den SSE-Transport gelauscht werden soll. env PLAYWRIGHT_MCP_PORT |
| --proxy-bypass | Kommagetrennte Domains, die den Proxy umgehen sollen, zum Beispiel ".com,chromium.org,.domain.com" env PLAYWRIGHT_MCP_PROXY_BYPASS |
| --proxy-server | Gibt den Proxy-Server an, zum Beispiel "http://myproxy:3128" oder "socks5://myproxy:8080" env PLAYWRIGHT_MCP_PROXY_SERVER |
| --sandbox | Aktiviert die Sandbox für alle Prozesstypen, die normalerweise nicht in einer Sandbox ausgeführt werden. env PLAYWRIGHT_MCP_SANDBOX |
| --save-session | Gibt an, ob die Playwright-MCP-Sitzung im Ausgabeverzeichnis gespeichert werden soll. env PLAYWRIGHT_MCP_SAVE_SESSION |
| --secrets | Pfad zu einer Datei, die Geheimnisse im dotenv-Format enthält env PLAYWRIGHT_MCP_SECRETS_FILE |
| --shared-browser-context | Wiederverwendung desselben Browser-Kontexts zwischen allen verbundenen HTTP-Clients. env PLAYWRIGHT_MCP_SHARED_BROWSER_CONTEXT |
| --snapshot-boxes | Fügt die Begrenzungsbox jedes Elements als [box=x,y,width,height] in Snapshots ein. Koordinaten sind relativ zum Viewport, in CSS-Pixeln. env PLAYWRIGHT_MCP_SNAPSHOT_BOXES |
| --snapshot-mode | Gibt den Modus für Snapshots in Antworten an. 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 | Gibt das Attribut für Test-IDs an, Standard ist "data-testid" env PLAYWRIGHT_MCP_TEST_ID_ATTRIBUTE |
| --timeout-action | Gibt das Aktions-Timeout in Millisekunden an, Standard ist 5000ms env PLAYWRIGHT_MCP_TIMEOUT_ACTION |
| --timeout-navigation | Gibt das Navigations-Timeout in Millisekunden an, Standard ist 60000ms env PLAYWRIGHT_MCP_TIMEOUT_NAVIGATION |
| --timeout-settle | Wie lange nach jeder Aktion gewartet werden soll, bis ausgelöste Arbeiten abgeschlossen sind, in Millisekunden, Standard ist 500ms env PLAYWRIGHT_MCP_TIMEOUT_SETTLE |
| --user-agent | Gibt die User-Agent-Zeichenfolge an 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 | Gibt die Browser-Viewport-Größe in Pixeln an, 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 sich mit Ihrem vorhandenen Browser über die Browser-Erweiterung verbinden.
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 --user-data-dir-Argument ü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-Stammverzeichnis des MCP-Clients abgeleitet, sodass verschiedene Projekte automatisch separate Profile erhalten.
[!IMPORTANT] Ein persistentes Profil kann jeweils nur von einer Browser-Instanz verwendet werden. Gleichzeitige MCP-Clients, die denselben Workspace verwenden, führen daher zu Konflikten. 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-Konfiguration oder über das --storage-state-Argument an den Browser übergeben. 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, sich mit vorhandenen Browser-Tabs zu verbinden 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
--user-data-dir-Argument starten. Dadurch bleiben alle Browserdaten zwischen den Sitzungen erhalten. - Mit einer Speicherzustandsdatei über das
--storage-state-Argument starten. Dadurch werden Cookies und lokaler Speicher aus der Datei in einen isolierten Browser-Kontext geladen.
Für den Seitenzustand können Sie verwenden:
--init-pagezeigt auf eine TypeScript-Datei, die auf dem Playwright-Seitenobjekt ausgewertet wird. Damit 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-scriptzeigt auf eine JavaScript-Datei, 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 --config-Befehlszeilenoption 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;
/**
* 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 to save output files.
*/
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;
};
/**
* Whether to send image responses to the client. Can be "allow", "omit", or "auto". Defaults to "auto", which sends images if the client can display them.
*/
imageResponses?: 'allow' | 'omit';
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 grafischer Oberfläche auf einem System ohne Display oder aus Worker-Prozessen der IDEs ausführen,
führen Sie den MCP-Server aus einer Umgebung mit DISPLAY aus und übergeben Sie das --port-Flag, 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-Sicherheitsempfehlungen für Hinweise zur Sicherung 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);
// ...
});
Tools
Kernautomatisierung
- browser_click
- Titel: Klicken
- Beschreibung: Führt einen Klick auf einer Webseite aus
- 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): Gibt an, ob ein Doppelklick anstelle eines einfachen Klicks ausgeführt werden sollbutton(Zeichenkette, optional): Zu klickende Maustaste, standardmäßig linksmodifiers(Array, optional): Zu drückende Modifikatortasten
- Schreibgeschützt: false
- browser_close
- Titel: Browser schließen
- Beschreibung: Schließt die Seite
- 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. Standardmäßig "info".all(boolesch, optional): Gibt alle Konsolenmeldungen seit Beginn der Sitzung zurück, nicht nur seit der letzten Navigation. Standardmäßig false.filename(Zeichenkette, optional): Dateiname, unter dem die Konsolenmeldungen gespeichert werden sollen. Wenn nicht angegeben, werden die Meldungen als Text zurückgegeben.
- Schreibgeschützt: true
- browser_drag
- Titel: Maus ziehen
- Beschreibung: Führt Drag-and-Drop zwischen zwei Elementen aus
- 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: Legt Dateien oder MIME-typisierte Daten auf einem Element ab, als ob sie von außerhalb der Seite gezogen würden. Mindestens einer der Parameter "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 den Dateien, die auf dem 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_evaluate
- Titel: JavaScript auswerten
- Beschreibung: Wertet einen JavaScript-Ausdruck auf der Seite oder einem Element aus
- 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, unter dem das Ergebnis gespeichert werden soll. Wenn nicht angegeben, wird das Ergebnis als Text zurückgegeben.
- Schreibgeschützt: false
- browser_file_upload
- Titel: Dateien hochladen
- Beschreibung: Lädt eine oder mehrere Dateien hoch
- Parameter:
paths(Array, optional): Die absoluten Pfade zu den hochzuladenden Dateien. Kann eine einzelne Datei oder mehrere Dateien sein. Wenn weggelassen, wird die Dateiauswahl abgebrochen.
- Schreibgeschützt: false
- browser_fill_form
- Titel: Formular ausfüllen
- Beschreibung: Füllt mehrere Formularfelder aus
- Parameter:
fields(Array): Auszufüllende Felder
- Schreibgeschützt: false
- browser_find
- Titel: Im Seiten-Snapshot suchen
- Beschreibung: Durchsucht den Barrierefreiheits-Snapshot der aktuellen Seite nach Text oder einem regulären Ausdruck. Gibt passende Snapshot-Knoten mit einigen Zeilen umgebenden Kontexts zurück (wie Suchausschnitte), jeweils unter ihrem Pfad von der Wurzel des Baums angezeigt, was günstiger ist als das Erfassen des gesamten Snapshots, wenn Sie nur ein Element und seine Referenz lokalisieren müssen.
- Parameter:
text(Zeichenkette, optional): Klartext, der 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, der im Seiten-Snapshot gesucht werden soll. Die Übereinstimmung ist standardmäßig Groß-/Kleinschreibung beachtend; umgeben Sie das Muster mit Schrägstrichen, um Flags hinzuzufügen, z. B. "/error/i" für Groß-/Kleinschreibung nicht beachtend. Geben Sie entweder Text oder Regex an, nicht beides.
- Schreibgeschützt: true
- browser_handle_dialog
- Titel: Dialog behandeln
- Beschreibung: Behandelt einen Dialog
- Parameter:
accept(boolesch): Gibt an, ob der Dialog akzeptiert werden soll.promptText(Zeichenkette, optional): Der Text der Eingabeaufforderung im Falle eines Eingabeaufforderungs-Dialogs.
- Schreibgeschützt: false
- browser_hover
- Titel: Maus darüber bewegen
- Beschreibung: Bewegt die Maus über ein Element auf der Seite
- 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: Navigiert zu einer URL
- Parameter:
url(Zeichenkette): Die URL, zu der navigiert werden soll
- Schreibgeschützt: false
- browser_navigate_back
- Titel: Zurück gehen
- Beschreibung: Geht zur vorherigen Seite im Verlauf zurück
- 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): Gibt nur diesen Teil der Anfrage zurück. Weglassen, um vollständige Details zurückzugeben.filename(Zeichenkette, optional): Dateiname, unter dem das Ergebnis gespeichert werden soll. 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): Gibt an, ob erfolgreiche statische Ressourcen wie Bilder, Schriftarten, Skripte usw. eingeschlossen werden sollen. Standardmäßig false.filter(Zeichenkette, optional): Gibt nur Anfragen zurück, deren URL diesem Regexp entspricht (z. B. "/api/.*user").filename(Zeichenkette, optional): Dateiname, unter dem die Netzwerkanfragen gespeichert werden sollen. Wenn nicht angegeben, werden die Anfragen als Text zurückgegeben.
- Schreibgeschützt: true
- browser_press_key
- Titel: Eine Taste drücken
- Beschreibung: Drückt eine Taste auf der Tastatur
- Parameter:
key(Zeichenkette): Name der zu drückenden Taste oder ein zu erzeugendes Zeichen, wieArrowLeftodera
- Schreibgeschützt: false
- browser_resize
- Titel: Browserfenster skalieren
- Beschreibung: Skaliert das Browserfenster
- 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: Führt einen Playwright-Codeausschnitt aus. 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. Wenn sowohl Code als auch Dateiname angegeben sind, wird der Code ignoriert.
- Schreibgeschützt: false
- browser_select_option
- Titel: Option auswählen
- Beschreibung: Wählt eine Option in einem Dropdown aus
- 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 den Barrierefreiheits-Snapshot der aktuellen Seite, dies ist besser als ein Screenshot
- Parameter:
target(Zeichenkette, optional): Exakte Ziel-Elementreferenz aus dem Seiten-Snapshot oder ein eindeutiger Element-Selektorfilename(Zeichenkette, optional): Speichert den Snapshot in einer Markdown-Datei, anstatt ihn in der Antwort zurückzugeben.depth(Zahl, optional): Begrenzt die Tiefe des Snapshot-Baumsboxes(boolesch, optional): Fügt die Begrenzungsbox 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: Einen 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(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-Selektortype(Zeichenkette, optional): Bildformat für den Screenshot. Wenn nicht gesetzt, wird es aus der Dateinamenerweiterung abgeleitet, andernfalls png.filename(Zeichenkette, optional): Dateiname, unter dem der Screenshot gespeichert werden soll. Standardmäßigpage-{timestamp}.{png|jpeg|webp}, wenn nicht angegeben. Bevorzugen Sie relative Dateinamen, um innerhalb des Ausgabeverzeichnisses zu bleiben.fullPage(boolesch, optional): Wenn true, wird ein Screenshot der gesamten scrollbaren Seite aufgenommen, anstatt des aktuell sichtbaren Viewports. Kann nicht mit Element-Screenshots verwendet werden.scale(Zeichenkette): Skalierung der Bildauflösung. "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: Gibt Text in ein bearbeitbares Element ein
- 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-Selektortext(Zeichenkette): Text, der in das Element eingegeben werden sollsubmit(boolesch, optional): Gibt an, ob der eingegebene Text übermittelt werden soll (danach Enter drücken)slowly(boolesch, optional): Gibt an, ob jeweils ein Zeichen auf einmal eingegeben werden soll. Nützlich zum Auslösen von Tastenhandlern auf der Seite. Standardmäßig wird der gesamte Text auf einmal ausgefüllt.
- Schreibgeschützt: false
- browser_wait_for
- Titel: Warten auf
- Beschreibung: Warten, bis Text erscheint oder verschwindet oder eine bestimmte Zeit vergeht
- Parameter:
time(Zahl, optional): Die Wartezeit in Sekundentext(Zeichenkette, optional): Der Text, auf den gewartet werden solltextGone(Zeichenkette, 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(Zeichenkette): Auszuführende Operationindex(Zahl, optional): Tab-Index, verwendet für Schließen/Auswählen. Wenn beim Schließen weggelassen, wird der aktuelle Tab geschlossen.url(Zeichenkette, optional): URL, zu der im neuen Tab navigiert werden soll, verwendet für Neu.
- Schreibgeschützt: false
Browser-Installation
Konfiguration (optional ü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 (optional über --caps=network)
- browser_network_state_set
- Titel: Netzwerkstatus festlegen
- Beschreibung: Setzt den Browser-Netzwerkstatus auf online oder offline. Im Offline-Modus schlagen alle Netzwerkanfragen fehl.
- Parameter:
state(Zeichenkette): Auf "offline" setzen, um den Offline-Modus zu simulieren, "online", um die Netzwerkverbindung wiederherzustellen
- Schreibgeschützt: false
- browser_route
- Titel: Netzwerkanfragen simulieren
- Beschreibung: Eine Route einrichten, um Netzwerkanfragen zu simulieren, die einem URL-Muster entsprechen
- Parameter:
pattern(Zeichenkette): URL-Muster zum Abgleichen (z. B. "/api/users", "/*.{png,jpg}")status(Zahl, optional): HTTP-Statuscode, der zurückgegeben werden soll (Standard: 200)body(Zeichenkette, optional): Antworttext (Text oder JSON-Zeichenkette)contentType(Zeichenkette, optional): Content-Type-Header (z. B. "application/json", "text/html")headers(Array, optional): Header, die im Format "Name: Wert" hinzugefügt werden sollenremoveHeaders(Zeichenkette, 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(Zeichenkette, optional): URL-Muster zum Entfernen der Route (weglassen, um alle Routen zu entfernen)
- Schreibgeschützt: false
Speicher (optional ü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(Zeichenkette): Name des zu löschenden Cookies
- Schreibgeschützt: false
- browser_cookie_get
- Titel: Cookie abrufen
- Beschreibung: Ein bestimmtes Cookie anhand des Namens abrufen
- Parameter:
name(Zeichenkette): Name des abzurufenden Cookies
- Schreibgeschützt: true
- browser_cookie_list
- Titel: Cookies auflisten
- Beschreibung: Alle Cookies auflisten (optional nach Domain/Pfad gefiltert)
- Parameter:
domain(Zeichenkette, optional): Cookies nach Domain filternpath(Zeichenkette, optional): Cookies nach Pfad filtern
- Schreibgeschützt: true
- browser_cookie_set
- Titel: Cookie festlegen
- Beschreibung: Ein Cookie mit optionalen Flags festlegen (Domain, Pfad, Ablauf, httpOnly, secure, sameSite)
- Parameter:
name(Zeichenkette): Cookie-Namevalue(Zeichenkette): Cookie-Wertdomain(Zeichenkette, optional): Cookie-Domainpath(Zeichenkette, optional): Cookie-Pfadexpires(Zahl, optional): Cookie-Ablauf als Unix-ZeitstempelhttpOnly(Boolescher Wert, optional): Ob das Cookie nur über HTTP zugänglich istsecure(Boolescher Wert, optional): Ob das Cookie sicher istsameSite(Zeichenkette, optional): SameSite-Attribut des Cookies
- Schreibgeschützt: false
- browser_localstorage_clear
- Titel: localStorage leeren
- Beschreibung: Den gesamten localStorage leeren
- Parameter: Keine
- Schreibgeschützt: false
- browser_localstorage_delete
- Titel: localStorage-Element löschen
- Beschreibung: Ein localStorage-Element löschen
- Parameter:
key(Zeichenkette): Zu löschender Schlüssel
- Schreibgeschützt: false
- browser_localstorage_get
- Titel: localStorage-Element abrufen
- Beschreibung: Ein localStorage-Element anhand des Schlüssels abrufen
- Parameter:
key(Zeichenkette): 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 festlegen
- Beschreibung: Ein localStorage-Element festlegen
- Parameter:
key(Zeichenkette): Festzulegender Schlüsselvalue(Zeichenkette): Festzulegender Wert
- Schreibgeschützt: false
- browser_sessionstorage_clear
- Titel: sessionStorage leeren
- Beschreibung: Den gesamten sessionStorage leeren
- Parameter: Keine
- Schreibgeschützt: false
- browser_sessionstorage_delete
- Titel: sessionStorage-Element löschen
- Beschreibung: Ein sessionStorage-Element löschen
- Parameter:
key(Zeichenkette): Zu löschender Schlüssel
- Schreibgeschützt: false
- browser_sessionstorage_get
- Titel: sessionStorage-Element abrufen
- Beschreibung: Ein sessionStorage-Element anhand des Schlüssels abrufen
- Parameter:
key(Zeichenkette): 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 festlegen
- Beschreibung: Ein sessionStorage-Element festlegen
- Parameter:
key(Zeichenkette): Festzulegender Schlüsselvalue(Zeichenkette): Festzulegender Wert
- Schreibgeschützt: false
- browser_set_storage_state
- Titel: Speicherzustand wiederherstellen
- Beschreibung: Speicherzustand (Cookies, lokaler Speicher) aus einer Datei wiederherstellen. Dabei werden vorhandene Cookies und lokaler Speicher vor der Wiederherstellung gelöscht.
- Parameter:
filename(Zeichenkette): Pfad zur Speicherzustandsdatei, aus der wiederhergestellt werden soll
- Schreibgeschützt: false
- browser_storage_state
- Titel: Speicherzustand speichern
- Beschreibung: Speicherzustand (Cookies, lokaler Speicher) zur späteren Wiederverwendung in einer Datei speichern
- Parameter:
filename(Zeichenkette, optional): Dateiname zum Speichern des Speicherzustands. Standardmäßigstorage-state-{timestamp}.json, wenn nicht angegeben.
- Schreibgeschützt: true
DevTools (optional über --caps=devtools)
- browser_annotate
- Titel: Aktuelle Seite annotieren
- Beschreibung: Das Playwright-Dashboard im Annotationsmodus für die aktuelle Seite öffnen und warten, bis der Benutzer Annotationen zeichnet. Gibt den annotierten Screenshot, die ARIA-Momentaufnahme 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(Zeichenkette, optional): Für Menschen lesbare Elementbeschreibung, die beim Hinzufügen der Hervorhebung verwendet wurde; muss mit dem an browser_highlight übergebenen Wert übereinstimmen.target(Zeichenkette, optional): Exakte Ziel-Elementreferenz aus der Seiten-Momentaufnahme oder ein eindeutiger Element-Selektor
- Schreibgeschützt: true
- browser_highlight
- Titel: Element hervorheben
- Beschreibung: Eine dauerhafte Hervorhebungsüberlagerung um das Element auf der Seite anzeigen.
- 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 der Seiten-Momentaufnahme oder ein eindeutiger Element-Selektorstyle(Zeichenkette, 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: Die Skriptausführung nach einer Pause fortsetzen. Wenn mit step auf true aufgerufen, wird die Ausführung vor der nächsten Aktion erneut pausiert.
- Parameter:
step(Boolescher Wert, optional): Wenn true, wird die Ausführung vor der nächsten Aktion erneut pausiert, was eine schrittweise Fehlersuche ermöglicht.location(Zeichenkette, optional): Ausführung an einer bestimmten : pausieren, z. B. "example.spec.ts:42".
- Schreibgeschützt: false
- browser_start_recording
- Titel: Aufzeichnung von Benutzeraktionen starten
- Beschreibung: Aufzeichnung der Aktionen starten, die der Benutzer im Browser als Playwright-Code ausführt. Verwenden Sie dies, wenn der Benutzer einen Ablauf manuell demonstrieren möchte. Rufen Sie browser_stop_recording auf, wenn der Benutzer angibt, fertig zu sein, um die aufgezeichneten Aktionen abzurufen.
- Parameter: Keine
- Schreibgeschützt: true
- browser_start_tracing
- Titel: Tracing starten
- Beschreibung: Trace-Aufzeichnung starten
- Parameter: Keine
- Schreibgeschützt: true
- browser_start_video
- Titel: Video starten
- Beschreibung: Videoaufzeichnung starten
- Parameter:
filename(Zeichenkette, optional): Dateiname zum Speichern des Videos.size(Objekt, optional): Videogröße
- Schreibgeschützt: true
- browser_stop_recording
- Titel: Aufzeichnung von Benutzeraktionen stoppen
- Beschreibung: Die mit browser_start_recording gestartete Aufzeichnung stoppen und die aufgezeichneten Aktionen als Playwright-Code zurückgeben.
- Parameter: Keine
- Schreibgeschützt: true
- browser_stop_tracing
- Titel: Tracing stoppen
- Beschreibung: Trace-Aufzeichnung stoppen
- Parameter: Keine
- Schreibgeschützt: true
- browser_stop_video
- Titel: Video stoppen
- Beschreibung: Videoaufzeichnung stoppen
- Parameter: Keine
- Schreibgeschützt: true
- browser_video_chapter
- Titel: Videokapitel
- Beschreibung: Ein Kapitelmarker zur Videoaufzeichnung hinzufügen. Zeigt eine Vollbild-Kapitelkarte mit unscharfem Hintergrund an.
- Parameter:
title(Zeichenkette): Kapiteltiteldescription(Zeichenkette, optional): Kapitelbeschreibungduration(Zahl, optional): Dauer in Millisekunden, wie lange die Kapitelkarte angezeigt wird
- Schreibgeschützt: true
- browser_video_hide_actions
- Titel: Aktionsüberlagerungen ausblenden
- Beschreibung: Das Annotieren von Aktionen auf der Seite stoppen.
- Parameter: Keine
- Schreibgeschützt: true
- browser_video_show_actions
- Titel: Aktions-Overlays anzeigen
- Beschreibung: Markiert nachfolgende Aktionen auf der Seite mit einem Hinweis, der die Aktion benennt und das Zielelement hervorhebt. Nützlich während Videoaufnahmen oder Screencasts.
- Parameter:
duration(Zahl, optional): Wie lange jede Aktionsbeschriftung auf dem Bildschirm bleibt, in Millisekunden. Standard ist 500.position(Zeichenkette, optional): Wo die Aktionsbeschriftung relativ zur Seite platziert wird. Standard ist oben rechts.cursor(Zeichenkette, optional): Cursor-Dekoration für Zeigeraktionen. „pointer“ (Standard) animiert einen Mauszeiger vom vorherigen Aktionspunkt zum nächsten; „none“ deaktiviert die Cursor-Dekoration.
- Schreibgeschützt: true
Koordinatenbasiert (optional aktiviert via --caps=vision)
- browser_mouse_click_xy
- Titel: Klicken
- Beschreibung: Maustaste an einer bestimmten Position klicken
- Parameter:
x(Zahl): X-Koordinatey(Zahl): Y-Koordinatebutton(Zeichenkette, optional): Zu klickende Taste, Standard ist linksclickCount(Zahl, optional): Anzahl der Klicks, Standard ist 1delay(Zahl, optional): Wartezeit 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(Zeichenkette, optional): Zu drückende Taste, Standard ist links
- Schreibgeschützt: false
- browser_mouse_drag_xy
- Titel: Maus ziehen
- Beschreibung: Linke Maustaste zu einer bestimmten Position ziehen
- Parameter:
startX(Zahl): Start-X-KoordinatestartY(Zahl): Start-Y-KoordinateendX(Zahl): End-X-KoordinateendY(Zahl): End-Y-Koordinate
- Schreibgeschützt: false
- browser_mouse_move_xy
- Titel: Maus bewegen
- Beschreibung: Maus zu einer bestimmten Position bewegen
- Parameter:
x(Zahl): X-Koordinatey(Zahl): Y-Koordinate
- Schreibgeschützt: false
- browser_mouse_up
- Titel: Maus loslassen
- Beschreibung: Maus loslassen
- Parameter:
button(Zeichenkette, optional): Loszulassende Taste, Standard ist links
- Schreibgeschützt: false
- browser_mouse_wheel
- Titel: Mausrad scrollen
- Beschreibung: Mausrad scrollen
- Parameter:
deltaX(Zahl): X-DeltadeltaY(Zahl): Y-Delta
- Schreibgeschützt: false
PDF-Erzeugung (optional aktiviert via --caps=pdf)
- browser_pdf_save
- Titel: Als PDF speichern
- Beschreibung: Seite als PDF speichern
- Parameter:
filename(Zeichenkette, optional): Dateiname zum Speichern der PDF. Standard istpage-{timestamp}.pdf, falls nicht angegeben. Bevorzugen Sie relative Dateinamen, um innerhalb des Ausgabeverzeichnisses zu bleiben.
- Schreibgeschützt: true
Test-Assertions (optional aktiviert via --caps=testing)
- browser_generate_locator
- Titel: Locator für Element erstellen
- Beschreibung: Locator für das angegebene Element zur Verwendung in Tests generieren
- Parameter:
element(Zeichenkette, optional): Menschenlesbare 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: true
- browser_verify_element_visible
- Titel: Element sichtbar überprüfen
- Beschreibung: Überprüfen, ob das Element auf der Seite sichtbar ist
- Parameter:
role(Zeichenkette): ROLLE des Elements. Kann im Snapshot so gefunden werden:- {ROLE} "Accessible Name":accessibleName(Zeichenkette): ZUGÄNGLICHER_NAME des Elements. Kann im Snapshot so gefunden werden:- role "{ACCESSIBLE_NAME}"
- Schreibgeschützt: false
- browser_verify_list_visible
- Titel: Liste sichtbar überprüfen
- Beschreibung: Überprüfen, ob die Liste auf der Seite sichtbar ist
- Parameter:
element(Zeichenkette): Menschenlesbare Listenbeschreibungtarget(Zeichenkette): Exakte Ziel-Elementreferenz, die auf die Liste verweistitems(Array): Zu überprüfende Elemente
- Schreibgeschützt: false
- browser_verify_text_visible
- Titel: Text sichtbar überprüfen
- Beschreibung: Überprüfen, ob der Text auf der Seite sichtbar ist. Bevorzugen Sie browser_verify_element_visible, wenn möglich.
- Parameter:
text(Zeichenkette): TEXT zur Überprüfung. Kann im Snapshot so gefunden werden:- role "Accessible Name": {TEXT}oder so:- text: {TEXT}
- Schreibgeschützt: false
- browser_verify_value
- Titel: Wert überprüfen
- Beschreibung: Elementwert überprüfen
- Parameter:
type(Zeichenkette): Typ des Elementselement(Zeichenkette): Menschenlesbare Elementbeschreibungtarget(Zeichenkette): Exakte Ziel-Elementreferenz aus dem Seiten-Snapshotvalue(Zeichenkette): Zu überprüfender Wert. Für Kontrollkästchen verwenden Sie „true“ oder „false“.
- Schreibgeschützt: false