Out of the box, Claude Code can read files and run bash. MCP servers are how it learns to drive a browser, navigate code by symbol, and hit your APIs.

Claude Code MCP Servers: Setup Guide + The Best Ones

Sep Gaspari|May 29, 2026|14 min read
Share:

A Claude Code MCP server is the difference between an assistant that can only read your files and run bash, and an agent that can navigate a 50,000-line codebase by symbol, open a real browser to verify a deploy, read clean markdown off any URL, and create a Stripe payment link, all without leaving the terminal. MCP (Model Context Protocol) is the standard that wires those capabilities in.

The setup is mostly a few lines of JSON. But there is one gotcha that quietly breaks more configs than anything else: a remote server's transport type has to match the endpoint it points at. Get that wrong and the server doesn't error, it just isn't there. We'll give that its own section.

This guide covers what an MCP server actually is, how to add a Claude Code MCP server with the right transport, the http-vs-sse mismatch in detail, the five servers worth installing, how to confirm a server is connected, and how MCP turns a single agent into a working team. It's a spoke off our pillar guide on how to use Claude Code.

Want the config ready to copy? Grab the free Claude Code Agent Team Starter Pack — it ships with a working .mcp.json alongside a 5-agent team.

What Is an MCP Server (in Claude Code)?

An MCP server is a small program that exposes a set of tools to Claude Code over the Model Context Protocol. Once it's configured and connected, Claude Code can call those tools the same way it calls its built-in file, bash, and search tools. MCP is the plug; the server is what you plug in.

Out of the box, Claude Code MCP support is what lets the agent reach beyond the repo it was launched in. Each server bundles a related set of capabilities behind one connection. Add a filesystem server and Claude can move assets between projects. Add a browser server and it can click through your deployed site. Add a code-navigation server and it reads functions and references instead of dumping whole files into context.

The two kinds of MCP server

Every server you add falls into one of two categories, and the category decides how you configure it:

  • Local (stdio) servers run on your machine. Claude Code launches them with a command and args (for example npx or uvx). They have no transport type — they talk over standard input/output. Serena, Desktop Commander, and Playwright are local.
  • Remote (HTTP) servers live at a URL. You give Claude Code a url, usually an Authorization header with a key, and a type that names the transport. Jina and Stripe are remote. The type is where the famous gotcha lives.

Why it matters: built-in tools cover files, bash, and search. Everything else — semantic code search, a real browser, web reading, payments — comes from an MCP server. The capability you wish Claude Code had usually already exists as a server; you just have to wire it in.

How to Add an MCP Server

Adding a Claude Code MCP server is two decisions: where the config lives, and (for remote servers) which transport to declare. Get both right and the rest is copy-paste.

Step 1: Pick where the config goes

MCP servers are declared under an mcpServers object. There are three places that object can live:

ScopeFileUse when
One project.mcp.json in repo rootThe server is project-specific. Safe to commit if it holds no keys.
Just you, one project.claude/settings.local.jsonPersonal and gitignored. The right home for API keys.
All your projects~/.claude.json (global)Tools you want everywhere — Serena, Desktop Commander, Playwright.

Step 2: Add the server

A local stdio server is just a command Claude Code runs. Here's Serena, which adds semantic code navigation:

{
  "mcpServers": {
    "serena": {
      "command": "uvx",
      "args": [
        "--from", "git+https://github.com/oraios/serena",
        "serena", "start-mcp-server",
        "--context", "ide-assistant"
      ]
    }
  }
}

A remote server points at a URL, carries a key, and — critically — declares a type. Here's a streamable-HTTP server:

{
  "mcpServers": {
    "jina": {
      "type": "http",
      "url": "https://mcp.jina.ai/",
      "headers": {
        "Authorization": "Bearer YOUR_JINA_API_KEY"
      }
    }
  }
}

Prefer the CLI? You can add either kind without hand-editing JSON, then list what's registered:

# local stdio server
claude mcp add serena -- uvx --from git+https://github.com/oraios/serena \
  serena start-mcp-server --context ide-assistant

# remote http server
claude mcp add-json jina '{"type":"http","url":"https://mcp.jina.ai/",
  "headers":{"Authorization":"Bearer YOUR_JINA_API_KEY"}}'

claude mcp list   # verify what's registered

After any change, fully restart Claude Code. MCP servers load at startup, so an edit made mid-session does nothing until you relaunch.

The http-vs-sse gotcha (read this twice)

This is the single most common reason a remote Claude Code MCP server "won't connect" even though the config looks perfect. Remote servers speak one of two transports, and the type in your config has to match what the endpoint actually serves:

  • Streamable HTTP — the current standard. Use "type": "http". A modern endpoint such as /mcp almost always wants this.
  • SSE (server-sent events) — the older transport, still used by some legacy endpoints. Use "type": "sse".

Point a streamable-HTTP endpoint at sse and it fails silently.

No useful error. The server simply doesn't appear in your tool list. If /mcp shows a remote server as failed or missing and the config "looks right," flip the type — http to sse or sse to http — and restart. That one change resolves the majority of "my MCP won't connect" reports. It is a real bug we hit driving a research server over the wrong transport: the fix was a one-word change from sse to http.

