Skip to main content
Glama
pokutuna

@pokutuna/mcp-chrome-tabs

by pokutuna

@pokutuna/mcp-chrome-tabs

npm version

Model Context Protocol (MCP) server that provides direct access to your browser's open tabs content. No additional fetching or authentication required - simply access what you're already viewing.

Key Features

  • Direct browser tab access - No web scraping needed, reads content from already open tabs

  • Content optimized for AI - Automatic content extraction and markdown conversion to reduce token usage

  • Active tab shortcut - Instant access to currently focused tab without specifying IDs

  • MCP listChanged notifications - Follows MCP protocol to notify tab changes (set --check-interval to enable)

Related MCP server: chromectx

Requirements

IMPORTANT


macOS only - This MCP server uses AppleScript and only works on macOS.

  • Node.js 20 or newer

  • MCP Client such as Claude Desktop, Claude Code, or any MCP-compatible client

  • macOS only (uses AppleScript for browser automation)

Getting Started

First, enable "Allow JavaScript from Apple Events" in Chrome:

  • (en) View > Developer > Allow JavaScript from Apple Events

  • (ja) 表示 > 開発 / 管理 > Apple Events からの JavaScript を許可

When you first use the MCP server, macOS will prompt you to grant AppleScript automation permission to your MCP client (e.g., Claude Desktop, Claude Code). Click OK to allow access to Chrome. If you accidentally dismissed the dialog, you can enable it in System Settings > Privacy & Security > Automation.

Standard config works in most MCP clients (e.g., .claude.json, .mcp.json):

{
  "mcpServers": {
    "chrome-tabs": {
      "command": "npx",
      "args": ["-y", "@pokutuna/mcp-chrome-tabs@latest"]
    }
  }
}

Or for Claude Code:

claude mcp add -s user chrome-tabs -- npx -y @pokutuna/mcp-chrome-tabs@latest

Claude Code Plugin

You can also install this as a Claude Code plugin:

# Add the marketplace
/plugin marketplace add pokutuna/mcp-chrome-tabs

# Install the plugin
/plugin install mcp-chrome-tabs@mcp-chrome-tabs

Command Line Options

The server accepts optional command line arguments for configuration:

Content Extraction Options

  • --max-content-chars - Maximum content characters per single read (default: 20000)

  • --extraction-timeout - Timeout for content extraction worker in milliseconds (default: 20000)

  • --exclude-hosts - Comma-separated list of domains to exclude from tab listing and content access

Resource Options

  • --check-interval - Interval in milliseconds to check for tab changes and send listChanged notifications (default: 0 disabled, set to 3000 for 3 seconds)

Browser Options

  • --application-name - Application name to control (default: "Google Chrome")

  • --experimental-browser - Browser implementation to use: "chrome", "safari", or "arc" (default: "chrome")

Other Options

  • --help - Show help message with all available options

Resource Subscription (Optional)

Setting --check-interval to a value greater than 0 enables resource subscription. When enabled, the server monitors tab list changes and sends MCP listChanged notifications to prompt clients to refresh their resource lists. This also makes tab://{windowId}/{tabId} resources available for all open tabs.

In 2025-10, few MCP clients support resource subscriptions. Resource subscription is disabled by default (--check-interval=0). Most users only need the tab://current resource, which is always available.

To enable resource subscription:

{
  "mcpServers": {
    "chrome-tabs": {
      "command": "npx",
      "args": [
        "-y",
        "@pokutuna/mcp-chrome-tabs@latest",
        "--check-interval=3000"
      ]
    }
  }
}

Other Browser Support (Experimental)

Safari

Note that Safari lacks unique tab IDs, making it sensitive to tab order changes during execution:

npx @pokutuna/mcp-chrome-tabs --application-name=Safari --experimental-browser=safari

Arc

npx @pokutuna/mcp-chrome-tabs --application-name=Arc --experimental-browser=arc

MCP Features

Tools

List all open tabs in the user's browser with their titles, URLs, and tab references.

  • Returns: Markdown formatted list of tabs with tab IDs for reference

Get readable content from a tab in the user's browser.

  • id (optional): Tab reference from list_tabs output (e.g., ID:12345:67890)

  • If id is omitted, uses the currently active tab

  • Returns: Clean, readable content extracted using Mozilla Readability

Open a URL in a new tab to present content or enable user interaction with webpages.

  • url (required): URL to open in the browser

  • Returns: Tab ID in format ID:windowId:tabId for immediate access to the new tab

Resources

Resource representing the content of the currently active tab.

  • URI: tab://current

  • MIME type: text/markdown

  • Content: Real-time content of the active browser tab

  • Always available regardless of --check-interval setting

Resource template for accessing specific tabs.

  • URI pattern: tab://{windowId}/{tabId}

  • MIME type: text/markdown

  • Content: Content of the specified tab

  • Availability: Only when --check-interval is set to a value greater than 0

  • Resources are dynamically generated based on currently open tabs

  • When enabled, the server monitors tab changes and sends MCP listChanged notifications

Troubleshooting

Current Tabs (0 tabs exists) is displayed

Ensure "Allow JavaScript from Apple Events" is enabled in Chrome (see Getting Started).

If it was working before, try restarting your browser.

Available Tools

3 tools
list_tabsList TabsA

List all open tabs in the user's browser with their titles and tab references.

