Is MCP Dead? What the CLI Backlash Gets Right โ and Wrong
Nikhil Tiwari
MCP Playground
๐ TL;DR
- The backlash started with Eric Holmes' post "MCP is dead. Long live the CLI", which hit the top of Hacker News with 400+ points.
- His five complaints: context cost, debuggability, composability, auth friction, operational overhead. Three still land. Two were addressed in the 2026-07-28 spec.
- Thoughtworks put naive API-to-MCP conversion in the Hold ring of their Technology Radar. That is the real target โ thin REST wrappers, not the protocol.
- CLI wins when three things are all true: the agent has a shell, a good CLI already exists, and the user is a developer on their own machine.
- MCP wins the moment any one of those is false โ remote users, non-shell runtimes, enterprise audit, or more than one client.
- The ecosystem is not shrinking. PulseMCP listed 22,311 servers in July 2026, and Tier 1 SDKs are near half a billion downloads a month.
Someone asks me "is MCP dead" roughly once a week now. Usually right after they read a thread telling them to delete their servers.
The short answer: no. The longer answer is more useful, because the critics are right about a specific failure mode that a lot of teams shipped in 2025.
I run a tool that connects to other people's MCP servers all day. I see the good ones and the ones that should have been a shell script.
If the protocol itself is new to you, start with my guide to the Model Context Protocol โ this post assumes you already know what a tool call is.
This post walks the actual argument, scores each complaint honestly, and gives you a table for deciding which layer your next integration belongs on.
I am not going to defend the protocol on principle. Some of the servers I connect to genuinely should not exist.
Where the "MCP Is Dead" Argument Came From
On 28 February 2026, Eric Holmes published "MCP is dead. Long live the CLI." It went straight to the top of Hacker News.
His thesis was not that agents should stop using tools. It was that LLMs are already excellent at using the command line.
Models know git. They know kubectl, docker, aws, jq. That knowledge came free with pretraining.
So when you wrap an existing CLI in an MCP server, he argues, you pay protocol cost to re-teach the model something it already knew.
The thread hit 400+ points and nearly 300 comments. Pieter Levels called MCP "just as useless of an idea as llms.txt."
Then Thoughtworks put naive API-to-MCP conversion in the Hold ring of their Technology Radar. That is the sharpest version of the critique.
โ ๏ธ Read the Hold ring carefully
Thoughtworks did not put MCP in Hold. They put naive API-to-MCP conversion in Hold โ auto-generating one tool per REST endpoint and calling it an integration. That is a design failure, not a protocol failure.
The Five Complaints, Scored Honestly
Holmes made five distinct arguments. They do not all age the same way, so I scored each one against the current spec.
| Complaint | Still fair in Sept 2026? | Why |
|---|---|---|
| Context cost | Yes | Most clients still load every tool schema up front. Progressive discovery is roadmap, not spec. |
| Composability | Yes | You cannot pipe a tool result into jq. Filtering has to be built into the server. |
| Debuggability | Partly | Stateless requests are now replayable with curl. Tooling closed most of this gap. |
| Auth friction | Largely fixed | CIMD replaced Dynamic Client Registration as the preferred path, plus issuer validation. |
| Operational overhead | Largely fixed | The stateless core removed sessions. A server is now a normal HTTP workload. |
Context cost is the one that still hurts
This is the strongest complaint and nobody has solved it yet. Connect eight servers with fifteen tools each and your context is gone before the first message.
Clients load names, descriptions and full input schemas into the system prompt at session start. Whether the agent uses them or not.
The August roadmap lists progressive tool discovery as a priority. It is not in a shipped spec revision yet.
Until it is, the fix is discipline. Fewer tools, tighter descriptions, and measuring what you actually send.
Composability is a real architectural loss
A CLI returns text you can pipe. terraform state list | grep aws_instance costs you nothing in context.
An MCP tool returns a result that lands whole in the conversation. Either you dump 40KB of Terraform state into the window, or you build filtering into the server.
Holmes is right that this is a genuine tradeoff. Structured results buy you schema safety and cost you Unix pipes.
What the 2026-07-28 Spec Actually Fixed
Two of the five complaints were about operations, and the July 2026 revision went straight at them.
The stateless protocol core removed the initialize handshake and the Mcp-Session-Id header entirely.
Each request now carries its own protocol version, client identity and capabilities in _meta. No shared state between requests.
That kills the "MCP servers are stateful things you have to babysit" argument. A 2026-spec server is a stateless HTTP workload behind any load balancer.
Auth got the same treatment. RFC 9207 issuer validation landed as SEP-2468, issuer-bound client credentials as SEP-2352.
Dynamic Client Registration was formally deprecated in favour of Client ID Metadata Documents. Fewer registration round trips, less token churn.
There is also Multi Round-Trip Requests (SEP-2322), which replaced server-initiated requests. A server returns resultType: "input_required" and the client retries with answers.
That is how elicitation and mid-call confirmation now work without a persistent stream. If you are still on the old revision, my stateless migration guide covers the mechanics.
Worth noting: a lot of the "MCP is bloated" takes are describing the 2025-03-26 or 2025-11-25 revision. The complaints about sessions, sticky routing and SSE streams are accurate โ for a spec that is no longer current.
Where the CLI Genuinely Wins
I want to be blunt here, because pretending otherwise is how you end up shipping a server nobody uses.
If a good CLI already exists and your agent has a shell, use the CLI. Wrapping gh in an MCP server is usually a waste of everyone's time.
Three conditions have to hold for the CLI to be the better answer:
- The agent has shell access. Claude Code, Codex and Cursor do. A web chat app does not.
- A mature CLI already exists with stable flags and machine-readable output.
- The user is a developer on their own machine, already authenticated through their normal profile.
When all three are true the CLI wins on every axis. Zero context cost, real pipes, existing credentials, trivial debugging.
The model already knows the tool. You add nothing by putting JSON-RPC in front of it.
Four Places a CLI Cannot Go
Now the other direction. Break any one of those three conditions and the CLI stops being an option at all.
1. The client has no shell
Claude's web and desktop apps, ChatGPT, and every consumer agent connect over HTTP. There is no terminal to run kubectl in.
This is the case Holmes' post does not cover, and it is most of the market. Remote MCP exists precisely because the caller is not sitting at a shell.
2. Enterprise auth and audit
Giving an agent your AWS profile means giving it everything your profile can do. There is no scope in between.
MCP puts a server between the agent and the system. You get per-tool scopes, an audit trail, and a place to deny a call.
As one rebuttal put it: not giving an AI agent unrestricted root on enterprise systems is not obstruction, it is a CISO doing their job.
3. More than one client needs the same tools
A CLI wrapper is per-agent glue. An MCP server is written once and consumed by every client that speaks the protocol.
This is the same argument that beat per-provider function calling. I unpacked it in MCP vs function calling vs REST APIs.
4. There is no CLI
Your internal ticketing system does not ship a CLI. Neither does your warehouse, your feature flag service, or that 2014 SOAP endpoint.
"Just write a good CLI first" is real advice, but it is a second project. Sometimes the MCP server is the cheapest honest interface you can build.
Not sure whether your server earns its context budget?
Connect it in the browser, see every tool schema a model actually receives, and count the tokens before you ship.
The Numbers Behind "Dead"
Declarations of death should survive contact with a download counter. These do not.
22,311
Servers listed on PulseMCP as of July 2026
~500M
Monthly downloads across Tier 1 SDKs
1B+
All-time downloads, TypeScript and Python SDKs each
Dec 2025
Donated to the Linux Foundation's Agentic AI Foundation
Governance is the part people skip. MCP is no longer an Anthropic project โ it sits under the Agentic AI Foundation with Anthropic, OpenAI, Google, Microsoft and AWS at the table.
Protocols with that shape of backing do not die from a Hacker News thread. They get boring, which is the goal.
Which One Should You Ship?
Here is the table I actually use. Find your row, ship that thing, stop reading threads.
| Your situation | Ship this |
|---|---|
| Coding agent, mature CLI exists, dev's own machine | CLI โ plus a Skill if the agent needs process knowledge |
| Web or desktop chat client, no shell | Remote MCP server, Streamable HTTP, 2026-07-28 |
| Internal system, needs scoped access and audit | MCP server with OAuth and per-tool scopes |
| Three or more clients need the same tools | MCP server โ write once, reuse everywhere |
| One app, one provider, you own every tool | Plain function calling โ MCP is pure overhead here |
| Agent knows the tools, just not your process | Agent Skill โ no server needed at all |
Notice that two of six rows say "not MCP". That is the honest read of the backlash โ not that the protocol failed, but that it got applied to rows it never fit.
If the Skills row is new to you, I compared all four layers in Agent Skills vs MCP vs function calling vs A2A.
Does Your MCP Server Deserve to Exist?
Five questions. If you answer no to the first three, delete the server and write a CLI.
- Can a client without a shell reach this? If every consumer has a terminal, you may not need a server.
- Does it enforce a scope the raw credentials do not? A pass-through wrapper adds risk, not safety.
- Will more than one client use it? One consumer means you built glue, not an integration.
- Are the tools task-shaped, not endpoint-shaped? One tool per REST route is the Hold-ring anti-pattern.
- Do you know its token cost? If you cannot state the schema size, you cannot defend it.
Question four is where most servers fail. Forty CRUD tools is a generated API client, not an agent interface.
Collapse them into the handful of tasks a user actually asks for. Tool descriptions matter more than tool count โ see why tool description quality decides tool selection.
Question five is measurable in about a minute. Connect the server, look at the schemas the model receives, and count them.
Then run the same prompt against a real model and watch which tool it picks. That is the only test that settles the argument for your server.
Settle the argument with evidence, not threads
Run your server against a real model, see every tool call, and check it for tool poisoning and over-broad scopes while you are there.
The Verdict
MCP is not dead. It got sorted.
The use cases that never needed it are moving to CLIs and Skills, which is healthy. The use cases that genuinely need a protocol are quietly shipping one.
What died is the 2025 reflex of wrapping every API in a server because the tooling made it easy.
If your server survives the five questions above, ignore the thread. If it does not, the thread did you a favour.
And if it survives, make it findable. Publishing a .well-known Server Card is the cheapest way to get listed by registries and client install dialogs.
FAQ
Is MCP dead in 2026?+
Should I use a CLI instead of an MCP server?+
What did Thoughtworks actually put in the Hold ring?+
Did the 2026-07-28 spec answer the MCP criticism?+
Why do MCP servers use so much context?+
Can I pipe MCP tool output like CLI output?+
Written by Nikhil Tiwari
15+ years in product development. AI enthusiast building developer tools that make complex technologies accessible to everyone.
Free MCP Tools (no install)
Build, compare & ship MCP agents
Connect any MCP server, run evals on it, compare 60+ models side-by-side, deploy hosted servers, and save reusable agents you can export as an API โ all in your browser.