MCP vs plain function calling
People often ask whether MCP replaces function calling. It does not; it sits on top of it. Understanding the relationship clarifies when to reach for MCP.
They operate at different layers #
Function calling is a model capability: given tool schemas, the model emits a structured call, and your code executes it. It is specific to how you wired that model into your app.
MCP is a protocol for packaging tools so any client can discover and call them the same way. Under the hood, a client still uses the model's function calling to invoke MCP tools, MCP just standardizes where the tools come from and how they are described.
When plain function calling is enough #
If you have a single app, a fixed set of tools, and no need to share them, defining tools directly is simplest, and it sidesteps MCP's costs: a separate server process to run and monitor, extra latency from the client hop (and the network, for remote servers), and a spec that is still changing. There is no reason to add a protocol you will not reuse.
When MCP wins #
- You want the same integration usable across multiple apps or models.
- You want to consume third-party servers instead of writing every integration.
- You want the team that owns a service to own its server.
In short: function calling is the mechanism, MCP is the distribution model.
Resources & further reading
- Building effective agents AnthropicHow agents are structured and where tool-using agents commonly break down.
- MCP specification MCPThe authoritative protocol spec: messages, capabilities, transports, and lifecycle.