ParametersJSON Schema
NameRequiredDescriptionDefault
includeUrlNoInclude URLs in the output. Enable only when you need to reference specific URLs. (default: false, hostnames always included)

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses the basic read-only nature and output format (titles/references), but omits behavioral details like permission requirements, privacy considerations, or whether tab references are persistent IDs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, front-loaded with the action verb, and zero wasted words. Every component earns its place by defining scope ('all open tabs'), location ('user's browser'), and output ('titles and tab references').

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-parameter tool without output schema, the description adequately explains what the tool returns. It could be improved by mentioning the URL inclusion option described in the schema, but it covers the core functionality sufficiently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, establishing a baseline of 3. The description does not mention the includeUrl parameter or its default behavior (URLs excluded), leaving all parameter semantics to the schema itself.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and resource ('open tabs'), and distinguishes from siblings by specifying it returns 'titles and tab references' (metadata) rather than content, clearly differentiating it from read_tab_content.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

While the description implies usage by stating it returns tab references (suggesting it's for discovery before reading), it lacks explicit guidance on when to use this versus read_tab_content or workflows like 'use this first to get tab IDs'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

open_in_new_tabOpen in New TabA

Open a URL in a new tab to present content or enable user interaction with webpages

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesURL to open in the browser

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly indicates a side effect (creating a new tab) and implies user-facing presentation, but omits execution details such as whether the call blocks until the page loads, error handling for invalid URLs, or whether the tab persists after the session.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence of 13 words with the action front-loaded. Every word earns its place—'present content' and 'enable user interaction' efficiently convey the dual use cases without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (single required parameter, no output schema, no nested objects), the description adequately covers the essential information needed for invocation. It appropriately omits unnecessary details while capturing the core user-facing purpose.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, providing complete documentation for the 'url' parameter. The description references the URL but does not add semantic meaning beyond the schema (e.g., no mention of supported protocols, relative vs absolute URLs, or validation rules), meriting the baseline score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action (Open), resource (URL), and location (new tab), and clearly distinguishes from siblings list_tabs (which lists existing tabs) and read_tab_content (which reads from tabs) by emphasizing the creation of a new browsing context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context for when to use the tool ('to present content or enable user interaction with webpages'), giving the agent criteria for selection. However, it does not explicitly contrast with sibling tools or state when NOT to use it (e.g., when extraction without opening is needed).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_tab_contentRead Tab ContentA

Get readable content from a tab in the user's browser. Provide ID (from list_tabs output) to read a specific tab, or omit for the active tab.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoTab reference from list_tabs output (e.g: ID:12345:67890). If omitted, uses the currently active tab.
startIndexNoStarting character position for content extraction (default: 0)

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It establishes this is a read operation targeting browser content and specifies the tab selection logic. However, it omits details about the return format (plain text vs. HTML vs. structured data), content size limits, or whether the operation affects browser state.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two well-structured sentences with zero waste. The first sentence front-loads the core purpose; the second provides essential parameter guidance. Every word earns its place—no filler, no redundancy, and no unnecessary verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 100% schema coverage for the 2 parameters, the description adequately covers inputs. However, with no output schema provided, the description could be improved by briefly indicating the return format (e.g., extracted text content) to complete the picture for the agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, establishing a baseline of 3. The description adds valuable semantic context by specifying that the ID comes from 'list_tabs output,' which helps the agent understand the tool relationship. It does not add significant detail beyond the schema for startIndex or ID format syntax.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Get readable content') and resource ('tab in the user's browser'). It effectively distinguishes from sibling tools by explicitly referencing 'list_tabs output' for the ID parameter, clarifying this reads existing content rather than opening new tabs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear guidance on when to provide the ID parameter (to read a specific tab) versus when to omit it (for the active tab). Mentions the dependency on list_tabs for obtaining valid IDs. Lacks explicit 'when not to use' guidance contrasting with open_in_new_tab, though this distinction is relatively clear from the verb choices.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A4.1/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: list_tabs enumerates tabs, open_in_new_tab creates a new tab, and read_tab_content extracts content from an existing tab. There is no overlap in functionality, making it easy for an agent to select the correct tool for each task without confusion.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with snake_case (list_tabs, open_in_new_tab, read_tab_content). The naming is predictable and readable, with no deviations in style or convention across the set.

Tool Count4/5

Three tools are well-scoped for a browser tabs management server, covering listing, opening, and reading tabs. While slightly minimal, it is reasonable and each tool earns its place, though additional operations like closing tabs might be expected but are not essential.

Completeness4/5

The toolset provides core CRUD-like operations for browser tabs: list (read), open (create), and read content. Minor gaps exist, such as no update or delete tools (e.g., close_tab or update_tab), but agents can work around this, and the surface covers the essential workflows for the domain.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to control and automate your Chrome browser directly, leveraging existing login states and configurations for tasks like content analysis, semantic search across tabs, screenshots, network monitoring, and interactive operations.
    10
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Search and retrieve content from all open Chrome tabs, and provide them as context for AI tools via MCP.
    12
    4
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Provides a direct bridge between Claude and an authenticated Chrome session, enabling fetch requests with session cookies and JavaScript execution within live web pages.
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to interact with a user's real Chrome browser tabs, executing JavaScript, reading cookies, and making fetch requests within authenticated sessions.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/pokutuna/mcp-chrome-tabs'

If you have feedback or need assistance with the MCP directory API, please join our Discord server