I'm pretty sure scp isn't a protocol. It is just a tool that relies on doing a request for execution over the regular ssh2 protocol.
I've written a few custom ssh servers and you don't really need to do anything to them to support scp.
sftp uses the sftp subsystem. scp just uses regular ssh requests and transports data over the ssh channels.