All tests run on an 8-year-old MacBook Air.

You're transferring a batch of large files over MTP. The first one flies at 45 MB/s. Then the second file starts — and you're at 30 MB/s. The third is slower still.

Nothing changed. Same cable, same device, same app. So what's happening?

The Cause Is in the Protocol Itself

Between every file, MTP requires a full negotiation cycle — SendObjectInfo followed by SendObject. This isn't an implementation detail you can optimize away. It's how MTP works.