Codex Mcp Bridge

io.github.hampsterx由 GitHub 账号 hampsterx 发布v0.9.1更新于 Oct 24, 2026

Wraps Codex CLI as MCP tools: codex, review, query, search, structured, ping, listSessions.

概览

AI 生成的概览

将 Codex CLI 封装为 MCP 工具,让助手可以运行 Codex 提示、代码审查、网页搜索和符合 JSON Schema 的结构化输出。

可以做什么
把 Codex CLI 作为子进程启动并暴露为工具:codex 用于带文件上下文、会话恢复、沙箱级别和推理强度设置的通用提示;review 用于对未提交更改、基线分支或某次提交进行原生差异感知审查;search 用于返回来源链接的网页搜索;query 用于在隔离临时目录中做轻量文本分析;structured 用于经 JSON Schema 校验的输出;另有 ping、mcpStatus 和 listSessions 诊断工具。响应会附带耗时、模型和是否使用回退模型等执行元数据。
适用场景
当你的 MCP 客户端没有 shell 访问权限(Cursor、Windsurf、Claude Desktop、VS Code),但仍希望借助 Codex 做分析和审查时适用;也适合需要模式校验输出、超时部分捕获、配额耗尽时自动回退模型或多轮会话的场景。如果客户端本身有 shell,直接调用 Codex CLI 更快也更省。
运行要求
需要本地 Node.js 运行环境(npx codex-mcp-bridge)并安装 Codex CLI(例如通过 npm)。需要 OpenAI 凭据:环境变量 OPENAI_API_KEY,或已完成 codex auth login。可选环境变量:CODEX_CLI_PATH、CODEX_DEFAULT_MODEL、CODEX_FALLBACK_MODEL、CODEX_MAX_CONCURRENT、CODEX_MCP_SERVERS。仅支持桌面端;模型调用和网页搜索需要网络访问。
安装前请注意
codex 工具支持包括 workspace-write 和 full-auto 在内的沙箱级别,会让底层代理修改文件;除非确实需要写入,否则建议使用 read-only。它以你的 OpenAI 凭据运行 Codex 子进程,提示内容和文件上下文会发送给 OpenAI。mcpStatus 工具刻意不屏蔽 Codex 已配置的 MCP 服务器,也不加固子进程环境,因此会启动 ~/.codex/config.toml 中的服务器。按 token 计费。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Codex Mcp Bridge,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

codex-mcp-bridge

[npm version] [npm downloads] [CI] [License: MIT] [Node.js] [TypeScript] [MCP]

MCP server that wraps Codex CLI as a subprocess, exposing code execution, web search, and structured output as Model Context Protocol tools.

Works with any MCP client: Claude Code, Gemini CLI, Cursor, Windsurf, VS Code, or any tool that speaks MCP.

Do you need this?

If you're in a terminal agent (Claude Code, Codex CLI, Gemini CLI) with shell access, call Codex CLI directly. It's faster, cheaper, and zero overhead:

bash
# Review current branch vs maincodex review --base main
# Review uncommitted changescodex review --uncommitted
# Review with custom focuscodex review --base main "Focus on security and error handling"
# From a worktree (run inside the worktree; `-C` is broken for `review`)cd /path/to/worktree && codex review --base main
# General analysiscodex exec "Analyze src/utils/parse.ts for edge cases"

