This server is a Playwright MCP Proxy that provides browser automation capabilities with optimized binary data handling, alongside basic item management features.
Core Capabilities:
Browser Automation: Access the full suite of Playwright tools for web navigation, interaction, and content extraction (navigate, click, fill forms, take screenshots, get visible text, generate PDFs)
Efficient Binary Data Management: Automatically intercepts large binary data (screenshots, PDFs) from Playwright responses and stores them as blobs when exceeding size thresholds, replacing them with compact references to reduce token usage
Blob Storage Operations: Retrieve (
get_blob), list (list_blobs), and delete (delete_blob) stored binary data, with TTL-based automatic cleanup to prevent storage bloatItem CRUD Operations: Create, read, update, delete, and list generic items with name, description, metadata, filtering, and pagination
Health Monitoring: Check server operational status and configuration via
health_checktoolFlexible Configuration: Customize browser settings (type, headless mode, timeouts) and blob storage parameters (size limits, TTL, cleanup intervals) through environment variables
Docker Deployment: Run in containerized environments with pre-built images including Python, Node.js, and Playwright browsers, plus persistent storage volumes
⚠️ Note: There may be a schema mismatch between the actual server implementation and documentation—verify which capabilities are active in your deployment.
Enables browser automation through Playwright, supporting Firefox along with Chromium and WebKit for web scraping, testing, and taking screenshots or PDFs with optional stealth mode for anti-detection.
Uses Node.js runtime to execute the playwright-mcp subprocess for browser automation capabilities, handling screenshot generation, PDF creation, and web page interactions.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Skeleton MCP Servertake a screenshot of github.com and save it as a blob"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Playwright MCP Proxy
A proxy server for Microsoft's playwright-mcp that provides efficient handling of large binary data (screenshots, PDFs) through blob storage and supports browser pools for concurrent operations.
Version 2.0.0: Now with browser pools! Run multiple isolated browser instances with different configurations simultaneously.
Features
Browser Pools: Multiple isolated browser instances organized into named pools with different configurations
Concurrent Operations: Lease browser instances for exclusive use, enabling parallel browser automation
Playwright Browser Automation: Full access to all playwright-mcp browser automation tools
Stealth Mode: Built-in anti-detection capabilities (see STEALTH.md)
Efficient Binary Handling: Large screenshots and PDFs automatically stored as blobs to reduce token usage
Blob Storage: Built-in blob management using mcp-mapped-resource-lib
Automatic Cleanup: TTL-based automatic expiration of old blobs
Docker Support: Containerized deployment with multi-runtime support (Python + Node.js + Playwright)
Health Monitoring: Real-time pool status and instance health checks
Quick Start
Prerequisites
Python 3.10 or higher
Node.js 18+ (for playwright-mcp)
uv package manager (recommended)
Docker (optional, for containerized deployment)
Installation
Clone this repository:
Install dependencies:
Create your environment file:
Run the server:
The server will:
Start the playwright-mcp subprocess(es) via npx
Initialize blob storage
Initialize browser pools
Listen for MCP client connections on stdio
Browser Pools
Overview
Browser pools allow you to run multiple browser instances with different configurations:
Using Pools
All browser tools accept optional browser_pool and browser_instance parameters:
Monitoring Pools
See docs/BROWSER_POOLS_SPEC.md for complete configuration reference.
Docker Deployment
Build and run with Docker Compose:
This will:
Build a container with Python, Node.js, and Playwright browsers
Create persistent volumes for blob storage and playwright output
Start the proxy server
Configuration
Configure the proxy via environment variables in .env:
Global Browser Settings
PW_MCP_PROXY_BROWSER: Browser to use (chromium, firefox, webkit) - default: chromiumPW_MCP_PROXY_HEADLESS: Run headless - default: truePW_MCP_PROXY_CAPS: Capabilities (vision,pdf,testing,tracing) - default: vision,pdfPW_MCP_PROXY_TIMEOUT_ACTION: Action timeout in ms - default: 15000PW_MCP_PROXY_TIMEOUT_NAVIGATION: Navigation timeout in ms - default: 30000
Pool Configuration
PW_MCP_PROXY__<POOL>_INSTANCES: Number of instances in poolPW_MCP_PROXY__<POOL>_IS_DEFAULT: Mark as default poolPW_MCP_PROXY__<POOL>_DESCRIPTION: Pool descriptionPW_MCP_PROXY__<POOL>__<ID>_BROWSER: Browser for specific instancePW_MCP_PROXY__<POOL>__<ID>_ALIAS: Alias for specific instancePW_MCP_PROXY__<POOL>__<ID>_HEADLESS: Headless mode for specific instance
Stealth Settings (Anti-Detection)
PW_MCP_PROXY_ENABLE_STEALTH: Quick enable - Auto-configure stealth settings - default: falsePW_MCP_PROXY_USER_AGENT: Custom user agent string - optionalPW_MCP_PROXY_INIT_SCRIPT: Path to custom init script - optionalPW_MCP_PROXY_IGNORE_HTTPS_ERRORS: Ignore HTTPS errors - default: false
Tip: Simply set PW_MCP_PROXY_ENABLE_STEALTH=true to automatically enable anti-detection features!
See docs/STEALTH.md for detailed stealth configuration.
Blob Storage Settings
BLOB_STORAGE_ROOT: Storage directory - default: /mnt/blob-storageBLOB_MAX_SIZE_MB: Max size per blob - default: 500BLOB_TTL_HOURS: Time-to-live for blobs - default: 24BLOB_SIZE_THRESHOLD_KB: Size threshold for blob storage - default: 50BLOB_CLEANUP_INTERVAL_MINUTES: Cleanup frequency - default: 60
See example env files in the repository root for complete configuration examples.
How It Works
Binary Data Interception
The proxy automatically detects large binary data in playwright tool responses:
When playwright tools return screenshots or PDFs
If the data size exceeds the threshold (default: 50KB)
The proxy stores the binary data as a blob
The response is transformed to include a blob reference instead
Before (direct playwright-mcp):
After (through proxy):
Retrieving Blobs
Blob retrieval is handled by a separate MCP Resource Server. See mcp-mapped-resource-lib for details.
Available Tools
Browser Tools
All playwright-mcp tools are available with browser pool support:
browser_navigate: Navigate to a URLbrowser_click: Click an elementbrowser_fill: Fill a form fieldbrowser_screenshot: Take a screenshot (auto-stored as blob if large)browser_snapshot: Get ARIA snapshotbrowser_evaluate: Execute JavaScriptAnd 40+ more tools...
All tools accept optional browser_pool and browser_instance parameters.
Pool Management
browser_pool_status(pool_name): Get pool health, lease activity, and instance status
Architecture
Testing
Run the test suite:
Lint the code:
Project Structure
Benefits
Token Savings
Large screenshots can consume 50,000+ tokens. With blob storage:
Screenshots stored as blobs use ~100 tokens for the reference
Retrieve full data only when needed
Automatic cleanup prevents storage bloat
Concurrent Operations
Browser pools enable:
Parallel browser automation
Instance isolation for concurrent tasks
Different browser configurations for different use cases
Performance
Faster response times for tool calls
Reduced context window usage
Efficient deduplication of identical screenshots
FIFO instance leasing for fair resource allocation
Troubleshooting
npx not found
Ensure Node.js is installed and npx is in your PATH:
Playwright browser installation fails
Install browsers manually:
Blob storage permissions
Ensure the blob storage directory is writable:
Pool not starting
Check the pool configuration in your .env file. Ensure:
At least one pool has
IS_DEFAULT=trueInstance counts are valid (positive integers)
No alias conflicts with numeric instance IDs
License
MIT
Contributing
Contributions welcome! Please open an issue or pull request.