Two rules keep you out of trouble. Don't guess the transport from the URL — an /sse path usually means sse, but check the server's docs. And remember that local command-based servers have no type at all; only remote url servers need one.

Get the MCP Config + a 5-Agent Team, Free

The free Claude Code Agent Team Starter Pack ships with a working .mcp.json, a CLAUDE.md, and five subagents (orchestrator, researcher, implementer, reviewer, shipper) that already know how to use these servers. Drop it into any repo and ship.

Download the Free Agent Team Starter Pack

The Best MCP Servers for Claude Code

You don't need thirty servers. A long list bloats your tool palette and slows startup. This is the focused set we actually use for client work — each one earns its slot by doing a job the built-in tools can't.

ServerWhat it addsTransportKey?
SerenaSemantic code navigation — reads symbols (functions, classes, references) instead of whole files. The biggest token saver on a large repo.Local (uvx)No
Desktop CommanderFilesystem and shell operations, including outside the current repo — move assets, run commands, batch ops across projects.Local (npx)No
PlaywrightReal browser automation — navigate, click, fill forms, screenshot, read the DOM. The honest way to verify a deployed page works.Local (npx)No
JinaResearch — clean markdown from any URL plus web search. For when the answer is online (docs, an API reference, a competitor page).Remote (http)Yes (free tier)
StripePayment operations — create products, prices, and payment links and inspect customers without leaving Claude Code.Remote (http)Yes (restricted)

Serena — the token saver

Serena reads your code as symbols rather than dumping entire files into context. On a large codebase that's the single biggest token reduction available: an agent can find and read just the relevant function instead of a 2,000-line file. It runs locally via uvx, so it needs uv installed, and it indexes the project on first run. If your bills are the problem, pair it with our notes on Claude Code token optimization.

Desktop Commander — files and shell

Desktop Commander handles file and command operations that reach beyond the repo Claude Code was launched in — useful for multi-project workflows, moving assets, and batch operations. It's broad and powerful: it can touch anything your user account can, so keep destructive actions behind a confirmation step. There's a full walkthrough on our Desktop Commander MCP page.

Playwright, Jina, and Stripe

Playwright gives an agent a real browser, which is how a shipper agent confirms the live site actually works instead of assuming. Jina turns any URL into clean markdown and adds web search, which is what a researcher reaches for when the answer is online. Stripe lets you stand up a product or payment link from inside the terminal. Both Jina and Stripe are remote streamable-HTTP servers, so they use type: "http" — and for Stripe, always use a restricted, test-mode key while you build.

Verifying a Server Is Connected

Adding the config is half the job. Confirming the server is actually live is the other half — and the step most people skip, which is why they think MCP "doesn't work."

  • Restart, then run /mcp. This in-session command lists every configured server and whether it connected. A healthy setup shows each one as connected.
  • Run claude mcp list. From the CLI, this shows what's registered and its scope, which helps when a server is defined in one file but you expected another.
  • Exercise a tool. Ask the agent to use the server for something concrete — "use Serena to list the symbols in this file," or "use Playwright to open example.com and tell me the H1." A successful call proves the connection end to end, not just that the config parsed.

Order of operations when something's missing: if a remote server doesn't show in /mcp, check the API key first, then check the type (http vs sse), then restart. For local servers, confirm the runtime is installed (uv for Serena, Node for npx-based servers).

MCP + Subagents: Giving Your Agent Team Real Hands

MCP servers get far more powerful when you combine them with subagents. A subagent runs in its own context window and can be granted its own set of tools — including MCP tools. That lets you build a team where each role has exactly the hands it needs and nothing more.

Map the servers above onto a real five-agent team and the picture is clear:

  • Researcher — read-only. Gets Serena (scan code by symbol) and Jina (read the web). It investigates and cites; it never writes.
  • Implementer — gets Desktop Commander to write files and run commands. It makes the change the researcher scoped.
  • Reviewer — read-only again, Serena only. It checks the change against the plan without the power to "fix" things itself.
  • Shipper — gets Playwright to load the deployed page and verify it before declaring done.

Because each subagent has its own context, a heavy research sweep with Serena and Jina never bloats the implementer's window. This is where MCP stops being a list of toys and becomes the nervous system of an agent team. The same idea drives our Claude Code skills and the standards you set in your CLAUDE.md file. The free agent team starter pack ships this exact wiring.

Troubleshooting MCP Connections

When a Claude Code MCP server misbehaves, the cause is almost always one of a handful of things. Work the list in order.

SymptomLikely causeFix
Remote server missing from /mcp, config looks rightTransport mismatch (http vs sse)Flip the type and restart
Server fails with an auth or 401 errorMissing, wrong, or expired keyRe-check the Authorization header; regenerate the key
Local server never startsRuntime not installedInstall uv (Serena) or Node (npx servers)
Edited config, nothing changedDidn't restartFully restart Claude Code — servers load at startup
Server connected but tools don't fireSubagent lacks the tool grantAdd the MCP tool to that subagent's allowed tools

