A security startup founded by Unit 8200 veterans just came out of stealth with $50 million to do one job: vet the skills, plug-ins, and MCP servers your AI agents install. The founders made the comparison bluntly. We require driver-signing review before any code loads into the Windows kernel. We require nothing before a third-party MCP server gets read access to your production database through your agent.
That is not a policy problem. It is an architecture problem. Security that lives in prompts and guardrails dies the moment the agent calls a tool the guardrail has never seen.
This note picks up where field note #168 left the skill library. Last time the problem was rot: retrieval precision collapsing at 100 skills. The bigger problem is that every one of those skills is an unaudited dependency, and the npm kill chain from note #73 just rebuilt itself one layer up the stack.
Why the kernel comparison holds
The objection is fair, so let me answer it head on. A kernel driver runs in ring 0. It sits inside the operating system's memory space, and the hardware enforces that isolation with page tables and privilege rings. An MCP server is just a process that speaks JSON-RPC over a socket. The isolation there is API-level authorization, not memory-space isolation. Different mechanisms, different trust boundaries. That distinction is real, and it is worth stating plainly.
Here is why the comparison still holds. The mechanism differs, but the threat model is identical. In both cases an unvetted third party gets privileged access to the thing you are protecting. For a kernel driver, that thing is kernel memory. For an MCP server, that thing is your production database and the agent's authority to act on it. The consequence of a bad actor is the same in both: total compromise of the boundary you thought was protecting you.
And the API-level boundary is the weaker one. Memory-space isolation is enforced by hardware. It does not care what the driver intends. API-level authorization is enforced by a permission grant that someone wrote in a config file, often copy-pasted from a README, often broader than the tool needs. A single over-broad grant defeats it. No hardware is going to stop an MCP server that was handed read access to your production database, because from the API's point of view, that access was authorized.
That is the whole point of the driver-signing comparison. Windows does not trust a driver because the driver is well behaved. It trusts it because the driver was signed, reviewed, and loaded into a boundary the hardware enforces. Your agent loads an MCP server with none of that. The signing requirement is the missing piece, and it is missing at the exact layer where the comparison bites.
Why your toolbelt is the attack surface
MCP's strength is runtime discovery. A host sends a discover request and gets the server's capabilities, tools, resources, and prompts without reading any documentation first. That is the GraphQL pattern, and it is genuinely useful. It is also the problem. Adoption spreads through the ecosystem in months, not years, and security teams cannot review what gets installed at runtime.
For the newbies: MCP, the Model Context Protocol, is a standard that lets an AI agent connect to external tools and data. That one sentence is the whole promise. The agent does not need a manual. It asks the server what it can do, and the server answers.
The regulators already see this coming. Andrew Bailey, chair of the Financial Stability Board and governor of the Bank of England, told the G20 that frontier AI cyber risk is the most immediate concern for the global financial system. Most engineering teams do not. The gap between what the people who run the world's money are worried about and what the people running your agent fleet are worried about is the whole story.
The vetting gap, in numbers
The industry is converging on this exact gap, and the evidence landed in a single day.
AIR raised $50 million across two seed rounds to discover agents running inside companies and continuously vet their tools. It filters out about 27 percent of the add-ons and skills it finds online, and it maintains a whitelist it re-checks as packages change and developer accounts get compromised.
VibeGuard, an open-source security linter built specifically for AI-generated code, runs 47 AI-pattern rules covering SQL injection, hardcoded secrets, command injection, JWT alg:none bypass, XXE, path traversal, and insecure deserialization. The rules were written by studying actual AI-generated code from Copilot, Cursor, Claude, and ChatGPT.
Here is the uncomfortable detail. AI coding assistants reproduce the same security mistakes at scale, and they do it confidently. Generic linters like Bandit and Semgrep were not written for those patterns. They catch the mistakes a human makes. They do not catch the mistakes a model makes when it has seen the same flawed pattern a million times in its training data.
The supply chain problem exists on both sides of the agent. On one side is the code it writes. On the other side is the tools it installs. You cannot fix one and ignore the other, because the agent is the bridge between them.
The action-commit boundary: where security has to live
OpenAgentFlow is the architectural answer, and it is worth reading closely. It is a control-plane/action-plane architecture that enforces safety at the action-commit boundary. Every pending GUI action, API call, tool call, and LLM invocation gets normalized into a unified AgentEvent stream, and that stream routes through a shared pre-execution Policy Enforcement Point.
The numbers hold up. On a 300-case action-event benchmark, it achieves 94.0 percent accuracy and a 95.3 percent attack block rate. On a 30-case dynamic-policy suite, it matches expected behavior in 27 cases after new rules are installed.
That last part is the whole argument. New rules take effect without modifying agents, prompts, models, or execution paths. Rules that install without touching the agent are rules that survive the next tool you add. This is the same thesis from note #165, that agent safety lives in the execution boundary, not the prompt, with a fleet-level implementation on top.
Tested does not mean vetted
The agent-lens v0.3.0 release note is the cautionary tale. A tracer with 85 to 93 percent test coverage shipped broken integrations anyway. Its tests ran against a fake SDK shaped around the code's own calls instead of what vendors actually ship. The one-line install raised an AttributeError on any machine with the real OpenAI SDK, because it patched an attribute no current version of the SDK has ever defined.
The lesson is uncomfortable. Your integration tests validate that your code calls what you think it calls. They do not validate what the third-party tool actually does. Vetting and testing are different jobs, and confusing them is how a tool with excellent test coverage becomes a production incident.
The tool vetting rubric
Here is the framework. A five-question gate every MCP server, skill, or plug-in passes before an agent can use it. Name it, remember it, and make your team use it.

