One byte per type
MessagePack encodes the type in the first byte of every value. Small integers, short strings, short arrays, and short maps are packed into that byte, which is where most of the size saving comes from compared with JSON.
82 starts a 2-entry map, a7 starts a 7-byte string, and c3 is true. 82a7636f6d70616374c3a6736368656d6100 is the canonical example, and it decodes to {"compact": true, "schema": 0}.
Binary and string are different types
MessagePack distinguishes byte strings from text, which JSON does not. Byte strings render here as hex in angle brackets rather than being forced through a text decoder that would corrupt them.
If a value you expected as text arrives as bytes, the encoder wrote it with the bin family instead of the str family. That is a common mismatch between older and newer library versions.
Streams
Concatenated values are normal in MessagePack logs. The trailing byte counter shows how much was left after the first top-level value, which tells you a buffer holds several records rather than one.