
NullWire-MCP
io.github.VoxNode-uxPublished by GitHub account VoxNode-uxv1.0.2Updated Oct 29, 2026
RAM-only HTTP debugging proxy and MCP server in Go. AI agents see salted tags, never secrets.
The publisher's own server: Wire Cash: bank wire fees and transfer costs
Overview
A local, RAM-only HTTP/HTTPS/WebSocket debugging proxy that hands your assistant a secret-scrubbed copy of recent traffic over MCP.
- What you can do
- Inspect recent captured flows, filtered by limit, method or URL, with secrets replaced by stable salted tags
- Rebuild a captured request as a sanitized curl command whose redacted values become environment variables you fill in
- Wipe the in-memory ring buffer of the last 50 flows and reset counters
- Capture traffic through a forward proxy, blind HTTPS tunnels, a reverse gateway for full HTTPS visibility, or WebSocket text frames
- Scan local MCP configs, .env, TOML, YAML and ZIP files for secrets, and register the server in supported MCP clients
- When to use it
- Useful when you want an assistant to diagnose failing API calls, 401s or WebSocket issues without pasting Authorization headers, cookies, connection strings or customer data into the chat. It suits local debugging where traffic must stay on the machine and nothing should be written to disk.
- Requirements
- Runs as a local process over stdio; a single static Go binary, or via npx, Homebrew, Scoop, Docker or a release download. No accounts, API keys or environment variables are declared. Your app must be pointed at the local proxy (HTTP_PROXY, HTTPS_PROXY or a base URL) for traffic to be captured.
Installation
In SourceWeft
- Open NullWire-MCP in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
⚡ NullWire-MCP
See the traffic. Never the secrets.
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.
[CI and Release] [Security checks] [Go 1.26] [Dependencies: none] [Disk writes: 0] [MCP]
Quick start · How it works · What gets redacted · MCP tools · Configuration · CLI reference · Security model
🧠 Why NullWire exists
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.
✨ At a glance
🚀 Quick start
1. Install it
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
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
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
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
Both packages are generated from the templates in packaging/.
Download a release by hand
Build from source
Go 1.26 or newer. There is nothing to go get: the module has no dependencies.
Docker
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.
2. Add it to your MCP clients
One command registers NullWire with every supported client it finds on your machine:
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:
The client starts NullWire, and NullWire starts the proxy in the same process. A live status bar on stderr shows what is happening:
3. Send some traffic through it
4. Ask your assistant
"Use
inspect_trafficto show my last 5 requests and tell me why the third one returned 401."
🔭 How it works
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.
Four ways to capture traffic
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.
Several APIs at once
Give each upstream a name. The first path segment picks the upstream and is removed before forwarding:
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.
🧰 MCP tools
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.
A flow looks like this (illustrative):
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 keys).
export_sanitized_curl produces something like:
Placeholders are NULLWIRE_AUTH_TOKEN, NULLWIRE_COOKIE, NULLWIRE_IP and NULLWIRE_PRIVATE_KEY. CONNECT tunnels have no replayable request, and NullWire says so.
🧽 What gets redacted
Every URL, header, request body and response body passes through these layers, in this order:
Headers. Authorization, Cookie, Set-Cookie, X-Api-Key, Api-Key, X-Auth-Token and Proxy-Authorization are always redacted, plus any you add.
Vendor tiers. Matching all prefixes the same way would redact ordinary words, so they are tiered:
Prefixes are matched case-sensitively, so asiapacific_region is left alone.
Bodies are decoded before scrubbing. gzip and deflate (up to 1 MiB expanded, a decompression-bomb guard). multipart/form-data forms are split into fields; file parts keep only the field name, file name and size.
🛡️ Safety shields
Limits
⚙️ Configuration
Pass -secrets-config path/to/file.json to tune redaction without recompiling. Every field is optional.
Patterns use Go's RE2 syntax, which runs in linear time, so a bad pattern cannot freeze the proxy.
🔌 Connect your MCP clients: install
install writes NullWire into your MCP clients' config files, and removes it again, so you never have to hunt for the right file or JSON key.
Other clients (Zed, Continue, JetBrains and more) are not edited. Use --print and paste the snippet where that client keeps its MCP servers.
How it stays safe
- With
--client allit only touches clients it finds on your machine. Name a client explicitly to create its config. - The first time it changes a file it keeps a copy next to it as
<file>.nullwire-bak. That copy is never overwritten, so it always holds the original. - Files are written through a temporary file and renamed, and symlinked dotfiles stay symlinks.
- Your other servers, settings, numbers and extra fields on the NullWire entry (such as
env) are kept. JSON keys may be re-ordered. - A config it can't parse as plain JSON (for example one with comments) is left alone, with a clear message.
- Running it twice changes nothing the second time.
🔎 Scan your machine: scan and protect
Secrets leak long before traffic does: a token in an MCP config, a password in .env. NullWire can find them. Scanning never writes to disk and never prints a secret: findings are shown already scrubbed, and shell history text is never shown at all.
File types are recognised by name, so nullwire-mcp scan some.env config.toml settings.yaml bundle.zip routes each to the right scanner. Files over 4 MiB are skipped. ZIP archives are read in memory under a zip-bomb shield: entries over 1 MiB, archives over 20 MiB of content or 1000 entries are skipped and reported.
protect runs a quick scan of the usual places, then starts the normal server:
It accepts the server options (--port, --target, --cacert, --dns, --secrets-config, --scrub-headers, --allow-uninspectable) plus --deep DIR, --history and --no-scan. The scan report goes to stderr, so the MCP channel on stdout stays clean, and stop signals are passed on to the server.
📟 CLI reference
📱 Platform notes
Termux and Android. Static Go binaries have no system DNS settings or CA certificates on Android. NullWire detects Termux and uses 1.1.1.1 and 9.9.9.9 for lookups, printing a notice (those resolvers will see the hostnames you contact). Choose your own with -dns <resolver>, or -dns system to turn this off. Upstream HTTPS uses the CA certificates found in Termux's standard locations; add more with -cacert.
Corporate networks. If your company re-signs HTTPS traffic, add its root with -cacert /path/to/company-root.pem.
Windows. Use the .exe and the same flags. scan --history also checks PowerShell's PSReadLine history.
🔐 Security model and honest limits
NullWire is a diagnostic tool. Be clear-eyed about what it does and does not promise.
What it guarantees
- Nothing is written to disk by the server, and a stop signal wipes memory. The
installcommand edits MCP client configs only when you run it, and backs each file up first. - The proxy is reachable only from your own machine.
- The model never sees the live traffic, only the scrubbed copy.
- Live traffic is never rewritten, so what you debug is what runs.
What it does not do
- Release binaries carry signed build provenance, not OS-vendor code-signing certificates. Verify authenticity with
SHA256SUMS.txtandgh attestation verify. Because they are not signed with an Apple Developer ID or Microsoft Authenticode certificate, on macOS you may needxattr -d com.apple.quarantine ./nullwire-darwin-arm64. - It is not a TLS interceptor.
CONNECTtunnels show only the destination and byte counts. Use the reverse gateway when you need HTTPS content. - Redaction is pattern and heuristic based. A secret in a shape nobody anticipated, and low in randomness, can slip through. The randomness detector can also redact a harmless long identifier. Add your own patterns in the config for secrets you know about.
- Brotli and Zstd bodies are never decoded (the standard library can't, and pulling in a package would break the zero-dependency rule). They are refused (requests) or flagged (responses).
- WebSocket flows appear when the connection closes. Messages compressed with
permessage-deflatecan't be read, so NullWire drops the client's extension offer to keep frames readable. - An XML secret element that contains nested markup is not covered by the XML layer.
- Upstream connections use HTTP/1.1. HTTP/2 and gRPC bodies are not captured.
If you find a secret NullWire missed, please open an issue with a fake sample that has the same shape. Never post a real one.
✅ Tested on
🟡 emulated means run under QEMU, not on real hardware. Details are in docs/test-results.md.
🧪 Development
- Zero dependencies:
go.modhas norequirelines, and CI keeps it that way. - Release transparency: every release is built with Go 1.26 and includes
SHA256SUMS.txt, a CycloneDX SBOM (nullwire-sbom.cdx.json) and a signed build provenance attestation, which you can verify withgh attestation verify. The same proof is attached to each release asnullwire-provenance.intoto.jsonl. Thego vetandgo test -racelogs of every CI run are saved as atest-logsartifact for 30 days. Pushes tomainupdate a rollinglatestpre-release; numbered tags produce stable releases. Pull requests never publish anything. - Fuzzing: the scrubber, the IPv6 and vendor-key matchers and the WebSocket frame reader have fuzz targets. They check that no secret survives scrubbing, that results don't depend on how input is chunked, and that nothing panics.
- CI: checks the shell and Node installers for syntax errors, runs
go vetand the race detector, cross-compiles static binaries for all 9 platforms (Linux x86-64, ARM64, ARMv7 and RISC-V 64; macOS Intel and Apple Silicon; Windows x86-64 and ARM64; FreeBSD x86-64), and publishes a multi-arch Docker image (amd64 and arm64).smoke.ymlandsmoke-extra.ymlrun on demand (Actions → Run workflow): end-to-end redaction tests on Ubuntu, macOS (Apple Silicon and Intel), Windows (x86-64 and ARM64), a FreeBSD VM, and QEMU-emulated Linux ARMv7 and RISC-V 64. Security checks rungovulncheckand the fuzz targets. GitHub Actions are pinned to full commit hashes.
Project layout
❓ Troubleshooting
Built by VoxNode-ux · Version 1.2.0 · License: see the repository's LICENSE file
If NullWire saved you from pasting a secret into a chat, a ⭐ helps others find it.
Source: README.md at commit 4eb9b0a
Tools
0Version history
2- v1.0.2LatestOct 29, 2026
- v1.0.0Oct 26, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts
Other Wire integrations
Wire Cash: bank wire fees and transfer costs
cash.wireOfficial publisher
Wire Cash gives an assistant published US bank wire fees, same-day cutoff times and World Bank remittance costs for sending money abroad.

TollWire Evidence
Published by GitHub account TollWire
Local MCP server that records agent changes, scans, approvals and deployments in a tamper-evident hash-chain log and verifies it.

WireCat b24
dev.wirecat
A local CLI-backed MCP server that lets an assistant read and update a Bitrix24 portal's CRM — deals, leads, contacts, companies, pipelines and products.

SupportWire
Published by GitHub account supportwire
Hosted SupportWire MCP server that lets an assistant triage support conversations, reply to customers, and manage customers, tasks and team settings.
Touchline Wire — FPL & Premier League Intelligence
Published by GitHub account Steven-Robinson
Zero-auth MCP server giving assistants live 2026/27 Fantasy Premier League and Premier League data: captaincy, expected minutes, lineups, injuries and stats.