AI dev workflow
Dani Reyes6 min read7 views

The MCP Servers I Actually Keep Loaded in Claude Code (2026 Field Reference)

A working reference: the five MCP servers I keep loaded in Claude Code after a year of daily use, the ones I removed, why every server costs context-window tokens, and the exact scope config that keeps the list short.

Minimalist navy illustration of a central hub with four glowing lime-green connector blocks plugged in and three dimmed, unplugged blocks set aside, representing a curated short set of MCP servers.
Minimalist navy illustration of a central hub with four glowing lime-green connector blocks plugged in and three dimmed, unplugged blocks set aside, representing a curated short set of MCP servers.
On this page

Quick answer (July 2026)

After running Claude Code as my daily driver for most of 2026, I keep five MCP servers loaded, not fifteen. The "10 best MCP servers for Claude Code" lists are real and mostly accurate, but they skip the part that decides everything on a working machine: every server you connect spends context-window tokens before you type a single word. Anthropic's own engineering team says it plainly, that agents wired to thousands of tools "need to process hundreds of thousands of tokens before reading a request." So the honest question is not which servers exist. It is which ones earn their tokens. Here is my current set, what each one actually buys me, the ones I removed, and the exact config I use to keep the list short.

The tax nobody prints in the listicle

An MCP server does not cost you anything when it sits idle in a directory. It costs you the moment Claude Code loads it, because every tool that server exposes ships its name, description, and JSON schema into the context window at the start of the session. Ten chatty servers can quietly eat tens of thousands of tokens before your first prompt. Anthropic's engineering write-up on running MCP through code execution shows the extreme version of this: one workflow they measured dropped from 150,000 tokens to 2,000 once the tool definitions stopped being loaded up front, a 98.7% cut. You are not going to hit that on a laptop with five servers, but the direction is the whole point. More servers means a smaller, slower, more distractible working memory for the model, on every single turn.

That is why the "load all 30" screenshots you see going around are a trap, and why the most-shared dev-news thread the week I wrote this was literally someone admitting they loaded every server and walked it back. The skill is subtraction.

How I decide what earns a slot

One rule: a server stays only if I can name a concrete thing it did for me since the last time I looked. Not "it could be useful." Something it actually did. If the answer is a shrug, it goes. That test alone keeps me at five.

The five I actually keep loaded

GitHub GitHub. The one server I would fight to keep. "Open the PR for the branch I just pushed and summarize the failing check" is a real sentence I type most days. Reading issues and cross-repo code search from inside the session, instead of pasting, is the single biggest paste-elimination in my workflow. It earns its tokens before lunch.

PostgreSQL A read-only Postgres server. Pointed at my dev database, never production, and scoped to read-only. It lets me ask "what columns does this table actually have" and "show me a row that reproduces the bug" without exporting a schema dump into the prompt. The read-only scoping is not optional; an agent with write access to a database is a bad night waiting to happen.

Context7 Context7. Pulls the current docs for a library into context on demand. This is my anti-hallucination server: it is the difference between Claude confidently writing a 2023 API signature and it writing the one that shipped last month. I keep this one at user scope so it follows me into every project.

Playwright Playwright. So the agent can drive a real browser and confirm the thing it just built actually renders and clicks, instead of telling me it "should" work. I do not leave it loaded on pure-backend days, which is exactly the kind of on/off discipline the token math rewards.

Sentry Sentry. Loaded only when I am actively firefighting. "Pull the stack and last breadcrumbs for this issue ID" turns a five-tab context-gathering ritual into one line. When the fire is out, it comes back off.

Notice the shape: two are always on (GitHub, Context7), three are situational (Postgres, Playwright, Sentry) and I add or drop them per task. That is not indecision. That is the point.

What I removed, and why

The filesystem server was the first to go. Claude Code already reads and edits files natively; adding a filesystem MCP on top is paying tokens for a capability I already had. I see it on nearly every "essential servers" list and it is redundant in Claude Code specifically.

I removed a second browser/scraper server that overlapped Playwright. Two tools for the same job is double the tool definitions for zero new capability. Pick one.

