Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent, non-destructive and closed-world, so the bar is low. The description nonetheless adds a genuine behavioral guarantee beyond the annotations: it never accepts a user id and never returns another user's data, which is a meaningful scoping/security constraint for an agent. It omits what happens when no portfolio exists, but that is minor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.