Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations present (readOnly=false, destructive=false), the description still adds real context: it creates a persisted approval draft, returns approval_ref and plan_digest, and explicitly does not alter delivery until a separate confirm call. This two-phase, no-side-effect-on-delivery behavior is exactly the kind of trait annotations alone cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.