C
Emerging
74/100
2 days ago

Mac Developer Bridge

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

Code Verified⚡ Live Monitored: not connected

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

Is this your MCP?

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.

// key findings
No credential exfiltration, no sensitive file access, no obfuscation
Static analysis found nothing flowing your secrets to unexpected places.
Open source with a license and README
Anyone can audit the code, the license is declared, and the publisher documents what it does.
🔐
You'll be asked for 3 credentials: CONTROL_PLANE_API_KEY, MAC_DEV_BRIDGE_HTTP_TOKEN, MAC_DEV_BRIDGE_OAUTH_CLIENT_SECRET
These are read from process.env at runtime. Make sure you trust where they’ll be sent.
// environment variables
To run this server yourself, you supply these values. They go in your own MCP client configuration and stay on your machine. The secret label means the value is sensitive, not that the server mishandles it.
configCODEX_BIN
🔐 secretCONTROL_PLANE_API_KEYread -r -s -p 'Tunnel runtime API key: ' ; printf '\n'
configMAC_DEV_BRIDGE_AUDIT_LOG$LOG_DIR/audit.jsonl Audit JSONL path.
configMAC_DEV_BRIDGE_AUDIT_MODEmetadata off, metadata, or full. full records tool arguments; see the caveat in SECURITY.md.
configMAC_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.
configMAC_DEV_BRIDGE_DATA_DIR~/Library/Application Support/MacDeveloperBridge State, job metadata, federation roots.
configMAC_DEV_BRIDGE_DEFAULT_OUTPUT_BYTES1000000 Default per-call output cap.
configMAC_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.
configMAC_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 entirely
configMAC_DEV_BRIDGE_HTTP_PORT8787 Loopback port.
configMAC_DEV_BRIDGE_HTTP_TIMEOUT_MS600000 Per-request ceiling, for long shell_exec calls.
🔐 secretMAC_DEV_BRIDGE_HTTP_TOKENexport ="$(openssl rand -hex 32)"
configMAC_DEV_BRIDGE_HTTP_TOKEN_FILERead the token from a mode-0600 file instead, keeping it out of ps eww. Takes precedence.
configMAC_DEV_BRIDGE_LOG_DIR~/Library/Logs/MacDeveloperBridge Log directory.
configMAC_DEV_BRIDGE_MAX_BUFFERED_BYTES100663296 (96 MiB) Global budget for buffered request bodies. Exceeding it sheds load with a retryable 503.
configMAC_DEV_BRIDGE_MAX_OUTPUT_BYTES8000000 Ceiling a call may request.
configMAC_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.
configMAC_DEV_BRIDGE_MCP_SERVERSPath to a child-MCP provider registry JSON file.
configMAC_DEV_BRIDGE_MCP_SERVERS_JSONThe same registry inline. Takes precedence.
configMAC_DEV_BRIDGE_MCP_START_DEADLINE_MS
configMAC_DEV_BRIDGE_OAUTH_CLIENT_IDgenerated The client id pasted into ChatGPT. Stable across restarts.
🔐 secretMAC_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.
configMAC_DEV_BRIDGE_OAUTH_REDIRECT_URISExtra exact-match callbacks, comma-separated. Appends to the built-ins.
configMAC_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.
configMAC_DEV_BRIDGE_PTY_HELPERlib/ptyhelper.pl beside bridge.mjs Helper script path.
configMAC_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.
configMAC_DEV_BRIDGE_PTY_MAX_LIFETIME_MS28800000 (5 s–24 h) Hard ceiling, enforced even on an actively used session.
configMAC_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.
configMAC_DEV_BRIDGE_PTY_PERL/usr/bin/perl Interpreter for the pty helper.
configMAC_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.
configMAC_DEV_BRIDGE_PTY_START_TIMEOUT_MS5000 How long pty_start waits for the helper to report a real pty.
configMAC_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.
configMAC_DEV_BRIDGE_SHELLlogin shell Shell used for shell_exec/shell_start.
configMAC_DEV_BRIDGE_UNLOCK_FILE$DATA_DIR/FULL_ACCESS_ENABLED The revocable unlock latch. Re-read before every tool call.
configMAC_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.
// quality suggestions

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.

// full audit trail
The findings above are the summary. The full trail, every check we ran, each deduction, the network hosts observed and the dependency advisories, goes to verified publishers, along with an alert whenever a new one lands. Verified publishers can also review each finding and dispute it in one click. Publisher corrections have sharpened several of our checks this month, because the maintainer knows the codebase better than any scanner.
// improvement guidance — verified publishers only
We have 2 concrete improvements we can share with the publisher of this MCP. Each comes with specific guidance to raise the trust score.
// embed badge in your README
[![M8ven Score](https://m8ven.ai/badge/mcp/alexanderradahl-mac-developer-bridge-jvm10i)](https://m8ven.ai/mcp/alexanderradahl-mac-developer-bridge-jvm10i)
Shows your grade and updates automatically. Prefer no grade? Append ?variant=verified to the badge URL.
commit: 182fd941522bbc1a51d22525372c1ba746913de4
code hash: 321de5b65dbaadc875d75e861ccac55c5edd29219bdecec8dc0ad0c927234518
verified: 8/17/2026, 9:18:33 AM
view raw JSON →
Check MCPs from inside your assistant
Tool Check · MCP

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
check_toolsearch_toolscompare_toolsrecommend_alternativescheck_publisherreport_concern
How to add it →Free · no account needed · works in any MCP client