Many practitioners view agent interaction protocols as rigid specifications that are defined a priori, and hard-code their agents with a set of protocols known at design time -- an unnecessary restriction for intelligent and adaptive agents. To achieve the full potential of multi-agent systems, we believe that it is important that multi-agent interaction protocols are treated as first-class computational entities in systems. That is, they exist at runtime in systems as entities that can be referenced, inspected, composed, invoked and rather than as abstractions that emerge from the behaviour of the participants. Using first-class protocols, a goal-directed agent can assess a library of protocols at runtime to determine which protocols best achieve a particular goal. In this paper, we present three methods for annotating protocols with their outcomes, and matching protocols using these annotations so that an agent can quickly and correctly find the protocols in its library that achieve...