chatgpt-web-mcp

mcp
Security Audit
Fail
Health Pass
  • License — License: MIT
  • Description — Repository has a description
  • Active repo — Last push 0 days ago
  • Community trust — 12 GitHub stars
Code Fail
  • os.homedir — User home directory access in src/config.js
  • process.env — Environment variable access in src/config.js
Permissions Pass
  • Permissions — No dangerous permissions requested

No AI report is available for this listing yet.

SUMMARY

A local MCP server for safely controlling the ChatGPT web UI through a persistent browser profile.

README.md

ChatGPT Web MCP

English

一个本地、非官方的 MCP Server,让 Codex 等 MCP 客户端通过独立的持久浏览器配置操作 chatgpt.com。它不使用 OpenAI 官方付费 API,也不需要 API Key。消息发送通过网页完成;历史读取可能使用当前网页会话的内部接口。它不读取用户日常浏览器配置,也不会把登录信息写进 MCP 配置。

[!IMPORTANT]
本项目与 OpenAI 无隶属或背书关系。它依赖 ChatGPT 网页界面,页面改版、账号权限、地区或工作区策略都可能影响可用性。请遵守适用于你账号的条款,不要用它绕过访问控制、用量限制或安全机制。

主要能力

  • 写入提示词、上传文件、发送消息并读取完整回答
  • 新建普通或临时对话,选择历史对话
  • 动态读取和选择页面实际显示的模型、思考强度与能力档位
  • 普通请求默认使用“极高”;临时 Pro 身份探针默认停用,避免额外创建临时对话和发送测试消息
  • 浏览器和 ChatGPT 页面默认常驻,工具结束后只断开本地控制连接
  • 跨进程串行操作、低频节流、回答完成后的切换静默期
  • 遇到页面限流文字或非历史接口 HTTP 429 时熔断;历史接口 429 不触发全局熔断,不自动重试该接口
  • 对话达到 40 轮或出现 ChatGPT maximum-length banner 时,发送前先滚动加载完整 transcript(含较早历史),再归档并轮换普通对话;直接 chatgpt_submit_prompt 会安全拦截
  • 只记录脱敏后的异常请求方法、路径、状态码和资源类型

运行要求

  • Node.js 20 或更高版本
  • Google Chrome、Chromium 或 Microsoft Edge
  • 支持本地 stdio MCP 的客户端,例如 Codex
  • 可正常访问并手动登录的 ChatGPT 账号

项目会在 macOS、Windows 和 Linux 的常见位置查找浏览器。找不到时可通过 CHATGPT_WEB_CHROME 指定可执行文件。

安装

git clone https://github.com/Goudu666/chatgpt-web-mcp.git
cd chatgpt-web-mcp
npm ci
npm run doctor

为了在任意目录使用统一命令,可以建立本地全局链接:

npm link
chatgpt-web-mcp doctor

首次登录

chatgpt-web-mcp login

未执行 npm link 时也可以使用:

npm run login

在打开的专用浏览器窗口中手动登录。登录资料默认保存在 ~/.chatgpt-web-mcp/chrome-profile,与日常浏览器配置分离。不要复制、提交或分享这个目录,也不要把密码、Cookie、令牌或验证码写进环境变量。

添加到 Codex

使用统一命令:

codex mcp add chatgpt-web -- chatgpt-web-mcp serve
codex mcp get chatgpt-web

如果 Codex 找不到全局命令,可以直接使用 Node.js 和项目的绝对路径:

codex mcp add chatgpt-web -- node /absolute/path/to/chatgpt-web-mcp/src/index.js

Codex 的 MCP 配置方式可参考 OpenAI Docs

CLI

chatgpt-web-mcp serve    启动 stdio MCP Server(默认命令)
chatgpt-web-mcp login    打开专用浏览器并等待手动登录
chatgpt-web-mcp status   读取当前本地状态
chatgpt-web-mcp doctor   检查 Node.js、浏览器和本地数据路径
chatgpt-web-mcp help     显示帮助

MCP 工具

