The API flow: (1) you send your prompt plus function definitions (JSON schemas describing each function's name, description, and parameters), (2) the model decides whether to call a function and which one, (3) it outputs a structured function call with specific arguments, (4) your code executes the function and returns the result, (5) the model incorporates the result into its response. Some models can call multiple functions in sequence or in parallel.
Function calling is the model-level primitive: the model outputs structured tool calls. MCP (Model Context Protocol) is a higher-level protocol that standardizes how tools are discovered, described, and connected. Think of function calling as the instruction set and MCP as the operating system — MCP uses function calling underneath but adds tool discovery, authentication, and standardization across providers.
Function calling is more reliable than asking a model to output function calls as text (which requires parsing and is error-prone). Providers implement function calling by constraining the model's output to valid function calls matching your schema — similar to structured output. But the model can still choose wrong functions, hallucinate parameter values, or call functions when it shouldn't. Robust applications include validation, error handling, and human-in-the-loop confirmation for high-stakes operations.