My scanner passed every local test, then 406'd on a real MCP server — that gap is the point
I built a small passive scanner to check MCP servers. It is read-only: it will not run any of the server's tools, it will not touch your data. It just looks at the deployment and permission layer and hands you a report y
I built a small passive scanner to check MCP servers. It is read-only: it will not run any of the server's tools, it will not touch your data. It just looks at the deployment and permission layer and hands you a report you can keep. To validate it, I ran it against two local target servers I wrote myself. All checks passed.
Then I pointed it at a real server I already had configured (Exa's). It failed the handshake with a 406. Not because Exa was broken, but because my own client was not sending the Accept header the protocol expects. The two local targets are forgiving about that header, so they all came back green. The moment I hit a server that actually enforces the spec, it fell over.
That is the gap I keep hitting in this space: a tool that is only ever validated against targets that agree with it. Green on my own test fixtures says nothing about what happens against a server that follows the spec strictly. And that same "green does not mean actually checked" is exactly the failure you do not want when you are trying to figure out whether an MCP you wired in can quietly reach things it should not.
What I ended up doing
So I built a small passive self-check around exactly that gap. It does not run any of the server's tools, it does not touch your data, it just looks at the deployment and permission layer and hands you a report you can keep. It is mapped to the OWASP MCP Security Cheat Sheet, with the things it cannot check marked as Untested instead of waved through.
That last part matters more than the findings. The failure I keep seeing in this space is a tool that cannot reach something and quietly reports "clean." Reachable with no issue, and not reached at all, are two different things. Mixing them up is how you get a green report that is actually just a gap.
The free + paid split
- Free: a snapshot check you can run on yourself. See the landing page (https://535710934-ops.github.io/agent-audit-range/), email-based.
- Self-serve toolkit ($19, one-time): the passive scanner, plus a Cheat-Sheet / OWASP ASI mapping sheet, plus a fill-in report you can hand to a boss or a client. If you just want to check your own servers without waiting on anyone, buy it here: https://www.creem.io/payment/prod_5OGGTcdFsQ7kJmmZjD6VEd Scope, said plainly: this is a self-service tool. It is not a security certification and it is not a substitute for a qualified professional. It is passive and read-only. It will not execute your tools or change your config, and anything it cannot test is marked Untested, never Pass.
One honest note
All my local checks passed, and I almost shipped it. It 406'd the moment it hit a real server. Not because the server was broken, but because my own client was not fully spec-compliant. Since then I have stopped trusting a green result that was only ever validated against targets I wrote myself. A check you cannot reach, or cannot prove, is worth marking Untested. That is the whole reason I wrote this: so the gap stays visible instead of hiding behind a green.
Originally published by Dev.to Security. Aggregated on AIWithGhost for educational purposes — full credit and traffic to the original publisher.