Skip to main content
Glama
mcp-chrome-server

mcp-chrome-server

by dlwjdtn535

MCP Chrome Server

Buy Me A Coffee

A Chrome server based on MCP (Model-Controller-Prompt) for browser automation.

Installation

Prerequisites

  • Python 3.12

  • Google Chrome browser installed

  • uv (Python package installer) or Docker

Installing via Smithery

npx -y @smithery/cli install @dlwjdtn535/mcp-chrome-server --client claude

Configuration Setup

Choose one of the following setup methods based on your environment:

Windows Setup:

{
  "mcpServers": {
    "mcp-chrome-server": {
      "command": "uv",
      "args": [
        "run",
        "--directory",
        "%LOCALAPPDATA%\\Programs\\mcp-chrome-server\\src",
        "mcp-chrome-server"
      ],
      "env": {
        "CHROME_PROFILE_PATH": "%LOCALAPPDATA%\\Google\\Chrome\\User Data"
      }
    }
  }
}

macOS Setup:

{
  "mcpServers": {
    "mcp-chrome-server": {
      "command": "uv",
      "args": [
        "run",
        "--directory",
        "/usr/local/bin/mcp-chrome-server/src",
        "mcp-chrome-server"
      ],
      "env": {
        "CHROME_PROFILE_PATH": "$HOME/Library/Application Support/Google/Chrome"
      }
    }
  }
}

Linux Setup:

{
  "mcpServers": {
    "mcp-chrome-server": {
      "command": "uv",
      "args": [
        "run",
        "--directory",
        "/usr/local/bin/mcp-chrome-server/src",
        "mcp-chrome-server"
      ],
      "env": {
        "CHROME_PROFILE_PATH": "$HOME/.config/google-chrome"
      }
    }
  }
}

Related MCP server: Real Browser MCP

Configuration

Chrome Profile Paths

Default Chrome profile paths for each operating system:

OS

Path

Windows

%LOCALAPPDATA%\Google\Chrome\User Data

macOS

~/Library/Application Support/Google/Chrome

Linux

~/.config/google-chrome

Important Notes

  • Close all running Chrome instances before starting the automation server

  • Ensure proper permissions for the Chrome profile directory

  • For Docker setup, make sure the volume mount path matches your system's Chrome profile path

Credential Management

Securely store and manage login information using the system keychain:

# Save credentials
result = tool_save_credentials(
    site="example.com",
    username="your_username",
    password="your_password"
)

# Retrieve saved credentials
result = tool_get_credentials(
    site="example.com",
    username="your_username"
)

Key Features

Browser Control

# Open browser
result = tool_open_browser()

# Navigate to URL
result = tool_navigate(url="https://example.com")

# Close browser
result = tool_close_browser()

Web Login

result = tool_web_login(
    url="https://example.com/login",
    credentials={
        "username": "your_username",
        "password": "your_password"
    },
    selectors={
        "username": "#id",
        "password": "#pw",
        "submit": ".login-button"
    }
)

Special handling:

  • Waits for user to solve CAPTCHA when detected

  • Automatic detection of 2-factor authentication

  • Detailed analysis of login failure scenarios

Element Manipulation

# Click element
result = tool_click(selector=".button")

# Type text
result = tool_type(
    selector="#input-field",
    text="Hello, World!"
)

# Get text
result = tool_get_text(selector=".content")

# Get multiple elements
result = tool_get_elements(selector=".items")

Important Considerations

  1. Chrome Profile Usage

    • Verify correct profile path configuration

    • Close all other Chrome windows using the profile

  2. Automation Detection Prevention

    • Simulation of natural user behavior

    • Maintain appropriate delays between login attempts

  3. Security

    • Always use system keychain for important credentials

    • Never expose credentials directly in environment variables or configuration files

Available Tools

36 tools
tool_backA

Navigate back in the browser history.

Inputs: no named parameters.

tool_clickA

Click an element on the page.

    This tool finds and clicks an element on the page using either CSS selector
    or XPath. It will wait for the element to be clickable before attempting
    to click it.
    
    Args:
        selector (str): The selector to find the element
        by (str, optional): The selector type. Either "css" or "xpath". Defaults to "css"
    
    Returns:
        Dict[str, Any]: A dictionary containing:
            - success (bool): Whether the operation was successful
            - message (str): Status message
    
    Example:
        {"tool": "click", "args": {"selector": "#submit-button"}}
        {"tool": "click", "args": {"selector": "//button[@type='submit']", "by": "xpath"}}
    

Inputs: selector (required), by.

tool_close_browserA

