by macacoai
Playwright automation for AI agents: 50+ functions for browser automation, form filling, Chrome DevTools, and web scrapi
Provides comprehensive browser automation through Playwright with 50+ functions for web scraping, testing, and automated browsing tasks. Includes Chrome DevTools Protocol support and is optimized for AI agents.
MCP Macaco Playwright is an official MCP server published by macacoai that provides AI assistants with tools and capabilities via the Model Context Protocol. Playwright automation for AI agents: 50+ functions for browser automation, form filling, Chrome DevTools, and web scrapi It is categorized under browser automation, search web. This server exposes 28 tools that AI clients can invoke during conversations and coding sessions.
You can install MCP Macaco Playwright in your AI client of choice. Use the install panel on this page to get one-click setup for Cursor, Claude Desktop, VS Code, and other MCP-compatible clients. This server runs locally on your machine via the stdio transport.
NOASSERTION
MCP Macaco Playwright is released under the NOASSERTION license.
Fetch and extract information from websites automatically
Example
Research competitor pricing, scrape product reviews, monitor news mentions
Automate 5-10 hours/week of manual web research
Track website changes, new content, price updates
Example
Monitor competitor blog for new posts, track stock availability, watch for pricing changes
Stay informed without manual checking, never miss important updates
Extract structured data from multiple websites
Example
Compile product listings from 10 e-commerce sites, aggregate job postings, collect real estate data
Build datasets 100x faster than manual copying
Share your MCP server with the developer community
According to our notes, MCP Macaco Playwright benefits from clear Model Context Protocol framing — fewer ambiguous “AI plugin” claims.
I recommend MCP Macaco Playwright for teams standardizing on MCP; the explainx.ai page compares cleanly with sibling servers.
MCP Macaco Playwright is a well-scoped MCP server in the explainx.ai directory — install snippets and categories matched our Claude Code setup.
MCP Macaco Playwright has been reliable for tool-calling workflows; the MCP profile page is a good permalink for internal docs.
MCP Macaco Playwright reduced integration guesswork — categories and install configs on the listing matched the upstream repo.
We wired MCP Macaco Playwright into a staging workspace; the listing’s GitHub and npm pointers saved time versus hunting across READMEs.
We evaluated MCP Macaco Playwright against two servers with overlapping tools; this profile had the clearer scope statement.
Useful MCP listing: MCP Macaco Playwright is the kind of server we cite when onboarding engineers to host + tool permissions.
MCP Macaco Playwright reduced integration guesswork — categories and install configs on the listing matched the upstream repo.
MCP Macaco Playwright is a well-scoped MCP server in the explainx.ai directory — install snippets and categories matched our Claude Code setup.
showing 1-10 of 67
Enhanced Playwright Tools for Model Context Protocol (MCP) with Chrome DevTools Protocol (CDP) Support
MCP Macaco Playwright is a comprehensive browser automation server that provides AI agents with powerful web interaction capabilities through the Model Context Protocol. It combines Playwright's robust browser automation with CDP integration for advanced debugging and control scenarios.
npm install mcp-macaco-playwright
import { createConnection } from "mcp-macaco-playwright";
// Create MCP server connection
const server = await createConnection();
// Use with MCP client
await client.callTool({
name: "browser_navigate",
arguments: { url: "https://example.com" },
});
browser_navigateNavigate to a specific URL.
Parameters:
url (string, required): The URL to navigate toExample:
await client.callTool({
name: "browser_navigate",
arguments: { url: "https://github.com" },
});
browser_navigate_backGo back to the previous page in browser history.
Parameters: None
Example:
await client.callTool({
name: "browser_navigate_back",
arguments: {},
});
browser_navigate_forwardGo forward to the next page in browser history.
Parameters: None
Example:
await client.callTool({
name: "browser_navigate_forward",
arguments: {},
});
browser_snapshotCapture an accessibility snapshot of the current page for analysis and interaction.
Parameters: None
Example:
await client.callTool({
name: "browser_snapshot",
arguments: {},
});
browser_take_screenshotTake a visual screenshot of the page or specific element.
Parameters:
type (string, optional): Image format ('png' or 'jpeg', default: 'png')filename (string, optional): Custom filename for the screenshotelement (string, optional): Human-readable element descriptionref (string, optional): Element reference from snapshotfullPage (boolean, optional): Capture full scrollable pageExample:
await client.callTool({
name: "browser_take_screenshot",
arguments: {
type: "png",
fullPage: true,
filename: "homepage.png",
},
});
browser_clickClick on a specific element on the page.
Parameters:
element (string, required): Human-readable element descriptionref (string, required): Element reference from page snapshotExample:
await client.callTool({
name: "browser_click",
arguments: {
element: "Sign in button",
ref: "button-signin-123",
},
});
browser_double_clickPerform a double-click on an element.
Parameters:
element (string, required): Human-readable element descriptionref (string, required): Element reference from page snapshotExample:
await client.callTool({
name: "browser_double_click",
arguments: {
element: "File icon",
ref: "file-icon-456",
},
});
browser_right_clickPerform a right-click to open context menu.
Parameters:
element (string, required): Human-readable element descriptionref (string, required): Element reference from page snapshotExample:
await client.callTool({
name: "browser_right_click",
arguments: {
element: "Image thumbnail",
ref: "img-thumb-789",
},
});
browser_typeType text into an editable element.
Parameters:
element (string, required): Human-readable element descriptionref (string, required): Element reference from page snapshottext (string, required): Text to typesubmit (boolean, optional): Press Enter after typingslowly (boolean, optional): Type character by characterExample:
await client.callTool({
name: "browser_type",
arguments: {
element: "Search input field",
ref: "search-input-123",
text: "playwright automation",
submit: true,
},
});
browser_press_keyPress a specific key on the keyboard.
Parameters:
key (string, required): Key name (e.g., 'Enter', 'ArrowLeft', 'a')Example:
await client.callTool({
name: "browser_press_key",
arguments: { key: "Escape" },
});
browser_select_optionSelect options in a dropdown menu.
Parameters:
element (string, required): Human-readable element descriptionref (string, required): Element reference from page snapshotvalues (array, required): Array of values to selectExample:
await client.callTool({
name: "browser_select_option",
arguments: {
element: "Country dropdown",
ref: "country-select-456",
values: ["United States"],
},
});
browser_check_checkboxCheck or uncheck a checkbox element.
Parameters:
element (string, required): Human-readable element descriptionref (string, required): Element reference from page snapshotchecked (boolean, required): Whether to check (true) or uncheck (false)Example:
await client.callTool({
name: "browser_check_checkbox",
arguments: {
element: "Terms and conditions checkbox",
ref: "terms-checkbox-789",
checked: true,
},
});
browser_select_radioSelect a radio button.
Parameters:
element (string, required): Human-readable element descriptionref (string, required): Element reference from page snapshotExample:
await client.callTool({
name: "browser_select_radio",
arguments: {
element: "Payment method: Credit Card",
ref: "payment-radio-cc",
},
});
browser_clear_inputClear the content of an input field.
Parameters:
element (string, required): Human-readable element descriptionref (string, required): Element reference from page snapshotExample:
await client.callTool({
name: "browser_clear_input",
arguments: {
element: "Email input field",
ref: "email-input-123",
},
});
browser_get_textExtract text content or attribute values from elements.
Parameters:
element (string, required): Human-readable element descriptionref (string, required): Element reference from page snapshotattribute (string, optional): Specific attribute to extract (e.g., 'href', 'src')Example:
await client.callTool({
name: "browser_get_text",
arguments: {
element: "Product price",
ref: "price-display-456",
},
});
browser_get_elementsGet multiple elements matching a selector.
Parameters:
selector (string, required): CSS selector to find elementsattribute (string, optional): Attribute to extract from each elementExample:
await client.callTool({
name: "browser_get_elements",
arguments: {
selector: ".product-card h3",
attribute: "textContent",
},
});
browser_scroll_toScroll to a specific element or coordinate position.
Parameters:
element (string, optional): Human-readable element descriptionref (string, optional): Element reference from page snapshotx (number, optional): X coordinate to scroll toy (number, optional): Y coordinate to scroll tobehavior (string, optional): Scroll behavior ('auto' or 'smooth')Example:
await client.callTool({
name: "browser_scroll_to",
arguments: {
element: "Footer section",
ref: "footer-section-123",
behavior: "smooth",
},
});
browser_focus_elementSet focus on a specific element.
Parameters:
element (string, required): Human-readable element descriptionref (string, required): Element reference from page snapshotExample:
await client.callTool({
name: "browser_focus_element",
arguments: {
element: "Search input",
ref: "search-input-456",
},
});
browser_blur_elementRemove focus from a specific element.
Parameters:
element (string, required): Human-readable element descriptionref (string, required): Element reference from page snapshotExample:
await client.callTool({
name: "browser_blur_element",
arguments: {
element: "Email input",
ref: "email-input-789",
},
});
browser_wait_forWait for specific conditions to be met.
Parameters:
time (number, optional): Time to wait in secondstext (string, optional): Text to wait for to appeartextGone (string, optional): Text to wait for to disappearExample:
await client.callTool({
name: "browser_wait_for",
arguments: {
text: "Loading complete",
time: 5,
},
});
browser_tab_listList all open browser tabs.
Parameters: None
Example:
await client.callTool({
name: "browser_tab_list",
arguments: {},
});
browser_tab_newOpen a new browser tab.
Parameters:
url (string, optional): URL to navigate toInteract with services that don't offer APIs
Example
Check form submissions, validate website functionality, test user flows
Automate interactions with any website, even without API
Prerequisites
Time Estimate
20-40 minutes including configuration and testing
Steps
Troubleshooting
✓ Do
✗ Don't
💡 Pro Tips
Architecture
MCP server handles HTTP requests, HTML parsing, JavaScript rendering (if headless browser), and returns structured data to Claude.
Protocols
Compatibility
✓ Use when
Use for research automation, content monitoring, data aggregation from multiple sources, and when official APIs don't exist. Best for read-only information gathering.
✗ Avoid when
Avoid for sites with APIs (use API instead), sites that explicitly forbid scraping, when data is copyrighted, or for login-required content without proper authorization.