Three things that look related but answer different questions. Get the difference clear once and you stop having "should we use MCP for this?" arguments that go in circles.
- Function calling is a feature of a single LLM API. It defines the wire shape between your code and your model provider. The provider knows your tools because you sent them in the request; nobody else sees them. It is intra-application plumbing.
- MCP is a protocol that lets any client reuse any server. The contract is between independently built hosts and servers. The server's tools are visible to whichever clients connect; the protocol governs the connection, not the model. It is inter-application plumbing.
- REST/OpenAPI is the classic web API contract. It defines resources, methods, and status codes for arbitrary HTTP clients. It does not care that an LLM is at one end; it has cared about correctness since long before LLMs existed. It is general-purpose plumbing.
The decision tree, briefly: building inside one app, with one model? Function calling. Building a tool you want many AI products to reuse? MCP. Building a public API that any client (browser, mobile, integrations, AI agents) might consume? REST/OpenAPI. The three layers stack: an MCP server's tools often wrap REST APIs internally; an LLM consumes the MCP server's tools through its provider's function-calling shape. Each layer earns its keep.