mcp-server-webdriver
Enables AI agents to control a real web browser (Firefox) via Selenium WebDriver, supporting page navigation, interaction, and inspection through natural language.
README
mcp-server-webdriver
MCP Server that lets AI agents control a real web browser via Selenium WebDriver (Firefox + geckodriver).
Built with FastMCP.
Requirements
| Dependency | Version |
|---|---|
| Python | ≥ 3.11 |
| FastMCP | ≥ 2.10 |
| selenium | ≥ 4.0 |
| Firefox | any recent |
| geckodriver | ≥ 0.34 |
Installation
Recommended — gecko-driver .deb from VitexSoftware repository
echo "deb http://repo.vitexsoftware.com trixie main" \
| sudo tee /etc/apt/sources.list.d/vitexsoftware.list
sudo apt update
sudo apt install gecko-driver python3-selenium python3-fastmcp
This installs gecko-driver 0.36.0 (and compatible Firefox) from
repo.vitexsoftware.com.
Alternative — system package manager
# Debian/Ubuntu (official repos — may be older version):
sudo apt install firefox-geckodriver
# macOS:
brew install geckodriver
# Rust / cargo (build from source):
cargo install geckodriver
# Manual download from GitHub releases:
# https://github.com/mozilla/geckodriver/releases
Fallback — webdriver-manager (auto-download)
pip install fastmcp selenium webdriver-manager
# geckodriver will be downloaded automatically on first browser_open
geckodriver resolution order
The server resolves geckodriver in this priority order (first match wins):
| # | Source | Configure via |
|---|---|---|
| 1 | GECKODRIVER_PATH env variable |
Absolute path to the binary |
| 2 | System PATH (default) | apt install gecko-driver from repo.vitexsoftware.com |
| 3 | webdriver-manager auto-download | Fallback; disable with GECKODRIVER_AUTO_INSTALL=false |
Running
# stdio transport (Claude Desktop / Claude Code)
python server.py
# HTTP transport (remote access)
fastmcp run server.py --transport streamable-http --port 8000
# Development mode (auto-reload)
fastmcp dev server.py
Available Tools
Session & driver management
| Tool | Description |
|---|---|
browser_open |
Open URL — starts Firefox+geckodriver if not running |
browser_close |
Quit the browser session |
browser_status |
Show session state, geckodriver source/version, env config |
geckodriver_install |
Download geckodriver via webdriver-manager (fallback) |
Page inspection
| Tool | Description |
|---|---|
browser_screenshot |
Full-page PNG screenshot |
browser_get_title |
Current page <title> |
browser_get_url |
Current URL |
browser_get_source |
Raw HTML source |
browser_get_text |
Visible text (whole page or CSS selector) |
browser_get_attribute |
Value of an HTML attribute on an element |
Interaction
| Tool | Description |
|---|---|
browser_click |
Click element (CSS selector) |
browser_fill |
Type text into an input field |
browser_select |
Select <option> in a <select> dropdown |
browser_execute_js |
Run JavaScript and return the result |
Navigation & frames
| Tool | Description |
|---|---|
browser_wait |
Wait for an element to become visible |
browser_back |
Navigate back |
browser_forward |
Navigate forward |
browser_refresh |
Reload the page |
browser_switch_frame |
Switch into <iframe> or back to main document |
Environment variables
| Variable | Default | Description |
|---|---|---|
GECKODRIVER_PATH |
(unset) | Absolute path to geckodriver binary (highest priority) |
GECKODRIVER_AUTO_INSTALL |
true |
Set to false to disable webdriver-manager fallback |
FIREFOX_BINARY |
(unset) | Path to a custom Firefox executable |
Claude Desktop / Claude Code config
{
"mcpServers": {
"webdriver": {
"command": "python3",
"args": ["/path/to/server.py"]
}
}
}
With explicit geckodriver path:
{
"mcpServers": {
"webdriver": {
"command": "python3",
"args": ["/path/to/server.py"],
"env": {
"GECKODRIVER_PATH": "/usr/bin/geckodriver"
}
}
}
}
Packaging plan for Debian
To build a python3-mcp-server-webdriver .deb package, the following dependency
chain must be packaged first (all from PyPI → .deb via VitexSoftware build infrastructure):
Layer 0 (no new deps): python-dotenv, jsonref, pathable, python-multipart,
httpx-sse, typing-inspection, uncalled-for, pyperclip, cronsim,
burner-redis, python-json-logger, griffelib, taskgroup, joserfc,
opentelemetry-api, openapi-pydantic
Layer 1: pydantic-settings, rich-rst, griffecli, py-key-value-aio
Layer 2: jsonschema-path, sse-starlette, cyclopts, griffe
Layer 3: mcp, pydocket
Layer 4: prefab-ui
Layer 5: fastmcp-slim
Layer 6: fastmcp
Layer 7: mcp-server-webdriver (depends on gecko-driver ✅ already in repo)
License
MIT
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。
mcp-server-qdrant
这个仓库展示了如何为向量搜索引擎 Qdrant 创建一个 MCP (Managed Control Plane) 服务器的示例。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。