A side-by-side look at the Charlotte and Playwright MCP MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose Charlotte for browser automation work as a local process; choose Playwright MCP for browser automation as a local process. You can also run both side by side in one mcpServers block.
charlotte_navigate, charlotte_back, charlotte_forward.browser_close, browser_resize, browser_console_messages.Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Browser Automation | Browser Automation |
| Quality signal | 68/100 · Great | 88/100 · Excellent |
| Install command | Confirmed | Confirmed |
| Transport | Local subprocess (stdio) | Local subprocess (stdio) |
| Auth | Not declared | No auth required |
| Pricing | Not declared | Free |
| Required env vars | None listed | None listed |
| Verified owner | Community listing | Verified |
| GitHub stars | 181 | 38,215 |
| Directory activity | 1 views 0 installs 0 upvotes | 3 views 0 installs 0 upvotes |
| Tools | 23 | 25 |
| Full listing | View Charlotte | View Playwright MCP |
charlotte_navigateLoad a URL in the active page. Returns page representation after navigation. Default minimal detail includes landmarks, headings, and interactive element counts — use charlotte_find to locate specific elements, or pass detail: 'summary' to get the full element list.charlotte_backNavigate back in browser history. Returns page representation after navigation.charlotte_forwardNavigate forward in browser history. Returns page representation after navigation.charlotte_reloadReload the current page. Returns page representation after reload.charlotte_observeGet current page state without performing any action. Use detail levels to control verbosity: "minimal" for landmarks, headings, and interactive element counts by landmark (use charlotte_find to get specific elements with actionable IDs, or observe({ detail: "summary" }) to see all elements), "summary" (default) for content summaries and full element list, "full" for all text content. Use view: "tree" for a compact structural outline (cheapest orientation tool), or view: "tree-labeled" to include labels on interactive elements (still much cheaper than minimal JSON, and shows which button/link/input is which).charlotte_findSearch for elements matching criteria. Filters interactive elements by text, role, type, or spatial proximity. Use the selector parameter to find DOM elements by CSS selector — this reaches elements not in the accessibility tree (custom widgets, non-semantic divs). Selector results return Charlotte element IDs usable with click, hover, drag, etc.charlotte_screenshotCapture a visual screenshot. Fallback for when structured representation isn't sufficient (complex visualizations, canvas elements, images). Use save: true to persist as a file artifact that can be referenced later.charlotte_screenshotsList all saved screenshot artifacts. Returns metadata for each saved screenshot including ID, filename, page URL, and timestamp.charlotte_screenshot_getRetrieve a previously saved screenshot artifact by its ID. Returns the image data and metadata.charlotte_screenshot_deleteDelete a saved screenshot artifact by its ID. Removes the file from disk.charlotte_diffCompare current page state to a previous snapshot. Returns structural diff showing added, removed, moved, and changed elements.charlotte_clickClick an interactive element on the page. Returns full page representation after the click.browser_closeClose the pagebrowser_resizeResize the browser windowbrowser_console_messagesReturns all console messagesbrowser_handle_dialogHandle a dialogbrowser_emulate_mediaEmulate CSS media features for the page, for example switch between the light and dark color scheme. Omitted parameters are left unchanged; null clears an override.browser_evaluateEvaluate JavaScript expression on page or elementbrowser_file_uploadUpload one or multiple filesbrowser_dropDrop files or MIME-typed data onto an element, as if dragged from outside the page. At least one of "paths" or "data" must be provided.browser_findSearch the accessibility snapshot of the current page for text or a regular expression. Returns matching snapshot nodes with a few lines of surrounding context (like search snippets), each shown under its path from the root of the tree, which is cheaper than capturing the whole snapshot when you only need to locate an element and its ref.browser_fill_formFill multiple form fieldsbrowser_press_keyPress a key on the keyboardbrowser_typeType text into editable elementPaste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.
{
"mcpServers": {
"charlotte": {
"command": "npx",
"args": [
"@ticktockbent/charlotte"
]
}
}
}
{
"mcpServers": {
"microsoft-playwright-mcp": {
"command": "npx",
"args": [
"-y",
"@playwright/mcp@latest"
]
}
}
}