Skip to content

Which MCP Servers Are Actually Essential for Claude Code?

Problem

I started with 15 MCP servers configured in Claude Code. It felt like the right approach - more tools meant more capabilities, right?

After three months, I realized something was wrong. Claude was slower, context was burning faster, and half my servers never got used. When I checked my actual usage patterns, I found I was only actively using 6 servers. The other 9 were just noise.

The problem: every MCP server you add increases the system prompt size. Claude has to process all those tool definitions before it can even start working. I was paying for tokens I never used.

What I Tried

I went through a systematic cleanup process. Here’s what my configuration looked like before:

claude_desktop_config.json (BEFORE)
{
"mcpServers": {
"filesystem": { "command": "npx", "args": ["-y", "@anthropic-ai/mcp-server-filesystem", "/Users/me/projects"] },
"git": { "command": "uvx", "args": ["mcp-server-git"] },
"github": { "command": "npx", "args": ["-y", "@anthropic-ai/mcp-server-github"] },
"postgres": { "command": "npx", "args": ["-y", "@anthropic-ai/mcp-server-postgres"] },
"puppeteer": { "command": "npx", "args": ["-y", "@anthropic-ai/mcp-server-puppeteer"] },
"memory": { "command": "npx", "args": ["-y", "@anthropic-ai/mcp-server-memory"] },
"sequential-thinking": { "command": "npx", "args": ["-y", "@anthropic-ai/mcp-server-sequential-thinking"] },
"fetch": { "command": "uvx", "args": ["mcp-server-fetch"] },
"brave-search": { "command": "npx", "args": ["-y", "@anthropic-ai/mcp-server-brave-search"] },
"slack": { "command": "npx", "args": ["-y", "@anthropic-ai/mcp-server-slack"] },
"google-calendar": { "command": "npx", "args": ["-y", "@anthropic-ai/mcp-server-google-calendar"] },
"google-maps": { "command": "npx", "args": ["-y", "@anthropic-ai/mcp-server-google-maps"] },
"youtube": { "command": "npx", "args": ["-y", "@anthropic-ai/mcp-server-youtube"] },
"weather": { "command": "npx", "args": ["-y", "@anthropic-ai/mcp-server-weather"] },
"spotify": { "command": "npx", "args": ["-y", "@anthropic-ai/mcp-server-spotify"] }
}
}

That’s 15 servers. Each one adds tool definitions to the system prompt. Each one adds complexity to tool selection.

What Actually Matters

I tracked my usage for two weeks. Here’s what I found:

MCP Server Usage Over 2 Weeks
Server Times Used Notes
─────────────────────────────────────────────
filesystem 847 Built-in, essential
git 412 Built-in, essential
github 156 PRs, issues, reviews
postgres 89 Database queries
memory 34 Context across sessions
puppeteer 12 Web scraping (rare)
sequential-thinking 8 Could use bash instead
fetch 5 Could use bash curl
brave-search 3 Could use gh CLI
slack 0 Never used
google-calendar 0 Never used
google-maps 0 Never used
youtube 0 Never used
weather 0 Never used
spotify 0 Never used

The data was clear. I used 6 servers regularly. The other 9 were dead weight.

My Essential Stack

After cutting the noise, here’s my current configuration:

claude_desktop_config.json (AFTER)
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@anthropic-ai/mcp-server-filesystem", "/Users/me/projects"]
},
"git": {
"command": "uvx",
"args": ["mcp-server-git"]
},
"github": {
"command": "npx",
"args": ["-y", "@anthropic-ai/mcp-server-github"],
"env": {
"GITHUB_TOKEN": "${GITHUB_TOKEN}"
}
},
"postgres": {
"command": "npx",
"args": ["-y", "@anthropic-ai/mcp-server-postgres"],
"env": {
"DATABASE_URL": "${DATABASE_URL}"
}
},
"memory": {
"command": "npx",
"args": ["-y", "@anthropic-ai/mcp-server-memory"]
}
}
}

5 servers total. Down from 15.

Why These 5?

Filesystem and Git - These are built into Claude Code. They handle 80% of my daily work: reading files, writing code, managing branches, viewing diffs. No need for external tools here.

GitHub - I work with pull requests, issues, and code reviews daily. The GitHub MCP server handles these efficiently:

GitHub MCP Tools I Use
- create_pull_request
- list_issues
- get_pull_request
- create_issue_comment
- merge_pull_request

Postgres - My projects use PostgreSQL databases. The MCP server lets Claude query schemas and data directly without me copying and pasting query results.

Memory - I use this for context that persists across sessions. It stores project-specific knowledge, coding preferences, and workflow patterns.

What I Replaced with Bash

Some MCP servers duplicate what bash commands already do well. I removed them and use bash instead:

MCP ServerBash Replacement
fetchcurl or wget
brave-searchgh CLI for GitHub search
sequential-thinkingBuilt-in Claude reasoning

