Skip to main content
Glama
SeleniumMCP
by Lokii0911

Selenium MCP Server

Deployment-ready Python MCP server for Selenium browser automation. It supports local STDIO usage and production-style Streamable HTTP at /mcp, plus health endpoints for container platforms.

Tools

  • browser_start, browser_stop, browser_reset, browser_state

  • navigate, go_back, go_forward, refresh

  • set_window_size, open_new_tab, switch_window, close_window

  • find_element, wait_for_element, click, type_text

  • get_text, get_attribute, execute_script, scroll

  • page_source, screenshot, save_screenshot

  • list_cookies, add_cookie, delete_cookies

Locator strategies: id, name, css selector, xpath, link text, partial link text, tag name, class name.

Related MCP server: Selenium MCP Server

HTTP Endpoints

  • POST /mcp and related Streamable HTTP MCP calls

  • GET /healthz

  • GET /readyz

  • POST /browser/start

  • POST /browser/stop

Local Setup

Windows Python Prerequisite

If PowerShell says Python was not found, install Python 3.11+ first. The quickest options are:

winget install Python.Python.3.12

Then close and reopen PowerShell. If python --version still opens the Microsoft Store prompt, disable the python.exe and python3.exe app execution aliases in:

Settings > Apps > Advanced app settings > App execution aliases
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"

PowerShell:

python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -e ".[dev]"

Run as a local STDIO MCP server:

selenium-mcp

Run as a Streamable HTTP MCP server:

selenium-mcp-http

Then connect MCP clients to:

http://localhost:8000/mcp

Claude Desktop Example

{
  "mcpServers": {
    "selenium": {
      "command": "selenium-mcp",
      "env": {
        "SELENIUM_BROWSER": "chrome",
        "SELENIUM_HEADLESS": "true"
      }
    }
  }
}

Docker

Build and run with an in-container Chromium browser:

docker build -t selenium-mcp .
docker run --rm -p 8000:8000 selenium-mcp

Run with a dedicated Selenium Grid browser container:

docker compose up --build

Configuration

Copy .env.example to .env and adjust:

SELENIUM_BROWSER=chrome
SELENIUM_HEADLESS=true
SELENIUM_REMOTE_URL=
SELENIUM_IMPLICIT_WAIT_SECONDS=2
SELENIUM_PAGE_LOAD_TIMEOUT_SECONDS=30
SELENIUM_SCRIPT_TIMEOUT_SECONDS=30
SELENIUM_WINDOW_WIDTH=1440
SELENIUM_WINDOW_HEIGHT=1000
SELENIUM_ALLOW_FILE_URLS=false
SELENIUM_DEFAULT_DOWNLOAD_DIR=/tmp/selenium-downloads
SELENIUM_HTTP_HOST=0.0.0.0
SELENIUM_HTTP_PORT=8000
SELENIUM_MCP_TRANSPORT=stdio

For remote Selenium Grid, set:

SELENIUM_REMOTE_URL=http://selenium:4444/wd/hub

Security Notes

This server can browse the web, execute JavaScript, read page HTML, and save screenshots on the host. In production, run it in a locked-down container or VM, restrict outbound network access, keep SELENIUM_ALLOW_FILE_URLS=false, and put the HTTP MCP endpoint behind your platform authentication layer.

Validation

ruff check .
pytest

Available Tools

26 tools
browser_resetB

Restart the Selenium browser session.

Inputs: no named parameters. Returns: object

browser_startA

Start a Selenium browser session if one is not already running.

Inputs: no named parameters. Returns: object

browser_stateA

Return session id, URL, title, and window information.

Inputs: no named parameters. Returns: object

browser_stopA

Stop the current Selenium browser session.

Inputs: no named parameters. Returns: object

clickC

Click an element located by CSS selector, XPath, id, name, text, tag, or class.

Inputs: strategy (required), value (required), timeout_seconds. Returns: object

close_windowA

Close the active browser window or tab.

Inputs: no named parameters. Returns: object

delete_cookiesA

Delete all browser cookies.

Inputs: no named parameters. Returns: object

execute_scriptC

Execute JavaScript in the active page and return the JSON-serializable result.

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

find_elementD

Find an element and return a compact summary of it.

Inputs: strategy (required), value (required), timeout_seconds. Returns: object

get_attributeB

Return one DOM attribute for an element.

Inputs: strategy (required), value (required), attribute (required), timeout_seconds. Returns: object

get_textC

Return the visible text for an element.

Inputs: strategy (required), value (required), timeout_seconds. Returns: object

go_backA

Navigate one step back in browser history.

Inputs: no named parameters. Returns: object

go_forwardA

Navigate one step forward in browser history.

Inputs: no named parameters. Returns: object

list_cookiesA

Return browser cookies for the current domain.

Inputs: no named parameters. Returns: object

open_new_tabB

Open a new browser tab and optionally navigate it to a URL.

Inputs: url. Returns: object

page_sourceA

Return the current page HTML.

Inputs: no named parameters. Returns: object

refreshA

Refresh the current page.

Inputs: no named parameters. Returns: object

save_screenshotB

Save a PNG screenshot to a server-local path and return the path.

Inputs: path (required). Returns: object

screenshotA

Return a PNG screenshot as base64.

Inputs: no named parameters. Returns: object

scrollC

Scroll the current page by the given x and y offsets.

Inputs: x, y. Returns: object

set_window_sizeC

Set the browser window size.

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

switch_windowC

Switch to a browser window or tab by Selenium window handle.

Inputs: handle (required). Returns: object

type_textC

Type text into an element, optionally clearing it first.

Inputs: strategy (required), value (required), text (required), clear_first, +1 more. Returns: object

wait_for_elementC

Wait until an element exists, or until it is visible when requested.

Inputs: strategy (required), value (required), timeout_seconds, visible. Returns: object

Tool Schema Changelog

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

Loading tool schema changelog…

    TDQS

    B3.2/5.0

    Scored across 26 tools

    Disambiguation4/5

    Tools are mostly distinct; find_element and wait_for_element have some conceptual overlap but descriptions clarify their different return behaviors. Overall, tools serve clear, separate purposes.

    Naming Consistency5/5

    All tools use consistent snake_case with verb_noun pattern (e.g., add_cookie, close_window, browser_start). Naming is predictable and follows a clear convention.

    Tool Count5/5

    26 tools cover browser lifecycle, navigation, element interaction, cookies, screenshots, and scripting. Each tool earns its place; the count is well-scoped for a Selenium automation server.

    Completeness4/5

    Core workflows are covered (start/stop, navigation, elements, cookies, screenshots). Minor gaps exist (frame switching, alert handling) but do not hinder primary use cases.

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      Provides browser automation using Selenium, supporting Chrome and Firefox, with tools for navigation, element interaction, screenshots, and more.
      1
      Mulan Permissive Software , Version 2