多代理cli网关mcp
Codex 和ClaudeCode 的Docker 内MCP 通过服务器进行讨论Cursor 中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积。
有什么
host_wrappers/: FastAPI + Uvicorn 的Codex/ClaudeCode CLI 的HTTP (9001/9002)mcp/: MCP 桥接(FastAPI)。在主机的包装上HTTP 在中传递并管理会话multi-agent-cli-gateway-mcp-server/: MCP 架桥Dockerfile 和docker-composemcp/mcp.json: Cursor 的,之MCP 源设置元数据docs/:文档(测试结果、实施情况、使用方法等)scripts/:测试脚本
目录配置
.
├── host_wrappers/
│ ├── codex_wrapper.py
│ ├── claude_wrapper.py
│ └── requirements.txt
├── mcp/
│ ├── bridge.py
│ ├── mcp.json
│ └── requirements.txt
├── multi-agent-cli-gateway-mcp-server/
│ ├── Dockerfile
│ ├── docker-compose.yml
│ ├── compose-up.sh
│ ├── compose-down.sh
│ └── start-host-wrappers.sh
├── scripts/
│ ├── test_host_wrappers.py
│ ├── test_mcp_bridge.py
│ └── requirements.txt
├── docs/
│ ├── TEST_RESULTS.md
│ ├── IMPLEMENTATION_STATUS.md
│ ├── CLI_INSTALLATION.md
│ ├── CURSOR_MCP_SETUP.md
│ └── USAGE_EXAMPLE.md
├── start.sh
├── stop.sh
└── README.md快速启动
自动起动(推奨)
一次启动所有服务:
./start.sh停止所有服务:
./stop.sh手动起动
启动主机侧喇叭
Codex/ClaudeCode CLI 中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积。
cd host_wrappers
python -m venv .venv
source .venv/bin/activate # fish: source .venv/bin/activate.fish
pip install -r requirements.txt
python codex_wrapper.py # ポート 9001
# 別ターミナルで
python claude_wrapper.py # ポート 9002Docker 上MCP 电桥启动
Docker Compose项目名称: multi-agent-cli-gateway-mcp(docker-compose.yml的,之name字段设置)
自动启动(建议-自动启动主机包装器)
cd multi-agent-cli-gateway-mcp-server
./compose-up.sh
# → ホストラッパーとDockerコンテナが自動的に起動します
# → Dockerプロジェクト名: multi-agent-cli-gateway-mcp手动起动
cd multi-agent-cli-gateway-mcp-server
docker build -t ai-debate-mcp .
docker compose up -d
# → http://localhost:8080 で起動
# → Dockerプロジェクト名: multi-agent-cli-gateway-mcp
# 注意: ホストラッパーは別途起動が必要です注意:因为装载了卷,所以在本地 mcp/ 进行动态观察时的轴心点。
处理流程
整个系统体系结构
┌─────────────┐
│ Cursor │
│ (LLM) │
└──────┬──────┘
│ MCP Protocol
│ (HTTP)
▼
┌─────────────────────────────────────┐
│ MCP Bridge (Docker) │
│ http://localhost:8080 │
│ - start_debate │
│ - step │
│ - stop │
│ - health │
└──────┬──────────────────┬──────────┘
│ │
│ HTTP │ HTTP
│ host.docker.internal
▼ ▼
┌──────────────┐ ┌──────────────┐
│ Codex Wrapper│ │Claude Wrapper│
│ :9001 │ │ :9002 │
└──────┬───────┘ └──────┬───────┘
│ │
│ CLI │ CLI
▼ ▼
┌──────────────┐ ┌──────────────┐
│ codex exec │ │ claude -p │
│ (CLI) │ │ (CLI) │
└──────────────┘ └──────────────┘交互响应流(节省令牌)
start_debate 处理流程
1. Cursor LLM
│
└─→ POST /start_debate {"initial_prompt": "..."}
│
▼
2. MCP Bridge (Docker)
│
├─→ [Turn 1] Codex Wrapper (:9001)
│ └─→ codex exec "initial_prompt"
│ └─→ Codex Output 1
│
└─→ [Turn 2] Claude Wrapper (:9002)
└─→ claude -p "Codex said: {Codex Output 1}..."
└─→ Claude Output 1
│
└─→ Response: {codex_output, claude_output, responder: "claude", next_responder: "codex"}
│
└─→ Cursor LLMstep 的处理流程(交互响应)
1. Cursor LLM
│
└─→ POST /step {"decision": {...}}
│
▼
2. MCP Bridge (Docker)
│
├─→ 前のターンを確認
│ └─→ next_responder を取得("codex" または "claude")
│
├─→ [交互応答] 1つのモデルのみ呼び出し
│ │
│ ├─→ next_responder == "codex" の場合:
│ │ └─→ Codex Wrapper (:9001)
│ │ └─→ codex exec "前のClaudeの応答を参照..."
│ │ └─→ Codex Output N
│ │ └─→ next_responder = "claude" に更新
│ │
│ └─→ next_responder == "claude" の場合:
│ └─→ Claude Wrapper (:9002)
│ └─→ claude -p "前のCodexの応答を参照..."
│ └─→ Claude Output N
│ └─→ next_responder = "codex" に更新
│
└─→ Response: {codex_output または claude_output, responder, next_responder}
│
└─→ Cursor LLM交互响应示例
ターン1 (start_debate):
Codex: "PythonでFizzBuzzを実装します..."
Claude: "Codexの実装を見ました。良い点は..."
ターン2 (step):
Codex: "Claudeの指摘を受けて、より効率的な実装を提案します..."
ターン3 (step):
Claude: "Codexの改善案を評価します..."
ターン4 (step):
Codex: "さらに最適化を検討します..."
...令牌节约效果:每个回合只有一个模型响应,因此令牌减少约50%
MCP 端点(HTTP)
POST /start_debate—{ "initial_prompt": "..." }交付Codex → Claude 的顺序交替返回响应
- 可选: mode 的 "critique"(Codex=建议角色/Claude=批判角色)或者 "consensus"(Codex=建议角色/Claude=协议形成、合并角色)的话,会有作用的讨论
POST /step—{ "decision": { "type": "adopt_codex" | "adopt_claude" | "custom_instruction", "custom_text": "..." } }
- 以之前的回合为基础组装下一个输入交替只有一个模型响应(节省令牌)
POST /stop—会话结束(状态清除)GET /health—简易健康检查
响应示例:
{
"status": "ok",
"turn": {
"user_instruction": "...",
"codex_output": "...",
"claude_output": "...",
"responder": "claude",
"next_responder": "codex"
}
}响应示例(步骤-交替响应):
{
"status": "ok",
"turn": {
"user_instruction": "...",
"codex_output": "...",
"claude_output": null,
"responder": "codex",
"next_responder": "claude"
}
}动作确认
1.主机包装器的动作确认
在主机包装器已启动的情况下,使用以下命令运行测试:
cd scripts
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python test_host_wrappers.py此测试确认:
- Codex包装器(端口9001)的帮助检查
- Claude包装器(端口9002)的帮助检查
- 实际的API调用(必须安装codex/claude CLI)
注意: CLI命令的安装方法是 docs/CLI_INSTALLATION.md 来修改标记元素的显示属性。
2. MCP确认桥的动作
Docker在容器已启动的情况下,使用以下命令执行测试:
cd scripts
source .venv/bin/activate # 既にアクティブな場合は不要
python test_mcp_bridge.py此测试确认:
- MCP桥(端口8080)的健康检查
start_debate端点step端点(adopt_codex,adopt_claude,custom_instruction)stop端点
注意: MCP在运行桥接测试之前,主机包装器(端口9001,9002)必须已启动。
Cursor 注册说明
详细步骤 docs/CURSOR_MCP_SETUP.md 来修改标记元素的显示属性。
- 光标→ 设置→ MCP → 添加源
- HTTP 的
http://localhost:8080指定 mcp/mcp.json的元数据工具start_debate,step,stop使用
文档
- 快速启动:
QUICKSTART.md - 安装,安装:
docs/SETUP.md📦 CLI安装和Cursor设置 - 使用方法:
docs/USAGE.md📖 MCP使用工具和在多个项目中使用 - 交互応答:
docs/ALTERNATING_RESPONSE.md🔄 用于令牌节约的交互响应实现 - 安全设置:
docs/SECURITY.md⚠️ 重要 - 远程访问:
docs/REMOTE_ACCESS.md📡 其他计算机/Docker访问权限 - 测试结果:
docs/TEST_RESULTS.md - 実装状況:
docs/IMPLEMENTATION_STATUS.md - 仕样书:
masterplan.md
使用例(Cursor経由)
详细说明 docs/USAGE.md 来修改标记元素的显示属性。
- 开始讨论:
CodexとClaudeCodeに議論させて。まずはこのテーマで始めて:
「PythonでFizzBuzzを実装してください。」→ Codex首先响应,然后Claude的Codex响应
- 继续下一步(交互応答):
Codexの方針を採用して次に進めて或
Claudeの方針を採用して次に進めて→ Codex → Claude → Codex → .以…的顺序交替响应(节省令牌)
- 结束讨论:
ここで議論を終了して测试结果
所有的测试都成功了! ✅
- ✅ 测试主机包装器:成功
- ✅ MCP测试桥:成功
- ✅ 集成测试:成功
- ✅ 端到端测试:成功
- ✅ 实际讨论会话:成功
了解更多信息 docs/TEST_RESULTS.md 来修改标记元素的显示属性。
