FSB vs Noncelogic MCP

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

FSB logoFSBBrowser Automation · Local subprocess (stdio)Chrome extension plus MCP server that lets any MCP client drive your own signed in Chrome by reading the live DOM instead of screenshots, with no API key. 69 tools, session replay, and an encrypted credential vault.68GreatAuth: no auth requiredNoncelogic MCP logoNoncelogic MCPBrowser Automation · Local subprocess (stdio)Hosted Playwright API for AI agents. Returns a11y trees instead of screenshots.59GoodAuth: not declared

Verdict: choose FSB for browser automation work as a local process; choose Noncelogic 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?

FSB logoChoose FSB 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 start_visual_session, end_visual_session, trigger.
Explore FSB

Noncelogic MCP logoChoose Noncelogic MCP when

  • You need dedicated capabilities in the Browser Automation domain.
  • You prefer a local stdio subprocess transport.
  • You have the keys it needs: ROVE_API_KEY.
  • You want tools like navigate, interact, extract_schema.
Explore Noncelogic MCP

Feature & specification comparison

Rows where the two servers differ are marked.

SpecFSB logoFSBNoncelogic MCP logoNoncelogic MCP
CategoryBrowser AutomationBrowser Automation
Quality signal68/100 · Great59/100 · Good
Install commandConfirmedConfirmed
TransportLocal subprocess (stdio)Local subprocess (stdio)
AuthNo auth requiredNot declared
PricingFreeNot declared
Required env varsNone listedROVE_API_KEY
Verified ownerCommunity listingCommunity listing
GitHub stars2050
Directory activity 3 views 0 installs 0 upvotes 3 views 0 installs 0 upvotes
Tools7231

Tools & capabilities

