Token导航 LogoToken导航TokenDH.com
Claude ↔ Codex MCP Relay logo
浏览器工具stdio官方级别未说明来源级核验

Claude ↔ Codex MCP Relay

MCP Server

一个运行Python MCP服务器的工具,支持Claude Code和Codex连接,提供消息传递、日志记录和简单的Web UI功能。

工具数

3

提示词数

0

GitHub Stars

0

资源数

0
开发工具日志记录HTMLClaudeClaudeVS Code

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

wiresharks

提供方

wiresharks

最后核验

2026/5/17 20:22

运行时

Python

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

命令预览

python -m venv .venv

详细介绍

克劳德↔ Codex MCP中继(带日志+web UI)

这运行a 单个Python MCP服务器 两者都 克劳德代码Codex(VS代码聊天/CLI) 可以连接到。

它提供:

  • MCP工具: post_message, fetch_messages, list_channels
  • 旋转日志文件(工具使用+频道消息存档)
  • 一个微小的web UI,可以呈现对话,突出显示围栏代码块,并可以发布消息

1) 安装程序

需求

  • Python 3.10+
  • pip

安装

python -m venv .venv
source .venv/bin/activate  # (Windows: .venv\Scripts\activate)
pip install -r requirements.txt

2) 运行服务器

python claude_codex.py

这将从以下位置读取主机/端口 config.json (或env变量,或默认为 127.0.0.1:8010).

或者,直接指定主机/端口:

uvicorn claude_codex:app --host 127.0.0.1 --port 8010

打开:

  • Web用户界面:http://127.0.0.1:8010/
  • MCP端点:http://127.0.0.1:8010/mcp

日志:

  • log/claude_codex.log (轮换,默认值:25MB×10次备份)
  • log/channel_messages.log (轮换,默认值:25MB×10次备份)

3) 配置

配置从加载 config.json (如果存在),然后是环境变量,然后是默认值。

选项A:config.json(推荐)

创建一个 config.json 在项目根目录中:

{
  "host": "127.0.0.1",
  "port": 8010,
  "log_path": "log/claude_codex.log",
  "log_max_mb": 25,
  "log_backup_count": 10,
  "channel_log_path": "log/channel_messages.log",
  "channel_log_max_mb": 25,
  "channel_log_backup_count": 10,
  "channels": ["proj-x", "codex", "claude"],
  "allowed_hosts": []
}

选项B:环境变量

变量默认值含义
CLAUDE_CODEX_HOST127.0.0.1服务器主机
CLAUDE_CODEX_PORT8010服务器端口
CLAUDE_CODEX_LOG_PATHlog/claude_codex.log日志文件路径
CLAUDE_CODEX_LOG_MAX_MB25N MB后旋转
CLAUDE_CODEX_LOG_BACKUP_COUNT10保留N个备份
CLAUDE_CODEX_CHANNEL_LOG_PATHlog/channel_messages.log通道消息存档日志路径
CLAUDE_CODEX_CHANNEL_LOG_MAX_MB25N MB后旋转通道日志
CLAUDE_CODEX_CHANNEL_LOG_BACKUP_COUNT10保留N通道日志备份
CLAUDE_CODEX_CHANNELSproj-x,codex,claude频道种子列表
CLAUDE_CODEX_ALLOWED_HOSTS*(空)*用于MCP DNS重新绑定保护的额外主机(逗号分隔)

传统兼容性: log_max_bytes / channel_log_max_bytes (和env ..._MAX_BYTES)仍然被接受。

例子:

CLAUDE_CODEX_LOG_PATH=/tmp/relay.log uvicorn claude_codex:app --host 127.0.0.1 --port 8010

局域网/远程访问

默认情况下,MCP端点只接受以下请求 Host: localhostHost: 127.0.0.1 (DNS重新绑定保护)。要允许来自网络上其他机器的连接,请将它们的IP添加到 allowed_hosts:

config.json:

{
  "host": "0.0.0.0",
  "allowed_hosts": ["192.168.2.3"]
}

或者通过env变量:

CLAUDE_CODEX_HOST=0.0.0.0 CLAUDE_CODEX_ALLOWED_HOSTS=192.168.2.3 python claude_codex.py

