浏览器自动化服务

结合Playwright浏览器自动化、Odoo MCP模块和Python MCP服务器的综合解决方案,提供CRUD访问、会话记录和沙盒网络访问功能。

  • by ray491
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 ray491/opencode_mcp_server

使用说明

开放代码浏览器mcp+Odoo mcp

该项目结合了:

  • 开源代码 带有Playwright浏览器MCP服务器和录制API
  • Odoo MCP (模块+Python MCP服务器)用于具有细粒度权限的完全CRUD访问

里面有什么

  • 开源代码 --AI编码代理,在端口上服务 4096
  • 浏览器MCP服务器 --基于Playwright的浏览器自动化,具有反机器人欺骗、会话记录和沙盒网络访问功能
  • HTTP API --在端口上列出、下载或删除会话记录 80
  • SFTP访问 --通过端口上的SSH浏览容器文件系统 22
  • Xvfb --虚拟显示,使浏览器在容器内无头运行
  • Odoo MCP模块 --具有CRUD和每个模型权限的JSON端点
  • Odoo MCP服务器 --调用Odoo模块端点的Python MCP服务器

需求

  • 码头工人
  • opencode.json --您的opencode配置文件
  • mcp_server.py --浏览器MCP服务器(包括在内)
  • 具有插件路径访问权限的Odoo实例

入门(开源+浏览器MCP)

1.建造

docker build -t opencode-browser-mcp .

2.跑步

docker run -d \
  -p 4096:4096 \
  -p 80:80 \
  -p 22:22 \
  --name opencode \
  opencode-browser-mcp

3.连接到opencode

打开 http://localhost:4096 在您的浏览器中。

Odoo MCP(模块+Python服务器)

1) 安装Odoo模块

  1. 复制 odoo_mcp/odoo_module/odoo_mcp_module 进入您的Odoo插件路径。
  2. 更新您的应用程序列表并安装 MCP读取API.
  3. (推荐)在Odoo中设置令牌:
    • 设置->技术->参数->系统参数
    • 密钥: mcp.token
    • 价值: <your-secret>
  4. 在Odoo中创建每个模型的MCP权限:
    • 设置->MCP->访问
    • 启用要允许的模型和操作
    • 默认情况下,未列出的任何型号均为拒绝
  5. 为用户创建一个应由MCP使用的Odoo API密钥

系统参数(可选):

  • mcp.require_auth (默认1)每次请求都需要登录+api_key
  • mcp.default_deny (默认1)拒绝MCP访问中未列出的任何模型

2) 运行Python MCP服务器(本地)

cd odoo_python_mcp_server
python -m pip install -r requirements.txt
set ODOO_BASE_URL=http://localhost:8069
set ODOO_DB=your_db_name
set ODOO_MCP_TOKEN=your-secret
set ODOO_LOGIN=your_odoo_login
set ODOO_API_KEY=your_odoo_api_key
python server.py

3) 在Docker中运行Odoo MCP服务器

Docker镜像已经包含 odoo_python_mcp_server 并从env-vars读取其设置。 启动容器并在运行时将Odoo凭据作为机密传递:

docker run -d \
  -p 4096:4096 \
  -p 80:80 \
  -p 22:22 \
  -e ODOO_BASE_URL=http://odoo:8069 \
  -e ODOO_DB=your_db_name \
  -e ODOO_MCP_TOKEN=your-secret \
  -e ODOO_LOGIN=your_odoo_login \
  -e ODOO_API_KEY=your_odoo_api_key \
  --name opencode \
  opencode-browser-mcp

## SFTP access
Connect with any SFTP client (FileZilla, WinSCP, etc.):

| Field    | Value       |
|----------|-------------|
| Protocol | SFTP        |
| Host     | `localhost` |
| Port     | `22`        |
| User     | `root`      |
| Password | `rootpass`  |

> **Change the default password** before exposing this container publicly. Edit the `echo "root:rootpass" | chpasswd` line in the Dockerfile.

## Recording API
Browser sessions are automatically recorded as `.webm` files and stored in `/app/recordings` inside the container.

### List all recordings

获取http://localhost/recordings

Returns a list of all recording files, sorted newest first:
```json
{
  "recordings": [
    { "filename": "session-abc123.webm", "size_bytes": 2345678 },
    { "filename": "session-def456.webm", "size_bytes": 1234567 }
  ],
  "count": 2
}

下载录音

GET http://localhost/recording/download/{filename}

返回编码为base64的命名文件:

{
  "filename": "session-abc123.webm",
  "size_bytes": 2345678,
  "base64": "AAAA..."
}

在本地保存:

curl http://localhost/recording/download/session-abc123.webm | python3 -c "
import sys, json, base64
data = json.load(sys.stdin)
open(data['filename'], 'wb').write(base64.b64decode(data['base64']))
print('Saved:', data['filename'])
"

或者,要一次性下载最新录音,请先列出,然后下载:

FILENAME=$(curl -s http://localhost/recordings | python3 -c "import sys,json; print(json.load(sys.stdin)['recordings'][0]['filename'])")
curl http://localhost/recording/download/$FILENAME | python3 -c "
import sys, json, base64
data = json.load(sys.stdin)
open(data['filename'], 'wb').write(base64.b64decode(data['base64']))
print('Saved:', data['filename'])
"

删除所有录音

DELETE http://localhost/recordings
{
  "deleted": ["session-abc123.webm", "session-def456.webm"],
  "count": 2
}

环境变量

变量 默认值 描述
MCP_HEADLESS false 在无头模式下运行浏览器
MCP_VIDEO_DIR /app/recordings 保存记录的目录
MCP_HTTP_PORT 80 录制HTTP API的端口
ODOO_BASE_URL http://odoo:8069 Odoo服务器的基本URL
ODOO_DB your_db_name Odoo数据库名称
ODOO_MCP_TOKEN your-secret 共享MCP令牌(可选)
ODOO_LOGIN your_odoo_login 用于API访问的Odoo登录
ODOO_API_KEY your_odoo_api_key Odoo API密钥

文件

文件 描述
Dockerfile 容器定义
mcp_server.py 带HTTP API的浏览器MCP服务器
opencode.json 开放代码配置(您提供)
odoo_python_mcp_server Odoo MCP Python服务器

备注

  • 剧作家将会议记录为 .webm 文件(CDP限制)。录制内容按原样保存,无需转码。
  • 浏览器阻止以下请求 localhost, 127.x, 192.168.x, 10.x,以及 file:// URL作为沙盒策略。
  • 如果在公共路径上找到,则使用真正的Chrome来减少机器人检测。否则,回到剧作家捆绑的Chromium。
  • Odoo模块尊重正常的记录规则和访问权限。
  • 如果 mcp.token 设置后,请求必须包含令牌。
  • Python MCP服务器自动转发令牌/登录/api_key。