Here’s an example. Instead of using the fetch MCP server:

Using curl instead of fetch MCP
# Claude can run this directly
curl -s "https://api.example.com/data" | jq '.results'

The gh CLI is often better than GitHub MCP for simple operations:

gh CLI vs GitHub MCP
# gh CLI (faster for simple tasks)
gh pr list --state open --author @me
gh issue create --title "Bug" --body "Description"
# GitHub MCP (better for complex operations)
# Use when you need PR reviews, comments, multi-step operations

The Decision Framework

I developed a simple framework for evaluating MCP servers:

Should I add this MCP?
┌─────────────────────────────────────────────────────────┐
│ Should I add this MCP? │
├─────────────────────────────────────────────────────────┤
│ │
│ Do I use this capability DAILY? │
│ │ │
│ ├── NO ──► Don't add. Use bash/script instead. │
│ │ │
│ └── YES ──► Does bash handle it well enough? │
│ │ │
│ ├── YES ──► Use bash. │
│ │ │
│ └── NO ──► Add MCP server. │
│ │
└─────────────────────────────────────────────────────────┘

Daily use is the key criterion. If I only use something weekly or monthly, it doesn’t belong in my MCP config. I can invoke it manually when needed.

Community Insights

I’m not alone in this approach. In discussions with other Claude Code users, the consensus is clear:

“Less is more. Every MCP you add is more tools the agent has to choose from, which can actually slow down decision-making.”

The pattern I see across experienced users:

  1. Start with built-in tools (filesystem, git)
  2. Add 1-2 servers for daily workflow (GitHub, database)
  3. Add memory for cross-session context
  4. Everything else is situational

One user put it well: “I’d rather have 5 tools I use every day than 50 tools I have to think about.”

Common Mistakes

I made these mistakes when I started. Maybe you’re making them too:

Mistake 1: Adding servers “just in case”

Wrong approach
// DON'T: Add servers you might need someday
"youtube": { "command": "..." }, // I don't work with YouTube
"spotify": { "command": "..." }, // I don't need music control
"weather": { "command": "..." } // I can check weather in browser

Mistake 2: Duplicating built-in capabilities

Wrong approach
// DON'T: Use external tools for built-in functionality
"web-search": { "command": "..." } // Claude has WebSearch tool
"bash-runner": { "command": "..." } // Claude has Bash tool

Mistake 3: Ignoring context costs

Every MCP server adds tools to Claude’s system prompt. When I loaded 15 servers, Claude had to process dozens of tool definitions before starting work. This burns context tokens and can slow down responses.

Mistake 4: Not measuring actual usage

I assumed I used all my servers. When I actually measured, 60% were never touched. Measurement revealed the truth.

How to Audit Your Setup

Run this process to find your dead weight:

Step 1: Enable logging

Enable Claude Code logging
# macOS
export CLAUDE_DEBUG=1
claude
# Watch for MCP tool invocations in logs
tail -f ~/Library/Logs/Claude/claude.log | grep "mcp_tool"

Step 2: Track for 1-2 weeks

Note which MCP tools Claude actually invokes. I kept a simple text file:

mcp-usage-log.txt
2026-03-10: filesystem(12), git(8), github(3)
2026-03-11: filesystem(15), git(4), postgres(2)
2026-03-12: filesystem(9), git(11), memory(2)
...

Step 3: Calculate usage rates

Usage Summary
filesystem: 847 uses (essential)
git: 412 uses (essential)
github: 156 uses (keep)
postgres: 89 uses (keep)
memory: 34 uses (keep)
spotify: 0 uses (remove)
youtube: 0 uses (remove)

Step 4: Remove unused servers

Edit your config, remove the zeros, restart Claude.

The Result

My configuration is now lean and focused:

Before vs After
Before After Improvement
───────────────────────────────────────────────────
Servers: 15 5 -67%
Tool definitions: ~120 ~40 -67%
Context overhead: High Low Significant
Decision speed: Slower Faster Noticeable

The biggest improvement isn’t token savings - it’s decision clarity. With fewer tools, Claude makes faster, more confident choices about which tool to use.

Summary

In this post, I showed how I reduced my MCP server configuration from 15 to 5 based on actual usage data. The key insight: most users only need 2-4 servers for their daily workflow. Built-in filesystem and git servers handle 80% of work. Add 1-2 specialized servers for your domain (GitHub, database, memory) and stop there.

Every MCP server costs context tokens and adds cognitive overhead. Use the daily-use test: if you don’t use a capability daily, don’t add it to your config. Bash scripts and one-off tools handle occasional needs without cluttering your workflow.

Final Words + More Resources

My intention with this article was to help others share my knowledge and experience. If you want to contact me, you can contact by email: Email me

Here are also the most important links from this article along with some further resources that will help you in this scope:

Oh, and if you found these resources useful, don’t forget to support me by starring the repo on GitHub!

Comments