The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Selenium MCP listing page.
A Python Model Context Protocol (MCP) server for Selenium WebDriver automation. Let Claude or GitHub Copilot control a real browser — navigate pages, interact with elements, run assertions, and generate ready-to-run Java TestNG / JUnit 5 / Cucumber / pytest test code from recorded sessions. 85 tools. No ChromeDriver setup. Browser auto-starts on first use.
Requires Python 3.10+ and Chrome. No separate ChromeDriver needed — Selenium Manager handles it automatically.
Install Selenium Boot MCP from the VS Code Marketplace.
The extension automatically:
.mcp.json in your project so Claude Code detects it on next openpip install seleniumboot-mcp if the Python package is missingWhen Claude Code asks "Allow MCP server seleniumboot?" — click Allow.
Install Selenium Boot MCP from Settings → Plugins → Marketplace (search "Selenium Boot MCP"), or from the plugin page.
The plugin registers the MCP server with the JetBrains AI Assistant and prompts to
pip install seleniumboot-mcp if the Python package is missing. Use
Tools → Selenium Boot MCP to install/upgrade, register, or check status.
Add .vscode/mcp.json to your project root (for GitHub Copilot):
For Claude Code, add .mcp.json to your project root:
Open the project in VS Code → Claude Code will prompt to approve the server → done.
Edit your Claude Desktop config:
%APPDATA%\claude-desktop\config.json~/.config/claude-desktop/config.jsonRestart Claude Desktop.
Once the server is running, talk to Claude naturally — no start_browser call needed, Chrome launches automatically on first use:
Claude controls the real browser, records every action, and on request generates complete test code ready to paste into your Maven or Gradle project.
| Tool | Description |
|---|---|
start_browser | Optional — Chrome auto-starts on first use. Use this to pick Firefox, enable headless, or set window size |
navigate | Go to a URL |
take_screenshot | Capture page as an inline image |
get_page_title | Return page title |
get_current_url | Return current URL |
get_page_source | Return full HTML source |
execute_script | Run JavaScript |
go_back / go_forward | Browser history |
refresh | Reload page |
switch_to_window | Switch between tabs by index |
open_new_tab | Open a new browser tab, optionally at a URL |
close_current_tab | Close the active tab and switch to the previous |
list_windows | List all open tabs with index, title, and URL |
close_browser | Quit the browser |
scroll_to_top | Scroll page to the top |
scroll_to_bottom | Scroll page to the bottom |
scroll_by | Scroll page by x/y pixels |
emulate_device | Emulate a mobile device (iPhone, iPad, Pixel, Galaxy) via CDP |
get_console_logs | Get browser console errors/warnings/info (Chrome) |
get_cookies / set_cookie | Read or write a cookie |
delete_cookie / delete_all_cookies | Remove cookies |
get_local_storage / set_local_storage | Read or write localStorage |
get_session_storage / set_session_storage | Read or write sessionStorage |
wait_for_network_idle | Wait until XHR/fetch traffic is quiet — essential for SPAs |
inspect_page | Discover all inputs, buttons, selects, links with best-fit CSS selectors |
get_network_logs | Captured XHR/fetch requests — method, URL, status, timing |
mock_response | Stub fetch/XHR by URL pattern with a canned response |
clear_mock_responses | Remove all active mock rules |
compare_screenshot | Pixel diff against a saved baseline — visual regression |
check_accessibility | Built-in WCAG audit — alt text, labels, headings, keyboard access |
| Tool | Description |
|---|---|
find_element | Find element, return tag/text/state |
find_elements | Find all matching elements |
click | Click with explicit wait |
type_text | Clear + type into input |
get_text | Get visible text |
get_attribute | Get any attribute value |
select_option | Select from <select> by text, value, or index |
hover | Mouse hover |
double_click | Double click |
right_click | Context menu click |
drag_and_drop | Drag source → target |
is_displayed | Check visibility |
is_enabled | Check enabled state |
wait_for_element | Wait: visible / clickable / present / invisible |
scroll_to_element | Scroll element into view |
clear_field | Clear input field |
send_keys | Send special keys (Tab, Enter, Escape, Ctrl+A, F5, …) |
upload_file | Upload a file via <input type="file"> |
accept_alert / dismiss_alert | Handle JS alert/confirm dialogs |
get_alert_text | Read the message from an alert |
type_in_alert | Type into a JS prompt and accept |
switch_to_frame | Focus into an iframe by index, name, or selector |
switch_to_default_content | Return to the main page from a frame |
find_shadow_element | Find element inside a shadow DOM |
get_table_data | Extract an HTML table as a formatted text grid |
fill_form | Fill multiple fields at once — auto-detects input/select/checkbox/radio |
get_healed_locators | View all self-healed selector mappings for the session |
clear_healed_locators | Reset the self-healing cache |
| Tool | Description |
|---|---|
assert_title | Page title equals/contains |
assert_url | URL equals/contains |
assert_text | Element text equals/contains |
assert_element_visible | Element is visible |
assert_element_not_visible | Element is hidden or absent |
assert_attribute | Element attribute has expected value |
assert_page_contains | Page body contains a string |
assert_element_count | Count of matching elements equals expected |
| Tool | Description |
|---|---|
generate_java_testng | Java TestNG test class from session |
generate_java_junit5 | Java JUnit 5 test class from session |
generate_java_page_object | Java Page Object class + test class from session |
generate_gherkin | Gherkin .feature file + Java step definitions from session |
generate_python_test | pytest class from session |
generate_csharp_nunit | C# NUnit + Selenium test class from session |
generate_github_actions | GitHub Actions CI workflow YAML (Maven / Gradle / pytest) |
generate_jenkins_pipeline | Declarative Jenkinsfile (Maven / Gradle / pytest) |
generate_gitlab_ci | GitLab CI .gitlab-ci.yml pipeline (Maven / Gradle / pytest) |
generate_playwright_hints | Equivalent Playwright TypeScript code from session |
get_session_log | View recorded actions |
clear_session_log | Reset the session recording |
When a selector fails to find an element, seleniumboot-mcp automatically tries alternative strategies before giving up:
| Primary selector | Alternatives tried |
|---|---|
#my-id (CSS) | by=id "my-id", [id='my-id'] |
.my-class (CSS) | by=class "my-class", [class*='my-class'] |
input[type='email'] (CSS) | //input[@type='email'] (XPath) |
//button[@id='ok'] (XPath) | button[id='ok'] (CSS), by=id "ok" |
"A, B" comma list | tries A first, then B |
Successful fallbacks are cached so the healed selector is reused automatically. Use get_healed_locators to inspect the cache and update your test code, and clear_healed_locators to start fresh.
ImageContent (renders inline in Claude)start_browser needed)generate_java_page_object)generate_gherkin)<input type="file">MIT