工具按用途分为以下几组:

  • 状态:chatgpt_statuschatgpt_capabilitieschatgpt_browser_lifecycle
  • 对话:chatgpt_new_chatchatgpt_set_temporarychatgpt_list_historychatgpt_search_historychatgpt_select_history
  • 设置:chatgpt_list_modeschatgpt_select_modechatgpt_list_modelschatgpt_select_modelchatgpt_list_thinking_levelschatgpt_select_thinking_levelchatgpt_answer_tier_statuschatgpt_select_answer_tier
  • 输入与输出:chatgpt_write_promptchatgpt_upload_fileschatgpt_submit_promptchatgpt_send_messagechatgpt_get_latest_responsechatgpt_archive_conversation
  • 安全:chatgpt_circuit_breaker_statuschatgpt_clear_circuit_breakerchatgpt_network_diagnostics
  • 策略路由:chatgpt_probe_pro_identitychatgpt_route_new_chat

只有用户明确要求关闭专用浏览器时,才应调用 chatgpt_close_browser

默认路由策略

普通请求默认新建非临时对话并选择页面可用的“极高”档位,使用 chatgpt_route_new_chat(requestPro=false)

临时 Pro 身份探针默认停用CHATGPT_WEB_PROBE_ENABLED=false)。chatgpt_probe_pro_identityrequestPro=true 会明确报错,不新建临时对话,也不发送“你是什么模型?”;forceProbe=true 不能绕过停用设置。这样可以避免探针产生额外对话和请求。停用探针不等于禁止手动选择页面实际提供的 Pro 档位,但本工具不保证账号实际路由到哪一个模型。

仅在确实需要实验性身份核对时,才手动设置 CHATGPT_WEB_PROBE_ENABLED=true 并重启 MCP。当前实验流程在临时对话的可用档位发送探针,读取网络响应的 model_slug:mini 回退默认档位,其他非空标记记为 network-verified,缺少标记则停止。非 mini 不等于 Pro,该流程不会强制选择 Pro。工具名及 requestPro 参数为兼容旧客户端而保留,不能把它们理解为 Pro 保证。

启用探针时,同一浏览器与页面会话持续复用可靠缓存;检测到关闭后保留 3 小时,再次请求时才重验。普通 MCP 调用结束只断开控制连接,不关闭网页,不启动重验计时。默认停用状态下不会因缓存过期自动发起探针,也不会要求重新登录。

相关配置:

环境变量 默认值 用途
CHATGPT_WEB_PROBE_ENABLED false 是否显式启用实验性临时身份探针
CHATGPT_WEB_DEFAULT_TIER 极高 普通请求和回退使用的倒数第二档名称
CHATGPT_WEB_PRO_TIER Pro 滑杆最高档名称
CHATGPT_WEB_PROBE_PROMPT 你是什么模型? 临时身份探针提示词
CHATGPT_WEB_PROBE_ACCEPT_ID gpt-5.6-pro 接受分类标识
CHATGPT_WEB_PROBE_FALLBACK_ID gpt-5.5-mini 回退分类标识
CHATGPT_WEB_PROBE_ACCEPT_PATTERN GPT-5.6 Pro 正则 接受回答的匹配表达式
CHATGPT_WEB_PROBE_FALLBACK_PATTERN GPT-5.5 mini 正则 回退回答的匹配表达式
CHATGPT_WEB_PRO_RECHECK_AFTER_CLOSE_MS 10800000 页面或浏览器关闭后,重新验证前继续复用可靠结果的时间

参考配置见 .env.example。项目不会自动读取 .env;请通过 MCP 客户端、Shell 或系统环境注入变量。

新对话前的可选刷新

CHATGPT_WEB_REFRESH_BEFORE_NEW_CHAT=false,默认不额外刷新旧页面。设置为 true 并重启 MCP 后,新建对话执行“检查草稿和附件 → 刷新当前页面 → 站内新建”。刷新失败或出现限流时停止,不重试。

这与现有的“发送前刷新”是两个步骤。开启后,一次新建并发送通常会刷新两次,增加请求量和耗时;它用于按需处理旧页面状态,不是防限流功能。已完成的小规模测试只能说明该流程可用,不能证明额外刷新能降低限流。浏览器与网页仍默认常驻。

安全节流

环境变量 默认值
CHATGPT_WEB_PAGE_INTERACTION_INTERVAL_MS 1000 ms
CHATGPT_WEB_SITE_ACTION_INTERVAL_MS 5000 ms
CHATGPT_WEB_SEND_INTERVAL_MS 5000 ms
CHATGPT_WEB_CONVERSATION_CHANGE_INTERVAL_MS 5000 ms
CHATGPT_WEB_POST_RESPONSE_CONVERSATION_COOLDOWN_MS 5000 ms
CHATGPT_WEB_PAGE_STARTUP_DELAY_MS 6000 ms
CHATGPT_WEB_POST_BREAKER_COOLDOWN_MS 300000 ms
CHATGPT_WEB_HISTORY_QUIET_PERIOD_MS 300000 ms

