Best MCP Servers for Claude Code for Indie Hackers (Tested, with Setup Commands)

Short answer: for a solo Next.js + Supabase + Stripe app, you usually need five MCP servers, not fifty: Playwright for the browser, GitHub for PRs and issues, Supabase for the database, Context7 when docs go stale, and Sentry once real users hit errors. Add Stripe only when you are touching billing. Keep the list short. Every connected server loads tool names into context, which is the same tax covered in how to reduce Claude Code token usage.

Last updated: October 15, 2026. Grounded in the Claude Code MCP quickstart, Claude Code MCP reference, Playwright MCP, Supabase MCP, and Context7 client setup.

Most “best MCP servers” posts are directories. Useful for browsing. Useless when your context window is already crowded with a fat CLAUDE.md, three open files, and a half-finished migration. Indie hackers do not need every connector in the Anthropic Directory. You need a short stack that matches one product: repo, database, browser, current docs, and production errors.

This guide is that stack. Every install command below matches official docs as of October 2026. Where I say “skip,” I mean skip for a weekend MVP, not forever.

Do you even need MCP? (context cost)

MCP is worth it when you are copying the same data into chat over and over: a PR diff, a Supabase table schema, a failed Stripe webhook, a Sentry stack trace. It is not worth it when the built-in tools already cover the job (read a file, run a test, edit code).

Claude Code’s own docs are blunt: each connected server takes space in the context window because tool names and server instructions load into the session. That is why /mcp and claude mcp list matter more than “install everything.” If a server sits connected and unused, remove it with claude mcp remove <name>.

A practical rule I use:

  1. Start with zero project MCP servers.
  2. Add a server the first time you paste the same external data twice in one day.
  3. Prefer remote HTTP + OAuth over local npx when both exist (less install drift, credentials stay out of committed files).
  4. Cap the active list at 5–6 for a solo SaaS. If you need a seventh, disable one first from /mcp.

If token pressure is already the pain, fix CLAUDE.md and MCP hygiene before adding more servers.

My minimal stack for a solo SaaS

#ServerWhy it earns a slotSkip when
1PlaywrightClick through your own UI after a changePure API / CLI product with no browser
2GitHubPRs, issues, reviews without tab-switchingYou never open PRs (solo local-only)
3SupabaseSchema, policies, and project ops for the default indie stackYou are not on Supabase
4Context7Up-to-date library docs instead of training cutoffsYou already paste official docs links
5SentryReal error context after launchPre-launch, no production traffic
6Stripe (optional)Billing and webhook debuggingYou have not wired payments yet

Optional starter for learning the flow: the official claude-code-docs HTTP server needs no auth and is perfect as your first successful claude mcp add. Remove it once you know the workflow.

Each server: what it does, install command, when to skip

Run these in your shell, not inside an existing claude chat. Default scope is local (this project only, private to you). Use --scope user for all projects, or --scope project to write .mcp.json for the repo.

1. Playwright (local browser)

Gives Claude a real browser: navigate, click, read the page. Official Claude Code quickstart uses this as the local stdio example. Needs Node.js (Playwright’s own docs say Node 20+).

claude mcp add playwright -- npx -y @playwright/mcp@latest

Verify:

claude mcp list

First run can fail while npx downloads the package. Wait and list again. Then in a session:

Use playwright to open http://localhost:3000 and tell me the page title

Skip when: you ship APIs only, or you already drive the browser with a dedicated test suite and never ask the agent to “check the UI.”

Pitfall: forgetting the -- separator. Everything after -- is the server command. Without it, Claude Code may eat Playwright’s flags as its own options.

2. GitHub (remote HTTP + PAT)

Official Claude Code example for PR review and issues. Uses GitHub’s remote MCP endpoint and a personal access token header.

claude mcp add --transport http github https://api.githubcopilot.com/mcp/ \
  --header "Authorization: Bearer YOUR_GITHUB_PAT"

Replace YOUR_GITHUB_PAT with a fine-grained token scoped to the repos you actually work on. claude mcp add saves config without validating the token, so a placeholder “works” until /mcp shows a failed connection (often HTTP 401).

Useful prompts once connected:

Review PR #456 and suggest improvements
Show me all open PRs assigned to me

Skip when: you push straight to main on a private toy repo and never use issues or PRs. Add it the day you open your first review.

Pitfall: pasting a token with a trailing newline. Claude Code warns about hidden whitespace in headers.Authorization. Re-add the server cleanly if auth fails mysteriously.

3. Supabase (remote HTTP + OAuth)

If your product is Next.js + Supabase, this is the highest-leverage server after Playwright. Official docs:

claude mcp add --scope project --transport http supabase "https://mcp.supabase.com/mcp"

Then authenticate from a normal terminal session:

claude

Inside the session, run /mcp, select supabase, choose Authenticate, and finish in the browser.

For local CLI projects, Supabase also exposes http://localhost:54321/mcp. For CI or locked-down setups, their docs show project_ref + Authorization: Bearer patterns. Prefer OAuth for day-to-day laptop work so secrets stay out of git.

Skip when: your backend is Postgres-on-Railway, Firebase, or something else. Do not force Supabase MCP onto a non-Supabase stack.

Pitfall: pointing MCP at production with write tools enabled. Prefer a staging project, or tighten the URL with read_only=true / project_ref= as documented by Supabase when you only need inspect-and-suggest.

