Thanks for entertaining me :). I'm only talking about the actual encoding of the query itself, not parameters, return types, etc.
Looking at the github page, it seems all the names of things are still being transmitted as strings (of course), so "r.add(1,2)" is unlikely to be smaller decomposed into discrete items (each with at least a 1-byte pb tag overhead).
I'd think it'd be passing a main query string, with placeholders for parameters. "r.add(@a,@b)" or something, then have a parameter block where you can efficiently encode non-string parameters.
Basically, keep protocol buffers and the rest, just don't encode the syntax tree - let the server parse it.