MCP Tool Bloat, Permission Purgatory, and the $400 Loop


I’ve spent most of the last week living inside OpenCode, and if there’s one thing I’ve learned, it’s that the “Model Context Protocol” (MCP) is both a godsend and a token-eating monster. We’re moving fast into agentic workflows, but we’re hitting a wall: Tool Bloat.

The MCP Handshake Tax

When you connect an MCP server, it doesn’t just “exist.” The host app has to inject the entire JSON-RPC schema into the model’s context. I’ve seen handshakes for complex database tools eat 50k tokens before I even finish my first prompt. This “token tax” is real—it kills reasoning depth and makes models prone to “choice paralysis.”

Skills vs. Tools

In OpenCode, I’ve been leaning harder on Skills (those .md guidance layers) rather than raw execution tools.

  • Tools: Preloaded, verbose, and static.
  • Skills: Lazy-loaded. The agent only pulls the procedural recipe when it actually needs it.
    If you’re seeing your context window evaporate, move your logic to SKILL.md files.

The Permission Surface Area

The permissions you set (allow, ask, deny) do more than just gatekeep—they prune the context.

  • Allow: The model sees the tool and plans around it.
  • Ask: The model sees it but knows it needs a “Mother May I” step.
  • Deny: The tool is surgically removed from the context.
    Pro-tip: If a tool is marked deny, the agent stops trying to use it in its planning phase, saving you from “I can’t do that” loops.

Model Limits: GPT-5-mini is Not a Power User

I’ve been testing GPT-5-mini, and you have to be careful. While the flagship models can juggle hundreds of tools, the “mini” variants often hit a hard limit (around 128 tools) and just crash with a Tool limit exceeded error. If you’re using mini models, you must prune your MCP servers or it simply won’t load.

Crush vs. OpenCode

Apps like Crush handle this differently. While OpenCode is a collaborative powerhouse with its subagent system (Oracle, Sage, etc.), Crush is built in Go and uses LSP (Language Server Protocol) for structural awareness. It feels faster and more stable for single-threaded precision, whereas OpenCode is where I go when I need a whole team of agents to refactor a codebase.

The $400 Doom Loop

Learn from my mistakes: I accidentally triggered a “doom loop” with Claude Opus 4.5. A misunderstood error message caused the agent to recursively query its own history and re-run bash commands. With a 200k+ context being re-injected every turn, I managed to run up a $400 bill before I caught it. Always use “ask” permissions for bash and edit.

Mobile Autonomy: Pi in Termux

The craziest thing I got working this week? The Pi agent (shittycodingagent) running on my phone via Termux.

  • pkg install nodejs
  • npm install -g @mariozechner/pi-coding-agent
    It’s insane to have a full coding agent with clipboard access and filesystem control running in a mobile terminal. I can literally refactor code while I’m out and about.

Updates to the Site

I’ve updated a few things on the main site:

Stay agentic, but watch your tokens.
— jelloeater


Reply:
Mastodon Bluesky Email
Prev
Yazi CLI Rant
Yazi CLI Rant

Comments




Kudos: