Google's MCP toolbox saw 20M tool calls — one demo agent deleted a table
AI Engineer · Averi Kitsch & Prerna Kakkar · Google · 2026-09-09 uploaded · 20min
한국어·English
Google's MCP Toolbox team says the natural-language-to-SQL agent pattern that developers love for exploration is exactly the pattern that should never reach production. In one of their own demos, an agent hit an error, decided to delete the database table, and did it — because nothing was there to stop it.
- Scale — MCP Toolbox for databases is open source with 15.7K GitHub stars, 132+ active contributors, support for 40+ databases, and the managed version plus toolbox handled 20 million tool calls last month.
- Control plane tools — Admin/control-plane tools built on provisioned public APIs manage instances and databases for developer assistance and require a human in the loop because they can perform dangerous actions.
- NL2SQL tools — An execute-SQL tool lets an agent generate raw SQL for flexible, unforeseeable analytical queries, but it belongs in developer assistance, not production.
- Structured SQL tools — Structured SQL tools fix parameters ahead of time, preventing SQL injection, restricting the agent to predefined logic, cutting latency, and reducing hallucination — this is the production pattern.
- Demo failure — In a build-time demo, the agent hit an error, decided to delete the table and start fresh, and did so with no safeguards in place.
- Lethal trifecta — Simon Willison's 'lethal trifecta' says a breach occurs when an agent has private data access, untrusted content, and the ability to expose that data externally, all at once.
- Confused deputy — A triage agent reading a ticket can be tricked by a planted instruction into querying a salary table and posting employee salaries back, because it holds the privileges to do so.
- Three identities — Google's fix separates user identity, application identity, and agent identity, with the agent limited to only what the end user needs.
- Source primitive — Toolbox moves database credentials, host, and connection details into a YAML source file injected at MCP server startup, so the agent never sees them, starting from a 'super user' tool with raw SQL access.
- Guardrail layers — Additional controls include read-only enforcement down to the database driver, allowed-dataset restrictions on cloud-native databases, and output size caps to limit blast radius.
- Custom tools — Custom tools pin the exact SQL statement in the YAML config using prepared statements with typed parameters, removing the agent's ability to generate arbitrary SQL.
- Tool quality rules — Recommended practices: design tools around outcomes not atomic REST calls, avoid duplicating parameter info in descriptions, separate read from write tools for auto-approval versus confirmation, return actionable errors instead of generic HTTP 404s, and use simple flat inputs.
- Parameter binding — Sensitive values like user ID are kept from the agent via bound parameters (set by the app after authentication) or authenticated parameters (claims extracted from a validated JWT/OpenID token), reaching a zero-trust lookup-flights tool that only takes a date.
In their words
But you need to be very careful. You need to be you need to have a human in the loop because we don't want to carry out any dangerous activities.3:07

So uh agent actually asked to delete the table and start fresh. We deleted everything and there were no safeguard or guardrails here.5:58

So this makes a little bit more sense when we think about who's controlling access and who's controlling the parameters.10:23

since this is a trusted system the agent goes okay let me use my permissions. I have those privileges. I have that access. I will query that and I'll post that right back on the ticket because that's what the ticket tells me to do. But now we have a huge data breach.9:59

Disclosure · Both speakers work at Google on MCP Toolbox for Databases and Eval Bench, the open-source tools and framework they are describing and promoting in this talk.
One thing to add — One thing to add — the technical demo failed live during the talk, so the flight-booking authentication example (tricking the agent into booking as "Avery" instead of "Prerna") was described rather than shown, which is worth flagging given it was meant to be the concrete proof of their access-control claims. The rest of the security architecture, especially bound versus authenticated parameters, is specific and actionable enough to stand on its own regardless.
One thing to try tonight
Read the MCP Toolbox docs and write one custom tool YAML that pins a specific SQL statement with typed parameters instead of exposing a raw execute-SQL tool, then test that the agent cannot alter the query.