I think it'd need it own special command because sometimes you want to talk to a NPC for flavor or because it's something your character would do, but you, the player, aren't expecting nor needing a puppet. Something like @requestpuppet.
If a player leaves the room, your request is cancelled. This should be specified when you type @requestpuppet. This way you'll be expected to stay in the room if you want GM attention, and if you have to leave a room, you can just leave your contact details with the NPC and leave a @note.
There should be a sort of cooldown so you can't spam it, or at least make it so you can't request it if you're already in the queue. If players abuse it to get GM attention all the time, it should be dealt with in the same way that you deal with players that constantly speak to a NPC in a spammy fashion to garner attention from the GMs.
The queueing should be simple, but I don't think it should tell you how many people exactly are ahead of you. I'm afraid the constant stream of OOC messages like (There's X other people awaiting a GM to puppet their NPCs) will be extremely immersion breaking. It'd be a GM tool after all. Assuming that it's even needed, and that the times you don't puppet a NPC is because you're busy doing other stuff like writing notes, gridmails, yadda yadda instead of puppeting another NPC.