Install
openclaw skills install fastplaywrightHigh-performance browser automation with Fast Playwright MCP. Features token-optimized batch execution, intelligent element selection with fallback, diff detection for change tracking, and comprehensive diagnostics. Use for web testing, form automation, screenshots, navigation flows, and any browser-based task requiring efficient token usage.
openclaw skills install fastplaywrightHigh-performance browser automation skill using the Fast Playwright MCP server (@tontoko/fast-playwright-mcp). This fork of the Microsoft Playwright MCP provides significant token optimization, batch execution, and enhanced element discovery.
| Feature | Benefit |
|---|---|
| Token Optimization | 70-80% reduction via expectation parameter |
| Batch Execution | 90% token savings for multi-step workflows |
| Diff Detection | Track only changes, not full snapshots |
| Enhanced Selectors | Multiple selector types with automatic fallback |
| Diagnostic Tools | Advanced debugging and element discovery |
| Image Compression | JPEG format, quality control, resizing |
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["@tontoko/fast-playwright-mcp@latest"]
}
}
}
Follow these steps in order for optimal results:
Use browser_navigate to load the target page before any other operations.
For 2+ operations, ALWAYS use browser_batch_execute instead of individual tool calls.
Apply expectation parameters to reduce response size.
Enable diffOptions when tracking changes without navigation.
All browser tools support an expectation parameter to control response content:
{
"includeSnapshot": false, // 70-80% token reduction
"includeConsole": false, // Exclude console messages
"includeTabs": false, // Hide tab information
"includeCode": false, // Suppress code generation
"includeDownloads": false // Exclude download info
}
Limit snapshot content for focused analysis:
{
"snapshotOptions": {
"selector": ".main-content", // Capture specific section only
"maxLength": 2000, // Limit character count
"format": "aria" // Use accessibility tree format
}
}
Track only changes between operations:
{
"diffOptions": {
"enabled": true,
"format": "minimal", // Options: unified, split, minimal
"threshold": 0.1,
"maxDiffLines": 50,
"context": 3
}
}
#id, .class, tag)button, textbox, etc.)All element-based tools accept multiple selectors with automatic fallback:
{
"selectors": [
{ "css": "#submit-btn" },
{ "role": "button", "text": "Submit" },
{ "text": "Submit", "tag": "button" }
]
}
Selectors are tried in order until one succeeds. If multiple elements match, returns a candidate list for selection.
Execute multiple operations in a single request:
{
"tool": "browser_batch_execute",
"arguments": {
"steps": [
{ "tool": "browser_navigate", "arguments": { "url": "https://example.com/login" } },
{ "tool": "browser_type", "arguments": { "selectors": [{ "css": "#username" }], "text": "user@example.com" } },
{ "tool": "browser_type", "arguments": { "selectors": [{ "css": "#password" }], "text": "password123" } },
{ "tool": "browser_click", "arguments": { "selectors": [{ "role": "button", "text": "Login" }] } }
]
}
}
{
"tool": "browser_batch_execute",
"arguments": {
"steps": [
{
"tool": "browser_navigate",
"arguments": { "url": "https://example.com" },
"expectation": { "includeSnapshot": false },
"continueOnError": true
},
{
"tool": "browser_click",
"arguments": { "selectors": [{ "css": "#submit" }] },
"expectation": {
"includeSnapshot": true,
"snapshotOptions": { "selector": ".result-area" },
"diffOptions": { "enabled": true, "format": "minimal" }
}
}
],
"stopOnFirstError": false,
"globalExpectation": {
"includeConsole": false,
"includeTabs": false
}
}
}
continueOnError (per-step): Continue even if this step failsstopOnFirstError (global): Stop entire batch on first error{
"tool": "browser_batch_execute",
"arguments": {
"steps": [
{ "tool": "browser_navigate", "arguments": { "url": "https://example.com" } },
{
"tool": "browser_take_screenshot",
"arguments": {
"filename": "homepage.png",
"fullPage": true,
"expectation": { "includeSnapshot": false }
}
}
]
}
}
{
"tool": "browser_batch_execute",
"arguments": {
"steps": [
{ "tool": "browser_navigate", "arguments": { "url": "https://example.com/contact" } },
{ "tool": "browser_type", "arguments": { "selectors": [{ "css": "#name" }], "text": "John Doe" } },
{ "tool": "browser_type", "arguments": { "selectors": [{ "css": "#email" }], "text": "john@example.com" } },
{ "tool": "browser_type", "arguments": { "selectors": [{ "css": "#message" }], "text": "Hello World" } },
{ "tool": "browser_click", "arguments": { "selectors": [{ "role": "button", "text": "Send" }] } }
],
"globalExpectation": { "includeSnapshot": false }
}
}
{
"tool": "browser_batch_execute",
"arguments": {
"steps": [
{ "tool": "browser_navigate", "arguments": { "url": "https://example.com" } },
{ "tool": "browser_resize", "arguments": { "width": 1920, "height": 1080 } },
{ "tool": "browser_take_screenshot", "arguments": { "filename": "desktop.png" } },
{ "tool": "browser_resize", "arguments": { "width": 768, "height": 1024 } },
{ "tool": "browser_take_screenshot", "arguments": { "filename": "tablet.png" } },
{ "tool": "browser_resize", "arguments": { "width": 375, "height": 667 } },
{ "tool": "browser_take_screenshot", "arguments": { "filename": "mobile.png" } }
]
}
}
{
"tool": "browser_batch_execute",
"arguments": {
"steps": [
{ "tool": "browser_navigate", "arguments": { "url": "https://example.com/login" } },
{ "tool": "browser_type", "arguments": { "selectors": [{ "css": "#email" }], "text": "user@example.com" } },
{ "tool": "browser_type", "arguments": { "selectors": [{ "css": "#password" }], "text": "secret", "submit": true } },
{ "tool": "browser_wait_for", "arguments": { "text": "Dashboard" } }
],
"globalExpectation": { "diffOptions": { "enabled": true } }
}
}
Search for elements using multiple criteria:
{
"tool": "browser_find_elements",
"arguments": {
"searchCriteria": {
"text": "Submit",
"role": "button"
},
"maxResults": 5,
"enableEnhancedDiscovery": true
}
}
Comprehensive page analysis:
{
"tool": "browser_diagnose",
"arguments": {
"diagnosticLevel": "detailed",
"includePerformanceMetrics": true,
"includeAccessibilityInfo": true,
"includeTroubleshootingSuggestions": true
}
}
Diagnostic levels: none, basic, standard, detailed, full
Extract and analyze HTML content:
{
"tool": "browser_inspect_html",
"arguments": {
"selectors": [{ "css": ".content" }],
"depth": 3,
"maxSize": 50000,
"format": "html",
"optimizeForLLM": true
}
}
{
"tool": "browser_take_screenshot",
"arguments": {
"filename": "screenshot.jpg",
"type": "jpeg",
"expectation": {
"imageOptions": {
"format": "jpeg",
"quality": 50,
"maxWidth": 1280
}
}
}
}
Monitor specific network activity:
{
"tool": "browser_network_requests",
"arguments": {
"urlPatterns": ["/api/"],
"excludeUrlPatterns": ["analytics", "tracking"],
"methods": ["GET", "POST"],
"statusRanges": [{ "min": 200, "max": 299 }],
"maxRequests": 10,
"newestFirst": true
}
}
{
"tool": "browser_batch_execute",
"arguments": {
"steps": [
{ "tool": "browser_tab_new", "arguments": { "url": "https://example.com" } },
{ "tool": "browser_tab_list", "arguments": {} },
{ "tool": "browser_tab_select", "arguments": { "index": 0 } },
{ "tool": "browser_tab_close", "arguments": { "index": 1 } }
]
}
}
{ "tool": "browser_wait_for", "arguments": { "text": "Loading complete" } }
{ "tool": "browser_wait_for", "arguments": { "textGone": "Loading..." } }
{ "tool": "browser_wait_for", "arguments": { "time": 2 } }
{
"tool": "browser_console_messages",
"arguments": {
"consoleOptions": {
"levels": ["error", "warn"],
"maxMessages": 10,
"patterns": ["^Error:"],
"removeDuplicates": true
}
}
}
{
"tool": "browser_evaluate",
"arguments": {
"function": "() => document.title"
}
}
{
"tool": "browser_evaluate",
"arguments": {
"selectors": [{ "css": "#counter" }],
"function": "(element) => element.textContent"
}
}
{
"tool": "browser_handle_dialog",
"arguments": {
"accept": true,
"promptText": "Optional prompt response"
}
}
{
"tool": "browser_file_upload",
"arguments": {
"paths": ["/absolute/path/to/file.pdf"]
}
}
{
"tool": "browser_drag",
"arguments": {
"startSelectors": [{ "css": "#draggable" }],
"endSelectors": [{ "css": "#dropzone" }]
}
}
{
"tool": "browser_select_option",
"arguments": {
"selectors": [{ "css": "#country" }],
"values": ["us", "de"]
}
}
{
"tool": "browser_press_key",
"arguments": {
"key": "Enter"
}
}
Special keys: Enter, Tab, Escape, ArrowUp, ArrowDown, ArrowLeft, ArrowRight, Backspace, Delete, Home, End
continueOnError for non-critical stepsstopOnFirstError: false for best-effort executionbrowser_find_elements to discover alternativesbrowser_diagnose for page analysisbrowser_wait_for with specific conditionsincludeSnapshot: falsesnapshotOptions.selector to limit scopediffOptions.enabled: truemaxRequests in network filteringbrowser_navigate - Navigate to URLbrowser_click - Click elementbrowser_type - Type textbrowser_hover - Hover over elementbrowser_drag - Drag and dropbrowser_select_option - Select dropdown optionbrowser_press_key - Press keyboard keybrowser_file_upload - Upload filesbrowser_evaluate - Execute JavaScriptbrowser_wait_for - Wait for conditionbrowser_batch_execute - Execute multiple actionsbrowser_snapshot - Capture accessibility snapshotbrowser_take_screenshot - Take screenshotbrowser_console_messages - Get console outputbrowser_network_requests - List network requestsbrowser_find_elements - Find elements by criteriabrowser_diagnose - Page diagnosticsbrowser_inspect_html - HTML content extractionbrowser_tab_list - List all tabsbrowser_tab_new - Open new tabbrowser_tab_select - Switch to tabbrowser_tab_close - Close tabbrowser_navigate_back - Go backbrowser_navigate_forward - Go forwardbrowser_resize - Resize windowbrowser_close - Close browserbrowser_install - Install browserbrowser_handle_dialog - Handle alerts/confirms--caps=vision)browser_mouse_click_xy - Click at coordinatesbrowser_mouse_move_xy - Move mouse to coordinatesbrowser_mouse_drag_xy - Drag between coordinates--caps=pdf)browser_pdf_save - Save page as PDF