Skip to main content
Glama
manganate006

playwright-spa-mcp

by manganate006

🎭 Playwright SPA MCP

The Playwright MCP server built for modern web apps β€” persistent sessions, React/Vue/Angular support, 143+ devices and smart DOM waiting.

License: MIT Node MCP SDK

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, then spa_chain [type-realistic β†’ click β†’ wait-for-idle], then spa_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 chromium

Claude 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.js

Tools

22 tools, spa_ prefix. Chain-action list, 143+ device shortcuts and CLI usage: docs/ADVANCED.md.

Group

Tools

πŸ“Έ Screenshot & navigation

spa_screenshot, spa_navigate, spa_go_back, spa_go_forward, spa_wait_idle

πŸ“ Interactions

spa_click, spa_fill, spa_type_realistic, spa_upload, spa_drag

⛓️ Chains

spa_chain (run many actions in one call)

πŸ” Sessions

spa_session_start, spa_session_end, spa_session_list

πŸ”Ž Inspection

spa_get_text, spa_assert, spa_evaluate, spa_http_request

πŸ–ΌοΈ iframes

spa_iframe_click, spa_iframe_fill

ℹ️ Discovery

spa_list_devices, spa_list_actions

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 chromium

  • Local 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 explicit wait-for / wait-for-idle

  • Sessions 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.mangi.fr

🎾 ATP tennis stats since 1968

piscinade.com

🏊 Pool-party finder in France

License

MIT Β© manganate006

Install Server
A
license - permissive license
A
quality
C
maintenance

Maintenance

–Maintainers
–Response time
–Release cycle
–Releases (12mo)
Commit activity

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

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