kitepod

Home / MCP guides

MCP vs API: The Difference, and When to Use Each

Updated October 31, 2026

An API is how one program talks to a service. MCP (Model Context Protocol) is a standard way for an AI assistant to find out what tools exist and call them, and plenty of MCP servers are a thin layer over an API that already existed. So "MCP vs API" is less a choice between rivals than a question of who's making the call.

The API is for code you wrote. MCP is for a model that decides.

If you know exactly which request to send, call the API. If you want Claude or ChatGPT to work out which request fits what you asked in plain English, give it an MCP server.

MCP vs API side by side

A typical API (REST)MCP
Who calls itCode a developer wroteAn AI app (Claude, ChatGPT, Cursor) on the model's decision
How the caller learns what's possibleA developer reads the docsThe client asks the server with tools/list and gets names, descriptions and input schemas
Message formatWhatever the API defines (often JSON over REST)JSON-RPC 2.0, the same for every server
TransportHTTPstdio for local servers, Streamable HTTP for remote ones
Sign-inAPI keys, passwords, OAuth: it variesOptional; remote servers use OAuth 2.1 per the spec
One integration works inThe app you wrote it forAny MCP client
Same input, same resultYesThe tool call is predictable; the model's choice of call isn't

The row that matters most is the second one. An API assumes a developer already read the docs. An MCP server describes itself to the model every time, so the model can read the menu and order for you.

What an API call looks like

WordPress has had a REST API for years, and since version 5.6 it ships with application passwords for authenticating outside apps. Here's a developer updating a post title:

curl --user "USERNAME:APPLICATION_PASSWORD" \
  -X POST https://example.com/wp-json/wp/v2/posts/42 \
  -d "title=Now open Saturdays"

It's exact and repeatable, and it does nothing on its own. Someone had to know the post ID was 42, know the endpoint, create the password and write the request. That's perfect for a nightly script and useless for "fix the typo in my latest post".

What an MCP call looks like

With MCP, the AI app does the discovering. It asks the server what tools it has (tools/list), and each tool comes back with a name, a description and a JSON Schema for its inputs. When you ask for something, the model picks a tool and the client sends a tools/call request like this:

{
  "jsonrpc": "2.0",
  "id": 3,
  "method": "tools/call",
  "params": {
    "name": "weather_current",
    "arguments": { "location": "San Francisco", "units": "imperial" }
  }
}

That's the example from the MCP docs, trimmed. You never write it. You type "what's the weather in San Francisco?" and the assistant writes it for you.

And under the hood, that weather tool almost certainly calls a weather API. MCP didn't replace the API. It wrapped it in a description a model can read.

MCP vs function calling

If you've used tool use (function calling) in the Claude API, MCP will look familiar, because it's the same idea one level up.

With plain tool use, you define each tool (name, description, input schema) in your API request, Claude returns a tool_use block, and your code runs the function and sends back a tool_result. The tools live in your app.

With MCP, a server publishes the tools once and any MCP client can use them. Anthropic even lets you attach a remote MCP server straight to a Messages API call through its MCP connector (in beta, tool calls only), so you skip writing that loop yourself.

So function calling is how a model asks to use a tool. MCP is how tools get packaged so every app can offer them.

A worked example: the same edit, both ways

The change: a dental practice now opens Saturdays, 8am to 2pm, and that has to go on its WordPress contact page and in the site footer.

The API way. Find the contact page's ID. Create an application password in your WordPress profile. Write a request to /wp-json/wp/v2/pages/<id> with the new content as HTML, and hope nothing on the page was built with a page builder that stores its layout somewhere else. Then work out where your theme keeps the footer, which may not be a page at all. Check the live site by hand.

The MCP way, using Kitepod as the example (a free remote MCP server plus a WordPress plugin). You add https://kitepod.com/mcp to Claude once, sign in, and type:

Ask your assistant

Add our new Saturday hours, 8am to 2pm, to the footer and the contact page, and show me the footer on a preview first.

Claude picks the tools. The footer change is staged on a preview link for you to check. The contact page is edited directly, and like every write it's snapshotted first, so you can undo it for 90 days. Once a change is live, Kitepod loads the page and screenshots it before and after.

Under all of that, Kitepod can call any REST route on the site, as the WordPress user you connected. The WordPress REST API is still doing work underneath. MCP just added the menu, the judgment about which call to make, and in this case a safety layer the raw API doesn't have. There's more on that on the WordPress MCP page.

When to use which

Call the API directly for anything that runs the same way every time: a nightly export, a webhook, a sync between two systems. You want identical output for identical input there, and no model choosing between tools.

Reach for MCP when a person is asking in words and the steps change from one request to the next. Monday it's "fix the typo in the last post", Tuesday it's "which pages have no meta description?" Writing an API script for each of those is slower than asking.

MCP also wins on reach. One server works in Claude, ChatGPT, Cursor and any other MCP client, and a remote one can sign users in with OAuth instead of handing out keys.

And if you run a service, you'll probably end up with both: the API for developers' code, an MCP server for their assistants. The build an MCP server guide covers that path.

Where MCP bites

Tools aren't free in tokens. In the Claude API, every tool's name, description and schema counts as input tokens on each request. A server with dozens of tools costs more per message than one with five well-described ones.

Big responses swamp the conversation, too. An API can return 5 MB of JSON to a script with no harm done. Through MCP, all of it lands in the model's context. Claude Code warns when a tool's output passes 10,000 tokens and caps it at 25,000 by default.

Then there's the model picking the wrong tool. Vague tool descriptions lead to wrong calls. That's a description problem, not a protocol problem, so write them like you're briefing a new hire.

And watch your credentials. The MCP spec forbids a server from accepting tokens that weren't issued for it, or from passing a client's token straight on to another service. If you're wrapping an API, the MCP server holds its own credentials for that API.

Finer points

Is MCP replacing REST APIs?

No. MCP servers usually sit on top of REST APIs. APIs stay the way programs talk to services, and MCP is the way AI assistants get at them.

Is MCP just function calling?

They're related. Function calling is a model asking to run a tool your app defined. MCP is a standard for packaging tools in a server so any AI app can discover and use them without custom code.

Is MCP a REST API?

No. MCP uses JSON-RPC 2.0. Remote servers send it over HTTP, with every message as a POST to a single endpoint, but there are no REST-style resource URLs. Local servers send it over stdio.

Can I turn my existing API into an MCP server?

Yes, and it's a common way MCP servers get built. Each tool calls one or more of your API endpoints. The work is in choosing a small set of useful tools and describing them well.

Do I need an API key to use an MCP server?

Often not. Remote servers built to the spec sign you in with OAuth in your browser, so you never paste a key. Some servers still take a fixed key in a header, and local ones usually read keys from environment variables.

Connect your assistant to WordPress, free

A plugin on your site and one URL in Claude, ChatGPT or Cursor. Unlimited sites and tool calls, staged changes, approvals and a 90-day undo.

Get started free