默认 5 秒是最小间隔,不是每 5 秒必定完成一次操作,也不是免于限流或封禁的保证。 页面加载、页面交互、生成回答以及其他等待会叠加;完成上一条回答后才开始下一条,不并发发送。已有客户端环境变量会覆盖新默认值;例如原先显式配置了 30000,升级后仍使用 30 秒。

新建、临时切换和历史选择受独立的 5 秒对话变更间隔约束,回答完成后至少静默 5 秒才允许切换。首次打开 ChatGPT 页面后仍等待 6 秒。若账号出现请求频繁提示,应停止并增大间隔,例如把上述三个 5000 配置改回 30000,不要反复重试。

人工确认限流消失并清除本地熔断后,首次站点操作仍等待 5 分钟;页面明确提示历史限流时还有独立的 5 分钟静默截止时间,清除熔断不会绕过它。仅历史接口返回 HTTP 429 不触发全局熔断:浏览器响应保留诊断日志,主动读取失败则沿用页面 transcript 回退,不自动重试该接口。网页明确出现“请求过于频繁”等限流提示时仍停止。缺少现成请求头时不再额外打开页面取认证信息。

保留 PR 的旧进程锁回收逻辑:记录的 MCP 进程已退出时,后续操作会自动清除其生成标记,避免遗留锁阻塞。进程仍存活或标记未记录进程 ID 时,不按此规则清除;这不会同时清除限流熔断,也不会关闭浏览器。

其他环境变量

  • CHATGPT_WEB_CHROME:浏览器可执行文件绝对路径
  • CHATGPT_WEB_PROFILE:专用浏览器配置目录
  • CHATGPT_WEB_HEADLESS:是否无界面运行,默认 false
  • CHATGPT_WEB_ACTION_TIMEOUT_MS:单次页面操作超时
  • CHATGPT_WEB_RESPONSE_TIMEOUT_MS:普通档位回答超时
  • CHATGPT_WEB_RECONNECT_DELAY_MS:浏览器异常重连间隔
  • CHATGPT_WEB_AUTH_CACHE_MS:登录状态本地缓存时间
  • CHATGPT_WEB_PRO_RECHECK_AFTER_CLOSE_MS:页面或浏览器关闭后的探针重验间隔,默认 3 小时
  • CHATGPT_WEB_BROWSER_STATECHATGPT_WEB_RUNTIME_STATE:本地状态文件
  • CHATGPT_WEB_OPERATION_LOCK:跨进程浏览器独占锁
  • CHATGPT_WEB_NETWORK_LOG:脱敏网络异常日志
  • CHATGPT_WEB_MAX_CONVERSATION_TURNS:发送前自动轮换阈值,默认 40
  • CHATGPT_WEB_CONTEXT_ARCHIVE_DIR:对话轮换前 Markdown 归档目录

隐私与局限

  • 登录资料、运行状态和诊断日志默认位于 ~/.chatgpt-web-mcp,不在仓库中。
  • 文件上传只接受调用者明确提供的绝对路径。
  • 网络诊断不保存查询参数、Cookie、请求体、响应体或对话 ID。
  • 等待回答使用页面内的变更事件,不持续轮询页面。
  • 每次发送前只做一次当前对话整页刷新并重新校验;页面、对话 URL、用户草稿或附件状态异常时停止,不自动重试。
  • 对话轮换前的完整 transcript(含懒加载的较早消息)由 chatgpt_archive_conversation 或原子发送路径以 0600 Markdown 文件保存;归档目录应按部署需要纳入受控的研究文档路径。
  • ChatGPT 网页不是稳定 API;选择器可能随页面更新而需要维护。
  • 模型自我说明和网络模型标记都不构成对实际服务模型的独立证明;尤其不能把“非 mini”当作 Pro 保证。

开发

npm ci
npm test
npm run smoke
npm pack --dry-run

CI 只运行离线测试和打包检查,不登录 ChatGPT,也不执行真实网页请求。贡献前请阅读 CONTRIBUTING.md;安全问题请阅读 SECURITY.md

许可证

MIT

Reviews (0)

No results found