Playwright MCP HTTP Server
A standalone HTTP service that wraps the official @playwright/mcp package to provide browser automation capabilities via HTTP endpoints. This service enables the use of Playwright MCP in serverless environments where STDIO-based communication is not possible.
Features
š HTTP-based MCP Protocol - Access Playwright MCP via standard HTTP requests
š Serverless Compatible - Works in serverless/cloud environments (Railway, Render, Fly.io, GCP Cloud Run, etc.)
š MCP v0.1 Compatible - Fully implements the Model Context Protocol specification
š Full Playwright Support - All Playwright browser automation tools available
š³ Docker Ready - Includes Dockerfile for easy containerization
ā” Production Ready - Health checks, graceful shutdown, error handling
āļø Live Deployment - Pre-deployed to Google Cloud Run (see below)
Quick Start
Prerequisites
Node.js 18+ (LTS recommended)
npm or yarn
Installation
The server will start on port 8931 by default. You can access:
Service Info: http://localhost:8931/
Health Check: http://localhost:8931/health
MCP Endpoint: http://localhost:8931/mcp (POST only)
š Live Production Instance
The service is deployed to Google Cloud Run and ready to use:
Service URL: https://playwright-mcp-http-server-554655392699.us-central1.run.app
Health Check: https://playwright-mcp-http-server-554655392699.us-central1.run.app/health
MCP Endpoint: https://playwright-mcp-http-server-554655392699.us-central1.run.app/mcp (POST only)
You can use the live instance immediately without deploying your own. See Usage Examples below.
Development
Configuration
Configuration is done via environment variables. Create a .env file or set environment variables:
Variable | Default | Description |
|
| HTTP server port |
|
| Browser type (chromium, firefox, webkit) |
|
| Run browser in headless mode |
|
| Logging level (error, warn, info, debug) |
| (unlimited) | Maximum concurrent browser sessions |
| (none) | Session timeout in seconds |
|
| CORS allowed origins |
See .env.example for a template.
API Documentation
POST /mcp
Main MCP protocol endpoint. Accepts JSON-RPC 2.0 messages.
Request:
Response:
GET /health
Health check endpoint. Returns service status.
Response:
GET /
Service information endpoint.
Response:
Supported MCP Methods
The server supports all standard MCP methods:
initialize- Initialize MCP connectioninitialized- Confirm initializationtools/list- List available Playwright toolstools/call- Invoke a Playwright tool
Available Playwright Tools
All tools from @playwright/mcp are supported:
browser_navigate- Navigate to a URLbrowser_snapshot- Get accessibility snapshotbrowser_take_screenshot- Capture screenshotbrowser_click- Click an elementbrowser_type- Type textbrowser_fill_form- Fill form fieldsbrowser_evaluate- Execute JavaScriptbrowser_wait_for- Wait for conditionsbrowser_close- Close browser/page
For detailed tool parameters, see the Playwright MCP documentation.
Using the Server
Start locally with
npm install, build (npm run build), then runnpm start(or usenpm run devfor auto-reload during development).Call
/,/health, or/mcpvia curl/Postman/Playwright MCP clients; the/mcpendpoint accepts JSON-RPC POST requests (see the example below).Adjust behavior by editing
.envor setting env vars such asPORT,PLAYWRIGHT_BROWSER, andPLAYWRIGHT_HEADLESS.Alternatively, containerize the service with
docker build -t playwright-mcp-http-server .anddocker run -p 8931:8931 ...for consistent deployments.
Updating the GitHub Repository
Pull the latest changes before making edits:
git pull --rebase origin main.Use
git statusto see touched files, then stage withgit add <files>and commit with a descriptive message.Push your branch with
git push origin HEADand open a pull request if the change needs review.
Example Usage
Using curl
Using JavaScript/TypeScript
Note: The /mcp endpoint requires POST requests with JSON-RPC 2.0 formatted messages. GET requests will return a 404 error.
Deployment
Railway
Create a new Railway project
Connect your Git repository
Railway will auto-detect Node.js and use
npm startSet environment variables if needed
Deploy!
The service will use Railway's $PORT environment variable automatically.
Render
Create a new Web Service on Render
Connect your Git repository
Build command:
npm install && npm run buildStart command:
npm startSet environment variables if needed
Deploy!
Google Cloud Platform (Cloud Run)
See DEPLOY_GCP.md for detailed instructions.
Quick deploy:
Or manually:
Fly.io
Install Fly CLI:
curl -L https://fly.io/install.sh | shLogin:
fly auth loginLaunch app:
fly launchDeploy:
fly deploy
Docker
Docker Compose
Architecture
The service works by:
HTTP Server (Express) receives JSON-RPC requests
MCP Handler processes the requests and routes them to Playwright
Playwright Process Manager spawns
@playwright/mcpas a child processSTDIO Communication handles JSON-RPC messages via stdin/stdout
Response is formatted and returned via HTTP
This architecture allows the Playwright process to run independently while being accessible via HTTP.
Troubleshooting
Service won't start
Check that Node.js 18+ is installed:
node --versionVerify dependencies are installed:
npm installCheck logs for error messages
Playwright browser not found
The browser will be downloaded automatically on first run
For Docker, ensure system dependencies are installed (included in Dockerfile)
Check network connectivity for browser downloads
High memory usage
Consider setting
MAX_SESSIONSto limit concurrent sessionsEnsure
browser_closeis called when done with a sessionMonitor for memory leaks in long-running processes
Timeout errors
Increase request timeout if operations take longer than 30 seconds
Check network connectivity to target URLs
Verify Playwright process is not crashed
Development
Project Structure
Building
Running Tests
Note: Tests are not yet implemented but planned for future releases
License
MIT
References
Support
For issues and questions, please open an issue on the repository.