内容
Google 搜索 MCP — 浏览器自动化服务器
<p align="center">
<img src="./image/AIFOREST.png" alt="AI Forest" width="300"/>
</p>
> **作者:** Babak Emami (Babak EA) — emami.babak@gmail.com
> **许可证:** MIT — 参见 [LICENSE](LICENSE)
> 如果您 fork 或分发此项目,您 **必须** 保留原始作者的姓名和项目署名。
---
一个浏览器自动化 MCP 服务器,通过 Chrome 为 AI 代理提供真实的网络访问。
它允许像 **Claude Desktop**、**Copilot**、**Windsurf** 和自定义代理这样的 MCP 客户端:
✅ 搜索 Google 和 DuckDuckGo
✅ 打开和读取完整的网页
✅ 提取链接和结构化结果
✅ 点击、输入、导航、切换标签页
✅ 在浏览器中执行 JavaScript
✅ 通过 Docker 或本地 Python 运行
---
> *想法很简单:*
>
> *LLM 已经具备智能。它们通常缺乏的是在真实浏览器中的可靠的“眼睛和手”。*
>
> *所以我构建了一个 MCP 服务器,纯粹专注于浏览器能力 — 同时保持模型无关性。*
> *没有捆绑的 LLM。没有供应商锁定。只是一个为现代 AI 代理提供干净的浏览器自动化层。*
---
最棒的部分之一:您可以直接询问 AI 客户端 —
> **“在 Google 上搜索 Python 异步最佳实践并总结 top 结果。”**
…and 代理自主:
1. 启动 Chrome
2. 搜索 Google
3. 打开结果
4. 读取页面
5. 总结
---
## 技术栈
| 层 | 技术 |
|-------|-----------|
| 协议 | MCP (Model Context Protocol) |
| 浏览器 | Selenium + Chrome |
| 容器 | Docker |
| 语言 | Python |
| 集成 | Claude Desktop · GitHub Copilot · Windsurf |
---
## 快速 Docker 启动
```bash
docker run -p 9040:9040 --shm-size=2g aiforest/google-search-mcp:latest
```
---
一个 **Model Context Protocol (MCP) 服务器**,为任何 MCP 客户端(Claude Desktop、自定义代理等)提供一个真实的 Chrome 浏览器:
- 导航到任何 URL
- 读取任何网页的完整文本(滚动、展开折叠部分)
- 搜索 Google 或 DuckDuckGo 并返回结构化结果
- 在新标签页中打开链接并读取它们
- 点击元素、在输入框中输入按键
- 提取页面上的所有超链接
- 运行任意 JavaScript
**没有捆绑的 LLM。** 您的 MCP 客户端提供智能 — 该服务器提供浏览器中的眼睛和手。
---
## 快速启动(Docker — 推荐)
```bash
# 1. 从 Docker Hub 拉取
docker run -p 9040:9040-size=2g aest/google-search-mcp:latest 2. 添加 Desktop (~/.config/claude_desktop_config.json)
"mcpServers "google-search": "url": "http9040/mcp"
}
}
}
```
。询问 Claude “搜索 Google …” 或 “打开 https:// 并总结它”。
---
## 从源码构建
###条件
- Docker Desktop Linux 上的 Docker Engine Git
### 克隆
```bash
git clonegithub.com/babake-search-mcp.git
-search-mcp
#
./build_and_push# 运行
docker run -p 90400 --shm-size=2g yourdockerhubuser/google-search-mcp:latest
```
### 构建并推送到 Docker Hub
```bash
DOCKER_USER=yourdockerhubname ./build_and_push.sh --push
```
---
## 本地(无 Docker)
```bash
pip install -r requirements_mcp.txt
# stdio 传输 — 用于 Claude Desktop 直接集成
python mcp_server.py HTTP 传输 — 用于网络 / 多客户端使用
M=http MCP_PORT=9040 python mcp_server.py---
## MCP 工具
| 工具 | 描述 |
| `browser_launch` | 启动无头 Chrome( 中启动任何其他工具) |
| `browser | 连接到使用 `--bugging-port` 启动 Chrome |
| `browser | 浏览器是否已连接?哪个标签页是活动的? |
| `browser_close` | 关闭浏览器会话 |
| `browser | 列出所有打开的标签页 |
| `_tab` | 按索引切换到标签页 |
| `browser` | 关闭当前 |
| `browser_navigate` | 转到 URL |
_open_new_tab` | 在新标签页中打开 URL |
| `browser_go_back下“后退 |
| `browser_read | 完整页面文本滚动 + 展开) `browser_get_page_links 列出页面上的所有 |
| `browser_open_and_read` | 在新标签打开 URL + 读取文本,一次调用 |
| `` | 按 CSS 选择器点击元素 |
| `browser_click_xpath` | 按 XPath 点击元素browser_type` | 在输入框 / 文本区域中输入 |
| `browser_press_key` | 向元素发送 ENTER、TAB、ESCAPE 等按键 |
| `browser_execute_js` | 运行任意 JavaScript |
| `browser_google_search` | 搜索 Google → 标题、URL、摘要 |
| `browser_ddg_search 搜索 DuckDuckGo(备用) |
| `browser_search_and_read` | 搜索 → 打开结果完整页面文本 |
---
| 环境变量 | 默认值 | 描述 |
|---|---| `MCP_TRANSPORT `stdio` | `stdio` 用于 Claude Desktop,` 用于 Docker/网络 |
MCP_HOST` |.0.0` | 绑定地址 模式) |
| `MCP_PORT` | `` | 端口() |
运行时覆盖bash
docker run -9040:9040-size=2g -e MCP_PORT=904 aifor-search-mcp:latest
时覆盖:
```bash build --build-arg MCP9040 -t-mcp .
```
---
结构
```
.
├──_server.py # MCP工具
├── browser.py # (Selenium 包装├── api_gateway.py 选 FastAPI REST 网端口 9041)
_client.py # LiteLLM 用于非 MCP 调用者)
├── requirements_mcp.txt # MCP + Selenium 仅(无 LLM)
├── requirements.txt # 完整的本地开发需求
├── Dockerfile # Chrome + Selenium + MCP 服务器
├── docker-compose.yml # 一键部署
├── build_and_push.sh # 构建并推送到
├── search_babak_ea.sh # CLI:搜索 Google 中的“Babak EA github”
├── .vscode/
│ └── mcp.json # VS Code / GitHub Copilot MCP 配置
├── .windsurf/
│ └── mcp.json # Windsurf MCP 配置
└── LICENSE # MIT 许可证
```
---
## 与 Claude Desktop 的示例对话
> **您:** 搜索 Google 中的“Python 异步最佳实践 2025”并总结 top 结果。
Claude 将调用:
1. `browser_launch` → 启动无头 Chrome
2. `browser_google_search` → 返回 top 结果
3. `browser_open_and_read` → 打开 top 链接,读取完整页面
4. 为您总结
---
## 编辑器集成
确保 Docker 容器正在运行:
```bash
docker run -d -p 9040:9040 --shm-size=2g babakea/google-search-mcp:latest
```
### VS Code (GitHub Copilot)
存储库中已包含可直接使用的 [.vscode/mcp.json](.vscode/mcp.json)。
在 VS Code 中打开项目 — Copilot 将自动检测服务器。
要手动添加,请创建或更新 `.vscode/mcp.json`:
```json
{
"servers": {
"google-search-mcp": {
"type": "http",
"url": "http://localhost:9040/mcp"
}
}
}
```
**stdio 模式(本地 Python,无 Docker):**
```json
{
"servers": {
"google-search-mcp": {
"type": "stdio",
"command": "python",
"args": ["${workspaceFolder}/mcp_server.py"]
}
}
}
```
---
### Windsurf
存储库中包含 [.windsurf/mcp.json](.windsurf/mcp.json)。
当您打开项目时,Windsurf 会自动检测它。
要添加到您的 **全局** Windsurf 配置(`~/.codeium/windsurf/mcp_config.json`):
```json
{
"mcpServers": {
"google-search-mcp": {
"serverUrl": "http://localhost:9040/mcp",
"disabled": false
}
}
}
```
**stdio 模式(本地 Python,无 Docker):**
```json
{
"mcpServers": {
"google-search-mcp": {
"command": "python",
"args": ["/absolute/path/to/mcp_server.py"],
"disabled": false
}
}
}
```
---
### Claude Desktop
编辑 `~/Library/Application Support/Claude/claude_desktop_config.json`(macOS)
或 `%APPDATA%\Claude\claude_desktop_config.json`(Windows):
```json
{
"mcpServers": {
"google-search-mcp": {
"url": "http://localhost:9040/mcp"
}
}
}
```
---
## 贡献
欢迎贡献!
请根据 MIT 许可证条款,在 LICENSE 和 README 中保留原始作者署名(Babak Emami / Babak EA)。
1. Fork 存储库
2. 创建一个功能分支:`git checkout -b feature/my-feature`
3. 提交您的更改
4. 打开一个拉取请求
---
## 许可证
MIT 许可证 © 2026 **Babak Emami (Babak EA)**
参见 [LICENSE](LICENSE) 获取完整文本。
任何 fork 或重新分发 **必须** 保留原始版权声明和作者署名。