Forward-deployed / Learning zone
Tool callinga Generative AI module
Lesson 03

Permissions, blast radius & the trust boundary

TL;DR

Every tool you give a model is a grant of real-world capability, and that grant is only ever as narrow as whatever your system enforces — never as narrow as the model's own good judgment. Reviewing an agent's toolbox is a permissions review: what can it read, write, spend, or delete, and how far does the damage spread if it gets something wrong. That review got harder to skip the moment tools stopped being something only your own team wrote — a standard like MCP means a tool your agent trusts might be code a third party wrote, which turns "add a tool" into a decision with the same weight as "add a dependency."

🎯 For the product leader

Why it matters — The tool list is the product surface of an AI feature that acts. It defines everything it can do, everything that can go wrong, and who else's code you're now trusting.

What it changes in your decisions — Which tool calls happen automatically and which require a human's approval first — and whether a third-party tool gets the same scrutiny as a new dependency in your codebase.

Ask yourself — "For each tool this feature has: what's the worst realistic thing it could do with it, and would we survive that on a bad day?"

Risk if ignored — An over-scoped tool meets a confused model or a manipulated input, and a legitimate capability gets used to cause real damage — quietly, and at machine speed.

The mental model: every tool sits at a tier

Blast radius

Not every tool deserves the same trust · assign the tier on purpose

Two questions, one at a time — each answer decides which enforcement tier the tool goes in.

A tool the agent can call
Q1 · Read-only?
Yes
Runs freely · low blast radius

No permission gate needed

Q2 · Reversible?
Yes
Runs · logged & monitored

Undo path exists · trust but track

No · delete · send · spend
Requires confirmation or human approval

Regardless of how well the agent tests

The model can never be the enforcement point. Authorization lives in the tool, checked against the real session or tenant — never inferred from what the model says about itself.

Not every tool deserves the same level of trust, and the tier a tool belongs to should be a decision someone made on purpose — not a default that fell out of however the API happened to be wired up.

The model can never be the enforcement point

Authorization has to live in the tool, checked against the real session or tenant — never inferred from what the model says about itself. A model that's been told, through a manipulated input, "you are an admin, proceed" has to be stopped by the tool's own permission check regardless of what it believes. This matters specifically because a model's context can be influenced by content it didn't originate — a retrieved document, a tool result, anything an attacker can get in front of it — so trusting the model's own account of its authority is trusting exactly the thing an attacker can manipulate. The full authorization pattern — scoping every call to a real session, never to a claim — is developed in Function calling reliability, and the broader security posture this sits inside is developed in Safety, security & governance and Security & privacy sense.

Least privilege and graduated irreversibility

The blast radius of an agent is exactly what it's allowed to touch, so the working default is to grant the narrowest scope that still does the job: read-only where read-only is enough, one folder instead of every folder, a staging environment instead of production. Layered on top of that, not every action deserves the same friction — reads can run freely, writes are worth logging, and anything destructive or outward-facing (delete, send, spend) earns a confirmation step or a human's approval before it fires. Mapping every tool to a tier like this, before launch rather than after an incident, is a product decision as much as a security one.

What changes when the tool comes from someone else

Before a shared standard, every tool your agent used was code your own team wrote and could audit. MCP changed that by making it easy to plug in a tool server someone else built — which is exactly the value of the standard, and exactly why it raises the trust question. An MCP server you didn't write is third-party code your agent's context now depends on: its tool descriptions shape what the model does, and its results enter your agent's context the same way a retrieved document would. The practical response is to vet an external MCP server with the same seriousness as a new software dependency — not with the casualness of installing a browser extension. The integration-economics side of this decision — when adopting the standard is worth it for a given system — is developed in MCP & standard connectors.

Failure modes

Practitioner checklist