If you remember nothing else: transport, then key, then restart. That sequence clears the vast majority of connection problems. The http-vs-sse flip alone resolves most "won't connect" cases, because the failure is silent and the config genuinely looks correct.

MCP Best Practices

A few habits keep your MCP setup fast, safe, and predictable.

  • Only load what you use. Every connected server adds tools to the palette and time to startup. Install a server when you have a job for it, not in case you might. Five focused servers beat thirty idle ones.
  • Least privilege per subagent. Read-only roles (researcher, reviewer) should get read-only tools. Don't hand a reviewer the ability to write files — the point of the role is that it can't.
  • Restricted, test-mode keys. For anything that touches money or production (Stripe especially), use a restricted key scoped to what you need, and a test-mode key while building.
  • Keep keys out of git. Put keyed servers in .claude/settings.local.json (gitignored) and keyless ones in the committed config. Or use ${VAR} expansion so a committed file references Bearer ${JINA_API_KEY} while the real value stays in your shell profile or a gitignored .env.
  • Scope deliberately. Global config for tools you want everywhere (Serena, Desktop Commander, Playwright); project config for servers tied to one repo.

Want this done for you?

If you'd rather not hand-wire MCP servers, transports, and a least-privilege agent team, we'll audit your Claude Code setup and configure it for your stack — servers, subagents, and standards — in a single working session.

Book a Claude Code Setup Audit ($750)

Frequently Asked Questions

What is an MCP server in Claude Code?

An MCP (Model Context Protocol) server is a small program that exposes a set of tools to Claude Code over a standard protocol. Once configured, Claude Code can call those tools directly: read and write files, drive a browser, navigate code by symbol, query an API, or create a Stripe payment link. MCP is how you extend Claude Code beyond its built-in file, bash, and search tools.

Where do I configure Claude Code MCP servers?

You add them under an mcpServers key. A project-level .mcp.json in the repo root applies to that project and can be committed without keys. A .claude/settings.local.json file is personal and gitignored, which makes it the safe place for API keys. The global ~/.claude.json file applies the server to every project. You can also run claude mcp add from the CLI instead of editing JSON by hand.

What is the difference between http and sse transport for MCP?

Remote MCP servers speak one of two transports. Streamable HTTP is the current standard and uses type: "http". SSE (server-sent events) is the older transport and uses type: "sse". The type in your config must match what the endpoint actually serves. A streamable-HTTP endpoint like /mcp configured as sse will silently fail to connect, and vice versa.

Why won't my MCP server connect?

The most common cause is a transport mismatch: the type field (http vs sse) does not match the endpoint. Other frequent causes are a missing or expired API key in the Authorization header, a runtime that is not installed (uv for Serena, Node for npx-based servers), or simply not restarting Claude Code after editing the config. MCP servers load at startup, so a restart is required for changes to take effect.

Do local MCP servers need a type field?

No. Command-based local servers like Serena, Desktop Commander, and Playwright run over stdio and are launched with a command and args. They have no type field at all. Only remote servers configured with a url need a type, and that type must be either http or sse to match the endpoint.

What are the best MCP servers for Claude Code?

For real client work, a focused set beats a long list: Serena for semantic code navigation (the biggest token saver), Desktop Commander for filesystem and shell operations, Playwright for browser automation and verification, Jina for clean web reading and research, and Stripe for payment operations. Add a server only when you actually have a job for it.

Can subagents use MCP servers?

Yes. Subagents in Claude Code can call the same MCP tools the main agent can, subject to the tools you grant each one. This is what turns a planning agent into a working team: a read-only researcher uses Serena to scan code, while an implementer uses Desktop Commander to write files and a shipper uses Playwright to verify the deployed page. Granting MCP tools per subagent is how you give your agent team real hands.

How do I keep MCP API keys out of git?

Two clean options. Put keyed servers in .claude/settings.local.json, which is gitignored by default, and keep keyless servers in the committed project config. Or use environment-variable expansion: Claude Code expands ${VAR} in MCP config, so you can commit a header like Bearer ${JINA_API_KEY} and keep the real value in your shell profile or a gitignored .env file.

Go From Wiring Servers to Shipping Features

Configuring MCP servers is the easy part. The leverage is in building an agent team that uses them well — a researcher that reads code by symbol, an implementer that writes the change, a reviewer that catches what a single pass misses, and a shipper that verifies the live page before it calls anything done.

Build With Claude Code is the course that takes you from a working MCP config to a repeatable, agentic workflow you run on real projects. Join the founding waitlist for launch pricing.

Join the Build With Claude Code Waitlist

Related reading:

Last updated: May 2026

Sep Gaspari

Written by

Sep Gaspari

Founder & Digital Marketing Strategist, Zio Advertising | Kelowna, BC

15+ years in digital marketing, Google Ads, and SEO. I've helped businesses across 12+ industries generate qualified leads and grow revenue through data-driven strategies. I don't just run campaigns—I obsess over results, test relentlessly, and treat your budget like it's my own.

Connect on LinkedIn
Zio team member

Got a quick question?

Sep usually replies within a few hours

Or email us at sep@zioadvertising.com