OpenTabs

Local bridge that turns your logged-in Chrome tabs into MCP tools for web apps and the browser

By opentabs-dev (individual) JavaScript Local · stdio, Streamable HTTP Browser automation

48 popularity score ★ 1.0k ↓ 281/wk

Connect your client

Local (once it is running)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

Claude CodeTerminal
claude mcp add --transport http opentabs http://127.0.0.1:9515/mcp
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "opentabs": {
      "url": "http://127.0.0.1:9515/mcp"
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "opentabs": {
      "type": "http",
      "url": "http://127.0.0.1:9515/mcp"
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.opentabs]
url = "http://127.0.0.1:9515/mcp"
Gemini CLITerminal
gemini mcp add --scope user --transport http opentabs http://127.0.0.1:9515/mcp
Local (npm)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

FirstTerminal
npm install -g @opentabs-dev/cli
opentabs start
Claude CodeTerminal
claude mcp add opentabs -- opentabs start --stdio
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "opentabs": {
      "command": "opentabs",
      "args": [
        "start",
        "--stdio"
      ]
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "opentabs": {
      "command": "opentabs",
      "args": [
        "start",
        "--stdio"
      ]
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "opentabs": {
      "type": "stdio",
      "command": "opentabs",
      "args": [
        "start",
        "--stdio"
      ]
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.opentabs]
command = "opentabs"
args = ["start", "--stdio"]
Gemini CLITerminal
gemini mcp add --scope user opentabs opentabs -- start --stdio

Settings 4

PORT Optional: Port the local server listens on; 9515 by default (also --port).
OPENTABS_CONFIG_DIR Optional: Moves the config directory away from ~/.opentabs.
OPENTABS_TELEMETRY_DISABLED Optional: Set to 1 to turn off anonymous telemetry (DO_NOT_TRACK=1 also works).
OPENTABS_DANGEROUSLY_SKIP_PERMISSIONS Optional: Set to 1 to bypass all per-tool permission checks.

What it does

OpenTabs runs a small HTTP server on your own machine (port 9515 by default) and pairs it with a Chrome extension. An MCP client connects to the server, the extension connects to the same server over a WebSocket, and tool calls are carried out inside the browser tabs you already have open, using the sessions you are already signed in with. Instead of clicking through pages, plugins call each site's own web APIs from inside the tab.

Two kinds of tools come out of it. Built-in browser tools work on any tab with no plugin: 76 of them at version 0.0.115 (counted in platform/mcp-server/src/browser-tools/index.ts, which matches the docs' count), covering tabs, windows and tab groups, clicking and typing, screenshots, page HTML, cookies and storage, console logs, network capture and request interception, history, bookmarks, downloads and device emulation. Plugins add site-specific tools; the project says it has more than 100 plugins (Slack, Discord, GitHub, Jira, Notion, Stripe and others), installed one at a time with `opentabs plugin install <name>`, and you can write and publish your own.

There are several ways to connect. The default /mcp endpoint loads every enabled tool into the client. A gateway endpoint at /mcp/gateway exposes only two tools, `opentabs_list_tools` and `opentabs_call`, for clients with little room for tool schemas. `opentabs start --stdio` lets a client launch a stdio bridge, and agents with shell access can skip MCP and use `opentabs tool call`. Every tool starts off disabled and is set per plugin or per tool to Off, Ask or Auto. The settings file ~/.opentabs/config.json is written with 0600 permissions, and it holds `updateCheckIntervalMinutes`, which makes the server check npm for updates every 30 minutes by default (0 turns it off) (platform/mcp-server/src/config.ts at v0.0.115).

What it needs

RuntimeNode.js 22+

Node.js 22 or newer and Google Chrome. Install the CLI globally with `npm install -g @opentabs-dev/cli`, run `opentabs start` once, then load the unpacked extension from ~/.opentabs/extension in chrome://extensions with Developer mode turned on. You must already be signed in to each site you want a plugin to use, and each site needs its plugin installed with `opentabs plugin install <name>`.

Limits

Chrome only; the extension is loaded unpacked by hand (not in the Chrome Web Store). The HTTP server has to be running: the docs say `opentabs start --stdio` is a bridge to that server and does not start one itself, even though they also present it as a way to skip a manual `opentabs start`. Site tools exist only for sites that have a plugin; the rest go through the generic browser tools. The default /mcp endpoint loads every enabled tool schema; the docs suggest /mcp/gateway when many plugins are on. The audit endpoint keeps the last 500 tool calls. Anonymous telemetry is on by default. The project states it is not affiliated with or endorsed by any of the services its plugins reach.

Who it suits

Suits a developer who wants an assistant to act in web apps they already use in Chrome (chat, issue trackers, docs, dashboards) without setting up API keys or OAuth apps for each one, and who is comfortable with tools acting as their signed-in self. Because plugins run with your live sessions, it fits people willing to read plugin code before enabling it, as the docs themselves advise. Pick something else if you use a browser other than Chrome, need a headless or server-side setup, or want a service's official API server with its own scoped tokens instead of your full browser session.

Tools 60 of 76

browser_list_tabs
Lists open tabs with id, title and URL
browser_open_tab
Opens a new tab at a URL
browser_close_tab
Closes a tab by id
browser_navigate_tab
Sends an existing tab to another URL
browser_focus_tab
Brings a tab and its window to the front
browser_get_tab_info
Returns a tab's load state, URL, title and incognito flag
browser_list_windows
Lists browser windows
browser_create_window
Opens a new browser window
browser_update_window
Changes a window's state or size
browser_close_window
Closes a window
browser_list_tab_groups
Lists tab groups
browser_create_tab_group
Groups tabs together
browser_update_tab_group
Renames or recolours a tab group
browser_add_tabs_to_group
Moves tabs into a group
browser_remove_tabs_from_group
Takes tabs out of their group
browser_list_tabs_in_group
Lists the tabs in one group
browser_get_recently_closed
Lists recently closed tabs and windows
browser_restore_session
Reopens a recently closed tab or window
browser_click_element
Clicks an element matched by a selector
browser_type_text
Types text into a field
browser_press_key
Sends a key press to the page
browser_hover_element
Hovers the pointer over an element
browser_select_option
Picks an option in a select box
browser_scroll
Scrolls the page or an element
browser_wait_for_element
Waits until an element appears
browser_query_elements
Finds elements matching a selector
browser_handle_dialog
Accepts or dismisses a page dialog
browser_get_tab_content
Extracts a page's readable text
browser_get_page_html
Returns a page's HTML
browser_screenshot_tab
Takes a screenshot of a tab
browser_execute_script
Runs arbitrary JavaScript in the page, outside its content security policy
browser_get_element_styles
Returns computed styles of an element
browser_get_cookies
Reads cookies for a URL
browser_set_cookie
Sets a cookie
browser_delete_cookies
Deletes cookies
browser_get_storage
Reads a page's local or session storage
browser_clear_site_data
Clears stored data for a site
browser_get_console_logs
Returns console messages captured from a tab
browser_clear_console_logs
Empties the captured console buffer
browser_enable_network_capture
Starts recording a tab's network traffic
browser_get_network_requests
Returns captured network requests
browser_disable_network_capture
Stops recording and clears the buffer
browser_export_har
Exports captured traffic as a HAR file
browser_get_websocket_frames
Returns captured WebSocket frames
browser_intercept_requests
Pauses matching requests for inspection
browser_fulfill_request
Answers a paused request with a custom response
browser_fail_request
Fails a paused request with a network error
browser_stop_intercepting
Ends request interception
browser_throttle_network
Simulates a slow network
browser_emulate_device
Emulates a device's screen and user agent
browser_search_history
Searches browsing history
browser_search_bookmarks
Searches bookmarks
browser_create_bookmark
Adds a bookmark
browser_download_file
Downloads a file by URL
browser_list_downloads
Lists downloads
browser_notify
Shows a Chrome desktop notification
plugin_list_tabs
Lists tabs matching a plugin's URL patterns and whether each is ready
plugin_analyze_site
Inspects a web page to help build a new plugin for it
extension_get_state
Reports the extension's connection and plugin state
extension_reload
Reloads the Chrome extension

Similar servers