Selenium MCP Server A Model Context Protocol (MCP) server that provides web automation capabilities through Selenium WebDriver. This server allows AI assistants to interact with web pages by providing tools for navigation, element interaction, taking screenshots, and more. - 2. Features - 3. Available Tools - 3.1. Navigation and Page Management - 3.2. Element Interaction - 3.3. Element Styling - 3
Add this skill
npx mdskills install PhungXuanAnh/selenium-mcp-serverComprehensive web automation server with extensive tools, clear setup, and good documentation
A Model Context Protocol (MCP) server that provides web automation capabilities through Selenium WebDriver. This server allows AI assistants to interact with web pages by providing tools for navigation, element interaction, taking screenshots, and more.
# Install
pip install mcp-server-selenium
# Run
python -m mcp_server_selenium --port 9222 --user_data_dir /tmp/chrome-debug
# Clone and setup
git clone https://github.com/PhungXuanAnh/selenium-mcp-server.git
cd selenium-mcp-server
uv sync
# Run
PYTHONPATH=src python -m mcp_server_selenium --port 9222 --user_data_dir /tmp/chrome-debug
The MCP server provides the following tools:
navigate(url, timeout) - Navigate to a specified URL with Chrome browsercheck_page_ready(wait_seconds) - Check if the current page is fully loaded with optional waittake_screenshot() - Take a screenshot of the current browser windowget_an_element(text, class_name, id, attributes, element_type, in_iframe_id, in_iframe_name, return_html, xpath) - Get an element identified by various criteriaget_elements(text, class_name, id, attributes, element_type, in_iframe_id, in_iframe_name, page, page_size, return_html, xpath) - Get multiple elements with pagination supportget_direct_children(text, class_name, id, attributes, element_type, in_iframe_id, in_iframe_name, return_html, xpath, page, page_size) - Get all direct child nodes of an element with paginationclick_to_element(text, class_name, id, attributes, element_type, in_iframe_id, in_iframe_name, element_index, xpath) - Click on an element identified by various criteriaset_value_to_input_element(text, class_name, id, attributes, element_type, input_value, in_iframe_id, in_iframe_name, xpath) - Set a value to an input elementget_style_an_element(text, class_name, id, attributes, element_type, in_iframe_id, in_iframe_name, return_html, xpath, all_styles, computed_style) - Get style information for an elementrun_javascript_in_console(javascript_code) - Execute JavaScript code in the browser consolerun_javascript_and_get_console_output(javascript_code) - Execute JavaScript code and capture both return value and console outputget_console_logs(log_level) - Retrieve console logs from the browser with optional filtering by log levelget_network_logs(filter_url_by_text, only_errors_log) - Retrieve network request logs from the browser with optional filteringlocal_storage_add(key, string_value, object_value, create_empty_string, create_empty_object) - Add or update a key-value pair in browser's local storagelocal_storage_read(key) - Read a value from browser's local storage by keylocal_storage_read_all() - Read all key-value pairs from browser's local storagelocal_storage_remove(key) - Remove a key-value pair from browser's local storagelocal_storage_remove_all() - Remove all key-value pairs from browser's local storageYou can use this MCP server in two ways:
Install directly from PyPI:
pip install mcp-server-selenium
Or using uv:
uv add mcp-server-selenium
git clone https://github.com/PhungXuanAnh/selenium-mcp-server.git
cd selenium-mcp-server
uv sync
Or using pip with virtual environment:
python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
pip install -e .
The MCP server can work with Chrome in two ways:
google-chrome --remote-debugging-port=9222 --user-data-dir=/tmp/chrome-debug
After installing via pip/uv, you can run the server directly:
# Basic usage with default settings
python -m mcp_server_selenium
# With custom Chrome debugging port and user data directory
python -m mcp_server_selenium --port 9222 --user_data_dir /tmp/chrome-debug
# With verbose logging
python -m mcp_server_selenium --port 9222 --user_data_dir /tmp/chrome-debug -v
# Using the installed command (if available)
selenium-mcp-server --port 9222 --user_data_dir /tmp/chrome-debug -v
When running from source, ensure the Python path includes the src directory:
# Navigate to the project directory
cd /path/to/selenium-mcp-server
# Activate virtual environment (if using one)
source .venv/bin/activate
# Run with proper Python path
PYTHONPATH=src python -m mcp_server_selenium --port 9222 --user_data_dir /tmp/chrome-debug -v
# Or using uv (recommended for development)
uv run python -m mcp_server_selenium --port 9222 --user_data_dir /tmp/chrome-debug -v
For development and testing, you can use the MCP inspector:
From Source Code:
# Using uv (recommended)
uv run mcp dev src/mcp_server_selenium/__main__.py
# Or with make command
make inspector
# With custom options
uv run mcp dev src/mcp_server_selenium/__main__.py --port 9222 --user_data_dir /tmp/chrome-debug --verbose
From Installed Package:
# Create a wrapper script or use directly
mcp dev python -m mcp_server_selenium
Open your browser and navigate to: http://127.0.0.1:6274/#tools

