Mind your Context

Mind your Context

WWade Woolwine
February 2, 20263 min read

Nobody wants to admit this: most of us waste nearly half our Claude Code context window before asking it to do anything useful. I learned this when I blew through 65% of my weekly token allowance in one weekend. Sure, I ran concurrent sessions, but the burn rate seemed wildly disproportionate to what I'd accomplished.

I generally don't run a large number of MCP servers, but I do have quite a few sub-agents and skills loaded at any given time. I'm already very disciplined about keeping my CLAUDE.md files lightweight, so that couldn't have been the problem.

When I ran /context to investigate, the results were eye-opening. My 3 MCP servers occupied 25% of my context window. Skills had 7%. Agents another 15%.

Think about what that means. Half my context window before I asked Claude to do anything. I was paying a 50% tax on every request and getting nothing for it.

MCP Servers: From 25% to 0.6%

I wrote the MCP servers myself (SonarQube, GitLab, npm-mcp), so I researched how to reduce context burden without losing functionality. I found an emerging MCP pattern that slashed my context overhead.

Instead of exposing every tool directly, you expose three:

  • Discovery - Lists available tools and descriptions
  • Schema - Returns the full schema for a specific tool
  • Execute - Runs the requested tool

Claude handles this three-tool pattern well. The premise: Claude uses discovery to find the tool most relevant to its task. It calls schema with the tool name to understand how to use it. Then it calls execute.

Tradeoff: three API calls instead of one. Payoff: 96% less context overhead.

Result: 25% → 0.6%. Same functionality. 97% less overhead.

My GitLab MCP has 71 tools. Before, all 71 tool definitions ate context on every request—I rarely needed most of them. Now Claude discovers what it needs when it needs it.

Skills and Agents: From 22% to 0.3%

What most Claude Code users miss: Skills still occupy context window space. Yes, Claude creates a Haiku summary that vastly reduces context cost, but it's not zero.

Agents are lightweight individually, but here's where I got lazy: I dumped all my agents and skills in ~/.claude/ to avoid declaring them per-project. Convenient? Yes. Smart? No.

The fix: I moved my agents and skills to a separate ~/Code directory and wrote a bash utility to enable or disable them per-project using symlinks. Each project uses current artifacts without declaring them in ~/.claude/.

Unexpected benefit: I can version control Agents, Skills, and Slash Commands alongside code. No more wondering which skill version I'm running or losing agents to bad config changes.

Once I finish the main engineering work, I can remove unnecessary agents and skills to save context during UAT's inevitable back-and-forth. When you're debugging edge cases with stakeholders breathing down your neck, every bit of context headroom matters.

Result: Agents dropped from 15% to 0.1%. Skills from 7% to 0.2%.

Bottom Line: 46x Improvement

Total impact:

  • MCP Servers: 25% → 0.6%
  • Agents: 15% → 0.1%
  • Skills: 7% → 0.2%
  • Total: 47% → 0.9%

I went from losing half my context window to losing less than 1%. That's not optimization—that's 46x more usable context per session.

Burning through tokens faster than expected? Stop blaming your prompts. Run /context to see where your overhead hides. The problem isn't your workflow. It's the invisible tax you're paying on every request—and you don't even know it.

I've published the symlink utility and refactored MCP servers on GitHub: Gitlab MCP, SonarQube MCP, and NGINX Proxy Manager MCP. The three-tool MCP pattern is worth adopting for any server with more than 8-10 tools.