- Identity. Does this tool have a verifiable identity and publisher, or did it arrive by copy-paste? A tool with no owner is a tool with no one to hold accountable. The industry is already moving here. SoulAuth, a Rust-based identity project, is building agent-native identity where agents are first-class principals with verifiable identities and permissions of their own. It is early, but it signals where this is heading.
- Permission scope. What is the smallest set of permissions this tool needs? If it asks for more than its function requires, it fails. A tool that only needs to read a calendar does not need write access to your database.
- Action inventory. Can you enumerate every action it can take? If you cannot list them, you cannot guard them. An unenumerable tool is a black box, and a black box does not belong in your toolbelt.
- Reversibility. Which of its actions are irreversible, and what happens when one fires by mistake? The answer to that second question is what separates a tool you can live with from a tool that ends your week.
- Escape path. If the tool turns malicious tomorrow, what is the kill switch that does not require rewriting the agent? If the only way to stop it is to rebuild the agent, you do not have a kill switch. You have a hostage.
A tool that fails any question does not go in the toolbelt, no matter how good the demo was. That is the rule. It is not a suggestion.
What to do today
Inventory every MCP server, skill, and plug-in your agents can currently reach. Include the ones a teammate installed in a demo two months ago. Those are the ones that will hurt you.
Run the five-question Tool Vetting Rubric on each one. Anything that fails gets pulled.
Move enforcement to the action-commit boundary. One shared Policy Enforcement Point in front of every tool call, GUI action, and API call, not per-agent prompt rules.
Run an AI-code-aware linter over what your agents have already written. VibeGuard's 47-rule set is the reference.
Write your integration tests against the real installed SDKs, not a fake one shaped around your own calls.
Assign one owner for the agent toolbelt. An unowned supply chain is an unguarded one.
The uncomfortable question
Windows will not load an unsigned kernel driver. Your agent just loaded four unvetted MCP servers into the same process that holds your production credentials. Which of those two machines would you rather be defending right now, and why are you defending the wrong one?
Get More Articles Like This
Getting your AI agent setup right is just the start. I'm documenting every mistake, fix, and lesson learned as I build PhantomByte.
Subscribe to receive updates when we publish new content. No spam, just real lessons from the trenches.
