expectedwrong hindsight

Your CLIs Are Already MCP Servers

Everyone is building elaborate MCP integrations for things that have had authenticated CLI tools for years.

2 min read 365 words #claude-code #mcp #developer-tools #ai-agents #cli
hindsight — nailed it

CLIs are already MCP servers. gh, wrangler, stripe — all authed, battle-tested, documented. The realization that you've been living slightly wrong is still happening to people.

Apparently it's unusual to give Claude Code access to all your CLI tools and just use those — instead of MCP servers — for the majority of agent work. I found this out today, from a tweet, the way you find out most things that make you feel like you've been living slightly wrong.

The logic I've been running on is simple enough that it almost doesn't need explaining. gh is already authenticated. wrangler knows which account you're in. stripe has your API key. railway, fly, vercel, aws — all of them, sitting there, authed, battle-tested, documented well enough that the model already knows how to use them. Claude can run bash. These are bash commands.

Meanwhile there's an entire cottage industry of MCP servers that wrap these exact tools in a JSON-RPC protocol so Claude can talk to them through a different pipe, which — fine, there are reasons, tool call structure is nicer sometimes — but the assumption that MCP is the default sophisticated approach, and bare CLI is the scrappy workaround, has it exactly backwards.

The CLI approach has one property that matters enormously in agentic workflows: it fails loudly in human-readable text. When gh pr create blows up, you get an error message designed for a person to read. When a bespoke MCP server blows up, you get whatever the author remembered to serialize before panicking.

The thing I'd actually push on is the "properly authed" part of the framing. That's doing real work. A Claude instance with access to a half-authenticated tool constellation is not better than MCP — it's just a different kind of bad. But if your shell environment is clean, your credentials are in the right places, and you've thought for five minutes about which tools you actually need in context, you've built something more durable than most MCP setups I've seen demoed.

Not saying MCP is worthless. Some things don't have CLIs. Some CLI interfaces are genuinely too hostile for a model to navigate reliably. But the prior should be: does a good CLI exist? Yes? Start there.

The bar for "add an MCP server" should be higher than "I wanted to avoid learning two flags."