Use this MCP bridge instead when:

  • Your client has no shell access (Cursor, Windsurf, Claude Desktop, VS Code)
  • You need structured output with JSON Schema validation (Codex CLI's --json has known bugs)
  • You need partial response capture on timeout and automatic model fallback on quota exhaustion
  • You want subprocess isolation: explicit env allowlist, no shell escape, secret redaction on output, FIFO-queued concurrency (max 3 parallel spawns, configurable via CODEX_MAX_CONCURRENT)
  • You need multi-turn conversations via session resume (sessionId / resetSession, inspected via listSessions)

Worktree note: Codex CLI issue #9084 breaks codex -C /path review .... Run codex review from inside the worktree to avoid it.

Quick Start

bash
npx codex-mcp-bridge

Prerequisites

  • Codex CLI installed (npm i -g @openai/codex)
  • OPENAI_API_KEY environment variable set, or codex auth login completed

Claude Code

bash
claude mcp add codex-bridge -- npx -y codex-mcp-bridge

Gemini CLI

Add to ~/.gemini/settings.json:

json
{  "mcpServers": {    "codex-bridge": {      "command": "npx",      "args": ["-y", "codex-mcp-bridge"]    }  }}

Cursor / Windsurf / VS Code

Add to your MCP settings:

json
{  "codex-bridge": {    "command": "npx",    "args": ["-y", "codex-mcp-bridge"],    "env": {      "OPENAI_API_KEY": "sk-..."    }  }}

Tools

ToolDescription
codexExecute prompts with file context, session resume, and sandbox control. Multi-turn conversations via session IDs. Use for free-form review prompts; see Code review with this CLI.
reviewNative diff-aware Codex review via codex exec review --json. No caller prompt; supports uncommitted, base branch, and commit review modes.
searchWeb search via codex --search. Returns synthesized answers with source URLs.
queryLightweight text analysis. No repo context, no sessions. Runs in an isolated temp directory.
structuredJSON Schema validated output via Ajv. Data extraction, classification, or any task needing machine-parseable output.
pingHealth check with CLI version, capabilities, and concurrency diagnostics (activeCount, queueDepth).
mcpStatusReport what Codex says about each MCP server it knows about: auth type, tool inventory, and whether it initialized. Optional diagnostic mode adds explicit failure states and error text.
listSessionsList active conversation sessions with metadata (turn count, model, timestamps).

codex

General-purpose execution. Supports multi-turn conversations via sessionId, sandbox levels (read-only, workspace-write, full-auto), and reasoning effort control. Pass resetSession: true to discard and start fresh. Use listSessions to inspect active sessions before resuming.

Key parameters: prompt (required), files, model, sessionId, sandbox, reasoningEffort, workingDirectory, timeout (default 60s).

search

Web search powered by OpenAI's native search infrastructure via Codex CLI's --search flag. Returns synthesized answers with source URLs.

Key parameters: query (required), model, workingDirectory, timeout (default 120s).

query

Lightweight, non-agentic text analysis. Spawns in an isolated temp directory so the bridge's repo context doesn't leak. Pass text to analyze in the context parameter. Supports reasoningEffort and maxResponseLength.

Key parameters: prompt (required), context, model, reasoningEffort, timeout (default 60s).

review

Thin wrapper around Codex CLI's native diff-aware review. The bridge passes the diff selector to codex exec review --json; upstream Codex owns the review prompt. Requires a real git repository via workingDirectory.

Key parameters: mode (required: uncommitted, base, or commit), workingDirectory (required), base (required for base mode), commit (required for commit mode), title, model, timeout (default 180s).

structured

Embeds a JSON Schema in the prompt and validates the response with Ajv. Returns clean JSON on success, validation errors on failure.

Key parameters: prompt (required), schema (required, JSON string), files, model, workingDirectory, timeout (default 60s).

ping

No parameters. Returns CLI version, auth status, model configuration, and concurrency diagnostics (activeCount, queueDepth).

mcpStatus

Reports per-server MCP state as Codex's own app-server protocol sees it. Unlike every other tool, it deliberately does not suppress Codex's MCP servers or harden the subprocess environment, because both would disable the thing being measured. It therefore boots the servers in ~/.codex/config.toml and is slower than a normal call. With diagnostics: true and a workingDirectory inside a trusted project, the thread it starts also boots that project's .codex/config.toml servers.

Key parameters: diagnostics (default false), workingDirectory, timeout (per-request, default 90s).

ModeCostWhat you get
default~6-9sInventory: auth type, tool names and counts, and initialized / unknown per server. Creates no thread and writes no session record.
diagnostics: true~10-20sAdds an explicit failed state and the error text naming the cause (expired OAuth grant, missing binary, remote refusal). Starts an ephemeral thread, which is never materialised on disk.

Reading the output:

  • unknown is not a failure. It means the inventory carried no server info and no explicit verdict was available. Only diagnostics: true can report failed.
  • A degraded warning means don't trust unknown. Slow calls have been observed reporting healthy servers as uninitialized, so the tool reports how long the underlying call took and flags the result when it was slow enough to be suspect.
  • builtIn marks a server Codex injects that is not in your config; configuredButUnreported marks one in your config that Codex never mentioned.

Example:

text
atlassian            failed       auth=oAuth  tools=0    error: MCP client for `atlassian` failed to start: MCP startup failed: failed to    refresh OAuth tokens for server atlassian: ... invalid_grant: Grant not foundcodex_apps           initialized  auth=bearerToken  tools=117  (builtIn)linear               initialized  auth=oAuth  tools=57serena               initialized  auth=unsupported  tools=22

All tools attach execution metadata (_meta) with durationMs, model, fallbackUsed, and session info where applicable. See DESIGN.md for details.

Code review with this CLI

This bridge does not bundle reviewer prompts. There are three paths for code review:

Native upstream codex review

bash
codex review --base maincodex review --uncommittedcodex review --base main "Focus on security and error handling"

Diff-aware review built into Codex CLI. No bridge involvement. Use this when your client has shell access.

Bridge review tool for native diff-aware review

jsonc
{  "tool": "review",  "arguments": {    "mode": "base",    "base": "main",    "workingDirectory": "/path/to/worktree"  }}

The bridge runs codex exec review --json from workingDirectory, captures the final review text, and returns review metadata such as threadId, event counts, and redacted command output. It does not accept a prompt.

Bridge codex tool with caller-supplied prompt

jsonc
{  "tool": "codex",  "arguments": {    "prompt": "<your review prompt + diff or file references>",    "sandbox": "read-only"  }}

The bridge runs codex exec --sandbox read-only with the supplied prompt and returns stdout. Use this for free-form review prompts or review inputs that are not expressible as uncommitted, base, or commit diff selectors.

Representative review prompt

A starting point; adapt freely:

text
Review the following diff:
<diff content>
Look for:- Bugs that would surface in production- Missing error handling on user-supplied input- Tests modified to silence failures rather than verify behaviour- Security issues (injection, missing auth checks, secret leaks)
For each finding cite file:line, severity (high/medium/low), and a suggested fix.Skip style/formatting; assume an autoformatter handles those.

The bridge has no opinion on prompt content. See ADR-001 for the rationale.

Configuration

VariableDefaultDescription
CODEX_DEFAULT_MODEL(CLI default)Default model for all tools
CODEX_FALLBACK_MODELo3Fallback on quota exhaustion (none to disable)
CODEX_CLI_PATHcodexPath to CLI binary
CODEX_MAX_CONCURRENT3Max concurrent subprocess spawns
CODEX_MCP_SERVERS(unset)Control which Codex internal MCP servers stay enabled. See DESIGN.md.
CODEX_HOME~/.codexRoot subprocesses authenticate from

Running the bridge against a second Codex account

CODEX_HOME is a complete identity switch: auth, config.toml, skills and thread history all live under the root, so a second root is a second install. Every tool call this bridge makes is machine traffic rather than a session someone is sitting in front of, which makes it a good candidate for a work or team seat while interactive codex keeps a personal one.

Set it in the server registration rather than the ambient shell, so the choice does not depend on which terminal launched the client:

jsonc
{  "mcpServers": {    "codex": {      "type": "stdio",      "command": "npx",      "args": ["-y", "codex-mcp-bridge"],      "env": {        "CODEX_HOME": "/home/you/.codex-work",        "CODEX_DEFAULT_MODEL": "gpt-5.6-sol"      }    }  }}

Three things to know before you do:

  • Log in as that root first, since a root is only as usable as its credentials: CODEX_HOME=/home/you/.codex-work codex login (or codex login --with-api-key). Check it with CODEX_HOME=/home/you/.codex-work codex login status.
  • A JSON env block has no conditional. If that root loses its login, every subprocess the bridge spawns targets it anyway, with no fallback to the default root the way a shell wrapper could offer one.
  • Set CODEX_DEFAULT_MODEL alongside it. The bridge resolves config.toml from CODEX_HOME, so a freshly created root has none and the model drops to the CLI default. That absence also makes most of CODEX_MCP_SERVERS inert: with nothing configured there is nothing to disable, nothing to inherit and no name to enable, which is what the default setting wants anyway. The one mode it does not disarm is a raw TOML override (a value starting { or [), which is passed straight through as -c mcp_servers=... and never reads config.toml.

Choosing a Codex MCP server

You need...Consider
Structured output, model fallback, concurrency management, session resumeThis bridge
Session threading with conversationId, callback URI forwarding@tuannvm/codex-mcp-server
Structured patch output with approval policiescexll/codex-mcp-server
Minimal codex exec wrapper with parallel subagentscodex-as-mcp
Native Codex MCP (experimental, no wrapper needed)codex mcp serve (docs)

Performance

Codex CLI has minimal startup overhead (<100ms), so wall time is dominated by model inference.

ScenarioTypical time
Trivial prompt9-12s
Web search~17s

Default timeouts (60-300s) are comfortable for typical workloads.

Bridge family

Two MCP servers, same architecture, different underlying CLIs. Each wraps a terminal agent as a subprocess and exposes it as MCP tools. Pick the one that matches your model provider, or run both for cross-model workflows.

codex-mcp-bridgeclaude-mcp-bridge
CLICodex CLIClaude Code
ProviderOpenAIAnthropic
Toolscodex, review, search, query, structured, ping, listSessionsquery, review, search, structured, ping, listSessions
Code reviewreview tool wrapping native codex exec review --json, or codex tool with caller-supplied promptreview tool with caller-supplied prompt and hardened isolation defaults
Structured outputAjv validationNative --json-schema
Session resumeSession IDs with multi-turnNative --resume
Budget capsNot supportedNative --max-budget-usd
Effort controlreasoningEffort (low/medium/high)--effort low/medium/high/max
Cold start<100ms (inference dominates)~1-2s
AuthOPENAI_API_KEYclaude login (subscription) or ANTHROPIC_API_KEY
CostPay-per-tokenSubscription (included) or API credits
Concurrency3 (configurable)3 (configurable)
Model fallbackAuto-retry with fallback modelAuto-retry with fallback model

Both share: subprocess env isolation, path sandboxing, output redaction (secret stripping), FIFO concurrency queue, MCP tool annotations, _meta response metadata, progress heartbeats.

Development

bash
npm installnpm run build        # Compile TypeScriptnpm run dev          # Watch modenpm test             # Run testsnpm run lint         # ESLintnpm run typecheck    # tsc --noEmit

Further reading

  • DESIGN.md - Architecture, MCP server control grammar, sessions, output parsing, response metadata
  • SECURITY.md - Environment isolation, path sandboxing, output redaction, resource limits
  • CHANGELOG.md - Release history

License

MIT

来源:README.md,提交 bb14fad

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

1
  1. v0.9.1最新Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分