DEV Community

Allen Tuh
Allen Tuh

Posted on

Why I Switched from MCP to CLI

After months wrestling with bloated context windows and flaky protocol servers, I went back to basics — and my AI coding agent finally started working the way I wanted.


I was the MCP evangelist in my team. I set up the Atlassian MCP server, the Playwright MCP, the Figma MCP and much more. Then I started actually using them with Claude Code on a real project.

I keep hitting the limit on Claude Pro plan with just a few round of prompting. I check the token counter and found out that all the MCP servers have took up almost 40% to 50% of the context window before the agent did a single useful thing!

That was the moment I uninstalled everything and opened a terminal.

The MCP promise vs. the MCP reality

Model Context Protocol arrived in late 2024 with enormous backing. Every major AI provider endorsed it. The pitch was clean: one standard protocol, any AI model, any tool. Build an MCP server for your database and every AI client could query it. No more per-client glue code.

In theory, beautiful. In practice, the seams show quickly.

What actually happens when MCP loads

A standard Atlassian MCP server dumps its entire tool schema into your context window on initialization — all 73 tools, their parameter descriptions, authentication flows, state management instructions. Your agent hasn't done anything yet, and roughly 40% of your context budget is already gone.

The deeper problem is architectural. MCP asks AI models to operate through an abstraction layer they were never trained on. Claude, GPT-4, Gemini — these models have been trained on billions of lines of terminal interactions. Stack Overflow answers, GitHub READMEs, documentation, tutorials — all of it is saturated with shell commands. They know git, gh, docker, kubectl as fluently as a senior engineer who's been at the terminal for a decade.

MCP schemas? Zero training data. The model is improvising every time.

Why CLI wins for developer workflows

Self-documenting by design. Every CLI tool ships with --help and man pages. The agent can explore what a command does, drill into subcommands, and discover options — all without an external schema definition. No MCP server to maintain, no schema to keep in sync.

Composability built over 50 years. Unix pipes. Output routing. Chaining. Parallel execution with && and ||. MCP is designing in 2025–2026 what Unix figured out in the 1970s and spent five decades debugging. CLI composability carries the reliability of a v50 system. MCP composability is v0.1.

LLMs just know this stuff. The model has seen find . -name "*.ts" | xargs grep "import" ten thousand times. It improvises novel combinations because the composability grammar is embedded in its weights. When it hits an error, it knows how to parse stderr, adjust flags, and retry. That fluency simply doesn't exist for MCP tool chains.

"Tool results and definitions can sometimes consume 50,000+ tokens before an agent reads a request... At Anthropic, we've seen tool definitions consume 134K tokens before optimization." - Anthropic Engineering Blog


"Previously, the Projects toolset, as with other now-consolidated toolsets, used a significant portion of the context window for the tools list. As a result, we've reduced token usage by around 23,000 tokens (50%)." - GitHub Changelog


"MCP were a mistake. Bash is better." - Peter Steinberger, creator of OpenClaw


Introducing Sidekick

This brings me to a project I've been using heavily: Sidekick (sdkck). It's an open-source agentic CLI built to give AI coding agents like Claude Code a clean, composable, extensible interface to the tools they need — without the MCP overhead.

GitHub logo hesedcasa / sdkck

Agentic CLI that provides multiple tools via plugins

Sidekick (sdkck)

Agentic CLI that provides multiple tools via plugins

oclif Version Downloads/week

Usage

$ npm install -g sdkck
$ sdkck COMMAND
running command...
$ sdkck (--version)
sdkck/0.4.0 linux-x64 node-v20.20.0
$ sdkck --help [COMMAND]
USAGE
  $ sdkck COMMAND
...
Enter fullscreen mode Exit fullscreen mode

Commands

sdkck commands

List all sdkck commands.

USAGE
  $ sdkck commands [--json] [-c id|plugin|summary|type... | --tree] [--deprecated] [-x | ] [--hidden]
    [--no-truncate | ] [--sort id|plugin|summary|type | ]
