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.
Related posts
Start Here: Understanding MCP
New to the Model Context Protocol? These are the pieces worth reading, in the order that makes sense…
What Can You Actually Do with an MCP Server?
"MCP lets AI use your tools" is true and tells you nothing. Here are the six things people…
GetMCP 1.5.0 — Your Mailbox, as MCP Tools
Every GetMCP release so far has been about turning APIs into MCP tools. 1.5.0 does something different: it…
[…] you want the background first, start with what MCP actually is, or how it differs from the API you already have. When you’re ready to build, GetMCP turns an API into a working MCP server without writing […]