Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true, so the description carries the behavioral load and does so well by disclosing the async state machine (status: pending | completed | failed) and when image_url populates. It stops short of error handling, rate limits, or auth needs, but the polling lifecycle is genuinely useful context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.