Playwright MCP Server π
π Active Fork of executeautomation/mcp-playwright
This repository is an actively maintained continuation of the original MCP Playwright server: π https://github.com/executeautomation/mcp-playwright
A Model Context Protocol server that provides browser automation capabilities using Playwright. This server enables LLMs to interact with web pages, take screenshots, generate test code, web scraps the page and execute JavaScript in a real browser environment. It is optimized for QA and E2E automation: screenshots, logs, assertions, API testing, plus full MCP HTTP/gateway support β built on the same Playwright foundations, complementary to Microsoftβs server.
Screenshot

Documentation | API reference
Installation
You can install the package using either npm, mcp-get, or Smithery:
Using npm:
Using mcp-get:
Using Smithery
To install Playwright MCP for Claude Desktop automatically via Smithery:
Installation in VS Code
Install the Playwright MCP server in VS Code using one of these buttons:
Alternatively, you can install the Playwright MCP server using the VS Code CLI:
After installation, the ExecuteAutomation Playwright MCP server will be available for use with your GitHub Copilot agent in VS Code.
Configuration to use Playwright Server
Here's the Claude Desktop configuration to use the Playwright server:
Streamable HTTP mode
The server supports the MCP Streamable HTTP transport so it can run behind gateways.
Start in HTTP mode (defaults to port
8000and path/mcp):npx @executeautomation/playwright-mcp-server --httpOverride the port or path:
npx @executeautomation/playwright-mcp-server --http --port 3000 --path /custom-mcp
How files are shared in HTTP mode
Generated artifacts (screenshots, PDFs, console logs, generated tests) are written into
/data/<session>/<resourceId>.<ext>on the server.Each Streamable HTTP session gets its own isolated resource namespace; links are only valid for that session and expire after the configured TTL (
--resource-ttl, default 600s). Session close or TTL expiry removes the files and their directories.Tool results return
resourceLinkspointing to download URLs:{scheme}://{host}:{port}{path}/resources/{sessionId}/{resourceId}/{filename}
(host from--host-name, scheme from--insecure, path from--path, default/mcp).In stdio mode, resource linking is disabled; tools only emit local paths.
This scope-based sharing prevents content leakage between sessions/clients while still giving HTTP clients and gateways stable download URIs.
Uploads in HTTP mode
The
playwright_upload_filetool accepts a localfilePathonly in stdio mode. In HTTP mode, you must first upload the file and passuploadResourceUri.Get the session-scoped upload URL by calling
construct_upload_url(HTTP mode only). It returns a POST multipart endpoint like{path}/uploads/{sessionId}; the session ID is embedded in the URL so no header is usually needed.Upload with
multipart/form-data(fieldfile). On success, the server responds with a session-scopedresourceUrisuch asmcp-uploads://<session>/<id>.Then call
playwright_upload_filewithuploadResourceUrito attach the uploaded file to the file input. Uploads are isolated per session/client like other resources.Agents must be able to run terminal/CLI commands (curl on Linux/macOS,
Invoke-WebRequest/iwron Windows) to upload the file before callingplaywright_upload_filein HTTP mode.Stdio mode continues to use local
filePath; HTTP mode prefers uploaded resources.
Client Configuration
Claude Desktop / VS Code (mcp.json):
Adjust url to match your host/port/path and use https if terminated by a proxy.
CLI flags
--http: Enable Streamable HTTP transport (default: off; stdio is used when omitted).--port <number>: HTTP port (default:8000, only relevant when--httpis set).--path <path>: Base HTTP path (default:/mcp, only relevant when--httpis set).--host-name <hostname>: Hostname used in generated download URLs (default: system hostname, only relevant when--httpis set).--listen <address>: Bind address for the HTTP server (default:0.0.0.0, only relevant when--httpis set).--insecure: Usehttpscheme for download links; omit to usehttps(only relevant when--httpis set).--resource-ttl <seconds>: TTL for generated resources (default:600seconds; only affects HTTP mode).--static-user-agent: Disable the default randomized User-Agent rotation (by default, each new browser launch picks a modern UA to reduce bot detection/CAPTCHAs).
Agents / Prompts
A starter agent prompt is provided in
AGENTS.md. Create an agent in VS Code (or your client) using that prompt as a template; customize as needed.For file uploads in HTTP mode, ensure the agent has permission to run terminal/CLI commands (curl on Linux/macOS,
Invoke-WebRequest/iwron Windows) because uploads are performed via the session-specific HTTP endpoint before callingplaywright_upload_file.
Contributing
Read the CONTRIBUTING.md guidelines for required tooling (pre-commit hooks, lint/test/build steps, conventional commits, documentation updates).
The CI workflow enforces the same standards; please mirror them locally before opening a PR.
Available Tools
Tool | Purpose | Notes |
| Open a URL with optional viewport/headless/browser type | Browser launched if needed |
| Capture screenshot of page/element | HTTP mode returns resource link |
| Save page as PDF | HTTP mode returns resource link |
| Retrieve browser console logs with filters | Log file registered when saved |
| Set a file into an
| In HTTP mode, upload file via
then pass
; stdio uses
|
(HTTP) | Return session-scoped upload URL/instructions | Use POST multipart (
field) to get
|
/
/
/
/
/
| Core page interactions | Browser required |
/
| Interact inside iframes | Provide iframe selector |
/
| Read visible page content | HTML tool supports cleaning options |
| Override User-Agent for browser context | |
/
/
| Navigation or close browser | |
| Execute JS in page | |
/
| Wait for and assert network responses | |
/
/
/
/
| HTTP API helpers | |
/
/
/
| Record and generate Playwright tests | Generated tests are exposed as resources in HTTP mode |
Docker Support
The Playwright MCP Server ships with a multi-stage Dockerfile that builds the app inside the container and uses the official Playwright base image. Browsers and system dependencies are already present, which avoids slow first-run downloads and version drift you can hit with slim Node images plus ad-hoc installs.
Building the Docker Image
The Docker build handles dependencies and the TypeScript build for you:
Running with Docker
You can run the MCP server using Docker in several ways:
Using Docker directly
Streamable HTTP mode in Docker
Mount
/datato persist session-scoped artifacts if desired.Adjust
--host-nameto the public hostname your clients/gateways use. Use--insecureforhttp; omit it forhttpsbehind a terminating proxy.Resource download URLs will be
http://<host>:8000/mcp/resources/<session>/<resourceId>/<filename>by default.The container default is headless (
PLAYWRIGHT_HEADLESS=1) and the Playwright base image already includes browsers.
Using Docker Compose (recommended for production HTTP)
Use the provided docker-compose.yml to run streamable HTTP with sensible defaults:
Defaults:
HTTP mode with
--path=/mcp,--listen=0.0.0.0,--port=8000, and a--host-nameplaceholder (replace with your public hostname).Ports:
8000:8000Volumes:
./data/app-data:/app/dataand./data/resource-data:/datafor persisted session artifacts.
Using Docker with MCP Clients
To use the Dockerized server with Claude Desktop or other MCP clients, you can configure them to use Docker:
Testing
This project uses Jest for testing. The tests are located in the src/__tests__ directory.
Running Tests
You can run the tests using one of the following commands:
The test coverage report will be generated in the coverage directory.
Running evals
The evals package loads an mcp client that then runs the index.ts file, so there is no need to rebuild between tests. You can load environment variables by prefixing the npx command. Full documentation can be found here.
Contributing
When adding new tools, please be mindful of the tool name length. Some clients, like Cursor, have a 60-character limit for the combined server and tool name (server_name:tool_name).
Our server name is playwright-mcp. Please ensure your tool names are short enough to not exceed this limit.
Star History
This server cannot be installed
Related Resources
Related MCP Servers
- AsecurityAlicenseAqualityA Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.Last updated -3024826,24423,496Apache 2.0