Three required fields per tool
A tool definition has three required fields: name (snake_case identifier), description (what the tool does, when to use it), and input_schema (JSON Schema for arguments). The model picks tools by reading description; it shapes arguments by reading input_schema. Both matter; one is not enough.
Description is a prompt, not a label
Treat the description as a tiny prompt fragment that helps the model decide when to call the tool. 'Get the weather' is too thin; 'Get current weather and 24h forecast for a city. Use this when the user asks about temperature, rain, or what to wear today.' is what reliable selection looks like.
Schemas with required, types, and enums
Use full JSON Schema features: required arrays, enum for fixed sets, type with constraints. The richer the schema, the more reliably the model produces valid input. The trade-off: every byte of schema costs input tokens, so do not over-spec.