codex-mcp-bridge@2.3.2
CAUTION· startup onlyPublisher claims: "Connect Claude, Codex, and Antigravity through MCP, with native Desktop handoffs and bridge-owned Antigravity CLI sessions." Observed in sandbox: no network, touches nothing outside the project, writes no memory.
Coverage
Startup only; authenticated tool behavior not tested.- Tested
- install scripts, with decoy credentials in place · second launch with the clock 45 days ahead · server startup over stdio (initialize sent) · every file read, file written and host contacted by what ran
- Not tested
- the tool list (the server exited before answering) · what the tools do when called with real credentials
What this means for the label: Caution here covers what ran. The server's tools were not exercised with a real credential, so nothing about their behavior is asserted; the credential summary below says what to do with that.
Before you give it your token
- It will ask for
ANTIGRAVITY_CSRF_TOKENor--reauthorizeConfiguration, not credentials: AGENT_RELAY_RUNTIME_ID, ANTIGRAVITY_AGENTAPI_EXE, ANTIGRAVITY_BRIDGE_CALLER, ANTIGRAVITY_CLI_BIN, ANTIGRAVITY_LS_ADDRESS, CLAUDE_BRIDGE_CWD, CLAUDE_BRIDGE_NAME, CLAUDE_BRIDGE_PEER_NAME, CLAUDE_BRIDGE_PERMISSION_MODE, CLAUDE_CONFIG_DIR, CLAUDE_DESKTOP_CONFIG, CLAUDE_DESKTOP_USER_DATA, CODEX_APP_SERVER_URL, CODEX_APP_TOOLS_PIPE_PATH, CODEX_BIN, CODEX_BRIDGE_ALLOWED_ROOTS, CODEX_BRIDGE_ALLOWED_THREADS, CODEX_BRIDGE_APPROVAL, CODEX_BRIDGE_APPROVAL_POLICY, CODEX_BRIDGE_AUTO_APPROVE_ACK, CODEX_BRIDGE_AUTOSTART, CODEX_BRIDGE_DESKTOP_TASKS, CODEX_BRIDGE_EFFORT, CODEX_BRIDGE_ENFORCE_FULL_ACCESS, CODEX_BRIDGE_HARDENED, CODEX_BRIDGE_MODEL, CODEX_BRIDGE_NATIVE_RELAY, CODEX_BRIDGE_OPEN_IN_APP, CODEX_BRIDGE_PATH_MAP, CODEX_BRIDGE_PROJECT_POLICY, CODEX_BRIDGE_RECOVERY_DELAY_MS, CODEX_BRIDGE_RELAY_WAKE, CODEX_BRIDGE_RELEASE_AFTER_TURN, CODEX_BRIDGE_RELOAD_POLL_MS, CODEX_BRIDGE_RELOAD_SETTLE_MS, CODEX_BRIDGE_REMAP, CODEX_BRIDGE_RUNTIME_CACHE, CODEX_BRIDGE_RUNTIME_PRUNE_DELAY_MS, CODEX_BRIDGE_SANDBOX- Where it talks to
- no vendor host named in the codeAlso supabase.co — not the publisher's domain; check what for before connecting.
- What the honeypot saw
- no credential files read · no network
- What we could not test
- the tool list (the server exited before answering) · what the tools do when called with real credentials
Connect it with a scoped credential, under the guard, and read the third-party hosts first. The code names supabase.co as well as its own vendor. The guard injects ANTIGRAVITY_CSRF_TOKEN only into requests to the host you bind (and its subdomains) and refuses the rest.
Never paste a credential into a chat, a ticket or a report, including ours. How the guard holds it.
Is [email protected] safe to install?
KillerSkills ran it in the KillerSkills honeypot sandbox (3 scenarios; startup only; authenticated tool behavior not tested) on 2026-11-14 and scored it 72/100 (Caution). It is not known to be malicious, but it has behaviour or code a security policy should decide on before install. Notable findings: Access to sensitive file paths; Access to sensitive file paths; Access to sensitive file paths. Summary: no network, touches nothing outside the project, writes no memory.
Behavior trace
Honeypot run · 27 s · 3 scenarios · 0 deviationsStatic findings
const nativeEnv = { ...env, CODEX_APP_TOOLS_PIPE_PATH: undefined };Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.if (env[PIN] !== undefined) return claudeDataPinUsable(env, platform) ? env : { ...env, [PIN]: scanned.root };Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.env: { ...env, CODEX_BRIDGE_WORKER: "1", CODEX_BRIDGE_STAGED: "1" },Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.…read(codeFile)); const entry = code.mcpServers?.["codex-bridge"]; if (entry?.env?.CODEX_BRIDGE_DESKTOP_TASKS !== "1" || path.basename(entry?.args?.[0] ?? "") !=…Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.return stale ? { ...env, [PIN]: scanned.root } : env;Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.…ULT_TIMEOUT_MS, resolveSocketPath = () => resolveNativeToolsPipePath({ env: { ...env, CODEX_APP_TOOLS_PIPE_PATH: undefined } }), assertAccount = assertAccountIdenti…Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.env: { ...env, CODEX_APP_TOOLS_PIPE_PATH: undefined }, parentPid: pid, platform: "win32", readParentCommandLine: async () => null,Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.this.env = { ...env };Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.return { ...env, CODEX_BRIDGE_SOURCE_ROOT: release.sourceRoot ?? installRoot, ...(repin ? { CLAUDE_DESKTOP_USER_DATA: claudeDataRoot } : {}) };Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.writeCurrentInstall({ env: { ...env, CODEX_HOME: paths.codex }, root, claudeDataRoot: activeClaudeDataRoot(env, platform) });Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.console.log(JSON.stringify({ file, action, path: input, effective: "next bridge operation; no client restart needed" }, null, 2));Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…op tasks through an explicitly configured SSH host. Requires bridge-remote-hosts.json and live host-supplied sender metadata. Each computer may use a different Codex account; the current accounts are rediscovered per call and cannot change…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.console.log(JSON.stringify(operation({ cwd: input, reauthorize: args.includes("--reauthorize"), taskCards: args.includes("--task-cards") }, {Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.if (!file.startsWith(directory + path.sep)) throw remoteFailure("REMOTE_CONFIG_UNSAFE", "Remote host configuration is outside Codex home");Fix: Pin versions and sources; vendor anything fetched at install time.if (!cleanPath(root) || !path.isAbsolute(root)) throw remoteFailure("REMOTE_CONFIG_UNSAFE", "Codex configuration directory must be absolute");Fix: Pin versions and sources; vendor anything fetched at install time.* directory to create, no mode to chmod and no file to unlink beforehand.Fix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.if (!count) throw remoteFailure("REMOTE_CONFIG_CHANGED", "Remote host configuration changed during reading");Fix: Pin versions and sources; vendor anything fetched at install time.if (!same(stat, opened)) throw remoteFailure("REMOTE_CONFIG_CHANGED", "Remote host configuration changed after opening");Fix: Pin versions and sources; vendor anything fetched at install time.…ion" && process.getuid() === 0) throw new Error("Run the global install without sudo in the account that runs the apps; setup will not write another account's config…Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.…; } export function sitesHardenedEnv(config, env = process.env) { return { ...env, CODEX_BRIDGE_HARDENED: "1", CODEX_BRIDGE_DESKTOP_TASKS: "1", CODEX_BRIDGE_THRE…Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.if (!safe(opened) || !safe(stat)) throw remoteFailure("REMOTE_CONFIG_UNSAFE", "Remote host configuration must be a private regular file");Fix: Pin versions and sources; vendor anything fetched at install time.{ ...env, npm_config_global: "false", CODEX_BRIDGE_SKIP_SETUP: "1" }, 180000);Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.Cost to the agent
Tokens estimated at four characters each. The tool list is re-read by the agent on every turn, so it is the number to compare between servers that do the same job: ranked across the index.
Known vulnerabilities
No advisories in OSV for @minhspark/codex-mcp-bridge@2.3.2 as of 4 h ago. This is the package itself, not its dependencies.
What would make this Verified
8 points to 80 · weights: behavior 45%, static 25%, prompt 15%, publisher 15%- Unclaimed publisher≈ +8 on the totalClaim minhspark: a verified publisher gets +50 on publisher trust. It is free and usually instant with GitHub sign-in.
- Access to sensitive file paths≈ +4 on the totalStop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
- Auto-update or dynamic fetch configuration≈ +4 on the totalPin versions and sources; vendor anything fetched at install time.
- Privileged sudo command≈ +4 on the totalBuild commands from fixed arguments; do not interpolate untrusted strings into a shell.
- File type combined with upload action≈ +2 on the totalRemove the call, or declare the host in frontmatter and explain in the README what is sent and why.
- File permission modification command≈ +2 on the totalRequest the narrowest permission that works; replace wildcards with the exact paths or hosts.