Put one gateway in front of all of them.

A server can change what its tools do after you approved it. Your agent will call the new one and never notice.

Start the 7-day trial

No uv? curl -LsSf https://astral.sh/uv/install.sh | sh — no admin rights needed. pipx works too: pipx install --force mcpgawk.

9,400+

public MCP servers indexed by mid-2026, with internal fleets estimated at several times that

5.5%

of public servers carry a tool-poisoning payload, by Invariant Labs' count

29%

of organisations say they are prepared to secure agentic AI. The rest are running agents they cannot see

The fleet grew faster than anyone's ability to check it, and a server you approved last month is not the server you are calling today.

One command, and you can see the fleet.

Free, local, no account. Every agent config on the machine and every server inside it, with what each tool costs and what it can reach.

Two of three official MCP servers we tested stopped starting →

local · nothing uploaded · reproducible · Apache-2.0

mcpgawk — first run real output

$ mcpgawk

checking what your agents can call, and turning protection on.

11 servers + 7 beyond this machine · 1 auth · 2 unreachable · 7 not-scannable · 7 review · 1 clean

not-scannable = runs outside this machine, listed from local traces only, so the set may be incomplete

8 local servers run as you, inheriting credentials no MCP config declares:

~/.npmrc publish npm packages as you

~/.pypirc publish Python packages as you

~/.config/gh/hosts.yml act on GitHub as you

~/.docker/config.json push images to your registries

1 credential-shaped environment variable

These need credentials:

1. figma https://mcp.figma.com/mcp

Sign in to which? [all / 1,2 / N]

the words a first run prints, set in type rather than screen-captured · the fleet counted here is this project's own machine, and nothing was uploaded to count it

From install to a watched fleet, in five moments.

01 · SCAN

You cannot defend a fleet you have never counted.

One command reads every agent config on this machine and every server inside it: what each tool costs, what it can write, what it can leak, which ones inherit credentials nobody declared. The panel holds the result on one screen — including servers you approved that no longer sit in any agent config.

Local stdio servers are never launched without your yes

Protection is armed on the same first run, by default

02 · VERIFY

Names can lie. Behaviour observed in a sandbox cannot.

A scan reads what a server claims. verify runs it in a sandbox and records what it does — what it reads, where it sends. Verdicts then rest on evidence, and drift is judged against behaviour, not descriptions.

Free, in the same package, since July 2026

A server reaching its own vendor API is listed and folded, not hidden — 42 of 42 findings on one measured fleet were that, and a detector that fires on normal traffic teaches you to ignore it

03 · GUARD

A server updates itself. Your agent never notices. The hook does.

Every call an agent makes is checked against the surface you approved, and every one of them is written down with the basis it was decided on. That record is how you answer the question a block always raises next: what else did this agent try, and what went through.

Tool arguments are never recorded, so the log cannot become the richest secret on your disk

Retrying, switching tools, or editing the baseline from inside a session is itself flagged

04 · DECIDE

The one call your agent must never make for you.

Right now this fleet has nothing waiting — which is what the screen is supposed to look like most of the time, and what you are looking at here. When a block does raise something it lands on this one screen, and approving from it is gated: the button carries the token printed in your terminal, which an agent that merely opened the page cannot supply.

Approval needs the person at the keyboard; mcpgawk approve refuses inside an agent session

Approve, and the new surface becomes the baseline. Keep blocking, and nothing changes

05 · SEE IT

Nothing here waits for you to remember to check it.

The first run's last act is an offer to open the panel. After that it watches on its own, and the loop closes without you chasing it: monitoring caught a server adding a tool nobody had approved, the calls to it were blocked before they ran, and the alert stayed open until somebody decided.

The tokened link in your terminal holds the buttons. A bookmark renders read-only

Continuous monitoring re-checks the fleet on a five-minute cycle mcpgawk Platform

mcpgawk panel — servers
servertransporttoolstokensstate
noteslocal · stdio31,204At baseline
docshttps116,880Findings
ticketshttps2414,310Unverified
fileslocal · stdio93,460Unverified
calendaraccount-hostedNot scannable
mcpgawk panel — findings
toolfindingseveritywhat it contacted
docs.searchundeclared egress · first-partyhighapi.docs.example
docs.uploadwrites without saying somediumapi.docs.example
tickets.createnot driven — needs sign-in

