Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds genuine context beyond that: rates come live from the Frankfurter API and pass through an SSRF-safe outbound guard, which is useful for understanding latency and external dependency. It omits failure modes for invalid currency codes, which keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.