Skip to main content
Glama
manganate006

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.

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

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables automated browser testing of web applications using Playwright, supporting user interactions, form submissions, console monitoring, network request inspection, and visual verification through screenshots.
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to control web browsers through Playwright automation, providing 50+ tools for navigation, interaction, testing, accessibility audits, and visual testing across Chromium, Firefox, and WebKit.
    10
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    A universal browser automation server featuring 63 tools for programmatic Chrome control, multi-tab management, and media interaction using Playwright. It enables advanced actions like session recording, performance profiling, and pixel-based interaction through a safe, isolated browser profile.
    63
    12
    1
    MIT

View all related MCP servers

Related MCP Connectors

  • AI-powered browser automation β€” navigate, click, fill forms, and extract data from any website.

  • Automate cloud browsers to navigate websites, interact with elements, and extract structured data.…

  • AI QA that runs your app in a browser on every pull request: projects, test targets, test cases.

View all MCP Connectors

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