FSB tools 72

  • start_visual_session[REMOVED in v0.9.0] This tool was removed in fsb-mcp-server v0.9.0 (FSB v0.9.62 implicit visual-session contract). Calling it returns the typed TOOL_REMOVED error with a migration recipe pointer. The visual session is now implicit on every action tool call via the required visual_reason + client field bundle -- there is no longer a separate start call. See CHANGELOG.md#v0.9.0 and the Visual Session Lifecycle section of mcp/README.md for the migration recipe.
  • end_visual_session[REMOVED in v0.9.0] This tool was removed in fsb-mcp-server v0.9.0 (FSB v0.9.62 implicit visual-session contract). Calling it returns the typed TOOL_REMOVED error with a migration recipe pointer. The visual session now clears either automatically after 60 seconds of silence (sliding window) or immediately when an action tool is called with is_final: true -- there is no longer a separate end call. See CHANGELOG.md#v0.9.0 and the Visual Session Lifecycle section of mcp/README.md for the migration recipe.
  • triggerArm a reactive DOM trigger on one selector. Use this when the user wants to watch an element until it changes, crosses a threshold, equals or matches a value, or contains text. The watch is owned by the background trigger runtime and persisted across service-worker eviction. Pass one selector and one condition object; runtime validation checks the nested condition details before arming. Use stop_trigger to cancel, get_trigger_status to inspect one watcher, and list_triggers to enumerate watchers.
  • stop_triggerCancel a trigger by id. This is cancellation-critical and bypass-class: it must be callable promptly even if a trigger or another mutation is pending. Missing or already terminal triggers are handled idempotently by the background trigger runtime.
  • get_trigger_statusRead the persisted status for one trigger by id. Returns storage-of-truth trigger state including status, watch mode, condition, target tab, owner, current value, timing, and attention details when available.
  • list_triggersList persisted trigger snapshots. By default, returns active and attention-state watchers; include_terminal can include fired and stopped triggers for audit or cleanup workflows.
  • execute_jsRun JavaScript directly in the active page. PRIMARY INTERACTION TOOL: try execute_js FIRST for clicks, scrolls, reads, attribute lookups, and most other DOM work -- it bypasses overlay/obscured-element issues, viewport constraints, and CDP timeouts that block native click/scroll. Typical patterns: `return document.querySelector('#add-to-cart-button').click(), true;` for clicks; `return Array.from(document.querySelectorAll('a')).map(a=>a.href);` for extraction; `window.scrollTo(0, document.body.scrollHeight); return true;` for scroll. After a JS click, verify with read_page or get_page_snapshot (a true click should produce observable DOM change). FALLBACK TO NATIVE TOOLS WHEN: (1) JS click reports success but the page state did not change (framework swallowed the synthetic event -- use native click which fires real CDP events that React/Angular/Vue listen to); (2) typing into controlled text inputs (use native `type` so React onChange fires correctly -- `element.value = ...` will NOT update component state); (3) real drag operations on react-beautiful-dnd / Sortable.js / Trello-style widgets (use drag_drop / drag for real pointer events); (4) form submission that depends on validated input state (use native click on submit). Code runs as a function body -- use `return` to send values back (results are stringified). Async work: Promises are not awaited, so fire-and-forget then poll on `window.__yourKey`. Related: read_page (verify result), get_dom_snapshot (debug after JS click), click / type / drag_drop (fallbacks when JS doesn't take effect). Multi-agent: agent-scoped tabs; cross-agent reject with TAB_NOT_OWNED; cap configurable (default 8, 1-64). Pass tab_id only when this agent owns multiple tabs; auto-resolves otherwise. RETURNS change_report: when this tool runs, the response includes a `change_report` field with a compact diff of what the action mutated (URL, dialogs_opened, nodes_added, nodes_removed, attrs_changed, inputs_changed, focus_shift). Use this to learn the consequence without calling read_page next. If the report exceeds the size cap, `change_report.truncated:true` and `change_report_hint` are set; call read_page for the full state.
  • navigateOpen a URL in the active browser tab. Returns the final URL after any redirects. When to use: as the first step to reach a target website. Related: read_page (read content after navigating), list_tabs (see what tabs are already open). Multi-agent: agent-scoped tabs; cross-agent reject with TAB_NOT_OWNED; cap configurable (default 8, 1-64). Pass tab_id only when this agent owns multiple tabs; auto-resolves otherwise. RETURNS change_report: when this tool runs, the response includes a `change_report` field with a compact diff of what the action mutated (URL, dialogs_opened, nodes_added, nodes_removed, attrs_changed, inputs_changed, focus_shift). Use this to learn the consequence without calling read_page next. If the report exceeds the size cap, `change_report.truncated:true` and `change_report_hint` are set; call read_page for the full state.
  • searchSearch for content on the current site or web. When to use: to find content on the current site or web. Automatically detects the site's search input (Amazon, YouTube, GitHub, etc.) via DOM heuristics -- only falls back to Google when no site search exists. Returns search results status. Related: read_page (read search results after searching), click (click a specific search result). Multi-agent: agent-scoped tabs; cross-agent reject with TAB_NOT_OWNED; cap configurable (default 8, 1-64). Pass tab_id only when this agent owns multiple tabs; auto-resolves otherwise.
  • go_backNavigate back one page in browser history. Returns the new URL. When to use: to return to the previous page after following a link or navigating away. Related: go_forward (undo a go_back), navigate (go to a specific URL instead). Multi-agent: agent-scoped tabs; cross-agent reject with TAB_NOT_OWNED; cap configurable (default 8, 1-64). Pass tab_id only when this agent owns multiple tabs; auto-resolves otherwise. RETURNS change_report: when this tool runs, the response includes a `change_report` field with a compact diff of what the action mutated (URL, dialogs_opened, nodes_added, nodes_removed, attrs_changed, inputs_changed, focus_shift). Use this to learn the consequence without calling read_page next. If the report exceeds the size cap, `change_report.truncated:true` and `change_report_hint` are set; call read_page for the full state.
  • go_forwardNavigate forward one page in browser history. Returns the new URL. When to use: after using go_back, to move forward again. Related: go_back (go back in history), navigate (go to a specific URL instead). Multi-agent: agent-scoped tabs; cross-agent reject with TAB_NOT_OWNED; cap configurable (default 8, 1-64). Pass tab_id only when this agent owns multiple tabs; auto-resolves otherwise. RETURNS change_report: when this tool runs, the response includes a `change_report` field with a compact diff of what the action mutated (URL, dialogs_opened, nodes_added, nodes_removed, attrs_changed, inputs_changed, focus_shift). Use this to learn the consequence without calling read_page next. If the report exceeds the size cap, `change_report.truncated:true` and `change_report_hint` are set; call read_page for the full state.
  • refreshReload the current page. Returns the refreshed URL. When to use: when page content may be stale, after errors, or to reset page state. Related: navigate (go to a different URL), wait_for_stable (wait for page to settle after refresh). Multi-agent: agent-scoped tabs; cross-agent reject with TAB_NOT_OWNED; cap configurable (default 8, 1-64). Pass tab_id only when this agent owns multiple tabs; auto-resolves otherwise. RETURNS change_report: when this tool runs, the response includes a `change_report` field with a compact diff of what the action mutated (URL, dialogs_opened, nodes_added, nodes_removed, attrs_changed, inputs_changed, focus_shift). Use this to learn the consequence without calling read_page next. If the report exceeds the size cap, `change_report.truncated:true` and `change_report_hint` are set; call read_page for the full state.
  • +60 more on the listing page

Noncelogic MCP tools 31

  • navigateNavigate to a URL in a hosted Chromium browser and return the page title and final URL after redirects. Creates a new browser session automatically if no session_id is provided. Use this as the first step in any browser automation workflow. Use stealth mode when visiting public websites that may block automated browsers. Use action_delay_ms to add human-like jitter between subsequent actions in the same session.
  • interactPerform a click or fill action on a page element in an active browser session. Use "click" to click buttons, links, checkboxes, or any clickable element by CSS selector. Use "fill" to type text into input fields, textareas, or contenteditable elements — pass the target CSS selector and the text value in params. Requires an active session created by the navigate tool. Do not use this for navigation — use the navigate tool instead.
  • extract_schemaExtract structured data from a web page according to a JSON schema. Navigates to the given URL, renders the page in a headless browser, and returns data matching your schema definition. Use this instead of navigate + get_a11y_tree when you need specific structured fields (e.g. product name, price, rating) rather than a full page snapshot. Each key in the schema should map to a CSS selector or description of the data to extract.
  • screenshotCapture a PNG screenshot of a web page. Operates in two modes: (1) Pass a session_id to screenshot the current page in an active session — use this when you need to see the visual state after interactions. (2) Pass a url without session_id to take a one-shot screenshot without creating a persistent session — use this for quick visual checks. Returns a URL to the screenshot image. Prefer get_a11y_tree over screenshot when you need to read page content, as it uses 77% fewer tokens.
  • get_a11y_treeGet a structured accessibility tree snapshot of the current page in an active browser session. Returns a hierarchical representation of all visible elements including their roles, names, values, and states — similar to what a screen reader sees. Use this as the primary way to read page content, as it uses 77% fewer tokens than a screenshot. Use this after navigate to understand page structure, find interactive elements by their accessible names, or verify that an action changed the page state. Requires a session created by navigate.
  • close_sessionClose a browser session and release its server-side resources (browser context, memory, and any open pages). Call this when you are done with a browser session to free resources and avoid hitting session limits. If the closed session is the currently active session, the internal session reference is cleared — subsequent tool calls will need a new navigate to create a fresh session.
  • clickClick an element on the page by CSS selector, accessible label or a11y tree ref. Use this to interact with buttons, links, checkboxes, and other clickable elements. In a supervised session, a click that opens a popup makes the popup the current page.
  • fillType text into a form field. By default clears any existing value first, then types the new value.
  • get_textExtract the text content of an element on the page. Useful for reading specific values like prices, headings, or status messages.
  • scrollScroll the page in a given direction, or scroll a specific scrollable element. Useful for loading lazy content or reaching elements below the fold.
  • evaluateExecute arbitrary JavaScript in the browser page context. Returns the result of the expression. Use for advanced DOM queries, custom extraction logic, or page manipulation.
  • list_pagesList the pages open in this session's browser, with page ids, opener, URL, title and status, and which page is current. Popups the page opened appear here. Does not count as a fresh observation.
  • +19 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.

FSB

mcpServers (Claude Desktop / Cursor)
{
  "mcpServers": {
    "fullselfbrowsing-fsb": {
      "command": "npx",
      "args": [
        "-y",
        "fsb-mcp-server@latest"
      ]
    }
  }
}

Noncelogic MCP

mcpServers (Claude Desktop / Cursor)
{
  "mcpServers": {
    "mcp-313": {
      "command": "npx",
      "args": [
        "-y",
        "@roveapi/mcp"
      ],
      "env": {
        "ROVE_API_KEY": "YOUR_ROVE_API_KEY_HERE"
      }
    }
  }
}

Frequently asked questions

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

FSB is listed as free. Auth: no auth required. Noncelogic MCP 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 fullselfbrowsing-fsb and mcp-313 as separate keys in the same mcpServers object, and your assistant will call tools from either one.

On AllMCPs, FSB has a quality signal of 68/100 (Great) with 3 views, 0 installs and 205 GitHub stars. Noncelogic MCP has 59/100 (Good) with 3 views, 0 installs and 0 GitHub stars.