MCP vs Function Calling
MCP and function calling are often discussed as alternatives, but they operate at different layers.
Function calling
Function calling is a model/runtime feature. You give the model descriptions and schemas for functions or tools. The model can produce a structured request indicating which function it wants to call and with what arguments. Your runtime executes the function and returns the result.
MCP
MCP is an interoperability protocol between an AI application and external capability servers. It provides conventions for discovery, schemas, invocation, resources, prompts, transport, authorization-related behavior, and extensions.
How they work together
An MCP client can discover tools from a server and convert them into the tool representation expected by the model runtime. The model still performs tool selection using its native tool-calling capability. MCP handles the external server boundary.
| Question | Function calling | MCP |
|---|---|---|
| Where does it live? | Model/runtime layer | Client-server integration layer |
| Discovers external servers? | No standard requirement | Yes, through protocol-defined capabilities |
| Useful without network? | Yes | Yes, e.g. stdio local servers |
| Reusability across hosts | Usually app-specific | A central goal |
Which should you use?
Use plain function tools when the capability is local, tightly coupled to your application, and unlikely to be reused. Use MCP when you want a standardized external boundary, shared servers, cross-client reuse, or richer protocol capabilities.
OpenAI example
The OpenAI Agents SDK exposes both local function tools and MCP integrations. That is a good illustration of the layering: an agent can use local Python functions and remote MCP tools in the same run.