Client and Server constrain to {Client,Server}{Request,Notification}, meaning it's impossible to pass in a user-defined request or notification type to handle and have it type-check. The protocol is meant to be open-ended, so we should allow custom types here.