GitHub
GitHub’s official server lets AI read and manage code, issues and pull requests in your account. Use GitHub’s hosted version or run it locally with Docker.
Description from the maker (original English)
RAM-only HTTP debugging proxy and MCP server in Go. AI agents see salted tags, never secrets.
These three are never merged into one score: opinions, measurements and popularity are different things.
We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.
Pick the AI app you use, then copy the settings.
The maker has not listed install details in the registry. See the maker’s README below.
Runs on your computer; the tool list appears in your AI app after you install it.
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 6, 2026
The registry name was verified with the GitHub account VoxNode-ux, which owns the repo
We have not read this repo from GitHub yet
We have not read this repo from GitHub yet
This one runs on your computer; there is no internet endpoint
Runs on your computer and uses local settings instead
Runs on your computer; we can only read tool lists from internet endpoints
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
It passed 1 of 1 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
The registry does not list a required key, though some servers ask you to sign in on first use.
It runs on your computer. Your AI app starts it when needed, and data does not pass through the maker’s servers (unless it calls an online service itself).
The GitHub repo last changed –, and the latest version (1.0.2) reached the registry 9 days ago.
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code.
In the same category: GitHub, Desktop Commander, Cloudflare MCP
Servers in the same category from other makers, sorted by stars.
Reading a card:★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
GitHub’s official server lets AI read and manage code, issues and pull requests in your account. Use GitHub’s hosted version or run it locally with Docker.
MCP server for terminal commands, file operations, and process management
Cloudflare MCP servers
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
A zero-dependency, RAM-only network inspector that lets your AI assistant debug HTTP, HTTPS and WebSocket traffic, with every secret scrubbed before the model ever sees it.
Quick start · How it works · What gets redacted · MCP tools · Configuration · CLI reference · Security model
Your AI assistant is great at debugging an API call, until the request it needs to read carries an Authorization header, a session cookie, a database URL or a customer's email. Pasting raw traffic into a chat means pasting your secrets with it.
NullWire sits between your app and the network. It records what passes through, scrubs every secret out of the recorded copy, and hands that clean copy to your assistant through the Model Context Protocol. Your app keeps working exactly as before, because the live traffic is never touched.
your app ──► NullWire (127.0.0.1) ──► the real server
│ ├─ forwards every byte, unmodified └─ keeps a scrubbed copy in RAM ──► your AI assistant (MCP)
| 🪶 Zero dependencies | Go standard library only. One static binary, nothing to install. |
| 🧠 RAM only | The last 50 flows live in memory. The server never writes a file, and a stop signal wipes the buffer. (install edits your MCP client configs, but only when you run it.) |
| 🔒 Loopback only | The proxy binds to 127.0.0.1. A DNS-rebinding guard answers only loopback Host headers. |
| 🧽 Layered redaction | Private keys, JSON/XML/query secrets, JWTs, 50+ vendor key formats, IPs, secrets hiding in base64, and a randomness detector for keys nobody has seen before. |
| 🛡️ Fail-closed shields | Bodies that can't be inspected are refused or flagged, never silently passed to the model. |
| 🔌 HTTP, HTTPS and WebSocket | Plain proxying, blind CONNECT tunnels, a reverse gateway for full HTTPS visibility, and WebSocket text capture in both directions. |
| 🔁 Safe replay | Export any captured request as a curl command with secrets swapped for environment variables. |
| 🔎 Secret scanner | scan and protect look for secrets in your MCP configs, .env, TOML, YAML and ZIP files before they leak. |
| 📱 Runs anywhere | Linux, macOS, Windows, Docker and Termux on Android. |
Pick whichever fits your machine. Every method checks the download against the release's SHA256SUMS.txt and installs nothing if it doesn't match. Release binaries also carry signed GitHub build provenance, and each release includes a CycloneDX SBOM (nullwire-sbom.cdx.json).
With Node.js (no install step): npx
npx -y nullwire-mcp install --client all
Nothing to download by hand: the launcher fetches and verifies the binary on first run and keeps it in a cache folder. Your MCP clients are then set to run npx -y nullwire-mcp.
macOS, Linux and Termux: install script
curl -fsSL https://raw.githubusercontent.com/VoxNode-ux/nullwire-mcp/main/scripts/install.sh | sh -s -- --setup
Installs to ~/.local/bin (or $PREFIX/bin on Termux). --setup also registers NullWire with your MCP clients. Drop it to install only. --uninstall removes everything again.
Windows: install script
irm https://raw.githubusercontent.com/VoxNode-ux/nullwire-mcp/main/scripts/install.ps1 | iex
nullwire-mcp install --client all
Installs to `%LOCALAPPDATA%\Programs\nullwire-mcp` and adds it to your user PATH. To pass options, run it as `& ([scriptblock]::Create((irm https://raw.githubusercontent.com/VoxNode-ux/nullwire-mcp/main/scripts/install.ps1))) -Setup`.
Homebrew and Scoop
brew install VoxNode-ux/nullwire/nullwire-mcp # macOS, Linux
scoop bucket add nullwire https://github.com/VoxNode-ux/scoop-nullwire # Windows scoop install nullwire-mcp
Both packages are generated from the templates in [`packaging/`](packaging/README.md).
Download a release by hand
| Platform | File |
|---|---|
| Linux x86-64 / ARM64 (Raspberry Pi 4+, Termux) | nullwire-linux-amd64 / nullwire-linux-arm64 |
| Linux ARMv7 (older Raspberry Pi) / RISC-V 64 | nullwire-linux-armv7 / nullwire-linux-riscv64 |
| macOS Intel / Apple Silicon | nullwire-darwin-amd64 / nullwire-darwin-arm64 |
| Windows x86-64 / ARM64 | nullwire-windows-amd64.exe / nullwire-windows-arm64.exe |
| FreeBSD x86-64 | nullwire-freebsd-amd64 |
chmod +x nullwire-linux-amd64
sha256sum -c SHA256SUMS.txt --ignore-missing # verify the download (macOS: shasum -a 256 -c) gh attestation verify nullwire-linux-amd64 --repo VoxNode-ux/nullwire-mcp # optional: verify signed build provenance
</details>
Build from source
go install github.com/VoxNode-ux/nullwire-mcp@latest
git clone https://github.com/VoxNode-ux/nullwire-mcp && cd nullwire-mcp CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o nullwire-mcp .
Go 1.26 or newer. There is nothing to `go get`: the module has no dependencies.
Docker
docker run -i --rm ghcr.io/voxnode-ux/nullwire-mcp
The server speaks MCP over stdio, so run it with -i. The proxy listens on the container's own loopback by design, so a published port (-p) cannot reach it. On Linux, add --network host to use it from the host's 127.0.0.1.
One command registers NullWire with every supported client it finds on your machine:
nullwire-mcp install --client all --dry-run # look first: nothing is written
nullwire-mcp install --client all # then do it, and restart the client
It covers Claude Desktop, Claude Code, Cursor, Windsurf, VS Code, Cline, Roo Code, Gemini CLI and Codex CLI. See Connect your MCP clients for details, or add it by hand:
# Claude Code
claude mcp add nullwire -- /path/to/nullwire-mcp
// Claude Desktop, Cursor, Windsurf, Cline and other JSON-configured clients
{ "mcpServers": { "nullwire": { "command": "/path/to/nullwire-mcp", "args": ["-port", "8080"] } } }
The client starts NullWire, and NullWire starts the proxy in the same process. A live status bar on stderr shows what is happening:
⚡ [NullWire-MCP] Proxy 127.0.0.1:8080 | RAM Ring: 3/50 | Scrubbed: 7 Tokens, 2 Cookies, 1 IPs | Disk: 0B
# Plain HTTP through the proxy
curl -x http://127.0.0.1:8080 http://httpbin.org/headers
curl -x http://127.0.0.1:8080 https://example.com
nullwire-mcp -target https://api.example.com curl http://127.0.0.1:8080/v1/things -H "Authorization: Bearer sk-live-..."
*"Use
inspect_trafficto show my last 5 requests and tell me why the third one returned 401."*
flowchart LR
A[Your app or curl] -->|HTTP_PROXY / base URL| P[NullWire proxy 127.0.0.1:8080] P -->|unmodified bytes| S[(Real server)] S -->|unmodified bytes| P P --> C[Capture copy] C --> R[Redaction layers] R --> B[(RAM ring 50 flows)] B -->|MCP over stdio| M[AI assistant]
The key idea: the model reads a scrubbed copy, your app talks to the real server. Nothing the proxy forwards is rewritten, so debugging never changes the behaviour you are debugging.
| Mode | How you use it | What the assistant sees |
|---|---|---|
| Forward proxy | HTTP_PROXY=http://127.0.0.1:8080 and http:// URLs | Full request and response, scrubbed |
| HTTPS tunnel | HTTPS_PROXY=http://127.0.0.1:8080 (CONNECT) | Only the target host:port, timing and byte counts. The encrypted payload is never opened. |
| Reverse gateway | Point your app's base URL at http://127.0.0.1:8080 and start with -target https://… (or send an X-Target-URL header) | Full HTTPS request and response, scrubbed. NullWire makes the TLS connection to the real server. |
| WebSocket | Any Upgrade: websocket request through either proxy mode | Text messages in both directions, scrubbed, as one flow recorded when the connection closes. Frames are forwarded unmodified. |
Why no HTTPS interception? Reading HTTPS from a forward proxy would require a custom root certificate installed on your machine. That is key material and a trust-store change, the opposite of a zero-footprint tool. The reverse gateway gets you the same visibility with no certificate games.
Give each upstream a name. The first path segment picks the upstream and is removed before forwarding:
nullwire-mcp -target openai=https://api.openai.com,anthropic=https://api.anthropic.com
export OPENAI_BASE_URL=http://127.0.0.1:8080/openai/v1 # → https://api.openai.com/v1 export ANTHROPIC_BASE_URL=http://127.0.0.1:8080/anthropic # → https://api.anthropic.com
Names are letters, digits, ., _ and - (up to 32 characters, case-insensitive). One unnamed URL may be added as the default for paths that match no name. An X-Target-URL header overrides everything for a single request.
NullWire exposes three tools over stdio. It speaks MCP protocol versions 2026-07-28, 2025-11-25 and 2024-11-05, and accepts JSON-RPC batches.
| Tool | What it does | Arguments |
|---|---|---|
inspect_traffic | Returns recent scrubbed flows. | limit (1 to 50, default 10), method, url_filter |
export_sanitized_curl | Rebuilds a captured request as a curl command. Redacted values become environment variables you fill in yourself. | flow_id (required) |
clear_ram_buffer | Wipes all 50 slots and resets the counters. | none |
A flow looks like this (illustrative):
{
"id": 7, "timestamp": "2026-10-31T09:14:02Z", "method": "POST", "url": "https://api.example.com/v1/charge", "request_headers": { "Authorization": "[REDACTED_TOKEN#a1b2c3]", "Content-Type": "application/json" }, "request_body": "{\"card_token\":\"[REDACTED_TOKEN#9f3e21]\",\"amount\":4200}", "status_code": 401, "response_body": "{\"error\":\"invalid_api_key\"}", "latency_ms": 143, "redaction_count": 2 }
Tags are stable and correlatable. [REDACTED_TOKEN#a1b2c3] is a short salted hash, so the same secret gets the same tag everywhere in one run. Your assistant can see that two requests used the *same* token without learning it. The salt is random per run, so tags can't be compared across restarts or reversed.
Tag kinds: TOKEN, COOKIE, IP and KEY (private key
Only the beginning is shown; read the rest in the repo