Contents
Figure 1: Function Calling vs Tool Calling: Are They the Same? — three vendors, three phrases, one mechanism
Open three vendors' docs and you will find three phrases for what looks like one feature: "function calling," "tool calling," and "tool use." Then someone mentions MCP, and the vocabulary gets even muddier.
Short answer: for everyday purposes, yes, they mean the same thing. The longer answer explains where the terms differ, where they genuinely do not, and which distinctions deserve your attention. I researched this in October 2026, and numbered brackets like [1] point to the sources at the end. APIs change often, so confirm field names and options in each provider's current docs.
The Short Answer
Function calling and tool calling describe the same core capability: the model outputs a structured, schema-compliant request to call something external, and your code runs it [4]. OpenAI introduced the phrase "function calling," and Anthropic uses "tool use" [4].
OpenAI's own guidance says the company uses "function calling" and "tool calling" interchangeably. Its API parameter is tools, and each tool carries a type of function. The older functions parameter is deprecated [1]. A 2026 cross-provider guide says OpenAI and Google use "function calling" while Anthropic says "tool use" for the same capability [5].
So if a colleague says "tool calling" and you say "function calling," you are talking about the same feature. In my view that is a relief, since the naming drama distracts from the real design questions.
How It Works, Step by Step
The mechanism looks the same everywhere, and the key point surprises many beginners: the model never runs your code. Function calling works as a conversation protocol between your application and the model [1]. You decide which functions to expose, validate every argument, and control execution [1].
- You describe your tools: names, descriptions, and JSON Schema for the arguments.
- You send the user's message along with those tool definitions.
- The model replies with a tool call (a function name and arguments), or with plain text if no tool fits.
- Your code validates the arguments and executes the function.
- You send the result back to the model.
- The model writes the final answer, or requests another tool call.
Here is a provider-neutral sketch of that loop. Field names differ across APIs, so treat it as pseudocode:
messages = [{"role": "user", "content": "What's the weather in Paris?"}]
while True:
reply = llm(messages, tools=TOOLS)
if not reply.tool_calls:
return reply.text
for call in reply.tool_calls:
args = validate(call.arguments, schema_for(call.name))
result = REGISTRY[call.name](**args)
messages.append(tool_result(call.id, result))
SDKs increasingly run this loop for you. Anthropic's Tool Runner, for example, appears in its tool use overview [2], which is worth reading if you would rather not hand-roll the message plumbing.
Where the Terms Differ in Practice
The concept matches across providers. The details do not. These differences matter when you write code.
Schema Field Names
The most visible difference is naming inside the tool definition. OpenAI and Google use parameters to define the argument schema, while Anthropic uses input_schema [4][5]. Here is the same tool in both styles:
// OpenAI-style (Responses API format; formats differ between OpenAI APIs)
{
"type": "function",
"name": "get_weather",
"description": "Get the current weather for a city.",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"]
}
}
// Anthropic-style
{
"name": "get_weather",
"description": "Get the current weather for a city.",
"input_schema": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"]
}
}
Multiple sources note that an MCP tool definition looks almost identical to a function definition, which is not an accident [2].
Tool Choice Controls
Providers let you steer when the model calls tools. OpenAI's tool_choice parameter, for example, supports letting the model decide (auto), preventing tool calls (none), and forcing a call (required) [5]. Other providers offer similar controls with different names, so check the docs for yours.
The Broader Meaning of "Tool"
One source argues that "tool use" is the slightly broader term, because a tool can also be a provider-run service, like web search or code execution, or an MCP server [4]. This distinction matters more than the naming:
- Client-side (custom) tools: your code defines and executes them. This is classic function calling.
- Server-side (built-in) tools: the provider hosts and runs them, such as web search or code execution, so you never write the execution code.
OpenAI's type: "function" marker hints at this split, since it implies other tool types exist [1]. When people say "tool calling" in a broad sense, they often include both kinds. When they say "function calling," they usually mean the custom kind. That is the one place where the terms genuinely drift apart, and it is a convention, not a rule.
Function Calling vs Structured Outputs
People also confuse function calling with structured outputs. They solve different problems:
| Capability | What you ask the model for |
|---|---|
| Function calling | To request an action, with arguments, so your code can run it |
| Structured outputs | To format its answer in a given schema, with no external action |
One guide notes that many agent architectures use both: function calling for tool invocation, and structured outputs for parsing results into a consistent format [1]. If your goal is data extraction with no external action, structured outputs may fit better. If your goal is to let the model trigger operations, use tools. The structured output accuracy guide covers the measurement side.
Function Calling vs MCP
The Model Context Protocol often enters this conversation, and it works at a different layer.
- Function calling is how a model asks for a tool. It is the invocation mechanism [1].
- MCP is a standard for how tools get described, discovered and served across apps and models. It works like a transport layer [1].
An MCP client fetches tool definitions from a server and hands them to the model through function calling. Then it sends the model's chosen call back to the server to run [2]. MCP uses function calling under the hood: the client translates server tools into the model's native format, and the model calls them through its own API [1].
So you do not choose between them. You choose whether to define your tools directly or to expose and consume them through MCP. The MCP versus function calling comparison goes deeper on that decision.
When to Use Which
| Situation | What to build |
|---|---|
| One app, a handful of tools, one model, tight integration with provider features | Native function calling alone [1][3] |
| Tools shared across models or applications, other people's apps using your tools, third-party tools you did not write | MCP [1][2] |
Safety: The Model Proposes, Your Code Disposes
Because the model only suggests calls, your code holds the real control. Use that power:
- Validate every argument against the schema, plus your own business rules.
- Apply least privilege. Give each tool only the permissions it needs.
- Require confirmation for risky actions, like payments, deletions or outbound messages.
- Treat tool results as untrusted input. Content fetched from the web or a document can carry instructions that try to hijack the model, a risk called prompt injection.
- Log every call with arguments, results and the user context.
- Set limits: timeouts, rate limits, and a maximum number of tool-call rounds.
Point 4 is the one teams learn the hard way. A tool that reads a web page is also a tool that reads whatever an attacker put on that web page.
Design Tips for Better Tool Calls
- Write precise descriptions. The model decides which tool to call from your text, so say what each tool does and when to use it.
- Keep schemas tight. Use enums, required fields and clear parameter descriptions.
- Prefer fewer, clearer tools. Too many overlapping tools confuse the model.
- Return helpful errors. A clear error message lets the model correct its own call.
- Test with real prompts, including ambiguous and adversarial ones, and measure tool-call accuracy as part of your evals.
A 2026 comparison cites a single third-party benchmark that ranks providers on function-calling reliability. I am not repeating its numbers, because a single source cannot settle the question. Test the models you are considering on your own tools.
Common Pitfalls
- Assuming the model executes the function. Your application does.
- Skipping argument validation. Models sometimes produce wrong or malformed arguments.
- Mixing up schema field names when switching providers.
parametersandinput_schemaare not interchangeable. - Treating MCP and function calling as rivals. MCP builds on function calling.
- Granting broad permissions. A tool that can do everything will eventually do the wrong thing.
- Ignoring tool results as an attack surface. Retrieved text is input, not instruction.
- Renaming the feature in your own docs. Pick one term for your codebase, note the vendor synonym, and stop relitigating it in reviews.
Quick-Start Checklist
[ ] one vocabulary in your own docs: function calling = tool calling
[ ] six-step loop understood: your code executes, never the model
[ ] tool descriptions say what the tool does AND when to use it
[ ] JSON Schemas tight: enums, required fields, parameter descriptions
[ ] provider field names checked: parameters vs input_schema
[ ] arguments validated against the schema plus business rules
[ ] least privilege per tool, confirmations for irreversible actions
[ ] tool results treated as untrusted input
[ ] timeout, rate limit and max tool-call rounds configured
[ ] tool-call accuracy measured in your evals
[ ] MCP considered when tools must work across apps or models
One Subscription Instead of Five AI Tools
Partner offer
GPTAstra Max: one subscription instead of five AI tools
If you are paying for a chat model, an image model and a video tool separately, GPTAstra bundles them behind one interface with a lifetime licence — the cheapest way to stop tool-hopping while you build.
Affiliate link — we may earn a commission at no extra cost to you.
Building tool-calling agents is easier when the model bill is one line, and that is the only claim this box makes.
Frequently Asked Questions
Are function calling and tool calling the same thing?
For everyday purposes, yes. Both describe the same capability: the model outputs a structured, schema-compliant request to call something external, and your code executes it. OpenAI introduced the phrase function calling and its own guidance uses function calling and tool calling interchangeably; Anthropic calls the same capability tool use. The vocabulary differs by vendor, the mechanism does not.
Does the model run the function, or does my code?
Your code does. The model never executes anything: it returns a tool call containing a function name and arguments, and your application validates the arguments, runs the function and sends the result back. That is why the pattern is described as a conversation protocol between your application and the model. You decide which functions to expose, you validate every argument, and you control execution.
What is the difference between parameters and input_schema?
They are the same idea with different key names. OpenAI and Google define the argument schema under parameters, while Anthropic uses input_schema. The JSON Schema inside is the same object shape. If you switch providers you have to rename the key, and mixing them up produces a tool definition the API rejects. Check your provider's current docs, since OpenAI's formats also differ between its own APIs.
What is the difference between function calling and structured outputs?
Function calling asks the model to request an action with arguments. Structured outputs asks the model to format its answer in a given schema. They solve different problems, and many agent architectures use both: function calling to invoke tools and structured outputs to parse results consistently. If your goal is data extraction with no external action, structured outputs is usually the better fit; if the model should trigger operations, use tools.
Does MCP replace function calling?
No. Function calling is the invocation mechanism; MCP is a standard for how tools get described, discovered and served across apps and models. An MCP client fetches tool definitions from a server, hands them to the model through function calling, then routes the model's chosen call back to the server. So you do not choose between them: you choose whether to define tools directly in your app or expose and consume them through MCP.
Is tool calling broader than function calling?
Slightly, and only by convention. A tool can also be a provider-run service such as web search or code execution, or an MCP server, so tool calling in the broad sense covers both client-side custom tools and server-side built-in ones. Function calling usually means the custom kind, where your code defines and executes the tool. The distinction matters when you compare billing, latency and control, not when you name the feature.
Sources
- [1] Morph, "How Function Calling Works" — terminology, structured outputs, MCP and the deprecated
functionsparameter: morphllm.com/openai-function-calling. The page rate-limited automated requests when I checked, so open it in a browser. - [2] Anthropic: Tool use overview — Tool Runner, the client/server relationship for MCP tools, and the note that an MCP tool definition resembles a function definition.
- [3] OpenAI: Function calling guide — the
toolsparameter,type: "function"markers and current field names. - [4] A cross-vendor terminology write-up attributing "function calling" to OpenAI and Google and "tool use" to Anthropic, and arguing that tool use is the broader term. I could not keep a stable link to it, so treat those attributions as secondary reporting rather than primary sources.
- [5] A 2026 cross-provider guide covering
parametersversusinput_schemaand thetool_choiceoptions. Named here without a link because I could not confirm a stable URL; the same claims appear in [2] and [3].
Field names, parameters and client APIs change between releases, so verify against the installed SDK rather than any article, including this one.
Wrapping Up
Function calling and tool calling name the same mechanism: the model asks, and your code acts. The vocabulary differs by vendor, the schema fields differ by API, and the word "tool" sometimes stretches to cover provider-run services and MCP servers.
So stop arguing about the name. Spend that energy on the parts that matter: clear tool descriptions, strict validation, careful permissions, and tests that tell you whether the model actually picks the right tool. Start with the function calling guide for the mechanics, then read MCP explained when your tools need to travel.
Which of your tools would you still trust if the model chose it on its worst day?