Protocol
MCP vs OpenAI function calling
OpenAI shipped function calling in June 2023 as part of the Chat Completions API. It defined a contract for the LLM to call developer-defined functions, scoped to the OpenAI API surface. MCP (Anthropic, Nov 2024; donated to the Linux Foundation Agentic AI Foundation in Dec 2025) standardizes the same idea as a model-vendor-neutral wire protocol.
The framing
OpenAI function calling lives inside the Chat Completions request. The developer
passes a functions array (later tools) with JSON Schema
for each function on every request. The model returns a structured
function_call object naming a function and its arguments. The
developer's code runs the function and posts the result back as a tool message
on the next turn. The contract is bound to OpenAI's API.
MCP is a wire protocol over JSON-RPC 2.0. The agent client (Claude Code, Cursor,
Windsurf, ChatGPT Apps, Continue, Cline, Zed) connects to an MCP server, runs
an initialize handshake to negotiate capabilities, calls
tools/list to learn what is available, and then calls
tools/call to invoke a tool. The same server works with any client
that speaks the protocol.
Side by side
| OpenAI function calling | MCP | |
|---|---|---|
| Specification owner | OpenAI (proprietary, versioned with the API) | LF AAIF open specification |
| Wire format | OpenAI Chat Completions JSON shape | JSON-RPC 2.0 |
| Transport | HTTPS to the OpenAI API endpoint | stdio, SSE, or HTTP |
| Discovery | Function schemas embedded in every completion request | initialize handshake plus tools/list |
| Reusability | Per OpenAI-app integration code | One MCP server reused across every MCP client |
| Auth model | Handled by the OpenAI API key on the request | Client-side, via the host process or OAuth on the server |
| Primitives | Functions / tools | Resources, Tools, Prompts (server side); Roots, Sampling, Elicitation (client side) |
| Change signaling | Resend the function list on the next request | JSON-RPC notifications (tools/list_changed) |
Where they overlap
OpenAI shipped MCP support into ChatGPT Apps in late 2025. A single MCP server now plugs into both OpenAI clients and Anthropic clients without per-vendor rewrites. The OpenAI function-calling API still exists for direct API consumers; MCP is the layer the host clients agreed on for plug-in tools. The two contracts coexist in the OpenAI stack.
When to reach for which
Use OpenAI function calling when the code is a direct consumer of the OpenAI Chat Completions or Responses API and there is no intermediary host. The function registry lives in the calling application; no separate server process is needed.
Use MCP when the integration should run inside an agent host (Claude Code, Cursor, Windsurf, ChatGPT Apps, Continue, Cline, Zed) or should be reusable across hosts. Write the server once; every MCP client can connect to it. The protocol also covers capabilities OpenAI function calling does not specify: server-pushed change notifications, parameterized prompts, URI-addressed Resources, and bidirectional negotiation through the initialize handshake.