Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false), so the bar is lower, and the description still adds real value by disclosing the return value ('returns the updated list'), which lets a caller avoid a follow-up todo_list. It omits failure behavior for a missing id and does not explain why a removal is marked non-destructive. No contradiction: describing a scratchpad removal is consistent with destructiveHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.