MCP vs function calling

Function calling is the mechanism: a model's native ability to emit a structured call — name plus JSON arguments — instead of prose, which your code then executes. MCP is the standard around it: where those tools come from, how they describe themselves, and how the call travels. MCP builds on function calling; it doesn't compete with it.

Side by side

Function callingMCP
LayerModel capability, exposed in each vendor's APIIntegration protocol between apps and tool providers
Who defines the toolsThe app developer, per app, in their own codeThe server author, once — every client inherits them
DiscoveryNone — the tool list is hardcoded into the requestRuntime — clients ask tools/list each session
ExecutionYour own code, in-processA separate server, over stdio or HTTP
PortabilityDefinitions differ per model vendor's API formatOne open spec across vendors and clients
End usersCan't add tools — they get what the developer shippedCan plug in any server themselves

When to use which

Building one app with a few custom tools? Plain function calling. Define the functions in your API request, execute them in your own code, done — no servers, no protocol overhead.

Want tools that outlive one app? MCP. The same server works in every client, users can bring their own connections, and vendors maintain the integration instead of you — hundreds already do.

Under the hood they meet: an MCP client fetches a server's tool schemas and hands them to the model as functions. Think of function calling as the CPU instruction and MCP as the peripheral bus built around it.

Common questions

Is MCP just function calling with extra steps?

It's function calling with the missing pieces. Function calling defines how a model requests a tool; it says nothing about where tools come from, how they're described consistently, how the call is transported, or how auth works. MCP standardizes all of that — which is why a server written once works in Claude, Cursor and ChatGPT alike.

Do I still need function calling if I use MCP?

You're always using it — it's how the model itself works. When an MCP client connects to a server, it presents the server's tools to the model through the model's own function-calling interface. MCP changes where tools come from, not how the model invokes them.

When is plain function calling the better choice?

When you're building one application with a handful of bespoke tools that nothing else will ever use. Defining functions directly in your API calls is simpler and has no extra moving parts. MCP earns its keep when tools need to be shared, discovered, swapped by users, or used across multiple apps.

Does MCP work with models other than Claude?

Yes — that's the point. Any model with tool-use ability can sit behind an MCP client, and clients exist across vendors: OpenAI's products, Cursor, VS Code, Gemini CLI and more all speak MCP to the same servers.

More pairings: the compare hub · protocol basics: What is MCP?