端口通配符会自动添加-- 192.168.2.3 成为 192.168.2.3:*。您还可以指定显式的主机:端口模式,如 192.168.2.3:8010.

4) 配置克劳德代码+Codex

请参阅:

  • docs/claude.md
  • docs/codex.md

5) 建议的工作流程

使用共享频道,如 proj-x 所以两个代理读/写同一个线程。

  1. Claude进行更改,然后发布一个评论包:

- 总结 - 统一diff(在diff围栏块中) - 问题/焦点

  1. Codex获取、审查并发布反馈:

- 裁决 - 重大/次要问题 - 要添加/运行的测试

  1. Claude应用修复程序并发布更新的数据包。

6) 轮询脚本

scripts/review-poll.sh 是一个轻量级的bash轮询器,用于监视频道中的新消息。使用 curljq 击中 /api/messages 端点,并打印自上次轮询以来任何新消息的单行摘要。

必需的环境变量:

变量目的
BASE_URL服务器URL,例如。 http://127.0.0.1:8010
LASTFILE保存上次看到的消息ID的文件的路径

可选环境变量:

变量默认值用途
TARGETpropiese投票渠道
INTERVAL20投票间隔秒数
WATCH_SENDERclaude仅显示来自此发件人的邮件(忽略自己的邮件)

例子:

BASE_URL=http://127.0.0.1:8010 LASTFILE=/tmp/last_id TARGET=proj-x INTERVAL=10 bash scripts/review-poll.sh

7) 自动轮询:让Codex检查消息

Codex不会自行投票,它只会在收到提示时采取行动。以下选项A-C需要 人在回路 向食品法典委员会传递信息。仅 选项D 完全自动化。

选项A:食品法典定制说明(需要人工)

增添 .github/copilot-instructions.md 或您的VS代码副本说明:

After completing any task, call the fetch_messages MCP tool on the "proj-x" channel
to check for new review feedback before going idle.

食品法典委员会将在每项任务后进行检查,但 空闲时不会轮询。您仍然需要手动提示Codex开始新的任务周期。

选项B:在VS Code终端中运行轮询脚本(需要人工)

BASE_URL=http://127.0.0.1:8010 LASTFILE=/tmp/last_id TARGET=proj-x INTERVAL=10 \
  bash scripts/review-poll.sh

终端中出现新消息。 需要阅读输出并告诉Codex对其采取行动(例如“检查proj-x通道”或粘贴摘要)。

选项C:VS代码任务(需要人工)

打开工作区时自动启动轮询脚本,因此您不必手动启动它。但Codex仍然 无法自行读取终端输出 --当你看到新消息时,你需要提示它。

增添 .vscode/tasks.json:

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "MCP Poller",
      "type": "shell",
      "command": "bash",
      "args": [".codex/reviewer-poller.sh"],
      "options": {
        "env": {
          "BASE_URL": "http://127.0.0.1:8010",
          "LASTFILE": "${workspaceFolder}/.codex/reviewer-poller.last_id",
          "TARGET": "proj-x",
          "INTERVAL": "15"
        }
      },
      "isBackground": true,
      "runOptions": { "runOn": "folderOpen" }
    }
  ]
}
提示: 通过启用自动启动 Ctrl+Shift+PTasks: Manage Automatic Tasks in Folder允许.

选项D:Codex CLI自动循环(全自动)

这是 唯一的全自动选项。它使用 Codex CLI --OpenAI的基于终端的编码代理——在没有人为干预的情况下自动对新消息做出反应。

先决条件

  1. 安装Codex CLI:
   npm i -g @openai/codex
  1. 配置MCP连接 所以Codex可以打电话 fetch_messages / post_message 直接。

添加到您的项目 .codex/config.toml:

   [mcp.claudecodex]
   transport = "sse"
   url = "http://127.0.0.1:8010/mcp"
  1. 确保 curljq 已安装 (由轮询循环使用)。

自动循环脚本

创建脚本(例如。 .codex/auto-review-loop.sh):

脚本使用 codex exec (非交互式/无头模式),以便Codex 自动退出 在完成每次审查后。常规 codexcodex resume 命令打开一个将阻止循环的交互式会话。