I dropped a generic fetch server too. On the rare occasion I need a URL's contents, pasting the link and letting Claude Code fetch it is cheaper than keeping a server resident all week. This is the same deletion discipline I apply to the rest of my setup.

None of these were bad servers. They were just servers that were not paying rent.

My actual config

The lever that makes a short list sustainable is scope. Claude Code stores MCP servers at three scopes, and using the right one is what stops the list from creeping (all of this is in the official MCP reference):

  • local (the default): only you, only this project, stored privately in ~/.claude.json. Where experiments live.
  • project: shared with the team through a .mcp.json file at the repo root that you commit. Everyone who clones gets the same servers, after a one-time approval prompt.
  • user: follows you across every project, private to you. This is where I put Context7.

The commands I actually use:

# team-shared, committed to .mcp.json
claude mcp add --transport http --scope project github 

# my personal always-on, every project
claude mcp add --transport http --scope user context7 

# a local stdio server for an experiment
claude mcp add --scope local myserver -- npx some-mcp-server

claude mcp list        # what is loaded right now
claude mcp remove sentry

Two things worth knowing. For a stdio server, the -- separates Claude's own flags from the command it runs; everything after -- is passed to the server untouched. And project servers from a cloned repo sit at ⏸ Pending approval until you open the folder interactively and accept it, which is a deliberate guardrail, not a bug.

The one habit that keeps it honest

Once a month I run claude mcp list and go down it out loud. For each server I answer the same question: what did you do for me since last time? Anything I cannot answer gets claude mcp removed on the spot. It takes two minutes and it is the reason this list is five servers and not the fifteen it would be if I only ever added.

If you are just starting, do not copy my five. Start from one server you have a real, repeated need for, get comfortable wiring your first MCP server, and add the second only when a paste-and-copy chore proves it is worth the tokens. I wrote up what a single server looks like after running one in production for a month if you want the longer arc. Short list, high standard. That is the whole method.

Sources

  • Anthropic Engineering, "Code execution with MCP: building more efficient AI agents," 2026: www.anthropic.com/engineering/code-execution-with-mcp (token-cost figures verified July 14, 2026).
  • Claude Code documentation, "Connect Claude Code to tools via MCP," 2026: code.claude.com/docs/en/mcp (scopes, claude mcp add, approval behavior verified July 14, 2026).
Dani Reyes

Written by

Dani Reyes

Indie developer writing DevMoment from inside the work, on vibe coding, MCP, and weekend builds.

Frequently asked questions

How many MCP servers should I run in Claude Code?

Fewer than you think. Every connected server loads its tool definitions into the context window at session start, so more servers means a smaller, slower working memory on every turn. A practical rule: keep a server only if you can name a concrete thing it did for you since you last checked. In 2026 I run five, two always-on and three situational.

Where is the Claude Code MCP config file?

It depends on scope. Team-shared (project-scoped) servers live in a .mcp.json file at your repository root that you commit to version control. Personal servers (local and user scope) are stored privately in ~/.claude.json. You can inspect what is loaded at any time with 'claude mcp list'.

How do I add an MCP server globally in Claude Code?

Use user scope: 'claude mcp add --scope user '. A user-scoped server follows you across every project on your machine and stays private to you. It is the right home for something like a docs-lookup server you want everywhere.

Do MCP servers slow down Claude Code?

Yes, indirectly. Their tool descriptions and schemas occupy context-window space before you prompt, which increases response time and cost. Anthropic's engineering team notes that agents wired to thousands of tools must process hundreds of thousands of tokens before reading a request. On a laptop with a handful of servers the effect is small but real, which is why disciplined subtraction matters.

What is the difference between local, project, and user scope?

Local (the default) loads only in the current project and stays private to you. Project is shared with your team via a committed .mcp.json and requires a one-time approval prompt per clone. User loads across all your projects but stays private. Choosing the right scope is what stops your server list from creeping over time.

MCP

Wiring an MCP server to my IDE in 30 minutes

I wire an MCP server to my IDE's agent in about thirty minutes, and suddenly it reads my real Postgres schema and project files instead of hallucinating. MCP is just a standard way for agents to call external tools. I pick one server that solves a real annoyance, drop a small JSON config with command, args, and env, restart, and let the agent fetch its own context. That's the whole win.

12 min read66