GetMCP/Blog/General

MCP vs an API: What Actually Changes

InfiWebs · · 5 min read

The most common objection to MCP is a fair one: we already have a REST API — isn’t this the same thing with extra steps?

Underneath, largely yes. An MCP server usually calls the same endpoints your API already exposes. What changes is who is on the other end, and that changes more than it first appears.

An API assumes someone read the docs

Your API is designed for a developer who found your documentation, read the authentication section, understood your object model, and wrote code that calls the right endpoint in the right order. All of that understanding lives in their head and in the code they wrote. Your API doesn’t have to explain itself at runtime, because the explaining already happened.

A model arrives with none of that. It sees a list of tools, their descriptions and their parameter schemas, and decides — in the moment, mid-conversation — which one to call. There is no integration phase where a human works out what you meant.

That single difference drives everything else.

1. Your descriptions become your interface

In a REST API the endpoint path is a label; the meaning lives in your docs. In MCP the description is the contract. It is the entire basis on which a tool gets chosen or ignored.

This is the adjustment most teams underestimate. GET /v2/subscriptions/{id} is a perfectly good endpoint and a poor tool description. “Look up one subscription by its ID; returns the plan, current period end and whether it is set to cancel” is a good tool description — and notice how much of it is about the response, which REST documentation usually relegates to a schema table.

2. Fewer endpoints, not more

A large API is a feature. A large MCP server is a liability. Every extra tool is another candidate the model has to rule out, and the failure mode isn’t an error — it’s a confidently wrong choice.

The instinct to import all 200 endpoints and let the model figure it out produces a server that works in a demo and disappoints in use. The better move is to expose the dozen things people actually ask for, named the way they’d ask.

3. The response shape matters more than the status code

REST clients parse what they’re given; a developer writes code to pick out the three fields they need. A model reads the whole response into its context window, and a 400-field object buries the answer in noise while consuming budget that the rest of the conversation needed.

Trimming responses is one of the highest-leverage things you can do — often the difference between a tool that answers in one call and one that needs three. It’s why GetMCP has response filtering built in: you shape what comes back without touching the upstream API.

4. Errors have to be readable, not just correct

A developer hitting 422 Unprocessable Entity opens your docs. A model hitting the same thing has only the response body to work with. If it says nothing useful, the model apologises to the user and stops.

Errors that name the offending parameter and the expected format turn a dead end into a successful second attempt. This is genuinely new work — most APIs have never needed their errors to be self-teaching.

5. The caller isn’t the user

With an API key, the developer holds the credential and decides what their code does with it. With MCP there’s a model in between, acting on a person’s behalf, choosing actions the person didn’t spell out.

That’s why MCP servers care about things REST APIs rarely surface: which tools are read-only, which are destructive, and which should be switched off entirely. The protocol carries hints for this, and the practical safeguard is exposure — a tool that isn’t enabled can’t be called, however the conversation goes. It’s the reason GetMCP’s mailbox connector ships with everything that sends or deletes mail disabled until you turn it on.

6. Discovery happens at runtime

REST has no standard way to ask “what can you do?” — OpenAPI is a convention, not a protocol feature, and nothing requires a server to serve it. MCP makes discovery part of the protocol: a client connects, asks for the tool list, and gets it.

Practically, that means adding a tool makes it available to every connected client immediately, with no SDK release and no integration work at the other end. It also means your tool list is public to anyone who can connect, which is worth remembering when you name things.

What doesn’t change

Your API. MCP is a layer in front of it, not a replacement for it, and you should not rebuild anything to adopt it. Authentication, rate limits, business logic and permissions stay where they are — an MCP server is a client of your API like any other, and the good ones are thin.

Which also means the honest answer to “do we need one?” is: only if people want to reach your product from a conversation. If nobody’s asking, the API you already have is fine.

Where to go next

If you’re still working out the fundamentals, start with what MCP is. If you’re weighing whether it’s worth your time, what people actually build is the more useful read. And when you’re ready to try it, turning an existing spec into a working server takes about as long as reading this did.

InfiWebs
← All posts
Discussion

One response to “MCP vs an API: What Actually Changes”

Leave a reply

Try GetMCP

Ship MCP for your product, in days.

Install the plugin, import your API, share one URL. Your users will start calling your tools from Claude tonight.