Route and capability
Which exact MCP tool or capability is being exposed, and what job is it allowed to complete?
Tool name, capability id, allowed input shape, side-effect class, environment, and owner.
Threat model template
A production MCP threat model should be small enough to run before the agent repeats a call. If you cannot name the route, caller, authority surface, credential lane, denied neighbor, budget owner, and receipt, the tool is not ready for unattended use.
Fast answer
The seven fields
Which exact MCP tool or capability is being exposed, and what job is it allowed to complete?
Tool name, capability id, allowed input shape, side-effect class, environment, and owner.
Who is calling, how much autonomy do they have, and should they see this route at discovery time?
User, tenant, workspace, agent role, session, trust class, and filtered tool list.
What external system, host state, account, network, filesystem, or customer data can the route affect?
Allowed host/path/provider/object/resource prefixes plus explicit forbidden neighbors.
Which backend principal, BYOK key, vault reference, wallet, managed key, or provider pin is used?
Credential mode, scope, expiry/rotation behavior, revocation path, and owner.
Who pays for retries, provider calls, x402 proofs, quota burn, and partial success?
Estimate, cost ceiling, quota bucket, retry ceiling, idempotency key, and billing owner.
What nearby action must fail before the route can be called production-ready?
A fixture for sibling path, private IP, wrong tenant, larger amount, write variant, or off-policy provider.
Could an operator reconstruct what happened without re-running the agent conversation?
Policy decision, normalized input, denial reason, provider outcome, retry state, cost, and recovery hint.
Authority classes
The mistake is to evaluate tools by whether they are read or write in natural language. Evaluate them by what authority they can exercise when a planner picks the wrong argument.
Risk: Host-state authority disguised as a local helper.
Fixture: Allow one canonical repo prefix; deny parent traversal, symlink escape, hidden config, sibling repo, and host mount.
Risk: Network egress that can touch cloud metadata, loopback, private subnets, and internal services.
Fixture: Resolve DNS before request; deny metadata, loopback, RFC1918, IPv6 ULA, current-network, and service-network targets.
Risk: Tenant and record authority hidden behind friendly search or update verbs.
Fixture: Allow one workspace/object lane; deny another tenant, private project, archived record, and broad export.
Risk: Budget authority where retries and partial success become real money.
Fixture: Allow one amount/merchant/product lane; deny higher amount, duplicate idempotency key, and unpriced provider path.
Risk: External communication authority that can impersonate intent or leak data.
Fixture: Allow draft or approved recipient class; deny external send, list blast, wrong account, and hidden attachment.
Risk: Change authority where one tool call can mutate production state.
Fixture: Allow read/build/status first; deny deploy, secret read, privilege escalation, and unreviewed config mutation.
Copy-paste route card
A route card is useful because it forces the security conversation out of abstractions. If the card cannot be filled out, the runtime will improvise under pressure.
Route / MCP tool:
Workflow job:
Caller / tenant / workspace:
Trust class:
Allowed authority surface:
Forbidden neighbors:
Credential lane / backend principal:
Budget owner / quota bucket:
Retry and idempotency rule:
Denial fixture that must fail closed:
Receipt fields required for audit:
Recovery path when the call is denied, partial, or duplicated: Common failures
Related operator guides
Scope, principals, and evidence are the practical security model once tool calls become production authority.
Turn the route card into remote-server checks for auth, scope, tenant isolation, governors, and recovery.
If one route is already worth repeating, harden that route before broadening the surface.