The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Sudo Proxy listing page.
An MCP server that lets an agent run privileged, mutating commands — locally or over SSH — with a human keypress required on every one and no credential ever stored.
Privileged command execution proxy with an MCP server for AI agent
integration. Receives requests over a Unix socket, shows a single-keypress
TUI prompt for human approval, then escalates via sudo. Configure
sudo-proxy-mcp in Claude Code or any MCP client and the model can run
privileged commands — with explicit human approval on every one.
The TUI prompt asks for approval (single keypress), then sudo handles
privilege escalation. The password prompt appears in the same terminal.
This flow is identical for local and remote hosts. A non-privileged mode
runs commands directly as the current user, still behind the same Y/N
gate — see docs/usage.md.
| Bash tool | sudo-proxy MCP | |
|---|---|---|
| Privilege escalation | Not possible | sudo with human approval |
| Human review | None — executes immediately | TUI Y/N gate on every command (privileged and unprivileged) |
| Timeout | Up to 10 min, no user prompt | 60 s TUI prompt + configurable overall timeout |
| Remote hosts | Not supported | SSH tunnel with TUI on remote terminal |
| Environment | Inherits shell env | Sanitized allowlist only |
| Audit trail | None | Server logs each request (with -v) |
sudo-proxy fills the gap when a model needs to install packages, edit
system files, manage services, or run any other command — with the human
always in the loop, even when Claude Code is run with
--dangerously-skip-permissions.
For how this relates to mcp-firewall, sandboxing, polkit, doas, and other neighboring tools, see docs/comparison.md.
What sudo-proxy does:
sudo — installs packages, edits
system files, manages services; not limited to read-only diagnostics.sudo password is typed live into the
terminal; nothing is cached, encrypted-at-rest, or written to disk.argv — commands are passed and displayed exactly as they
run, with no shell-string interpolation.-v).--dangerously-skip-permissions — the human gate holds
even when the agent's own permission prompts are disabled.What sudo-proxy deliberately does not do:
Install the binaries (needs a Rust toolchain; prebuilt static binaries are on Releases):
Point your MCP client at the server — add to the project's .mcp.json or
~/.claude/claude_desktop_config.json:
Then the model starts a server (opening a terminal with the approval TUI) and runs commands through it:
Each execute shows the exact command in the TUI; press y to approve,
N (default) to deny. For remote hosts, pass host to start_server and
execute.
Listed in the official MCP Registry
as mcp-name: io.github.tarides/sudo-proxy.
start_server, execute, update_host), config, known hosts--pkexec mode and polkit auth caching (not recommended)sudo-proxy was developed with substantial AI assistance using
Claude Code. Commits where AI
contributed materially carry a Co-Authored-By trailer naming the
specific model. All design decisions, threat modeling, and the final
form of every committed change were reviewed and approved by the
human maintainer, who takes responsibility for the codebase.
This disclosure is provided in line with emerging industry practice around transparency about generative-AI involvement in software development. It is not a statement that the project is "AI-generated": the human-in-the-loop principle that the tool itself enforces at runtime is also the principle under which it was built.