manus-codex-bridge
Provides access to OpenAI's Responses API using official OAuth and ChatGPT plan usage; exposes tools for checking connection status, listing live models, and running prompts or chat inferences through MCP and OpenAI-compatible HTTP endpoints.
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., "@manus-codex-bridgecheck my ChatGPT connection status and list available models"
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.
Manus-codex-bridge
An independent open-source project. Not affiliated with, endorsed by, or sponsored by Manus or OpenAI. "Manus" is a trademark of its respective owner. "ChatGPT", "Codex", and "OpenAI" are trademarks of OpenAI. This is not a Manus product. Despite the name, it does not use the OpenAI Codex backend — it uses OpenAI's official OAuth and Responses API.
Use the ChatGPT plan you already pay for — Plus or Pro — in your own local tools, through OpenAI's official sign-in and Responses API. No API key. No per-token billing.
Your tool → mcb (local) → auth.openai.com (OAuth) → api.openai.com/v1/responses
└─ counts against your ChatGPT plan usageThree ways to use it:
Surface | For |
MCP server ( | Manus, Claude Desktop, Cursor, and other MCP clients |
OpenAI-compatible HTTP ( | Any SDK or tool that accepts a custom |
CLI ( | Shell scripts and quick one-off prompts |
Why this exists
Your ChatGPT subscription includes an allowance that participating apps can use on your behalf. OpenAI documents this as Sign in with ChatGPT with optional ChatGPT plan usage, and explicitly supports it for open-source tools and personal projects that run locally.
Most community bridges in this space put an OpenAI-compatible API in front of the Codex HTTP backend (chatgpt.com/backend-api/codex) — an undocumented path tied to your ~/.codex/auth.json, which their own READMEs warn "may change without notice."
This project deliberately does not do that. It uses the documented, first-party path:
This project | Typical community bridge | |
Auth | Official OAuth 2.0 + PKCE, dynamic client registration | Reads a Codex CLI credential file |
Inference |
|
|
Model list |
| Bundled / cached catalog |
Credentials | OS keychain, with a documented fallback | Plain file |
Billing | ChatGPT plan usage, granted by the user | ChatGPT plan usage, implicitly |
Related MCP server: ChatGPT WebSearch MCP
Requirements
Node.js 18+ — nothing else. Zero runtime dependencies; no
npm installneeded.A ChatGPT Plus or Pro account.
macOS, Linux, or Windows.
Install
git clone https://github.com/zhiqiang73-cpu/Manus-codex-bridge.git
cd manus-codex-bridge
node bin/mcb.js loginlogin opens your browser for the official OAuth flow and stores credentials in your OS keychain. Then:
node bin/mcb.js status
node bin/mcb.js models
node bin/mcb.js ask "Explain what an idempotent HTTP method is" --model <id-from-models>To get a global mcb command:
npm link # or: ln -s "$PWD/bin/mcb.js" /usr/local/bin/mcbMCP setup
mcb mcp speaks MCP over stdio, so any MCP client can launch it on demand — no daemon, no open port.
Tools exposed
Tool | Purpose |
| Connection state, whether plan usage was granted, storage backend |
| Live model list for the signed-in account |
| Run one prompt against a chosen model |
Example client config
{
"mcpServers": {
"manus-codex-bridge": {
"command": "node",
"args": ["/absolute/path/to/manus-codex-bridge/bin/mcb.js", "mcp"]
}
}
}OpenAI-compatible HTTP
mcb serve --port 18888 --api-key <your-local-key>Endpoint | Notes |
| Live catalog |
| Responses API shape; supports |
| Chat Completions shape; supports |
| Local console — sign in, browse models, test inference, view evidence |
Point any OpenAI client at it:
export OPENAI_BASE_URL=http://127.0.0.1:18888/v1
export OPENAI_API_KEY=<your-local-key>Always set
--api-key. The server binds to127.0.0.1, but any local process can reach a loopback port. Without a key, any program on your machine — including a stray dependency — could spend your ChatGPT plan.
Credential storage
Credentials are stored in the OS secret store, with an automatic and documented fallback:
Platform | Backend |
macOS | Keychain ( |
Linux | Secret Service ( |
Windows | DPAPI, current user ( |
Fallback | Plain |
The fallback triggers only when the platform store is unavailable — for example a headless container without libsecret, or a restricted execution session. mcb status always reports which backend is actually in use, and a fallback emits a warning. Credentials are never written to logs and never printed.
What gets stored and logged
Path | Contents |
OS keychain |
|
| This installation's host ID — not sensitive |
| Model catalog, results, outbound request summary — no tokens |
How the official flow works
Documented at https://developers.openai.com/siwc/token-sharing-open-source/sign-in and https://developers.openai.com/siwc/token-sharing-open-source/models-and-inference.
Authorize
Parameter | Value |
Endpoint |
|
|
|
| Your app name — first registration only |
|
|
|
|
|
|
|
|
Other |
|
The callback returns the code and the issued client_id. Exchange the code at https://auth.openai.com/api/accounts/oauth/token with that issued client ID, the PKCE verifier, the same redirect_uri, and the same resource.
Infer — store: false and stream: true are required. Success means you received response.completed, not merely HTTP 200.
Two gotchas worth knowing
The streaming response has no
content-typeheader.POST /v1/responsesreturns 200 withcontent-type: nulland onlytransfer-encoding: chunked. Any client that gates ontext/event-streamwill misreport a working request as a failure. Decide from the HTTP status plus the parsed events.Failures can arrive after the stream opens. A plan-usage error comes back as
response.failedinside an HTTP 200 stream. Onlyresponse.completedmeans success. This bridge maps such failures to a proper status code (e.g.429) for callers rather than passing the misleading 200 through.
Compliance and scope
Use | Allowed? |
Open source, run locally, free | ✅ Explicitly supported |
Each user signs in with their own account | ✅ This is the intended design |
Charging for it, or hosting it as a service for others | ❌ Requires an OpenAI partner request |
Copying OpenAI's DevKit code | ❌ That code is under a noncommercial licence |
This project is an independent implementation written from OpenAI's public documentation. It does not include or derive from the DevKit source.
Usage limits
Plan usage is a shared allowance, not an unlimited pool:
You can set a per-app weekly limit in ChatGPT → Settings → Usage. That limit is a cap, not a separate pool — the app can hit its cap while your plan still has usage left.
subscription_sharing_usage_limit_exceededcan mean either an app-level cap or an overall plan limit. You cannot tell which from the code alone, and you cannot infer a reset time from it.Signing in again or retrying does not restore usage.
After included usage runs out, apps can use credits only if the user has opted in and the app's limit is set to 100%.
This project surfaces these errors verbatim, with a link to https://chatgpt.com/settings/usage, rather than guessing.
Mobile and tablets
OpenAI's flow has one hard constraint: the callback must be an HTTP loopback address on 127.0.0.1 — localhost is not accepted, and only the port may vary. Custom URL schemes (myapp://) are not accepted either. That shapes what is possible on mobile.
Platform | How | Status |
Android | Termux → | Works today, no code changes needed |
iPad / iPhone | Run the bridge on a Mac/PC, use it from the tablet over your LAN | Works today (see below) |
iPad / iPhone | Native Swift app ( | Not built — a separate app project |
iPad / iPhone | iSH (Alpine emulation) + Node | Experimental — slow, port binding unreliable |
Why there is no "just install it" iOS app yet: Node.js does not run on iOS/iPadOS, and the loopback-only callback rule rules out the usual mobile OAuth pattern. A native app is feasible — an iOS app can serve 127.0.0.1 while the system browser is in the foreground, which is the standard RFC 8252 loopback pattern — but that is a separate Swift project, not a port of this one.
Using it from a phone or tablet
Run the bridge on a computer and reach it from the tablet over your local network:
mcb serve --host 0.0.0.0 --api-key <random-string>--host 0.0.0.0binds all interfaces. An API key is mandatory — the command refuses to start without one.The console is mobile-responsive, so
http://<computer-ip>:18888/works in a phone browser.Point a mobile OpenAI client at
http://<computer-ip>:18888/v1with the same key.
Sign-in still happens on the computer. The OAuth callback must land on the bridge machine's 127.0.0.1, so the login cannot be completed from the phone. Sign in on the computer first, then use it from the tablet.
Only do this on a network you trust. Anyone on the same Wi-Fi can reach the port; the API key is what stops them from spending your plan.
Manus on mobile
The MCP surface needs a local process, so a mobile Manus client cannot launch mcb mcp. Use the HTTP surface from mobile instead.
Limitations
Single account. Multi-account / multi-workspace switching is not implemented yet.
Text only. Tools, images, and structured outputs are not passed through yet.
No background service.
serveruns in the foreground; it does not register a LaunchAgent or systemd unit. MCP clients launchmcb mcpon demand instead.macOS is the primary test target.
Documentation
Document | Contents |
Verification report: the full official chain, with evidence | |
Running on other machines; release checklist | |
Product positioning, constraints, and roadmap | |
Credential handling and disclosure policy |
License
Apache-2.0 — includes an explicit patent grant.
OpenAI-authored DevKit code and assets are not used by this project and remain under their own noncommercial licence. OpenAI trademarks remain subject to the OpenAI brand guidelines.
This server cannot be deployed
Maintenance
Related MCP Connectors
Connect MCP clients to 2,000+ AI models without managing provider API keys.
Let Claude or ChatGPT search, read and send your WhatsApp messages over MCP. OAuth sign-in.
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
Authenticated MCP Agent (Openai)
Related MCP Servers
- FlicenseBqualityDmaintenanceEnables interaction with OpenAI's Chat Completion and Assistants APIs, supporting assistant management, file operations, and direct queries to GPT models through standardized MCP tools.92-
- AlicenseAqualityCmaintenanceProvides access to OpenAI's ChatGPT API with web search capabilities for Claude and other MCP clients. Supports various GPT models with configurable parameters like reasoning effort, temperature, and streaming mode.112 npm3MIT
- AlicenseAqualityBmaintenanceEnables LLM chat with routing and failover, balance checking, and model listing via MCP.3Academic Free v1.1
- AlicenseAqualityCmaintenanceEnables interaction with OpenAI-compatible model proxy APIs through MCP, supporting text generation, vision understanding, and image generation with automatic model discovery and routing.3MIT