chatgpt-pro-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@chatgpt-pro-mcpsubmit a deep research job on quantum computing trends"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
此倉庫已封存(archived, 2026-09-09)。實驗結束,結論記錄如下。
為什麼停:
上游流程已被取代。 本專案的存在理由是服務
open-ultrawork的ProResearchJobV1研究流程; 該 skill 已與codex-app-model-gateway合併為tatwo-ultrawork,這條流程不再迭代。實際用量趨近於零。 上線後量測:五週內真正被呼叫 2 次,卻常駐 2 個 node 程序。
網頁 UI 通道本身不可靠。 adapter 驅動的是登入中的 ChatGPT 網頁而非 API; 上游改版即失效,且沒有結構化往返,顧問品質無法穩定。
假成功風險。 內含 fake adapter;環境變數缺失時會立刻回報
completed。 一個顧問工具回報假成功,比沒有這個工具更糟——呼叫端會以為已經問過了。
留下的結論(這是本專案真正的產出): 把「瀏覽器 UI 自動化」當成跨模型顧問通道,在可靠度與可稽核性上都不成立。 要做跨廠牌協作,應走協定層(本機 model gateway 的單一 provider+同 thread 切模型), 而不是驅動別人的網頁。參見 https://github.com/tatwo214/TATWO-ULTRAWORK-beta
Archived on 2026-09-09. The experiment is over; the conclusions are recorded above.
Briefly: its upstream workflow was superseded, real usage was ~2 calls in five weeks against two
permanently resident processes, the web-UI adapter is inherently fragile, and the bundled fake
adapter can report completed when configuration is missing — a consultant tool that can report
false success is worse than no tool at all.
The takeaway worth keeping: browser-UI automation is not a sound basis for a cross-vendor advisory channel. Do it at the protocol layer instead — a single local model-gateway provider with in-thread model switching. See https://github.com/tatwo214/TATWO-ULTRAWORK-beta
chatgpt-pro-mcp
chatgpt-pro-mcp is an experimental guarded MCP bridge for Codex/open-ultrawork ProResearchJobV1 workflows.
It is intentionally not a ChatGPT API wrapper and does not expose ChatGPT Pro as a synchronous /v1/responses model. It exposes a narrow async job interface so Codex can submit bounded research work, poll status, fetch a report artifact, and then run Codex-side source verification / claim promotion gates.
Current state: fake adapter + guarded host-side Web adapter. The Web adapter can classify a logged-in ChatGPT page, submit a bounded ProResearchJobV1 only when explicitly enabled, return early for async work, later reattach/fetch the result, and import it as ProResearchResultV1. It still does not expose ChatGPT as a synchronous /v1/responses model, and it does not claim Deep Research equivalence unless the UI/session actually provides that behavior and Codex verifies the returned sources/claims.
Why this exists
Codex/open-ultrawork needs a high-strength research counselor lane:
Codex/open-ultrawork
-> ProResearchJobV1
-> chatgpt-pro-mcp async job
-> guarded ChatGPT Pro Web/App UI lane
-> report + sources + claim ledger
-> Codex source verification / supported-unsupported classification / next testsThe user should not be dragged into mechanical copy/paste unless login, CAPTCHA, terms, billing, or another human-only event blocks automation.
Related MCP server: peer-cli-mcp
Tools
get_bridge_statusget_web_preflightsubmit_deep_researchget_deep_research_statusfetch_deep_research_resultcancel_deep_research
This MCP server intentionally does not expose raw browser tools like goto, click, type, read_dom, or cookie/session export.
Run locally
npm ci
npm test
node scripts/selftest.mjs
npm run doctor
node src/mcp-server.mjsnpm run doctor runs unit/contract/security tests, the fake selftest, redaction scan, and Web preflight. Web preflight is advisory: real submission still requires a manually logged-in dedicated browser profile and explicit submit opt-in.
CLI smoke:
node src/cli.mjs web-preflight
node src/cli.mjs submit '{"schema":"ProResearchJobV1","title":"MCP smoke","question":"Research MCP async bridge patterns with primary sources.","privacy_classification":"public","output_requirements":{"language":"zh-Hant","format":"markdown","citations_required":true,"include_uncertainty":true}}'Fake UI fixture tests
The sandbox includes local fake ChatGPT HTML fixtures for completed/running/login/terms/billing states. These tests validate the state-machine and fail-closed behavior without opening a real browser or touching a real ChatGPT account.
Docker sandbox
Docker is optional. If you want containerized contract/security tests:
docker build -t chatgpt-pro-mcp:sandbox .
docker run --rm chatgpt-pro-mcp:sandbox npm testFor this project, Docker is suitable for schema/security/fake-UI tests. Real ChatGPT Web/App automation will likely need a host-side browser profile adapter because ChatGPT session state must not be baked into a container image or public repo.
Safety rules
Permanent hard-deny actions:
login / signup / OAuth authorization
password / OTP / passkey entry
upgrade / subscribe / purchase / checkout / payment / billing
accept terms / privacy policy
enable connector / install plugin
change settings
read/export/delete chat history
If encountered, the bridge returns waiting_user or blocked and fails closed.
V0 intentionally rejects file attachments. Put only public-safe, minimized context in the question; do not send local absolute paths, secrets, raw logs, or private thread URLs.
See SECURITY.md and THREAT_MODEL.md.
Host-side Web adapter guard
The Web adapter is present but disabled by default. It only runs when all of these are true:
CHATGPT_PRO_MCP_ADAPTER=web
CHATGPT_PRO_MCP_ENABLE_REAL_UI=1Even then, it first opens the ChatGPT entrypoint and classifies auth/terms/billing/ready states. It returns waiting_user unless CHATGPT_PRO_MCP_ALLOW_SUBMIT=1 is also set. With submit enabled, it sends only the fixed research-job prompt, waits for the current assistant response, imports the result, and marks all claims as needs_verification by default.
Config values are fail-closed: invalid wait-time env vars or non-ChatGPT entrypoints abort before browser control.
Manual session setup for future real smoke
Use a dedicated profile. The script opens ChatGPT in a normal browser window; you complete login/CAPTCHA/terms manually, then close the browser. The bridge never receives your password/OTP.
CHATGPT_PRO_MCP_PROFILE_DIR=$HOME/.chatgpt-pro-mcp/profiles/default npm run web:login-nativeThen guarded smoke can run with:
CHATGPT_PRO_MCP_ADAPTER=web CHATGPT_PRO_MCP_ENABLE_REAL_UI=1 CHATGPT_PRO_MCP_WEB_LAUNCH_MODE=native-cdp CHATGPT_PRO_MCP_PROFILE_DIR=$HOME/.chatgpt-pro-mcp/profiles/default node src/cli.mjs submit '{...ProResearchJobV1...}'Without CHATGPT_PRO_MCP_ALLOW_SUBMIT=1, the adapter classifies the UI and stops before prompt submission.
Note: web:login-profile uses Playwright and may be blocked by ChatGPT/Cloudflare. Prefer web:login-native for manual login because it launches a normal macOS browser with the same isolated profile.
Real Web smoke
After manual login succeeds, a bounded real smoke can be run with explicit opt-in:
CHATGPT_PRO_MCP_ADAPTER=web \
CHATGPT_PRO_MCP_ENABLE_REAL_UI=1 \
CHATGPT_PRO_MCP_ALLOW_SUBMIT=1 \
CHATGPT_PRO_MCP_WEB_LAUNCH_MODE=native-cdp \
CHATGPT_PRO_MCP_PROFILE_DIR=$HOME/.chatgpt-pro-mcp/profiles/default \
node scripts/web-real-smoke.mjsExpected result: status=completed, marker_found=true, and result metadata similar to:
{
"deep_research_confirmed": false,
"author_model": "chatgpt-pro-web",
"executor_host": "chatgpt-pro-mcp-web-adapter",
"authority_mode": "research_ui_bridge",
"sync_responses_model": false
}This proves Web UI collaboration and information return. It does not prove full ChatGPT Deep Research mode unless the report itself shows source-backed Deep Research behavior and Codex verifies the sources.
Optional Codex MCP registration
To expose the bridge as a Codex MCP server on a local machine:
bash scripts/install-codex-mcp.sh --preflight # read-only checks
bash scripts/install-codex-mcp.sh # guarded, no submit
bash scripts/install-codex-mcp.sh --allow-submit # enables bounded Web UI submissionsThe installer updates $CODEX_HOME/config.toml, creates a timestamped backup, and uses the current checkout path. It does not copy browser profiles, cookies, audit logs, or .data/.
Fresh clone path:
git clone https://github.com/JNSlayer2/chatgpt-pro-mcp.git
cd chatgpt-pro-mcp
npm ci
npm run doctor
npm run web:login-native # human login only, if needed
bash scripts/install-codex-mcp.sh --allow-submitEvery submitted job includes a public-safe plan_id and the prompt title is prefixed with [Codex ProResearch] so the ChatGPT sidebar remains searchable and you can inspect Codex/subagent communication directly.
Async open-ultrawork behavior
For open-ultrawork-style long research jobs, prefer async mode:
CHATGPT_PRO_MCP_RETURN_AFTER_SUBMIT=1In this mode submit_deep_research returns running as soon as the ChatGPT thread is created. fetch_deep_research_result can later reattach to the private local thread URL stored in .data/, wait with wait_seconds, extract the latest assistant response, and import a ProResearchResultV1. The private thread URL is not returned through MCP and .data/ must remain uncommitted.
Deep Research selection is best-effort:
CHATGPT_PRO_MCP_RESEARCH_MODE=auto # try if a visible Deep Research control exists
CHATGPT_PRO_MCP_RESEARCH_MODE=standard # do not try
CHATGPT_PRO_MCP_REQUIRE_DEEP_RESEARCH=1 # fail closed if the control is unavailableThe bridge records whether a Deep Research control was found in result.authority.research_mode. If it is not enabled, the output is still useful as a ChatGPT Pro Web research memo, but it must not be described as verified Deep Research.
deep_research_confirmed is a separate promotion gate and defaults to false; a clicked UI control alone is not enough to promote a report to confirmed Deep Research.
Source verification helper
After a completed job, you can check source reachability:
node scripts/verify-source-links.mjs --task-id dr_<uuid> --data-dir .dataThis only verifies link reachability. It does not verify that a claim is supported by source content; Codex/open-ultrawork still owns claim-by-claim promotion.
Local runtime cleanup
The bridge keeps private task records and artifacts under .data/ so later fetch calls can reattach to the same ChatGPT thread. Clean old local job records with a dry run first:
npm run cleanup -- --older-than 30d
npm run cleanup -- --older-than 30d --confirmCleanup removes old .data/jobs/* records and matching .data/artifacts/* folders only. It does not touch browser profiles, cookies, audit logs, or ChatGPT history.
This server cannot be deployed
Maintenance
Related MCP Connectors
A paid remote MCP for OpenAI Codex agent coordination MCP, built to return verdicts, receipts, usage
Find, vet, and run MCP tools through a secure audited gateway with prompt-injection risk scoring
311A paid remote MCP for OpenAI Codex context compressor, built to return verdicts, receipts, usage log
A paid remote MCP for OpenAI Codex memory MCP, built to return verdicts, receipts, usage logs, and a
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceStreamable HTTP MCP bridge that allows ChatGPT to delegate code execution requests to a local official Codex MCP server with configurable safety policies.6MIT
- AlicenseNot gradedqualityCmaintenanceMCP bridge for calling local coding-agent CLIs (Codex, Claude) from another agent, enabling bounded tasks like code review, verification, and bug hunting.MIT
- FlicenseAqualityCmaintenanceA small local MCP adapter that lets Claude Code delegate bounded research work to Codex plan credits without giving the worker ownership of the final report.2-
- AlicenseNot gradedqualityCmaintenanceEnables Codex to delegate bounded work to external LLMs through role-based MCP tools, with worker health checks and audit logging.MIT