Close the browser instance.

    This tool closes the current Chrome browser window and cleans up resources.
    It's safe to call this even if no browser is open.
    
    Returns:
        Dict[str, Any]: A dictionary containing:
            - success (bool): Whether the operation was successful
            - message (str): Status message
    
    Example:
        {"tool": "close_browser"}
    

Inputs: no named parameters.

tool_delete_all_cookiesA

Delete all cookies.

Inputs: no named parameters.

tool_execute_scriptC

Execute JavaScript code.

Inputs: script (required), args (required).

tool_forwardB

Navigate forward in the browser history.

Inputs: no named parameters.

tool_fullscreen_windowB

Switch the browser window to full screen.

Inputs: no named parameters.

tool_get_cookiesA

Return all cookies from the current page.

Inputs: no named parameters.

tool_get_credentialsC
    Retrieve stored credentials from system keychain
    
    Args:
        site: Website domain
        username: User's username
    

Inputs: site (required), username (required).

tool_get_current_urlA

Return the current page's URL.

Inputs: no named parameters.

tool_get_elementsA

Get multiple elements matching a selector.

    This tool finds all elements matching the selector and returns their text
    content and HTML.
    
    Args:
        selector (str): The selector to find the elements
        by (str, optional): The selector type. Either "css" or "xpath". Defaults to "css"
    
    Returns:
        Dict[str, Any]: A dictionary containing:
            - success (bool): Whether the operation was successful
            - message (str): Status message
            - data (List[Dict]): List of elements, each containing:
                - text (str): The text content of the element
                - html (str): The outer HTML of the element
    
    Example:
        {"tool": "get_elements", "args": {"selector": ".item"}}
        {"tool": "get_elements", "args": {"selector": "//li[@class='item']", "by": "xpath"}}
    

Inputs: selector (required), by.

tool_get_logC

Retrieve browser logs.

Inputs: log_type (required).

tool_get_page_sourceA

Return the current page's HTML source.

Inputs: no named parameters.

tool_get_textA

Get text from an element.

    This tool finds an element and returns its text content.
    
    Args:
        selector (str): The selector to find the element
        by (str, optional): The selector type. Either "css" or "xpath". Defaults to "css"
    
    Returns:
        Dict[str, Any]: A dictionary containing:
            - success (bool): Whether the operation was successful
            - message (str): Status message
            - data (str): The text content of the element
    
    Example:
        {"tool": "get_text", "args": {"selector": "h1"}}
        {"tool": "get_text", "args": {"selector": "//div[@class='content']", "by": "xpath"}}
    

Inputs: selector (required), by.

tool_get_titleA

Return the current page's title.

Inputs: no named parameters.

tool_get_window_handlesB

Return all window handles.

Inputs: no named parameters.

tool_get_window_sizeA

Return the current browser window size.

Inputs: no named parameters.

tool_implicitly_waitC

Set implicitly wait time.

Inputs: seconds (required).

tool_maximize_windowB

Maximize the browser window.

Inputs: no named parameters.

tool_minimize_windowB

Minimize the browser window.

Inputs: no named parameters.

tool_navigateA

Navigate to a URL.

    This tool navigates the browser to the specified URL. If no browser
    is open, it will automatically open one.
    
    Args:
        url (str): The URL to navigate to (must include protocol, e.g., 'https://')
    
    Returns:
        Dict[str, Any]: A dictionary containing:
            - success (bool): Whether the operation was successful
            - message (str): Status message
    
    Example:
        {"tool": "navigate", "args": {"url": "https://www.example.com"}}
    

Inputs: url (required).

tool_open_browserA

Open a new Chrome browser instance.

    This tool initializes a new Chrome browser window. If a browser instance
    already exists, it will reuse that instance.
    
    Returns:
        Dict[str, Any]: A dictionary containing:
            - success (bool): Whether the operation was successful
            - message (str): Status message
    
    Example:
        {"tool": "open_browser"}
    

Inputs: no named parameters.

tool_refreshB

Refresh the current page.

Inputs: no named parameters.

tool_sampleC

Set Sample execution timeout.

Inputs: seconds (required).

tool_save_credentialsC
    Securely save credentials
    
    Args:
        site: Website domain
        username: User's username
        password: Password
    

Inputs: site (required), username (required), password (required).

tool_set_page_load_timeoutC

Set page load timeout.

Inputs: seconds (required).

tool_set_script_timeoutC

Set script execution timeout.

Inputs: seconds (required).

tool_set_window_sizeC

Set the browser window size.

Inputs: width (required), height (required).

