A side-by-side look at the Ui Annotator MCP 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 Ui Annotator MCP 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.
UI_ANNOTATOR_PORT.annotate, get_elements, highlight_element.browser_close, browser_resize, browser_console_messages.Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Browser Automation | Browser Automation |
| Quality signal | 60/100 · Good | 89/100 · Excellent |
| Install command | Confirmed | Confirmed |
| Transport | Local subprocess (stdio) | Local subprocess (stdio) |
| Auth | No auth required | No auth required |
| Pricing | Free | Free |
| Required env vars | UI_ANNOTATOR_PORT | None listed |
| Verified owner | Community listing | Verified |
| GitHub stars | 21 | 38,407 |
| Directory activity | 2 views 0 installs 0 upvotes | 6 views 0 installs 0 upvotes |
| Tools | 5 | 25 |
| Full listing | View Ui Annotator MCP | View Playwright MCP |
annotateOpen a web page with hover annotations. Returns a proxy URL that adds interactive element labels to any page. User opens this URL in any browser to see annotations on hover.get_elementsGet all UI elements detected on the currently annotated page. Returns element names, CSS selectors, positions, and sizes. Use this to understand what the user is referring to when they describe a UI element.highlight_elementBriefly flash-highlight a specific element on the page so the user can see which element you are referring to. Useful for confirming "do you mean this element?"rescan_elementsForce the annotated page to rescan all UI elements. Use this after the page content has changed (e.g. after navigation, DOM updates, or user interaction).inspect_modeToggle inspect mode on the annotated page. When ON, the user can click any element to copy its name. When OFF, the page behaves normally. Use this to help the user copy element names for communicating design changes.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": {
"mcpware-ui-annotator-mcp": {
"command": "npx",
"args": [
"-y",
"@mcpware/ui-annotator"
],
"env": {
"UI_ANNOTATOR_PORT": "YOUR_UI_ANNOTATOR_PORT_HERE"
}
}
}
}
{
"mcpServers": {
"microsoft-playwright-mcp": {
"command": "npx",
"args": [
"-y",
"@playwright/mcp@latest"
]
}
}
}