Local macOS MCP bridge that gives ChatGPT shell, unrestricted filesystem access, real PTY sessions, background jobs, and read-only stored Codex history. ChatGPT stays the reasoning layer; the bridge makes no model calls.
Emerging. No concerning findings. Grades remain capped until the project builds reputation through adoption. Grades reflect the full trust pyramid: code, verification depth, and reputation. New projects cap at C until adoption is earned.
How we verified
Verified is a snapshot. Live keeps it current, and builds your track record.
⚡ Connect GitHub → continuous verification on every pushwhy connect →Who stands behind it
alexanderradahl
Source: Glama
Claim it to get a verified publisher badge, a free copy of our full audit findings, and direct contact for any high-priority issues we find. Or connect your repo for our deepest verification, Live Monitored: read-only, revoke anytime. What we access →
Install from
M8ven verifies MCPs across every public registry — install directly from whichever one you prefer.
CODEX_BINCONTROL_PLANE_API_KEYread -r -s -p 'Tunnel runtime API key: ' ; printf '\n'MAC_DEV_BRIDGE_AUDIT_LOG$LOG_DIR/audit.jsonl Audit JSONL path.MAC_DEV_BRIDGE_AUDIT_MODEmetadata off, metadata, or full. full records tool arguments; see the caveat in SECURITY.md.MAC_DEV_BRIDGE_BODY_IDLE_TIMEOUT_MS30000 Drops a request whose body stalls this long. Idle, not total, so a slow-but-progressing upload is not truncated.MAC_DEV_BRIDGE_DATA_DIR~/Library/Application Support/MacDeveloperBridge State, job metadata, federation roots.MAC_DEV_BRIDGE_DEFAULT_OUTPUT_BYTES1000000 Default per-call output cap.MAC_DEV_BRIDGE_ENTRYbridge.mjs beside mcp-http.mjs Test-only seam for substituting a stub bridge. Changing it means scripts/disable.sh will not recognise the child.MAC_DEV_BRIDGE_FULL_ACCESS_ACKFail-closed unlock latch: bridge.mjs re-reads the unlock file before every tool call, so removing it refuses the next call and exits — unless the process inherited , which bypasses the file entirelyMAC_DEV_BRIDGE_HTTP_PORT8787 Loopback port.MAC_DEV_BRIDGE_HTTP_TIMEOUT_MS600000 Per-request ceiling, for long shell_exec calls.MAC_DEV_BRIDGE_HTTP_TOKENexport ="$(openssl rand -hex 32)"MAC_DEV_BRIDGE_HTTP_TOKEN_FILERead the token from a mode-0600 file instead, keeping it out of ps eww. Takes precedence.MAC_DEV_BRIDGE_LOG_DIR~/Library/Logs/MacDeveloperBridge Log directory.MAC_DEV_BRIDGE_MAX_BUFFERED_BYTES100663296 (96 MiB) Global budget for buffered request bodies. Exceeding it sheds load with a retryable 503.MAC_DEV_BRIDGE_MAX_OUTPUT_BYTES8000000 Ceiling a call may request.MAC_DEV_BRIDGE_MCP_PING_IDLE_MS30000 Idle interval after which a federated child is pinged; a child that fails the ping is treated as hung and restarted.MAC_DEV_BRIDGE_MCP_SERVERSPath to a child-MCP provider registry JSON file.MAC_DEV_BRIDGE_MCP_SERVERS_JSONThe same registry inline. Takes precedence.MAC_DEV_BRIDGE_MCP_START_DEADLINE_MSMAC_DEV_BRIDGE_OAUTH_CLIENT_IDgenerated The client id pasted into ChatGPT. Stable across restarts.MAC_DEV_BRIDGE_OAUTH_CLIENT_SECRETOptional second factor on /token, enforced via client_secret_post or client_secret_basic. Put the same value in ChatGPT's OAuth Client Secret field. Scrubbed from child environments.MAC_DEV_BRIDGE_OAUTH_REDIRECT_URISExtra exact-match callbacks, comma-separated. Appends to the built-ins.MAC_DEV_BRIDGE_PERSONAL_APPROVAL_FILE$DATA_DIR/PERSONAL_BROWSER_APPROVED Where the single-use personal-browser grant is read from. The bridge never creates it.MAC_DEV_BRIDGE_PTY_HELPERlib/ptyhelper.pl beside bridge.mjs Helper script path.MAC_DEV_BRIDGE_PTY_IDLE_TIMEOUT_MS900000 (1 s–1 h) Idle reclaim window, and a ceiling: pty_start may request a shorter one, never a longer. A live session's effective value is in bridge_status.MAC_DEV_BRIDGE_PTY_MAX_LIFETIME_MS28800000 (5 s–24 h) Hard ceiling, enforced even on an actively used session.MAC_DEV_BRIDGE_PTY_MAX_SESSIONS8 (1–64) Live session cap. kern.tty.ptmx_max is 511 system-wide, so this protects the operator's own Terminal.app, not just this process.MAC_DEV_BRIDGE_PTY_PERL/usr/bin/perl Interpreter for the pty helper.MAC_DEV_BRIDGE_PTY_RING_BYTESRetention. Each session keeps the last of output in a fixed ring; pty_read reports lostBytes when a cursor falls behind it.MAC_DEV_BRIDGE_PTY_START_TIMEOUT_MS5000 How long pty_start waits for the helper to report a real pty.MAC_DEV_BRIDGE_PUBLIC_URLderived from Host Pins the OAuth issuer. Pin it: Host is client-controllable, and the issuer must match what the client discovered.MAC_DEV_BRIDGE_SHELLlogin shell Shell used for shell_exec/shell_start.MAC_DEV_BRIDGE_UNLOCK_FILE$DATA_DIR/FULL_ACCESS_ENABLED The revocable unlock latch. Re-read before every tool call.MAC_DEV_BRIDGE_UNLOCK_RECHECK_MS3000 How often the latch is re-read while a pty session or a federated child exists and the client is silent. Bounds how long either can outlive a removed unlock file.Tests exist
No test files found
Add tests that exercise each declared tool.
Shell command execution
12 child_process/subprocess calls in production code — runs shell commands (mcp-http.mjs:298, mcp-http.mjs:561, mcp-http.mjs:1123)
Prefer library functions over shell-outs. If you must shell out, ensure all inputs are properly escaped.
Claim the listing to review these findings one by one and send us a correction where you disagree, straight to the team. Claiming also means we tell you when the grade moves, and reach you first if we find anything urgent.
[](https://m8ven.ai/mcp/alexanderradahl-mac-developer-bridge-jvm10i)?variant=verified to the badge URL.Vetting this one by hand? Tool Check is an MCP that scores other MCPs. Add it once and ask Claude, ChatGPT, or any MCP client to grade a server, surface CVEs, check the publisher, and suggest safer alternatives — before you install.
https://m8ven.ai/api/mcp/tool-check