The radarr/sonarr/lidarr/bookshelf events entrypoints built their client with XClient.fromEnv() at import time, which throws when no API key/URL is available yet — crash-looping the runtime container. The tools already guard this; the events entrypoint did not. Mirror the tools' guard: build the client in a try/catch, and only start the poll loop when it succeeds. When it fails, log one line and stay idle until a key is available. Behaviour when configured is unchanged. Claude-Session: https://claude.ai/code/session_01LrgweAeERJYBg88c5cKDzF