FLAGS
  -c, --columns=<option>...  Only show provided columns (comma-separated).
                             <options: id|plugin|summary|type>
  -x, --extended             Show extra columns.
      --deprecated           Show deprecated commands.
      --hidden               Show hidden commands.
      --no-truncate          Do not truncate output.
      --sort=<option>        [default: id] Property to sort

What makes Sidekick interesting isn't just what it does — it's how it fits into AI-first workflows. Because it's a standard CLI, Claude Code and other agents can discover its capabilities naturally:

# Agent discovers available commands
sdkck --help

# Search for specific functionality
sdkck search "create pr"
sdkck search "jira" -d
sdkck search "update issue" --details
Enter fullscreen mode Exit fullscreen mode

The search command is the key insight. Instead of dumping your entire tool catalogue into context, an agent can query for exactly what it needs in the moment. This is context efficiency by design.

Using Sidekick with Claude Code

Here's how to set this up. First, install Sidekick and any plugins your workflow needs:

# Install Sidekick globally
npm install -g sdkck

# Install plugins (community or your own)
sdkck plugins add myplugin
sdkck plugins add someuser/someplugin

# Verify installation
sdkck version
Enter fullscreen mode Exit fullscreen mode

Then document it in your CLAUDE.md at the project root. This is the equivalent of an MCP server config — except it costs zero tokens at load time:

# CLAUDE.md

## Available CLI Tools

sdkck is installed and available. Use it for task and issue management.

### Discovery
sdkck search "<query>"          # find relevant commands
sdkck search "<query>" -d       # detailed help for each result
sdkck --help                     # full command list

### Workflow
Always search before assuming a command exists.
Prefer composing sdkck commands with standard Unix pipes.
Enter fullscreen mode Exit fullscreen mode

When Claude Code encounters a task, it searches first, then acts. Here's what that looks like in practice:

# Claude Code working on a feature branch

# 1. Search for relevant commands
sdkck search "create pr" --details

# 2. Compose with existing tools
gh pr create --title "feat: add auth" --body "$(cat PR_TEMPLATE.md)"

# 3. Chain with other commands naturally
sdkck search "jira" | head -5
Enter fullscreen mode Exit fullscreen mode

Extending Sidekick with plugins
The plugin system is where Sidekick becomes genuinely powerful. You can build and link your own tools for development:

Install a plugin from a github url.
sdkck plugins install https://github.com/someuser/someplugin

# Inspect what got installed
sdkck plugins inspect my-jira-plugin

# List all installed plugins
sdkck plugins

# Keep plugins updated
sdkck plugins update
Enter fullscreen mode Exit fullscreen mode

For other coding agents — Cursor, Copilot, Kiro, OpenClaw — the integration pattern is the same: document Sidekick in whatever context file the agent reads (AGENT.md, .cursorrules, agent instructions), and let the agent discover capabilities through sdkck search rather than preloading schemas.

The honest nuance

I want to be fair here: MCP isn't bad. It has a legitimate use case, and writing it off entirely would be intellectually dishonest.

For 80–90% of developer-facing use cases — building features, running tests, managing git, automating your own workflows — CLI is the faster, cheaper, more reliable path. For multi-tenant products where your agent acts on behalf of customers inside their organizations, MCP's governance model earns its overhead.

The smartest teams in 2026 aren't picking sides. They're using CLI for development workflows and MCP for customer-facing compliance-sensitive features. But if you're a developer automating your own stack, there's no reason to carry MCP's weight.

Getting started

If you want to try this approach today:

Install Sidekick
npm install -g sdkck

# Explore what's available
sdkck commands
sdkck search "anything"

# In your project root
echo "sdkck is available. Use 'sdkck search <query>' to find commands." >> CLAUDE.md
Enter fullscreen mode Exit fullscreen mode

That's it. No JSON config. No SSE server. No schema dumped into your context. Just a tool your agent can pick up and use.

The Unix philosophy — small, composable tools that do one thing well — has proven remarkably durable. Fifty years later, it turns out it's also the best interface we've built for AI agents. Not because we planned it that way. Because we already spent fifty years making it work.

Top comments (0)