codex-web-search-mcp
Zero-dependency MCP server that wraps OpenAI Codex's standalone search endpoint into codex_web_search and codex_web_research tools for Claude Code, enabling real-time web search and multi-step deep research independent of the underlying model.
README
codex-web-search-mcp
一个零依赖的 MCP (Model Context Protocol) server,把 OpenAI Codex 的独立搜索端点
(chatgpt.com/backend-api/codex/alpha/search)封装成 Claude Code 可用的两个工具:
codex_web_search—— 单步快速搜索(问一句、返回答案 + 来源列表);codex_web_research—— 多步深度研究(搜 → 打开文档 → 页内查找 → 点击链接,靠ref_id串联)。
灵感与端点实现来自 mateusdcc/pi-gpt-search(MIT)。 原项目是给 Pi Coding Agent(
piCLI)用的插件,无法在 Claude Code 里直接跑; 这里重写为 Claude Code 可用的 MCP server。
解决什么问题
Claude Code 原生的 WebSearch / WebFetch 工具是绑定 Anthropic API 的。
一旦你把基座模型换成 Gemini、OpenRouter、本地模型等非 Anthropic 模型,这些工具就会失灵或体验很差。
本工具直连 Codex 的独立搜索端点,与底层模型完全无关——无论 Claude Code 当前用哪个模型, 都能通过 MCP 工具获得实时联网搜索能力,且不会消耗 GPT/Codex 的推理 token。
工作原理
Claude Code(任意模型)
├── codex_web_search(query) # 单步快速搜索
│ └── POST /codex/alpha/search { commands: { search_query:[{q}] } }
│
└── codex_web_research(...) # 多步深度研究
└── POST /codex/alpha/search { commands: { search_query/open/find/click } }
└── 同一会话(id)内靠 ref_id 串联多次操作
search → 拿到 ref_id(turn0search0)
open(ref_id) → 返回文档正文
find(ref_id, pattern) → 在文档内定位
click(ref_id, id) → 跟随链接
- 端点不执行 GPT 推理,只返回结构化搜索结果(零 GPT token)。
model字段仅作为接口要求的标签(固定gpt-4o),不代表实际调用 GPT。search_query/open/find/click都是同一个端点commands里的并列操作, 后端靠请求体的id(会话 id)维持上下文,使后续open/find/click能解析上一次搜索返回的ref_id。 本 server 在多次 tool call 之间复用同一会话 id,并把ref_id暴露在来源列表里,模型即可多轮编排。- 502/503/504 会自动重试最多 2 次。
依赖与环境
- Node.js v18+(v22 已自带全局
fetch,无需安装任何 npm 包)。 - 有效的 Codex 登录凭证(必做)——本工具直连 Codex 搜索端点,必须有登录态才能用,否则工具会返回清晰的报错而不是崩溃。凭证二选一:
- 方式 1(推荐,零手动配置):运行
codex login,由 OAuth 自动把 token 写入~/.codex/auth.json; - 方式 2(免 auth.json):设置环境变量
CODEX_ACCESS_TOKEN(可选CODEX_ACCOUNT_ID)。
- 方式 1(推荐,零手动配置):运行
没有 ChatGPT/Codex 账号、未登录、或会话过期(
401/403)时,工具会返回明确的中文报错,而不是崩溃——按下面步骤补上凭证即可。
获取 Codex 凭证(必做)
不必手动编写
auth.json:它是codex login的 OAuth 产物(里面是颁发的 token),手搓无效。让codex login自动生成,或改用环境变量方式。
方式 1:codex login(推荐,自动生成 auth.json)
- 安装 Codex CLI(仅需装一次):
npm install -g @openai/codex国内网络卡可加镜像:
npm install -g @openai/codex --registry=https://registry.npmmirror.com - 登录(会打开浏览器走 ChatGPT/OpenAI OAuth):
codex login - 登录成功后自动写入
~/.codex/auth.json(含tokens.access_token/tokens.account_id)。本 server 会自动读取,无需任何额外配置。 - 验证:
cat ~/.codex/auth.json能看到tokens字段即成功。
方式 2:环境变量 CODEX_ACCESS_TOKEN(免 auth.json)
不想装 Codex CLI、或想在服务器 / CI 上用:直接提供 token 即可,无需 auth.json。
# Windows PowerShell(仅当前会话)
$env:CODEX_ACCESS_TOKEN = "你的token"
$env:CODEX_ACCOUNT_ID = "你的account_id" # 可选,部分端点需要
# macOS / Linux
export CODEX_ACCESS_TOKEN="你的token"
export CODEX_ACCOUNT_ID="你的account_id" # 可选
- 想让 Claude Code 每次启动都带上,可把上面的
export写进 shell 配置文件(~/.zshrc/~/.bashrc),或在 Claude Code 的 MCP 配置里加"env": { "CODEX_ACCESS_TOKEN": "..." }。 account_id可从方式 1 生成的~/.codex/auth.json的tokens.account_id字段抄过来(有时端点需要它来区分账号)。
凭证过期(
401/403)时:方式 1 重新codex login;方式 2 换一个新 token。
安装与配置(Claude Code)
先判断你的 Node 类型(决定用哪种写法)
- 标准 Node(最常见):从 nodejs.org 安装或系统自带的 Node,裸
npx能正常解析.cmd/ shebang。→ 推荐 方式 B(npx,免路径),最简单。- 受管 / 便携 Node:某些 AI 工具(如 WorkBuddy)内置的 Node,spawn 时解析不出
npx/.cmdshim,裸npx会ENOENT→ 30s 超时。→ 必须用 方式 A(node+ 全局脚本路径)。- 不确定?先试方式 B;若
/mcp报timed out或-32000,退回方式 A。
⚠️ 两处致命错误(实测):
- 绝不要手动
cmd /c包裹命令("command": "cmd", "args": ["/c", ...])——破坏 MCP stdio 管道,必现timed out after 30000ms或-32000。Claude Code 自己会拉起command,别套 shell。- 路径要写成绝对路径,且指向
.js文件(不是.cmd/ 目录)。
方式 A:node + 全局脚本绝对路径(★ 最可靠,任何 Node 都能用,免 npm 账号)
无需 npm 账号,直接从 GitHub 全局安装:
npm install -g github:dhicoc/codex-web-search-mcp
安装完成后,用 npm root -g 找到全局目录,把脚本绝对路径填进 .mcp.json / ~/.claude.json 的 mcpServers:
{
"mcpServers": {
"codex-web-search": {
"command": "node",
"args": ["<npm root -g 的输出>/codex-web-search-mcp/codex-web-search-mcp.js"]
}
}
}
- Windows(标准 Node):
<npm root -g>通常是C:/Users/<用户名>/AppData/Roaming/npm/node_modules,路径形如C:/Users/你的用户名/AppData/Roaming/npm/node_modules/codex-web-search-mcp/codex-web-search-mcp.js。 - macOS / Linux:通常是
/usr/local/lib/node_modules,路径形如/usr/local/lib/node_modules/codex-web-search-mcp/codex-web-search-mcp.js。 - 嫌手填麻烦,可用命令直接向 stdout 打印完整路径再复制:
- PowerShell:
Write-Output "$((npm root -g))/codex-web-search-mcp/codex-web-search-mcp.js" - bash:
echo "$(npm root -g)/codex-web-search-mcp/codex-web-search-mcp.js"
- PowerShell:
node 是 .exe(Windows)/ 可执行文件,command 直接写 node 即可,Claude Code 能通过它直接 spawn 脚本,不经过 .cmd 解析——所以在受管 / 便携 Node 环境下也能稳定连上(已实测 √ Connected)。
方式 B:npx 直接拉(标准 Node 首选,免路径)
如果你的 Node 是标准安装(裸 npx 能正常解析 .cmd / shebang),用社区标准写法,无需关心路径:
{
"mcpServers": {
"codex-web-search": {
"command": "npx",
"args": ["-y", "github:dhicoc/codex-web-search-mcp"]
}
}
}
首次运行
npx会从 GitHub 拉取并缓存,之后走缓存;升级只需再次触发或清缓存。 注意:在受管 / 便携 Node 环境(如本工作区捆绑的 Node 22.22.2)实测失败(spawn npx ENOENT→ 30s 超时)。那种环境请用方式 A。
方式 C:从源码运行(开发 / 调试用)
把本仓库 clone / 下载下来,用 node 指向脚本绝对路径(跨平台一致,天然避开 .cmd 问题):
{
"mcpServers": {
"codex-web-search": {
"command": "node",
"args": ["/absolute/path/to/codex-web-search-mcp.js"]
}
}
}
macOS / Linux(标准 Node):全局安装后也可用裸命令
codex-web-search-mcp(bin 带 shebang,无.cmd问题)。 首次在 Claude Code 里运行/mcp查看是否连上,首次会要求批准;改完重启 Claude Code 即可。 写入用户级~/.claude.json的mcpServers即可对所有项目生效。
发布到 npm(可选,获得更短的命令名)
如果你想要不带 github: 前缀的 npx -y codex-web-search-mcp(更易记),需要把包装到 npmjs.com。
这需要你有一个 npm 账号——没有账号或忘了密码都不影响上面三种方式,只是短命令名要用:
- 没账号:去 https://www.npmjs.com/signup 免费注册一个;
- 忘了密码:去 https://www.npmjs.com/forgot-password 用注册邮箱重置;
- 登录官方源后发布(本仓库
package.json的publishConfig已锁定官方源):
npm login --registry https://registry.npmjs.org/
npm publish
包名 codex-web-search-mcp 已确认未被占用。
使用
配置连上后,直接在对话里让模型去搜就行,例如:
- “帮我搜一下最新版 Rust 的发布说明”
- “查一下 Vite 6 和 Vite 7 的破坏性变更”
模型会自动调用 codex_web_search 工具。你也可以显式要求它使用这个工具而不是其他搜索方式。
codex_web_search(单步搜索)
| 参数 | 类型 | 说明 |
|---|---|---|
query |
string(必填) | 搜索关键词或问题 |
recency |
number | 仅返回最近 N 天内的结果 |
domains |
string[] | 限定搜索域名,如 ["github.com"] |
response_length |
short/medium/long |
返回详略程度 |
codex_web_research(多步深度研究)
适合「需要打开官网文档、在长文里找关键段落、跟随链接深挖」的场景。所有操作可在一次调用里组合,
也可分多轮调用(依靠自动维持的会话上下文,用上一轮返回的 ref_id 串联)。来源列表里会带 (ref: turn0search0) 这样的 id,
模型在后续 open/find/click 里直接引用即可。
| 参数 | 类型 | 说明 |
|---|---|---|
search_query |
{q, recency?, domains?}[] |
要执行的搜索查询列表 |
open |
{ref_id, lineno?}[] |
按 ref_id 打开文档/页面 |
find |
{ref_id, pattern}[] |
在已打开文档中查找关键词 |
click |
{ref_id, id}[] |
点击文档内某元素/链接 |
response_length |
short/medium/long |
返回详略程度(默认 long) |
session_id |
string | 可选:覆盖/接续会话 id |
至少提供
search_query/open/find/click中的一项;四项都空会报错。
典型用法(让模型自己编排即可,无需手动拼参数):
- “搜一下 Rust 最新版发布说明,打开官方博客,找到 1.96 里关于 async 的改动”
- “查 Vite 7 的迁移指南,打开文档后定位 breaking changes 那一节”
调试
设环境变量 CODEX_SEARCH_DEBUG=1,server 启动与每次请求会向 stderr 打印日志(含会话 id 与请求 commands)。
排错
| 现象 | 原因 / 解决 |
|---|---|
未找到 Codex 登录凭证 |
没登录。运行 codex login 或设置 CODEX_ACCESS_TOKEN |
Codex 凭证已过期(HTTP 401/403) |
会话过期,重新 codex login |
触发 Codex 速率限制(HTTP 429) |
稍后重试,或减少调用频率 |
/mcp 里显示未连接 |
检查 node 是否在 PATH、路径是否正确、JSON 是否合法 |
/mcp 报 connection timed out after 30000ms |
两种原因:① 配置里手动用了 shell 包裹命令(如 "command": "cmd", "args": ["/c", ...]),破坏 MCP stdio 管道——删掉包裹即可;② 裸 npx / 裸 .cmd 命令在部分 Node 构建(便携 / 受管版,如某些 AI 工具内置的 Node)上解析不到(spawn npx ENOENT),server 起不来——改用最可靠的 command: "node" + args: ["<全局脚本绝对路径>"](路径用 npm root -g 查) |
/mcp 报 Failed to reconnect ... -32000 |
多为编辑配置后旧会话残留——彻底退出并重启 Claude Code 即可。仍失败通常是裸 npx / 裸 .cmd 在部分 Node 构建(便携 / 受管版)上解析不出(ENOENT)——一律改用 node + 脚本绝对路径;确认是标准 Node 能解析 .cmd 时才用裸 npx |
调试时可设环境变量 CODEX_SEARCH_DEBUG=1,server 启动时会向 stderr 打印日志。
与原项目的差异
| 维度 | pi-gpt-search(原) | 本项目 |
|---|---|---|
| 运行平台 | Pi Coding Agent(pi CLI) |
Claude Code(MCP) |
| 接入方式 | ~/.pi/agent/extensions/ 插件 |
node 启动的 stdio MCP server |
| 暴露形态 | /gpt-search 命令 + codex-search/codex-research 工具 |
codex_web_search + codex_web_research 两个 MCP 工具 |
| 依赖 | TypeScript 项目 | 零依赖单文件 Node 脚本 |
| 研究 harness | 支持 open/find/click 多步研究 |
已实现(codex_web_research,会话 id 自动复用) |
后续可扩展
- 增加结果缓存,降低重复查询的速率限制风险。
- 把
open返回的页面内链接ref_id显式抽取成结构化列表,进一步降低模型引用成本。
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。
mcp-server-qdrant
这个仓库展示了如何为向量搜索引擎 Qdrant 创建一个 MCP (Managed Control Plane) 服务器的示例。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。