tool_switch_to_default_contentD

Switch back to default content.

Inputs: no named parameters.

tool_switch_to_frameC

Switch to a specific frame.

Inputs: frame_reference (required).

tool_switch_to_windowC

Switch to a specific window.

Inputs: window_handle (required).

tool_take_screenshotC

Save a screenshot of the current page.

Inputs: filename.

tool_typeA

Type text into an element.

    This tool finds an input element and types the specified text into it.
    It will clear any existing text in the element before typing.
    
    Args:
        selector (str): The selector to find the element
        text (str): The text to type into the element
        by (str, optional): The selector type. Either "css" or "xpath". Defaults to "css"
    
    Returns:
        Dict[str, Any]: A dictionary containing:
            - success (bool): Whether the operation was successful
            - message (str): Status message
    
    Example:
        {"tool": "type", "args": {"selector": "#search-input", "text": "search query"}}
        {"tool": "type", "args": {"selector": "//input[@name='q']", "text": "search", "by": "xpath"}}
    

Inputs: selector (required), text (required), by.

tool_web_loginA
    Perform website login

    This tool attempts to log in to the provided URL. It waits for automatic
    input prevention (CAPTCHA) to be detected before allowing the user to manually resolve it.

    Args:
        url (str): Login page URL
        credentials (Dict[str, str]): Login credentials
            - username: User ID
            - password: Password
        selectors (Dict[str, str]): CSS selectors for login form elements
            - username: ID input field selector
            - password: Password input field selector
            - submit: Login button selector
        auth_type (str, optional): Authentication type. Defaults to "form"
            - form: Regular form-based login
            - oauth: OAuth authentication
            - api: API-based authentication
        wait_for (Optional[str], optional): CSS selector for element to wait for after login

    Returns:
        Dict[str, Any]: Login result
            - success (bool): Login success status
            - message (str): Status message
            - session_data (Dict): Login success session information
                - cookies: Cookie information
                - localStorage: Local storage data
                - sessionStorage: Session storage data

    Special handling:
        1. CAPTCHA detection
            - If reCAPTCHA or standard CAPTCHA is detected, wait for user to manually resolve
            - Automatically continue login process after resolution
        2. Naver login
            - Automatic detection of various special situations like automatic input prevention, 2-step authentication
            - Detailed error message analysis and return

    Example:
        >>> result = tool_web_login(
        ...     url="https://nid.naver.com/nidlogin.login",
        ...     credentials={
        ...         "username": "your_username",
        ...         "password": "your_password"
        ...     },
        ...     selectors={
        ...         "username": "#id",
        ...         "password": "#pw",
        ...         "submit": ".btn_login"
        ...     }
        ... )
        >>> if not result["success"] and "CAPTCHA" in result["message"]:
        ...     # Wait for user input for CAPTCHA resolution
        ...     print("Please solve the CAPTCHA in the browser")
    

Inputs: url (required), credentials (required), selectors (required), auth_type, +1 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    C2.7/5.0

    Scored across 36 tools

    Disambiguation4/5

    Most tools have distinct purposes (e.g., navigate, click, type), but tool_web_login overlaps with multiple basic tools and could cause ambiguity. Additionally, tool_get_text and tool_get_elements have similar functionality.

    Naming Consistency5/5

    All tools follow a consistent 'tool_verb_noun' snake_case pattern. While tool_web_login deviates slightly, the overall pattern is uniform and predictable.

    Tool Count2/5

    36 tools is excessive for a browser automation server. Many low-level tools (e.g., tool_implicitly_wait, tool_set_page_load_timeout) could be combined or made optional, leading to unnecessary complexity.

    Completeness3/5

    Covers core browser actions (navigation, clicking, typing, cookies, frames, windows) but lacks explicit element wait conditions, alert handling, and attribute retrieval. The login tool partially addresses high-level needs.

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables MCP clients to drive a real, logged-in Chrome browser for web automation tasks like navigation, clicking, typing, and screenshotting.
      2 npm
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables browser automation over MCP using a real Chrome browser with existing profile, supporting real tabs, downloads, cookies, and RPA workflows.
      166 npm
      MIT
    • F
      license
      Not graded
      quality
      D
      maintenance
      Enables MCP clients to control a real local browser window for web automation tasks such as clicking, typing, scrolling, and taking screenshots.
      11 npm
      -
    • F
      license
      Not graded
      quality
      D
      maintenance
      Drive your real, signed-in Chrome browser from any MCP client, enabling browser automation such as navigation, clicking, typing, and screenshots through standard MCP tools.
      1
      -