Handbooks  /  MCP vs Function Calling
Engineering~8 min readComparison
Head to Head

MCP vs function calling: not a rivalry

MCPvsFunction Calling

These get pitted against each other, but they live at different layers — comparing them is like comparing "USB-C" to "sending data". Function calling is the model’s ability to emit a structured request to run a tool. MCP is an open standard for how an agent discovers and connects to servers that provide those tools. One is a capability; the other is a protocol that plugs capabilities in.

01

Different layers, not competitors

Function calling is a model capability: you describe some functions in the request, and the model, when appropriate, returns a structured call — the function name and typed arguments — which your code then executes and feeds back. It’s the mechanism that turns a text model into an agent. MCP (Model Context Protocol) is an open standard: it defines how an agent (the client) connects to MCP servers that expose tools, resources and prompts, so any compliant agent can plug into any compliant server without custom glue.

→ The relationship

MCP uses function calling. When an agent connects to an MCP server, it discovers the server’s tools and presents them to the model as functions the model can call. Function calling is the low-level act; MCP is the standardized plumbing that decides which tools are available and how they’re reached. They compose — they don’t compete.

02

Head to head

DimensionMCPFunction Calling
What it isAn open protocol / standardA model capability
LayerConnection & discovery of toolsEmitting a structured tool request
AnalogyUSB-C port for AI toolsThe act of sending a signal
Who implementsServer + client authorsThe model provider
InteroperabilityAny agent ↔ any serverPer-provider tool schema
AddsDiscovery, resources, prompts, transportThe core "call a tool" mechanic
RelationshipPresents server tools as callable functionsThe mechanism MCP tools are invoked through
03

When each matters

Think function calling when…

  • You’re wiring a few bespoke tools into one app
  • You control both the model call and the tools
  • You just need the model to pick and fill a function
  • You’re learning how agents act at all

Think MCP when…

  • You want tools reusable across many agents/apps
  • You want to plug into an ecosystem of existing servers
  • You need discovery, resources and prompts, not just tools
  • You’re building or consuming shared connectors
→ The takeaway

You don’t pick one instead of the other. Function calling is how a model requests an action; MCP is how you standardize and share the tools it can request — turning one-off integrations (N models × M tools) into a plug-and-play ecosystem (N + M). Learn function calling to understand agents; adopt MCP to scale their reach. Just remember: every tool description an MCP server exposes enters your context, so vet servers like dependencies (see AI Security).

04

What MCP actually adds beyond "here's a tool list"

It's tempting to think MCP is just "function calling, but standardized" — send a list of tool schemas, get a structured call back. That undersells it. A hand-rolled function-calling integration typically hard-codes a fixed list of tools into your app at build time: you write the schemas, you write the handlers, and adding a new tool means shipping a code change. MCP instead defines a live discovery protocol — an agent connects to a server and asks "what do you offer?" at connection time, so a server can add, remove, or change its tools without every client needing a code update. The agent adapts to whatever the server currently exposes.

MCP also standardizes two things plain function calling has no opinion on. Resources are addressable pieces of context a server can expose (a file, a database record, a URL) that the client can read into the conversation without that read itself being a "tool call" the model has to decide to make — useful for context an agent should just have, not context it has to think to ask for. Prompts are reusable, server-defined prompt templates a client can surface to a user (think "slash commands" a server ships alongside its tools) — a layer of UX convention plain function calling never touches, since function calling only defines how a MODEL requests an action, not how a HUMAN using the client interacts with a server's capabilities.

→ The trade you're actually making

A hard-coded function-calling integration is simpler to reason about — you can see every tool in your own codebase. MCP's live discovery is more powerful (plug into servers you didn't write, that can evolve independently) but means your agent's actual capabilities at runtime depend on what a server you don't control currently chooses to expose.

05

A worked scenario: adding "search our internal wiki" to an agent

Say your coding assistant needs to search your company's internal wiki. With plain function calling, you write a search_wiki(query: string) function schema, implement the handler (call your wiki's search API, format results), and wire it into your app's system prompt alongside whatever other tools that specific app needs. It's yours: you control the schema exactly, you own the handler code, and nothing changes until you change it. But it only works in this one app — if your team also wants wiki search available in a separate internal Slack bot, you write the integration again.

With MCP, your team instead builds one wiki-search MCP server once, exposing a search_wiki tool (and maybe a wiki_page resource for direct page access) through the standard protocol. The coding assistant connects to it as an MCP client and gets the tool automatically via discovery — no schema hand-written into that app's code. The same server now also plugs into the Slack bot, into a CLI tool, into any other MCP-compliant agent your team builds later, with zero additional integration work per client. The cost is real too: you're now running and maintaining a server process, and every client that connects is trusting whatever that server currently exposes.

→ The pattern generalizes

One bespoke tool, one app, full control you'll never need to share: plain function calling is simpler and often the right call. One capability many current AND future clients should reach without re-integration: MCP's one-server-many-clients model pays for its added complexity.

Your call

Which would you pick?

Three situations. Pick the side you'd actually build — the explanation follows.

A colleague says "we use function calling, so we do not need MCP — they solve the same problem."

Five internal agents each need access to the same wiki search, and today each team hand-wires its own tool definition.

You add an MCP server to an agent. Which mechanism actually makes the model choose to call one of its tools?

Frequently asked

Quick answers

What is the difference between MCP and function calling?

Function calling is a model capability: given tool descriptions, the model emits a structured request (function name + arguments) that your code runs. MCP (Model Context Protocol) is an open standard for how agents discover and connect to servers that provide tools. Function calling is the mechanism; MCP is the standardized plumbing that supplies and reaches the tools.

Does MCP replace function calling?

No — MCP uses function calling. When an agent connects to an MCP server, it discovers that server’s tools and presents them to the model as functions it can call. They operate at different layers and compose together rather than competing.

When should I use MCP instead of plain function calling?

Use MCP when you want tools to be reusable across many agents or apps, want to plug into an ecosystem of existing servers, or need discovery, resources and prompts beyond bare tool calls. For wiring a few bespoke tools into a single app you control, plain function calling is enough.

Is MCP secure?

It requires care. Every tool description an MCP server exposes enters your model’s context, so a malicious server is an injection vector, and servers can change their descriptions after you approve them. Vet and pin MCP servers like software dependencies, and scope credentials per server.

MCP vs Function Calling · Engineering · Vibe Engines · 2026
Finished this one? 0 / 208 Handbooks done

Explore the topic

See this alongside everything else on the same subject — handbooks, system designs, challenges and tools, in one place.

More Handbooks