## Why
Concurrent Apps startups with equivalent discovery inputs each issue a `tools/list` request even though they share a live tool catalog.
## What changed
Share successful tool listings across overlapping startups in the same discovery scope while keeping each client's MCP connection independent. Later startups and explicit refreshes still fetch from the server.
Include time spent waiting for a shared listing in the configured startup timeout. If a listing fails or is cancelled, let a waiting startup retry using its own connection. Preserve separate catalogs for different scopes and honor servers that opt out of catalog sharing.
## Testing
Add tests for shared startup listings with independent connections, waiting timeouts, cancellation recovery, and catalog isolation across discovery scopes.
GitOrigin-RevId: cb626f6cb9c38e27b3d75a8da55bda584aaef6f4