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.

QuestionFunction callingMCP
Where does it live?Model/runtime layerClient-server integration layer
Discovers external servers?No standard requirementYes, through protocol-defined capabilities
Useful without network?YesYes, e.g. stdio local servers
Reusability across hostsUsually app-specificA 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.

Practical rule: function calling answers “how can the model request an action?” MCP answers “how does my AI application connect to reusable external 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.

References