Charlotte vs Firefox Devtools MCP

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

Charlotte logoCharlotteBrowser Automation · Local subprocess (stdio)Renders web pages into structured, agent-readable representations using headless Chromium.68GreatAuth: not declaredFirefox Devtools MCP logoFirefox Devtools MCPBrowser Automation · Local subprocess (stdio)Firefox browser automation via WebDriver BiDi for testing, scraping, and browser control. Supports snapshot/UID-based interactions, network monitoring, console capture, and screenshots.72GreatAuth: no auth required

Verdict: choose Charlotte for browser automation work as a local process; choose Firefox Devtools MCP 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?

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

Firefox Devtools MCP logoChoose Firefox Devtools MCP when

  • You need dedicated capabilities in the Browser Automation domain.
  • You prefer a local stdio subprocess transport.
  • Its auth model fits you: No auth required.
  • You want tools like list_pages, new_page, navigate_page.
Explore Firefox Devtools MCP

Feature & specification comparison

Rows where the two servers differ are marked.

SpecCharlotte logoCharlotteFirefox Devtools MCP logoFirefox Devtools MCP
CategoryBrowser AutomationBrowser Automation
Quality signal68/100 · Great72/100 · Great
Install commandConfirmedConfirmed
TransportLocal subprocess (stdio)Local subprocess (stdio)
AuthNot declaredNo auth required
PricingNot declaredFree
Required env varsNone listedNone listed
Verified ownerCommunity listingCommunity listing
GitHub stars182504
Directory activity 2 views 0 installs 0 upvotes 6 views 0 installs 0 upvotes
Tools2334

Tools & capabilities

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

Firefox Devtools MCP tools 34

  • list_pagesList open tabs (index, title, URL). Selected tab is marked.
  • new_pageOpen new tab at URL. Returns tab index.
  • navigate_pageNavigate selected tab to URL.
  • select_pageSelect active tab by index, URL, or title. Index takes precedence.
  • close_pageClose tab by index.
  • get_page_textGet the visible text of the page (document.body.innerText). Caps at maxLength (default 20000 chars); saveTo saves the full text to a file.
  • take_snapshotCapture DOM snapshot with stable UIDs. A UID stays valid across snapshots until its element is removed or the page navigates. Output caps at maxLines (default 100); scope with selector or dump the full tree with saveTo.
  • resolve_uid_to_selectorResolve UID to CSS selector. Fails if the element is gone.
  • clear_snapshotClear snapshot UIDs. Usually not needed.
  • click_by_uidClick element by UID. Set dblClick for double-click.
  • hover_by_uidHover over element by UID.
  • fill_by_uidFill text input/textarea by UID.
  • +22 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.

Charlotte

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

Firefox Devtools MCP

mcpServers (Claude Desktop / Cursor)
{
  "mcpServers": {
    "freema-firefox-devtools-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@mozilla/firefox-devtools-mcp@latest"
      ]
    }
  }
}

Frequently asked questions

Charlotte is categorized under Browser Automation and uses a local stdio subprocess. Firefox Devtools MCP belongs to Browser Automation and uses a local stdio subprocess. Pick Charlotte for browser automation work and Firefox Devtools MCP 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.

Charlotte has no declared pricing — check the project's own site. Firefox Devtools MCP is listed as free. Auth: no auth required. 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 charlotte and freema-firefox-devtools-mcp as separate keys in the same mcpServers object, and your assistant will call tools from either one.

On AllMCPs, Charlotte has a quality signal of 68/100 (Great) with 2 views, 0 installs and 182 GitHub stars. Firefox Devtools MCP has 72/100 (Great) with 6 views, 0 installs and 504 GitHub stars.