2026-07-12 · Dominion Observatory
Tool poisoning is the attack behind the June 2026 warning Microsoft issued to every Copilot and Azure customer: a malicious or compromised MCP server hides instructions inside a tool description, and your agent follows them — collecting data it shouldn't and sending it somewhere it shouldn't — all through tool calls that look completely normal.
A benchmark (MCPTox) measured the attack succeeding 72.8% of the time, with models almost never refusing. Here is why it works and what actually stops it.
When your agent connects to an MCP server, the server sends a manifest of its tools — each with a name, a natural-language description, and an input schema. The model reads those descriptions to decide when and how to call each tool. The problem: in the model's context, a tool description sits right next to its real instructions. Editing that description can steer the agent as effectively as rewriting its system prompt. Data and instructions share the same channel.
The rug pull variant is worse: the server behaves for weeks, you and your reviewers trust it, and then a tool description changes in production — after every human approval already happened.
A source-code scan reads the repo and grades it once. But the manifest your agent actually consumes is served at runtime by the running server, and it can differ from the repo — or change after the scan. Popularity and directory “verified” badges don't help either: independent research across 9,695 MCP servers found they do not predict security. The attack lives in exactly the gap a one-time code review cannot see.
Microsoft's own guidance is to baseline tool descriptions, schemas, and permissions at deployment, and to flag any later change for review before the modified tool is used. That is a runtime discipline, not a scan: record what the server presents today, then watch for it to change.
Run it free right now: paste your server into the MCP drift check. Select Capture baseline / compare to capture a compatible public HTTPS JSON tools/list endpoint. Authentication, redirects, legacy GET-only SSE and pagination are unsupported. The first capture is not a drift verdict. For the rug-pull case — a change that can happen any day after approval — continuous monitoring ($29/mo) performs scheduled checks for compatible public endpoints and supports best-effort alerts on detected changes. Manifest history is public; new captures are Ed25519-signed, while legacy captures remain unsigned; detection time is not guaranteed.
Detecting a change is not the same as judging intent — a description can change for legitimate reasons too. Baseline-and-diff records changes between successful captures. It can miss changes between captures and does not block an agent from using a changed tool. Servers we cannot reach are shown unrated, never given a fabricated score.
Related: how to verify an MCP server is safe · MCP server security risks.
Check any MCP server's trust score: dominionobservatory.com/check
Browse all 40,000+ servers: Server Directory