#!/usr/bin/env bash
set -u

BASE_URL="${BASE_URL:-http://127.0.0.1:8010}"
TARGET="${TARGET:-proj-x}"
INTERVAL="${INTERVAL:-20}"
LASTFILE="${LASTFILE:-.codex/auto-loop.last_id}"
SESSION_ID="${SESSION_ID:-}"       # optional: resume an existing Codex session
WATCH_SENDER="${WATCH_SENDER:-claude}"  # only react to messages from this sender

LAST=0
if [ -f "$LASTFILE" ]; then
  LAST=$(cat "$LASTFILE" 2>/dev/null || echo 0)
fi
if ! [[ "$LAST" =~ ^[0-9]+$ ]]; then LAST=0; fi

echo "auto-loop started: target=$TARGET sender=$WATCH_SENDER interval=${INTERVAL}s last=$LAST session=${SESSION_ID:-new}"

while true; do
  JSON=$(curl -sS -m 10 "$BASE_URL/api/messages?target=$TARGET&limit=200" || true)

  # Only look at messages from WATCH_SENDER — ignore own (codex) messages
  NEW=$(printf "%s" "$JSON" | jq -r --argjson d "$LAST" --arg sender "$WATCH_SENDER" \
    '[.messages[] | select(.sender == $sender)] | last | .id // $d' 2>/dev/null || echo "$LAST")

  if [[ "$NEW" =~ ^[0-9]+$ ]] && [ "$NEW" -gt "$LAST" ]; then
    echo "$(date -Iseconds) new messages from $WATCH_SENDER (last=$LAST, new=$NEW) — launching Codex"
    PROMPT="Fetch messages from the $TARGET channel (since id $LAST) sent by $WATCH_SENDER and review them. Post your feedback back to the same channel."
    if [ -n "$SESSION_ID" ]; then
      # Resume existing session — keeps full conversation context across reviews
      codex exec --dangerously-bypass-approvals-and-sandbox resume "$SESSION_ID" "$PROMPT"
    else
      # Start a fresh session
      codex exec --dangerously-bypass-approvals-and-sandbox "$PROMPT"
    fi
    LAST="$NEW"
    echo "$LAST" > "$LASTFILE"
  fi

  sleep "$INTERVAL"
done

运行它

chmod +x .codex/auto-review-loop.sh

# Start a new session each time
BASE_URL=http://127.0.0.1:8010 TARGET=proj-x INTERVAL=15 \
  bash .codex/auto-review-loop.sh

# Or resume an existing Codex session (keeps conversation context)
BASE_URL=http://127.0.0.1:8010 TARGET=proj-x SESSION_ID=abc123 \
  bash .codex/auto-review-loop.sh

运作原理

  1. 脚本民意调查 /api/messagesINTERVAL
  2. 当出现新消息时,它会运行 codex exec (非交互模式),用于处理任务和 自动退出
  3. 如果 SESSION_ID 已设置,它使用 codex exec resume 继续现有的会议——食品法典委员会保留了完整的对话历史,并以之前的审查为基础
  4. Codex连接到MCP中继,获取新消息,对其进行审查,并发布反馈
  5. 最后一个看到的ID被持久化到磁盘上,因此重新启动会从停止的地方继续
  6. 循环继续等待下一条消息
为什么 codex exec 而不是 codex? 常规 codex 命令打开一个交互式终端UI,该UI等待用户输入并且从不退出。 codex exec 是为脚本和自动化设计的无头/非交互模式——它运行任务并在完成后退出。

Codex CLI会话管理

每次Codex CLI聊天都会获得一个 会话ID 储存在 ~/.codex/sessions/。您可以使用这些来保持审查的连续性。

命令目的
/status显示当前会话ID(在正在运行的会话内)
codex resume从列表中选择要继续的会话
codex resume 按ID恢复特定会话
codex fork将会话分叉到新线程中
codex fork --last分叉最近的会话

您还可以键入 /resume 在CLI中获取交互式会话选择器。

提示: 在第一次Codex运行后,从以下位置获取会话ID /status~/.codex/sessions/ 并将其作为 SESSION_ID 自动循环。这样,每次审查迭代都建立在同一个对话线程上,为Codex提供了之前反馈的完整背景。

