SeleniumMCP
by Lokii0911
README.md
# 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`.
## 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:
```powershell
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:
```text
Settings > Apps > Advanced app settings > App execution aliases
```
```bash
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
```
PowerShell:
```powershell
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -e ".[dev]"
```
Run as a local STDIO MCP server:
```bash
selenium-mcp
```
Run as a Streamable HTTP MCP server:
```bash
selenium-mcp-http
```
Then connect MCP clients to:
```text
http://localhost:8000/mcp
```
## Claude Desktop Example
```json
{
"mcpServers": {
"selenium": {
"command": "selenium-mcp",
"env": {
"SELENIUM_BROWSER": "chrome",
"SELENIUM_HEADLESS": "true"
}
}
}
}
```
## Docker
Build and run with an in-container Chromium browser:
```bash
docker build -t selenium-mcp .
docker run --rm -p 8000:8000 selenium-mcp
```
Run with a dedicated Selenium Grid browser container:
```bash
docker compose up --build
```
## Configuration
Copy `.env.example` to `.env` and adjust:
```text
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:
```text
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
```bash
ruff check .
pytest
```
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.
Maintenance
ActivityInactive
ResponsivenessNo issues