"MCP is dead."
Is it though?
The context-bloat complaint was real and big names piled on. Then it quietly got fixed. The protocol isn't dead — it's evolving.
Context bloat was real.
Connect MCP servers and every tool definition loads into the window up front — used or not.
Gone before the model reads a single thing — 3 servers, ~40 tools (GitHub, Slack, Sentry). — Apideck
The model already learned the CLI.
gh, psql, aws — straight from man pages and StackOverflow. Same lookup, wildly different price.
# CLI: a couple hundred tokens total. # nothing preloaded, the model knows this. gh issue view 1234 \ --json title,state,assignees # MCP for the same lookup: the call is # tiny — but the server's tool defs sit # in context up front, used or not.
It already got fixed.
The agent browses tools as files and loads only what it needs. Data stays in the sandbox; only the result returns.
Per Anthropic's own engineering blog. Cloudflare hit the same idea independently — Code Mode.
It was never MCP vs CLI.
A real CLI exists and the model already knows it. Lightest, fully composable, debugs in the terminal.
Repeatable multi-step workflows. Loaded only when invoked — not every turn.
Web-only services, teams needing shared auth & permission scoping, or prod DBs where a server blocks a stray DROP TABLE.
From "load everything" to "fetch on demand."
The naive "load everything up front" version of MCP is dying — and that's healthy.
Load only what you need, when you need it. The headline is clickbait — the protocol isn't dead, it's evolving.
Published two ways.
Same artifact, two doors — an MCP and a CLI for the exact same job. Proof that it isn't a side to pick.
# one command, model already knows it dropthis publish mcp-is-dead.html \ --title "MCP is dead?" --json
// typed tool call, no CLI on the box dropthis_publish({ content: "<deck html>", title: "MCP is dead?" })
Pick per job, not per side