Chef is an infrastructure automation tool that allows users to define and maintain server configurations. It uses recipes, resources, cookbooks and roles to provision and configure servers. Chef works by installing a Chef client on nodes that runs recipes to configure the node according to cookbooks. The Chef server stores cookbooks and node data. Users can write recipes in Ruby syntax to define what configuration should be applied to nodes.