HTTP桥接服务

Codex MCP HTTP Bridge是一个为Codex提供OpenAI兼容HTTP和服务器发送事件(SSE)桥接的服务,适用于需要OpenAI风格流式处理的客户端。

  • by sealad886
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 sealad886/codex-mcp-streaming-http-bridge

使用说明

Codex MCP HTTP桥

OpenAI兼容的HTTP+SSE“桥”,用于MCP上的Codex(stdio上的JSON-RPC)。这是为了与期望OpenAI风格流媒体(包括Xcode Coding Intelligence)的客户端配合使用而设计的。

所得

  • OpenAI端点:模型、聊天完成(流媒体+非流媒体)、嵌入
  • 流媒体传输方式为 chat.completion.chunk SSE活动 choices[0].delta.content,并以结尾 data: [DONE]
  • Codex是作为MCP服务器进程生成的,并通过stdio与之通信

需求

  • Node.js >= 18
  • codex 已安装并可用于 PATH (或设置 CODEX_BIN)

快速入门

npm ci
npm run build
npm start

健康检查:

curl http://localhost:3333/health

端点

  • GET /health
  • GET /v1/models
  • POST /v1/chat/completions
  • POST /v1/embeddings

流媒体(SSE)示例

这应该打印多个 data: {...} 行包含 choices[0].delta.content,并以结尾 data: [DONE].

curl -N http://localhost:3333/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -d '{"model":"gpt-5.2","stream":true,"messages":[{"role":"user","content":"Write 2 short sentences about TypeScript."}]}'

认证

如果 API_KEY 如果已设置,则所有与OpenAI兼容的端点都需要它。

  • 默认标题: Authorization
  • 可选承载强制:设置 REQUIRE_BEARER=1 要求 Authorization: Bearer ...

例子:

curl -N http://localhost:3333/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer YOUR_KEY' \
  -d '{"model":"gpt-5.2","stream":true,"messages":[{"role":"user","content":"Say hello."}]}'

配置

核心:

  • PORT (默认值 3333)
  • MODEL_ID (默认值 gpt-5.2)
  • CODEX_BIN (默认值 codex)
  • CODEX_PROFILE (默认值 clean)

认证:

  • API_KEY (可选)
  • API_KEY_HEADER (默认值 authorization)
  • REQUIRE_BEARER (1 要求 Authorization: Bearer ...)

流行为:

  • RPC_TIMEOUT_MS (默认值 1200000)
  • SSE_KEEPALIVE_MS (默认值 15000)
  • STREAM_CHUNK_CHARS (默认值 64)
  • HARD_REQUEST_TIMEOUT_MS (默认值 300000)

日志记录/调试:

  • BRIDGE_LOG_REQUESTS (1 记录完整的入站HTTP请求;默认 0)
  • BRIDGE_LOG_REQUESTS_REDACT (0 禁用编辑;默认 1)
  • CODEX_BRIDGE_LOG_EVENTS (0 抑制非常嘈杂的每个事件日志;默认 1)

系统提示处理(Xcode):

一些客户端(特别是Xcode)发送非常大的 role: "system" 旨在驱动其内部工具的消息。当逐字转发时,这些指令可能会主导提示,使Codex行为过于谨慎(例如“还不写代码”,“只用##SEARCH:…”回应)。

  • BRIDGE_SYSTEM_MESSAGES=all|none|first|last (默认值 all)
    • 默认值为 none 当 User-Agent 以...开始 Xcode/ (除非明确覆盖)。
    • 对于Xcode, none 往往是最好的。
  • BRIDGE_SYSTEM_MAX_CHARS=<n> (默认值 0 意思是“无限制”)
    • 在以下情况下根据系统消息应用 BRIDGE_SYSTEM_MESSAGES 包括任何系统消息。

测试和CI

运行快速测试套件(不需要安装Codex):

npm test

CI定义见 .github/workflows/ci.yml (节点18/20/22矩阵)。

烟雾测试(端到端)

此仓库包含一个端到端的流式烟雾脚本,该脚本启动服务器,点击 /health,运行流媒体 curl,并断言流式增量和 [DONE]:

npm run smoke

这要求Codex可用(因为它执行真正的MCP流程)。

架构说明

  • HTTP层是内置的 src/app.ts 因此,无需启动真正的食品法典委员会流程,即可对其进行测试。
  • 流媒体来自Codex JSON-RPC通知(codex/event);网桥将这些作为OpenAI风格的SSE块转发。
  • src/server.ts 仅用于布线:它启动MCP桥并安装应用程序。

更多特定于回购的规则存在 CONVENTIONS.md.

支持/捐赠

如果你觉得这很有用,你可以通过以下方式添加你的捐赠链接 .github/FUNDING.yml (GitHub赞助商和/或自定义网址)。一旦你填充了该文件,GitHub将在仓库上显示一个“赞助商”按钮。