4. Context7 (current library docs)

Stops the agent from inventing last year’s Next.js or Stripe API. Remote HTTP form (from Context7’s client docs):

claude mcp add --scope user --header "Authorization: Bearer YOUR_API_KEY" \
  --transport http context7 https://mcp.context7.com/mcp

Or local stdio:

claude mcp add --scope user context7 -- npx -y @upstash/context7-mcp --api-key YOUR_API_KEY

Skip when: you already paste official doc links, or you rarely leave your own codebase. Context7 earns its slot on greenfield features (“add Resend,” “upgrade Stripe Checkout”) where stale training data burns hours.

5. Sentry (remote HTTP + OAuth)

Official quickstart pattern for OAuth services:

claude mcp add --transport http sentry https://mcp.sentry.dev/mcp

claude mcp list should show Needs authentication until you run /mcp → Authenticate.

Skip when: you have no production errors yet. Add it the week after soft launch, not during the first scaffold.

6. Stripe (optional, billing weekends)

Claude Code’s scope docs use Stripe as the HTTP example:

claude mcp add --transport http stripe https://mcp.stripe.com

Complete any sign-in the server requires via /mcp. Pair this with the webhook and price-id checks in the vibe-coded app security checklist. MCP does not replace signature verification on the raw body.

Skip when: you are still on “coming soon” pricing. Add it when Checkout and webhooks are real.

Bonus: claude-code-docs (zero-friction first win)

claude mcp add --transport http claude-code-docs https://code.claude.com/docs/mcp

No auth. Great for learning claude mcp list and for asking Claude about Claude Code itself. Remove it later if you want the context back.

Config file and scopes explained (mcp.json)

Three scopes, two files (from the official quickstart):

ScopeFileWho sees it
local (default)~/.claude.json under this projectOnly you, only this project
project.mcp.json at repo rootEveryone who clones the repo
user~/.claude.json top-level mcpServersOnly you, all projects

A shareable project file looks like this (docs + Playwright from the official guide, plus Supabase for the indie stack):

{
  "mcpServers": {
    "claude-code-docs": {
      "type": "http",
      "url": "https://code.claude.com/docs/mcp"
    },
    "playwright": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@playwright/mcp@latest"]
    },
    "supabase": {
      "type": "http",
      "url": "https://mcp.supabase.com/mcp"
    }
  }
}

Rules that bite people:

  1. A remote entry with url but no "type": "http" is treated as stdio and skipped.
  2. Project .mcp.json servers need your approval the first time. A clone cannot auto-approve itself.
  3. Use ${VAR} / ${VAR:-default} for secrets in committed files. Do not paste PATs into .mcp.json.
  4. Restart the Claude Code session after hand-editing .mcp.json. It reads the file at startup.
  5. Same server name in multiple scopes: local wins, then project, then user. Fields are not merged.

Recommended split for a solo founder:

  • Playwright + Supabase + Stripe → project .mcp.json (shared with your future self / contractor)
  • GitHub PAT / Context7 API key → local or user scope with ${GITHUB_PAT} style env expansion, never committed plaintext
  • Sentry → user or local until the product is live

Troubleshooting common errors

Match the status from claude mcp list or /mcp:

StatusWhat to do
ConnectedDone. Ask Claude to use the server by name once to confirm.
Needs authentication/mcp → select server → Authenticate (or claude mcp login <name>).
Pending approvalStart claude in the project and approve the .mcp.json server.
Failed to connectCheck URL/command. For HTTP, curl -I the endpoint. For stdio, run the npx command yourself.
No MCP servers configuredYou added the server in a different directory (local scope is per project). Re-add or use --scope user.

Other fixes that show up constantly:

  • Raise startup timeout for slow first npx downloads: MCP_TIMEOUT=60000 claude
  • Reset bad project approvals: claude mcp reset-project-choices
  • Remove and re-add when whitespace or a bad header poisons auth
  • Cap noisy output if a server dumps huge payloads: MAX_MCP_OUTPUT_TOKENS (default max is 25k tokens per Claude Code docs)

FAQ

How many MCP servers should a solo developer run?

Five is a healthy ceiling for day-to-day coding. Six if Stripe is active. Directories with twenty servers look impressive and quietly tax every session.

Should I put secrets in .mcp.json?

No. Commit non-secret shape only. Put tokens in environment variables and reference them with ${VAR}. Prefer OAuth (/mcp Authenticate) when the server supports it.

Do MCP servers work the same in Cursor and Claude Code?

The protocol is the same; the install command and config file path differ. This article uses Claude Code’s claude mcp add and .mcp.json paths. If you also use Cursor (see Claude Code vs Codex vs Cursor), mirror only the servers you actually need in both places, not your entire directory dump.

MCP vs Skills vs a fatter CLAUDE.md?

Use CLAUDE.md for durable project rules. Use MCP when Claude must call an external system. Use Skills when you have a repeatable workflow that does not need a live API. Mixing all three without pruning is how context dies.

What is the fastest way to verify a new server?

claude mcp list
claude mcp get <name>

Then one concrete prompt that can only succeed through that server (open a URL with Playwright, list your Sentry projects, describe a Supabase table). If Claude answers from memory instead, name the server in the prompt once.

Further reading

Leave a Comment