This paper addresses the problem of dynamic protocol selection in open and heterogeneous multi-agent systems (MAS) for collaborative task performance. Protocols are interaction patterns which help agents coordinate their activities. Usually, agent designers select the protocols to be used for collaborative task performance. In open and heterogeneous MAS, such selection may lead to protocol mismatch at run time. Protocol selection mismatch may in turn result in a collaborative task not being performed, although it could have been performed had the protocols been selected properly. Our solution to this problem is to enable agents to dynamically select protocols. We first study the characteristics of protocols and the descriptions of collaborative tasks. Using these characteristics and descriptions, we devise mechanisms that enable agents to dynamically select protocols when they have to perform a task in collaboration. In this work we relax some restrictive assumptions made in prior work on protocol selection, and which may hinder collaborative task performance. In particular, we do not assume that agents trust one another. Additionally, because there is no protocol specification standard, we allow several protocol specification formalisms to coexist. Our method allows agents to select their protocols locally and individually, yet coordinate their selection with other agents' selections based on message exchange flows. Since the selection is performed locally, some errors may occur in the process. Our mechanisms provide means for detecting such errors and overcoming them. As we show, the complexity of our solution is empirically sufficiently low for practical use, and the level of success in coordinated protocol selection is very high.