审批和沙盒模式

标记批准文件写入网络
*(默认)*命令/写入前询问仅限工作区已阻止
--full-auto仅限工作区已阻止
--full-auto +网络配置仅限工作区允许
--sandbox danger-full-access命令前询问任何地方允许
--dangerously-bypass-approvals-and-sandbox任何地方允许
重要提示: --full-auto 默认情况下阻止网络访问。由于Codex需要到达MCP中继,除非启用网络访问,否则上述自动循环脚本将失败。

启用网络访问

选项1: 在配置中启用网络(推荐)。增添 .codex/config.toml:

[sandbox_workspace_write]
network_access = true

然后 --full-auto 按原样工作。

选项2: 内联传递沙盒配置:

codex exec --full-auto -c 'sandbox_workspace_write.network_access=true' "$PROMPT"

选项3: 完全绕过沙盒(谨慎使用):

codex exec --dangerously-bypass-approvals-and-sandbox "$PROMPT"

具有网络访问功能的全自动脚本

此变体使用 --dangerously-bypass-approvals-and-sandbox 确保Codex能够不受任何限制地到达MCP中继:

#!/usr/bin/env bash
set -u

BASE_URL="${BASE_URL:-http://127.0.0.1:8010}"
TARGET="${TARGET:-proj-x}"
INTERVAL="${INTERVAL:-20}"
LASTFILE="${LASTFILE:-.codex/auto-loop.last_id}"
SESSION_ID="${SESSION_ID:-}"
WATCH_SENDER="${WATCH_SENDER:-claude}"  # only react to messages from this sender

LAST=0
if [ -f "$LASTFILE" ]; then
  LAST=$(cat "$LASTFILE" 2>/dev/null || echo 0)
fi
if ! [[ "$LAST" =~ ^[0-9]+$ ]]; then LAST=0; fi

echo "auto-loop started: target=$TARGET sender=$WATCH_SENDER interval=${INTERVAL}s last=$LAST session=${SESSION_ID:-new}"

while true; do
  JSON=$(curl -sS -m 10 "$BASE_URL/api/messages?target=$TARGET&limit=200" || true)

  # Only look at messages from WATCH_SENDER — ignore own (codex) messages
  NEW=$(printf "%s" "$JSON" | jq -r --argjson d "$LAST" --arg sender "$WATCH_SENDER" \
    '[.messages[] | select(.sender == $sender)] | last | .id // $d' 2>/dev/null || echo "$LAST")

  if [[ "$NEW" =~ ^[0-9]+$ ]] && [ "$NEW" -gt "$LAST" ]; then
    echo "$(date -Iseconds) new messages from $WATCH_SENDER (last=$LAST, new=$NEW) — launching Codex"
    PROMPT="Fetch messages from the $TARGET channel (since id $LAST) sent by $WATCH_SENDER and review them. Post your feedback back to the same channel."
    if [ -n "$SESSION_ID" ]; then
      codex exec --dangerously-bypass-approvals-and-sandbox resume "$SESSION_ID" "$PROMPT"
    else
      codex exec --dangerously-bypass-approvals-and-sandbox "$PROMPT"
    fi
    LAST="$NEW"
    echo "$LAST" > "$LASTFILE"
  fi

  sleep "$INTERVAL"
done
更安全的替代方案: 如果您希望保留工作区沙盒,请添加 network_access = true 致你的 .codex/config.toml (见上文选项1)和使用 --full-auto 相反。

8) 注意事项

  • 此服务器将消息存储在内存中。重新启动服务器会清除历史记录。
  • 想要坚持?将内存中的列表替换为SQLite/Redis,同时保留相同的工具。

目录标签

目录标签

开发工具日志记录HTMLClaude本地部署消息传递WebUIPython服务器

支持客户端

ClaudeVS Code

接入字段

传输方式(transport,传输协议)

stdio

鉴权方式(authType,认证方式)

session

运行时(runtime,运行环境)

Python

部署方式(deploymentType,部署类型)

local-only

工具数量(toolCount,工具数)

3

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

stdiosessionlocal-only

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

来源信息

继续浏览同类 MCP