内容
# 代码开发混乱平台
MCP服务器使用Rust编写,结合浏览器ChatGPT和完整的仓库操作。通过Chrome DevTools协议(CDP)访问ChatGPT,管理无头Chrome。提供16种MCP工具:ChatGPT桥接器、文件系统、git、bash、任务交接、技能等。包括兼容OpenAI的HTTP提供程序。
## 架构
```
┌─────────────┐ stdio (MCP) ┌──────────────────────┐ CDP WebSocket ┌─────────────────────┐
│ OpenCode │ ──────────────────> │ 代码开发混乱平台 │ <────────────────> │ 无头Chrome浏览器 │
│ (MCP 客户端) │ │ (Rust MCP 服务器) │ Runtime.evaluate │ (Brave/Chromium) │
└─────────────┘ └──────────────────────┘ └─────────────────────┘
│ │
┌─────────────────────┼─────────────────────┐ │ DOM
│ │ HTTP (OpenAI API) │ ▼
│ ▼ │ ┌─────────────────────┐
┌──────────────┐ ┌──────────────────────┐ │ │ chatgpt.com │
│ 文件系统 / Git / │ │ HTTP 提供程序 :8766 │────────┘ └─────────────────────┘
│ Bash / 技能 │ │ /v1/chat/completions │
└──────────────┘ └──────────────────────┘
```
- **Rust MCP 服务器** — 通过stdio提供16种工具:ChatGPT桥接器 + 文件系统 + git + bash + 任务交接 + 技能
- **CDP 桥接器** — 启动无头Chrome,通过DevTools协议连接,执行JavaScript代码
- **HTTP 提供程序** — 兼容OpenAI的API,监听端口8766(`/v1/chat/completions`,`/v1/models`,`/health`),支持流式传输(SSE)
- **工作区工具** — 直接操作文件、git、shell命令,在工作目录中(无需Chrome)
## 功能
### ChatGPT 桥接器
- **无头Chrome** — 浏览器在后台运行,不干扰用户
- **临时聊天** — 所有请求通过`?temporary-chat=true`发送到临时聊天(不保存历史记录)
- **Cookie 重用** — Brave/Chrome配置文件复制一次,无需登录
- **反检测** — `--disable-blink-features=AutomationControlled`绕过Cloudflare
- **模型选择** — 传送`model: "GPT-4o"`,`"o1"`等
- **保存Markdown** — 回答保存代码块、标题、链接、表格
- **流式传输** — 通过SSE为HTTP提供程序提供部分回答
- **重试和回退** — 暂时性错误时自动重试
- **桥接器就绪** — MCP工具调用等待桥接器就绪(最多60秒)而不是立即超时
### 工作区工具(混合模式)
- **文件系统** — `read_file`,`write_file`,`edit_file`,`tree`,路径包含检查
- **搜索** — `search_files`通过ripgrep(带有grep回退)
- **Bash** — `bash`,安全允许列表(阻止`rm -rf`,`git push`,`curl`,`sudo`)
- **Git** — `git_status`,`git_diff`,`show_changes`
- **任务交接** — `.ai-bridge/`,包含Codex/OpenCode/Pi的计划(`read_handoff`,`handoff_to_agent`)
- **技能** — 发现和加载`SKILL.md`文件(`load_skill`,`list_skills`)
- **上下文** — `codex_context`(AGENTS.md链 + git状态),`export_pro_context`
- **分层工具界面** — `--tool-mode minimal|standard|full`控制可用工具
- **安全性** — 阻止通配符(.git,.env,*.pem,*.key),写入模式切换,bash允许列表
## 要求
- Rust >= 1.85(2024版本;已在1.96上测试)
- Chrome,Brave或Chromium浏览器
- ChatGPT账户(浏览器中活跃会话,用于复制cookie)
- 支持MCP的OpenCode
## 安装
### 步骤1:获取二进制文件
**选项A:从源代码编译:**
```bash
git clone https://github.com/DurkaEbanaya/codexdcp.git
cd codexdcp
cargo build --release
# 二进制文件:target/release/codexdcp
```
**选项B:预编译:**
从[发布页面](https://github.com/DurkaEbanaya/codexdcp/releases)下载。
### 步骤2:复制浏览器cookie
代码开发混乱平台使用单独的Chrome配置文件,需要一次性复制浏览器cookie:
```bash
# 创建配置文件
mkdir -p ~/.codexdcp/chrome-profile/Default
# 从Brave复制cookie和localStorage
BRAVE="$HOME/Library/Application Support/BraveSoftware/Brave-Browser/Default"
cp "$BRAVE/Cookies" ~/.codexdcp/chrome-profile/Default/
cp "$BRAVE/Login Data" ~/.codexdcp/chrome-profile/Default/ 2>/dev/null
cp -r "$BRAVE/Local Storage" ~/.codexdcp/chrome-profile/Default/ 2>/dev/null
cp "$BRAVE/Preferences" ~/.codexdcp/chrome-profile/Default/ 2>/dev/null
# 对于Chrome:
# CHROME="$HOME/Library/Application Support/Google/Chrome/Default"
```
替代方法:使用`--visible`运行一次,手动登录,然后关闭:
```bash
./target/release/codexdcp --visible --chrome-path "/Applications/Brave Browser.app/Contents/MacOS/Brave Browser"
```
### 步骤3:配置OpenCode
在`~/.config/opencode/opencode.jsonc`中添加服务器:
```jsonc
{
// 重要:mcp_timeout必须足够大(120000毫秒= 2分钟)。
// ChatGPT工具调用需要30-90秒:加载Chrome(~15秒)+
// 导航到临时聊天(~10秒)+ 模型响应(~10-60秒)。
// 如果没有此设置,OpenCode将使用默认超时(5秒)
// 并且工具调用将因“MCP错误-32001:请求超时”而失败。
// 文件系统/git/bash工具立即响应;120秒是最大时间,而不是最小时间。
"experimental": {
"mcp_timeout": 120000
},
"mcp": {
"chatgpt-codex": {
"type": "local",
"command": [
"/ABSOLUTE/PATH/TO/codexdcp",
"--http-port", "8766",
"--cdp-port", "9222",
"--chrome-path", "/Applications/Brave Browser.app/Contents/MacOS/Brave Browser"
],
"enabled": true
}
}
}
```
指定浏览器路径 `--chrome-path`。如果未指定,二进制文件将尝试自动检测。
### 步骤4:(可选)连接为模型提供程序
```jsonc
{
"provider": {
"chatgpt-browser": {
"npm": "@ai-sdk/openai-compatible",
"name": "ChatGPT(浏览器)",
"options": {
"baseURL": "http://127.0.0.1:8766/v1"
},
"models": {
"gpt-4o": { "name": "GPT-4o" },
"o1": { "name": "o1" },
"gpt-4o-mini": { "name": "GPT-4o mini" }
}
}
}
}
```
### 步骤5:(可选)斜杠命令
```jsonc
{
"command": {
"": {
"description": "将代码任务委托给ChatGPT",
"template": "使用chatgpt_coder MCP工具委托:$ARGUMENTS"
},
"": {
"description": "向ChatGPT提问",
"template": "使用chatgpt_ask MCP工具提问:$ARGUMENTS"
}
}
}
```
## MCP工具
### ChatGPT桥接器(始终可用)
| 工具 | 描述 | 参数 |
|---|---|---|
| `chatgpt_coder` | 将代码任务委托给ChatGPT(Codex风格) | `task`,`context`,`language`,`model`,`format` |
| `chatgpt_ask` | 提问ChatGPT | `prompt`,`model`,`format` |
### 文件系统(minimal+)
| 工具 | 描述 | 参数 |
|---|---|---|
| `read_file` | 读取文件并获取行号 | `path`,`offset`,`limit` |
| `write_file` | 创建/覆盖文件 | `path`,`content` |
| `edit_file` | 文件中精确替换字符串 | `path`,`old_string`,`new_string` |
| `tree` | 目录树 | `path`,`max_depth` |
| `bash` | Shell命令(安全允许列表) | `command` |
### 搜索(standard+)
| 工具 | 描述 | 参数 |
|---|---|---|
| `search_files` | 通过ripgrep/grep的正则表达式搜索 | `pattern`,`path`,`include` |
### Git(standard+)
| 工具 | 描述 | 参数 |
|---|---|---|
| `git_status` | Git状态(短格式) | - |
| `git_diff` | Git差异(--stat) | `staged` |
| `show_changes` | 所有更改的摘要 | - |
### 技能(standard+)
| 工具 | 描述 | 参数 |
|---|---|---|
| `load_skill` | 按名称加载SKILL.md | `name` |
| `list_skills` | 所有技能列表 | - |
### 任务交接(standard+)
| 工具 | 描述 | 参数 |
|---|---|---|
| `read_handoff` | 读取`.ai-bridge/`目录 | - |
| `handoff_to_agent` | 将计划写入代理 | `plan`,`agent`,`model` |
### 上下文(仅限full)
| 工具 | 描述 | 参数 |
|---|---|---|
| `codex_context` | AGENTS.md链 + git状态 | - |
| `export_pro_context` | 将上下文导出到`.ai-bridge/pro-context.md` | - |
### 工具模式(`--tool-mode`)
| 模式 | 工具 |
|---|---|
| `minimal` | ChatGPT + 文件系统 + bash |
| `standard` | + 搜索,git,技能,任务交接 |
| `full` | + 上下文工具 |
## HTTP API
### 普通请求
```bash
curl http://127.0.0.1:8766/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4o",
"messages": [
{"role": "user", "content": "用Rust编写fizzbuzz"}
]
}'
```
### 流式传输(SSE)
```bash
curl http://127.0.0.1:8766/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4o",
"stream": true,
"messages": [
{"role": "user", "content": "写一首关于编译器的诗"}
]
}'
```
### 健康检查
```bash
curl http://127.0.0.1:8766/health
# → {"status":"ok","connected":true,"mode":"temporary_chat"}
```
## CLI标志
```
--http-host 127.0.0.1 HTTP提供程序的主机
--http-port 0 HTTP端口(0 = 关闭)
--default-timeout 120 ChatGPT响应超时(秒)
--system-prompt - 自定义系统提示
--max-retries 3 重试次数
--retry-delay-ms 2000 初始重试延迟(毫秒)
--chrome-path - Chrome/Brave/Chromium的路径
--chrome-profile ~/.codexdcp/chrome-profile 用户数据目录路径
--headless true Chrome的无头模式
--cdp-port 9222 DevTools协议端口
--visible 以可见窗口启动Chrome(用于登录)
--selectors-path - 自定义选择器的路径
--log-level info 日志级别
--http-only 仅HTTP提供程序(无MCP stdio)
--root CWD 文件系统/git/bash的工作区根目录
--tool-mode standard minimal | standard | full
--bash-mode safe safe | off | full
--write-mode workspace workspace | off
```
所有标志也可以通过环境变量访问(`CODEXDCP_*`或`CHATGPT_BRIDGE_*`)。
## 安全性
- **路径包含** — 所有路径相对于工作区根目录;阻止超出范围的访问
- **阻止通配符** — `.git/`,`.env`,*.pem`,*.key`等不可访问/写入
- **Bash允许列表** — 在安全模式(默认)下,仅执行构建/测试/ lint/git-inspect命令;`rm -rf`,`git push`,`curl`,`sudo`等被阻止
- **写入模式** -- `--write-mode off`将所有工具设置为只读
- **DOM选择器** — ChatGPT DOM可能会更改;选择器在`src/js.rs`中更新(`DEFAULT_SELECTORS`),可通过`--selectors-path`重定义
- **Chrome配置文件** — 包含访问ChatGPT的cookie;请勿提交`~/.codexdcp/chrome-profile/`
- **服务条款** — 使用ChatGPT的Web界面自动化可能会违反OpenAI的服务条款。请自行承担风险
## 调试
- 启用debug日志的二进制文件:`codexdcp --log-level debug`
- 用于调试的可见Chrome:`codexdcp --visible --log-level debug`
- 仅HTTP(无MCP):`codexdcp --http-only --http-port 8766 --log-level debug`
- 检查CDP:`curl http://127.0.0.1:9222/json/version`
- 检查HTTP:`curl http://127.0.0.1:8766/health`
- Chrome日志继承自codexdcp的stderr
## 开发
```bash
cargo build --release # 构建
cargo test # 测试
cargo clippy --tests -- -D warnings # lint
cargo run -- --help # 帮助
cargo run -- --visible --log-level debug # 启动可见的Chrome
```
## 许可证
MIT