Tools are usually sent in your request to the provider, tools are nothing more than identifiers that your code can handle if the llm requests it.
An example would be, you want to allow the llm to turn on or off the light in your bedroom. You could pass a tool (literally just the word toggle_light in this case) to the llm request along with whatever your input is (this could be a part of a chat, voice command, whatever) then if the llm determines that the input has somehow warranted the light toggle (say the input is a user saying "turn on the light") it will "use" the tool. Using the tool means literally sending a response back to your code that initiated the required that says "hey run the light toggle code with these parameters" your code is responsible for actually executing that action and telling the llm the response
Tool use is the single most useful thing llms do today imo