Function calling is the LLM's tool-call vocabulary; MCP is the host to server protocol that delivers tools, resources, and prompts to the LLM in the first place.
Imagine a TV remote and the HDMI cable behind your TV. The remote (function calling) is how you tell the TV which input to switch to. The HDMI cable (MCP) is the standard wire that lets any device, a Blu-ray, a console, a streaming stick, plug into the TV without redesigning the back panel. Function calling is the model saying 'play movie' in a structured shape the host knows how to read. MCP is the standardized port behind the host that lets it talk to any tool server, file server, or prompt server without writing a custom integration per vendor. They live at different layers and play well together.
Concept explanation~2 min read
Everything you need to truly understand this topic: intuition, mechanics, step by step explanation, code, formulas, and worked example. Click to expand.
Concept explanation~2 min read
Everything you need to truly understand this topic: intuition, mechanics, step by step explanation, code, formulas, and worked example. Click to expand.
MCP and function calling are easy to confuse because both involve tools. The common mistake is treating them as alternatives. They're not. They live at different layers of the agent stack and solve different problems.
Function calling answers the question, 'how does the model tell the host it wants to run a tool?' MCP answers a different question, 'how does the host find out what tools, files, and prompts are available in the first place, especially across multiple vendors?'
What function calling actually is
Function calling is a contract between the model and the host runtime. The host puts a tool schema into the prompt, typically as JSON Schema describing the function name, arguments, and return shape. The model emits a structured payload like { name: "search_docs", arguments: { query: "vector index" } } when it decides to call that tool. The host parses the payload, runs the underlying function, and feeds the result back into the next turn.
Function calling is format, not transport. There is no network, no protocol. It's just a convention for how the model serializes intent and how the host deserializes it. OpenAI, Anthropic, Gemini, and Mistral each ship their own slightly different shape, but the idea is identical.
Where it stops short: it says nothing about where the tools come from. Every app shipping function calling in 2023 wrote bespoke wrapper code per integration: the Notion plug-in, the GitHub plug-in, the database plug-in, all hand rolled. That bespoke per app problem is exactly what MCP exists to fix.
Situations where this technique stops working.
2–4 min · Everything important, quickly.
| Concern | Function calling | MCP |
|---|---|---|
| Layer | Model output contract | Host-to-server protocol |
| Defined by | Each model vendor (OpenAI, Anthropic, etc.) | Open spec, vendor-neutral |
| Transport | Inside the prompt and completion | JSON-RPC over stdio or Streamable HTTP |
| Primitives | Tool schemas, tool calls | Tools, resources, prompts |
| Reusable across apps | No, model-specific shape | Yes, one server runs in any host |
Real products, models, and research that use this idea.
- Claude Code ships a built-in MCP client and discovers tools from any registered server at session start.
- The MCP project's reference filesystem server and the vendor-maintained GitHub and Slack servers work as drop-in plug-ins.
What an interviewer would ask next. Try answering before peeking at the approach.
QHow would you handle authentication when an MCP server talks to a private API?
Per-server credentials in the host config; OAuth bearer tokens on the HTTP transport; never let the model see the secret.
Red flags & common mistakes
The phrases that signal junior thinking. Click to expand.
Red flags & common mistakes
The phrases that signal junior thinking. Click to expand.
Treating MCP and function calling as competing standards. They sit at different layers, so the host can speak both at once.
60 second bullets to scan on the way to the call.
Which layer function calling sits at
Which layer MCP sits at
Primary sources. Browse if you want the original framing.
Same topic, related formats. Practice these next.