Pixelcheck vs Charlotte

A side-by-side look at the Pixelcheck and Charlotte MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.

Pixelcheck logoPixelcheckBrowser Automation · Local subprocess (stdio)Real eyes and hands on the web for AI agents. MCP-first. Local-first. Vendor-agnostic.57GoodAuth: not declaredCharlotte logoCharlotteBrowser Automation · Local subprocess (stdio)Renders web pages into structured, agent-readable representations using headless Chromium.68GreatAuth: not declared

Verdict: choose Pixelcheck for browser automation work as a local process; choose Charlotte for browser automation as a local process. You can also run both side by side in one mcpServers block.

Which MCP server should you choose?

Pixelcheck logoChoose Pixelcheck when

  • You need dedicated capabilities in the Browser Automation domain.
  • You prefer a local stdio subprocess transport.
  • You have the keys it needs: ANTHROPIC_API_KEY.
  • You want tools like audit_url, explore_url, see.
Explore Pixelcheck

Charlotte logoChoose Charlotte when

  • You need dedicated capabilities in the Browser Automation domain.
  • You prefer a local stdio subprocess transport.
  • You want tools like charlotte_navigate, charlotte_back, charlotte_forward.
Explore Charlotte

Feature & specification comparison

Rows where the two servers differ are marked.

SpecPixelcheck logoPixelcheckCharlotte logoCharlotte
CategoryBrowser AutomationBrowser Automation
Quality signal57/100 · Good68/100 · Great
Install commandConfirmedConfirmed
TransportLocal subprocess (stdio)Local subprocess (stdio)
AuthNot declaredNot declared
PricingNot declaredNot declared
Required env varsANTHROPIC_API_KEYNone listed
Verified ownerCommunity listingCommunity listing
GitHub stars6183
Directory activity 0 views 0 installs 0 upvotes 2 views 0 installs 0 upvotes
Tools1223

Tools & capabilities

Pixelcheck tools 12

  • audit_urlYou want the full audit pipeline against one URL — agent loop, scoring, JSON + HTML report.
  • explore_urlYou want a quick autonomous run with a free-form goal; no scenario YAML needed.
  • seeYou want to look at a URL once and get back DOM summary + screenshot + console errors + an optional natural-language note. 0 LLM cost when `goal` is omitted.
  • actYou want to drive an action sequence (click / fill / scroll / screenshot / natural-language `act` / vision `note`) and get back per-step status + final DOM + screenshot.
  • extractYou want a typed payload back from a URL — pricing tiers, feature lists, FAQ entries — shaped exactly the way you asked for. Hand the tool a JSON Schema; get back `data` matching it plus DOM / console / screenshot.
  • judgeYou want a rubric-driven critique of one URL — aesthetic polish, dark-pattern risk, or any custom rubric. Returns per-criterion scores (0..10) + severity-graded findings with on-screen locations. 1 vision call.
  • compareYou want an A/B comparison of two URLs against the same rubric. Default `double_blind` mode judges each side independently then synthesises a comparison (3 vision calls, free of anchoring bias). `fast` mode is 1 call (cheaper, anchored).
  • list_personasDiscover which personas are installed in a project.
  • list_scenariosDiscover which scenarios are installed in a project.
  • list_capabilitiesSelf-describe the server: every shipped tool with kind / cacheability / static cost band / side-effects / dependency declarations, plus the public env-var table and live result-cache state. Pure introspection — call it once on first connect to plan the rest of your session.
  • calibrate_criticRun the critic calibration gate against labeled fixtures (returns pass/fail + agreement metrics).
  • get_last_reportRead the most recent audit's summary JSON from the local history DB.

Charlotte tools 23

  • 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.
  • +11 more on the listing page

Ready-to-paste client configs

Paste 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.

Pixelcheck

mcpServers (Claude Desktop / Cursor)
{
  "mcpServers": {
    "pixelcheck": {
      "command": "npx",
      "args": [
        "-y",
        "pixelcheck"
      ],
      "env": {
        "ANTHROPIC_API_KEY": "YOUR_ANTHROPIC_API_KEY_HERE"
      }
    }
  }
}

Charlotte

mcpServers (Claude Desktop / Cursor)
{
  "mcpServers": {
    "charlotte": {
      "command": "npx",
      "args": [
        "@ticktockbent/charlotte"
      ]
    }
  }
}

Frequently asked questions

Pixelcheck is categorized under Browser Automation and uses a local stdio subprocess. Charlotte belongs to Browser Automation and uses a local stdio subprocess. Pick Pixelcheck for browser automation work and Charlotte for browser automation.

Copy the mcpServers block from the config section on this page into your client's config (for example claude_desktop_config.json or ~/.cursor/mcp.json), then fully restart the client.

Pixelcheck has no declared pricing — check the project's own site. Charlotte has no declared pricing — check the project's own site. If a server needs environment variables such as API keys, define them under the env key in your client's MCP config.

Yes. MCP clients support multiple servers: add pixelcheck and charlotte as separate keys in the same mcpServers object, and your assistant will call tools from either one.

On AllMCPs, Pixelcheck has a quality signal of 57/100 (Good) with 0 views, 0 installs and 6 GitHub stars. Charlotte has 68/100 (Great) with 2 views, 0 installs and 183 GitHub stars.