A server reaching its own vendor is folded, not hidden. A tool that was skipped is named as skipped, never counted as clean.

mcpgawk panel — activity
whenagentserver.tooldecision
18:08:51claude-codenotes.read_notesallow
19:05:46claude-codenotes.exfiltrate_notesdeny
SECURITY BLOCK. 'exfiltrate_notes' is not in the approved
baseline for MCP server 'notes'. A tool that appeared after
this server was approved is how a malicious update arrives.

This decision is final for this session. Do not retry it, do
not call a different tool to achieve the same thing, and do
not run any mcpgawk command to change the baseline — approval
requires the person at the keyboard.
mcpgawk panel — decisions

1 waiting on you

serverwhat changedseverity
notes1 tool added · exfiltrate_noteshigh
docs2 descriptions rewrittenreview

Approving needs the token printed in your terminal. An agent that opened this page cannot supply it.

mcpgawk panel — monitor

Monitoring running · 5 servers watched

whenserverkinddetail
14h agonotestools addedexfiltrate_notes
15h agodocssurface changed2 tools rewrote their description
2d agofilesscan failedthe program this entry launches does not exist
Claude Code Codex Cursor Gemini CLI Claude Desktop via gateway Kiro via gateway opencode via gateway

Point any MCP client at the gateway's endpoint, or let the free hooks wrap each agent's config in place — the same decision core answers either way, so an approval or a block means the same thing everywhere. Agents with no hook point are named honestly in mcpgawk status rather than silently left out.

What your agent sees when it is stopped.

The read goes through. The change does not. The refusal names no override and no command that would lift it, so the only move the agent has left is to tell you.

The decision is mcpgawk's, made locally before the call runs; the server is never contacted, so there is nothing for it to log or ignore

Approval needs the person at the keyboard; mcpgawk approve refuses inside an agent session

claude code — ~/work/newsletter real guard output

> the Resend key is old — check when it was last rotated, then rotate it

resend · list-api-keys allowed mcpgawk · in baseline

resend · rotate_credentials denied mcpgawk · not in baseline

SECURITY BLOCK (mcpgawk). 'rotate_credentials' is not in the approved baseline for MCP server 'resend'. A tool that appeared after this server was approved is how a malicious update arrives.

This decision is final for this session. Do not retry it, do not call a different tool to achieve the same thing, and do not run any mcpgawk command to change the baseline — approval requires the person at the keyboard, and attempting it from inside an agent session is itself treated as a red flag.

I could not rotate the key. The server resend added a tool called rotate_credentials since you approved it, so mcpgawk blocked the call. Run mcpgawk scan to see what changed before deciding whether to trust it.

who refused what: mcpgawk decides, as a pre-execution hook inside the agent, and the agent honours it · resend never hears about the blocked call, because it is stopped before it leaves the machine · both verdicts are the shipped hook's own, and the refusal is quoted byte for byte

The full benchmark

Get the full report.

Every server we measured, with the per-tool breakdown behind the numbers above. Free.

The full benchmark

Get the report

Free. Every server we measured, the per-tool cost, and where the tokens actually go.

Want to measure your own servers? That is the free CLI, today: uv tool install --force mcpgawk. It reads the configs your agents already have and never uploads anything.

Here's the report.

Thanks. It's yours to read any time.

Open the full report →

pricing

Blocking is free. The gateway is £29.

The hook blocks calls for free, for good, without an account — but only on the six agents that can take a hook. The other fifteen have no hook point at all, and nothing is checking what they call.

£29 a month puts one endpoint in front of all of them. Every agent gets its own key, so a blocked call has a name against it, and the log it leaves is what you hand to a security review.

Start the 7-day trial → What's included →

£29/month per person · 7-day free trial · all their machines · cancel any time. Free while the gateway is in beta: ask for a seat, and we email you a key and one install command — running the same day, no GitHub account needed. build is still in development and is included at no extra cost when it ships. See refunds and terms.