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.
Related MCP server: MCP Playwright Server
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
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
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