Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the annotations by enumerating all four status values with their meanings, disclosing cache TTLs (15 min, 1 min when unavailable), describing rate-limit degradation to status=unavailable with reason=rate_limited, and stating that publication/update dates are never inferred and always null. These are exactly the behaviors readOnly/idempotent hints 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.