Matching web services and client requirements in the form of goals is a significant challenge in the discovery of semantic web services. The most common but unsatisfactory approach to matching is set‐based, where both the client and web services declare what objects they require and what objects they can provide. Matching then becomes the simple task of comparing sets of objects. This approach is inadequate because it says nothing about the functionality required by the client or the functionality provided by the web service. As an alternative, we use the Frame Logic as implemented in Flora‐2 to specify web service capabilities and client requirements, including their preconditions, postconditions, and ontologies, implement a logic‐based discovery agent using Flora‐2, demonstrate its usefulness in a medical appointment making scenario, and show its efficiency both theoretically and by benchmarking. The result is an expressive yet concise representation scheme for semantic web services, and a practical, efficient, powerful, and fully implemented matching engine based purely on logical inference for web service discovery, with direct applicability to Web Service Modeling Ontology and Web Service Modeling Language, because both are based on Frame Logic.