playwright-spa-mcp
๐ญ Playwright SPA MCP
The Playwright MCP server built for modern web apps โ persistent sessions, React/Vue/Angular support, 143+ devices and smart DOM waiting.
Installation ยท Why ยท Tools ยท Examples ยท Limitations
Overview
An MCP server that drives a real Chromium browser, purpose-built for Single Page Applications. Your assistant can log in, click, type and screenshot โ and the SPA's state survives across calls:
You: Log into app.example.com, open the dashboard and screenshot it.
Assistant: (calls
spa_session_start, thenspa_chain[type-realistic โ click โ wait-for-idle], thenspa_screenshot) Logged in and captured the dashboard โ React state preserved across the session.
Why this server?
Feature | playwright-spa-mcp | Other Playwright MCPs |
Persistent sessions | โ | โ |
React/Vue/Angular detection | โ | โ |
Smart DOM idle waiting | โ | โ |
Realistic typing | โ | โ |
Device emulation | 143+ | Limited |
Action chains | โ | โ |
HTTP with browser cookies | โ | โ |
Installation
# One command โ no clone needed
claude mcp add playwright-spa -- npx -y github:manganate006/playwright-spa-mcp
# Install the Chromium browser Playwright drives
npx playwright install chromiumClaude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"playwright-spa": {
"command": "npx",
"args": ["-y", "github:manganate006/playwright-spa-mcp"]
}
}
}git clone https://github.com/manganate006/playwright-spa-mcp.git
cd playwright-spa-mcp
npm install
npx playwright install chromium
claude mcp add playwright-spa -- node $(pwd)/src/index.jsTools
22 tools, spa_ prefix. Chain-action list, 143+ device shortcuts and CLI usage: docs/ADVANCED.md.
Group | Tools |
๐ธ Screenshot & navigation |
|
๐ Interactions |
|
โ๏ธ Chains |
|
๐ Sessions |
|
๐ Inspection |
|
๐ผ๏ธ iframes |
|
โน๏ธ Discovery |
|
Examples
Log into a React app and keep the session โ realistic typing fires React's onChange:
spa_session_start({ session: "myapp" })
spa_chain({
session: "myapp",
url: "https://app.example.com/login",
spaMode: "react",
chain: [
{ action: "type-realistic", selector: "#email", value: "user@example.com" },
{ action: "type-realistic", selector: "#password", value: "secret123" },
{ action: "click", selector: "button[type=submit]" },
{ action: "wait-for-idle" },
{ action: "screenshot" }
]
})
// Same session โ React state is preserved
spa_click({ session: "myapp", selector: ".dashboard-item" })Mobile device emulation:
spa_screenshot({ url: "https://example.com", device: "iPhone 15 Pro", fullPage: true })Authenticated API call reusing the session cookies:
spa_http_request({ session: "myapp", url: "https://api.example.com/user/profile", method: "GET" })Limitations
Chromium only โ Firefox/WebKit are not wired up; requires
npx playwright install chromiumLocal browser โ spawns a real browser process; not suited to sandboxes without one
SPA heuristics โ React/Vue/Angular readiness is detected heuristically (
spaMode: "auto"); heavy custom frameworks may need explicitwait-for/wait-for-idleSessions are in-memory โ they live with the server process and don't persist across restarts
SPA framework support
Detects and waits correctly for React (finishes rendering, proper onChange), Vue (v-model bindings) and Angular (Zone.js stability). Use spaMode: "auto" to detect automatically. Details in docs/ADVANCED.md.
Built with this MCP
Project | Description |
๐พ ATP tennis stats since 1968 | |
๐ Pool-party finder in France |
License
MIT ยฉ manganate006
This server cannot be installed
Maintenance
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/manganate006/playwright-spa-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server