by jomon003
A comprehensive MCP (Model Context Protocol) server for browser automation using Playwright. This server provides 38 powerful tools for web scraping, testing, and automation.
navigate
, goForward
, goBack
(via scroll)click
, type
, hover
, dragAndDrop
, selectOption
moveMouse
, mouseMove
, mouseClick
, mouseDrag
pressKey
waitForText
, waitForSelector
screenshot
, takeScreenshot
(enhanced)getPageSource
, getPageText
, getPageTitle
, getPageUrl
getElementContent
, getElementHierarchy
getScripts
, getStylesheets
, getMetaTags
getLinks
, getImages
getForms
getConsoleMessages
getNetworkRequests
executeJavaScript
, evaluateWithReturn
uploadFiles
handleDialog
openBrowser
, closeBrowser
resize
scroll
(enhanced with feedback)# Clone the repository git clone https://github.com/jomon003/PlayMCP.git cd PlayMCP # Install dependencies npm install # Build the project npm run build # Test the server npm test
// Start the server node ./dist/server.js // Send MCP commands via JSON-RPC {"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}
Tool | Description | Required Parameters |
---|---|---|
openBrowser | Launch browser instance | headless?: boolean, debug?: boolean |
navigate | Navigate to URL | url: string |
click | Click element | selector: string |
type | Type text into element | selector: string, text: string |
moveMouse | Move mouse to coordinates | x: number, y: number |
scroll | Scroll page with feedback | x: number, y: number, smooth?: boolean |
screenshot | Take screenshot | path: string, type?: string, selector?: string |
getPageSource | Get HTML source | None |
getPageText | Get text content | None |
getPageTitle | Get page title | None |
getPageUrl | Get current URL | None |
getScripts | Get JavaScript code | None |
getStylesheets | Get CSS stylesheets | None |
getMetaTags | Get meta tags | None |
getLinks | Get all links | None |
getImages | Get all images | None |
getForms | Get all forms | None |
getElementContent | Get element content | selector: string |
getElementHierarchy | Get DOM hierarchy | selector?: string, maxDepth?: number, includeText?: boolean, includeAttributes?: boolean |
executeJavaScript | Run JavaScript | script: string |
closeBrowser | Close browser | None |
Prerequisites
Clone and Setup
git clone <repository-url> cd PlayMCP npm install npm run build
Install Playwright Browsers
npx playwright install
This downloads the necessary browser binaries (Chromium, Firefox, Safari).
Verify Installation
npm run start
You should see "Browser Automation MCP Server starting..." if everything is working.
git clone <repository-url> cd PlayMCP npm install && npm run build && npx playwright install
Add to your MCP configuration file:
Standard MCP Configuration:
*Configuration content*
Alternative Configuration (works with VS Code GitHub Copilot):
*Configuration content*
For Windows users:
*Configuration content*
This MCP server is fully compatible with VS Code GitHub Copilot. After adding the configuration above to your MCP settings, you can use all browser automation tools directly within VS Code.
Claude Desktop (config.json location):
%APPDATA%\Claude\config.json
~/Library/Application Support/Claude/config.json
~/.config/Claude/config.json
VS Code MCP Extension:
Add to your VS Code settings.json or MCP configuration file.
Example Full Configuration:
*Configuration content*
Basic Web Scraping:
// Open browser and navigate await openBrowser({ headless: false, debug: true }) await navigate({ url: "https://example.com" }) // Extract content const title = await getPageTitle() const links = await getLinks() const forms = await getForms()
Form Automation:
// Fill out a form await click({ selector: "#login-button" }) await type({ selector: "#username", text: "user@example.com" }) await type({ selector: "#password", text: "password123" }) await click({ selector: "#submit" })
Page Interaction:
// Enhanced scrolling with feedback await scroll({ x: 0, y: 500, smooth: false }) // Returns: { before: {x: 0, y: 0}, after: {x: 0, y: 500}, scrolled: {x: 0, y: 500} } // Smooth scrolling await scroll({ x: 0, y: 300, smooth: true }) // Mouse interaction await moveMouse({ x: 100, y: 200 }) await click({ selector: ".dropdown-menu" })
DOM Structure Analysis:
// Get page hierarchy (3 levels deep) await getElementHierarchy({ maxDepth: 3 }) // Get detailed hierarchy with text and attributes await getElementHierarchy({ selector: "#main-content", maxDepth: -1, includeText: true, includeAttributes: true }) // Get basic structure of a specific section await getElementHierarchy({ selector: ".sidebar", maxDepth: 2 })
Advanced JavaScript Execution:
// Run custom JavaScript await executeJavaScript({ script: "document.querySelectorAll('h1').length" }) // Modify page content await executeJavaScript({ script: "document.body.style.backgroundColor = 'lightblue'" }) // Extract complex data await executeJavaScript({ script: ` Array.from(document.querySelectorAll('article')).map(article => ({ title: article.querySelector('h2')?.textContent, summary: article.querySelector('p')?.textContent })) ` })
Screenshot and Documentation:
// Take screenshots await screenshot({ path: "./full-page.png", type: "page" }) await screenshot({ path: "./element.png", type: "element", selector: "#main-content" })
Install and setup:
git clone <repo-url> && cd PlayMCP npm install && npm run build && npx playwright install
Add to your MCP client configuration
Start automating:
await openBrowser({ debug: true }) await navigate({ url: "https://news.ycombinator.com" }) const links = await getLinks() console.log(`Found ${links.length} links`) // Analyze page structure const hierarchy = await getElementHierarchy({ maxDepth: 2 }) console.log('Page structure:', hierarchy)
npx playwright install
"Browser not initialized" error
openBrowser
before other browser operationsPlaywright installation fails
# Try manual browser installation npx playwright install chromium # Or install all browsers npx playwright install
Permission errors on Linux/macOS
# Make sure the script is executable chmod +x dist/server.js
Path issues in MCP configuration
C:\\path\\to\\PlayMCP\\dist\\server.js
node /path/to/PlayMCP/dist/server.js
Browser crashes or timeouts
headless: false
for debugging# Test the server directly echo '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' | node ./dist/server.js
You should see a JSON response listing all available tools.
MIT License
No version information available
0 contributors