roots=, and the client answers however the server asks. A handshake-era server pushes a roots/list request down the open session and reads the reply mid-call; a modern (2026-07-28) server has no such channel, so it returns a roots request and fastmcp.Client fulfils it from the same registration and re-issues the call with the answer attached. The default mode="auto" negotiates whichever era the server speaks, so the examples below work on either — see protocol negotiation for how that choice is made, and the guard pattern for how a server issues the modern form.

