The action-authority matrix
planner: model (claude-sonnet-5)manual search: local stubtickets and parts: synthetic training dataMCP 2026-07-28
Write this table before the agent, not after it. Every row is enforced by pipeline/policy.py at run time — the table on this page is rendered from the same object the guardrail consults, so it cannot drift from the behaviour.
| Tool | Authority | Approver | Rationale and conditions | What the annotations alone imply |
|---|---|---|---|---|
check_availability/mcp/parts | automatic | — | Point-in-time stock read. | automatic |
find_part/mcp/parts | automatic | — | Catalogue read. Does not reserve stock or commit spend. | automatic |
get_ticket/mcp/tickets | automatic | — | Single-record read. Same taint as search.
| automatic |
post_ticket_update/mcp/tickets | automatic | — | Additive write inside the trust boundary. Appends a note; cannot edit or delete.
| requires_approval |
search_manual/mcp/manuals | automatic | — | Read only over a fixed, curated manual corpus. Not attacker-influenceable.
| automatic |
search_tickets/mcp/tickets | automatic | — | Read only, closed world, bounded at 25 records. No customer identifiers leave the host.
| automatic |
raise_parts_order/mcp/parts | requires approval | service supervisor | Commits chargeable spend against a customer account and is not recallable once the supplier accepts.
| prohibited |
export_service_records/mcp/tickets | prohibited | not delegable to the agent | Moves customer records, including site contacts, outside the organisation. This is the exfiltration leg of the lethal trifecta, and the agent has the other two legs by construction.
| prohibited |
Three rules that make the table hold
- Default deny. A tool that is not in the registry is prohibited.
A server that adds a tool between two
tools/listcalls — the rug pull behind CVE-2025-54136, CVSS 8.8 — gains no authority by doing so. - Authority is host-side. The right-hand column shows what the server's own annotations would imply. It is displayed for comparison and it is not consulted: the specification says clients must treat annotations as untrusted unless the server is trusted, and a hint that the server controls cannot be the thing that decides what the server is allowed to do.
- Prohibited means no prompt. There is deliberately no approval
dialog for
export_service_records. An approval prompt on an exfiltration tool is a phishing surface: ask an operator often enough and one of them says yes. The human path for a records request is a separate workflow the agent cannot reach.
Rendered from pipeline/policy.py, the same object the runtime consults. Nothing on this screen is hardcoded; the source is in
Demo4/pipeline/.