Check logs:
tailf /tmp/selenium-mcp.log
--port: Chrome remote debugging port (default: 9222)--user_data_dir: Chrome user data directory (default: auto-generated in /tmp)-v, --verbose: Increase verbosity (use multiple times for more details)The server communicates via stdio and follows the Model Context Protocol specification. You can integrate it with MCP-compatible AI assistants or clients.
For Claude Desktop (claude_desktop_config.json):
Using installed package:
{
"mcpServers": {
"selenium": {
"command": "python",
"args": [
"-m", "mcp_server_selenium",
"--port", "9222",
"--user_data_dir", "/tmp/chrome-debug-claude"
],
"env": {}
}
}
}
For VS Code Copilot (.vscode/mcp.json):
Using installed package:
{
"servers": {
"selenium-installed": {
"command": "python",
"args": [
"-m", "mcp_server_selenium",
"--user_data_dir=/home/user/.config/google-chrome-selenium-mcp",
"--port=9225"
]
}
}
}
Using source code directly:
{
"servers": {
"selenium-source": {
"command": "/path/to/selenium-mcp-server/.venv/bin/python",
"args": [
"-m", "mcp_server_selenium",
"--user_data_dir=/home/user/.config/google-chrome-selenium-mcp-source",
"--port=9226"
],
"env": {
"PYTHONPATH": "/path/to/selenium-mcp-server/src"
}
}
}
}
Alternative source code configuration using full path:
{
"servers": {
"selenium-source-alt": {
"command": "/path/to/selenium-mcp-server/.venv/bin/python",
"args": [
"/path/to/selenium-mcp-server/src/mcp_server_selenium/__main__.py",
"--user_data_dir=/home/user/.config/google-chrome-selenium-mcp-alt",
"--port=9227"
]
}
}
}
VS Code Copilot MCP Status:
If you open the .vscode/mcp.json file, you can see the MCP server status at the bottom of VS Code.

View MCP Logs:
tail -f /tmp/selenium-mcp.logNavigate to a website:
navigatehttps://example.comTake a screenshot:
take_screenshot~/selenium-mcp/screenshot/Fill a form:
fill_input#emailuser@example.comClick a button:
click_elementbutton[type="submit"]Execute JavaScript:
run_javascript_in_consolereturn document.title;JavaScript with console output:
run_javascript_and_get_console_outputconsole.log('Hello from browser'); return window.location.href;wait_for_element to wait for elements to loadget_page_title, get_current_url, get_page_contentget_element_text, get_element_attribute, check_element_existsrun_javascript_in_console for complex DOM manipulation and data extractionrun_javascript_and_get_console_output to capture console logs for debuggingExtract page data:
// Tool: run_javascript_in_console
var links = Array.from(document.querySelectorAll('a')).slice(0, 5).map(a => ({
text: a.textContent.trim(),
href: a.href
}));
return links;
Page performance monitoring:
// Tool: run_javascript_and_get_console_output
console.time('Page Analysis');
var stats = {
title: document.title,
links: document.querySelectorAll('a').length,
images: document.querySelectorAll('img').length,
scripts: document.querySelectorAll('script').length
};
console.timeEnd('Page Analysis');
console.log('Page stats:', stats);
return stats;
Form automation:
// Tool: run_javascript_in_console
document.querySelector('#username').value = 'testuser';
document.querySelector('#password').value = 'password123';
document.querySelector('#login-form').submit();
return 'Form submitted successfully';
The server logs all operations to /tmp/selenium-mcp.log with rotation. Use the -v flag to increase console verbosity:
-v: INFO level logging-vv: DEBUG level loggingPackage not found (installed package):
# Verify installation
pip list | grep mcp-server-selenium
# or
python -c "import mcp_server_selenium; print('OK')"
Module not found (source code):
# Ensure PYTHONPATH is set correctly
export PYTHONPATH=/path/to/selenium-mcp-server/src
# or run from project root with:
PYTHONPATH=src python -m mcp_server_selenium
--port optionMCP Client Connection Problems:
which python to find Python executable)For issues and questions:
/tmp/selenium-mcp.logFor detailed documentation on specific features:
Install via CLI
npx mdskills install PhungXuanAnh/selenium-mcp-serverSelenium MCP Server is a free, open-source AI agent skill. Selenium MCP Server A Model Context Protocol (MCP) server that provides web automation capabilities through Selenium WebDriver. This server allows AI assistants to interact with web pages by providing tools for navigation, element interaction, taking screenshots, and more. - 2. Features - 3. Available Tools - 3.1. Navigation and Page Management - 3.2. Element Interaction - 3.3. Element Styling - 3
Install Selenium MCP Server with a single command:
npx mdskills install PhungXuanAnh/selenium-mcp-serverThis downloads the skill files into your project and your AI agent picks them up automatically.
Selenium MCP Server works with Claude Code, Claude Desktop, Cursor, Vscode Copilot, Windsurf, Continue Dev, Gemini Cli, Amp, Roo Code, Goose. Skills use the open SKILL.md format which is compatible with any AI coding agent that reads markdown instructions.