The MCP starter stack for 2026: five servers most teams need
The MCP starter stack for 2026 is five servers: GitHub (pull requests and CI), Context7 (current library docs), Playwright or Chrome DevTools (the running app), Linear or Atlassian (tickets) and Sentry (production errors). Each installs in Claude Code, Codex and Cursor and passes one read-only check; together they carry a bug from Sentry to a reviewed pull request.
A bug ticket lands. You open Sentry to copy the stack trace, open the ticket to copy the acceptance criteria, paste both into the agent, wait for a fix, click through the app yourself, open the pull request, and paste the link back into the ticket. The agent wrote the code, but you were the integration layer between five systems. This page is for developers and tech leads who want the agent to do that plumbing and hand back evidence instead.
What you get from the MCP starter stack
Section titled “What you get from the MCP starter stack”- The exact
claude mcp addandcodex mcp addlines and the Cursormcp.jsonfor all five servers, checked on Claude Code 2.1.283 and codex-cli 0.157.1. - A read-only acceptance test that proves each server works before you trust it with a real task.
- One workflow that uses all five: bug ticket to Sentry trace to fix to browser check to pull request to ticket comment.
- A rule for when
gh, or a CLI plus a skill, beats an MCP server. - The traps that make a correct-looking setup fail silently.
Which five MCP servers, and why these?
Section titled “Which five MCP servers, and why these?”A server earns its place when, without it, you would paste something from that system into the agent every week. These five cover the loop most product teams run daily. The developer scorecard scores the same thing: a point for each MCP server you actually use in a normal week, up to three, not for what you installed.
| Slot | Server | What the agent gets | Evidence before you adopt it |
|---|---|---|---|
| Code host | GitHub MCP Server (remote, official) | PRs, review threads, Actions logs, issues | It reads the intended repository and cannot touch unrelated ones |
| Library docs | Context7 (Upstash) | Version-specific docs and examples | It returns a page for the library version in your lockfile |
| Running app | Playwright MCP, or Chrome DevTools MCP for performance work | Navigation, clicks, console and network over the accessibility tree | It loads your local app and reports the console without changing data |
| Tickets | Linear or Atlassian Rovo (remote, official) | Acceptance criteria in, status and comments out | It reads the intended project and cannot edit without your approval |
| Production errors | Sentry MCP (remote, official) | Issues, events, stack traces, traces | It retrieves one known issue without changing its state |
Swap slots to match your work. A platform team replaces Playwright with Terraform or Grafana; a data team replaces it with a database server. The top 30 MCP servers page has a stack per team type. The method stays the same: pick from observed weekly tasks, not from a list.
Popularity as of 2026-09-26, from GitHub stars and the install counts on each plugin’s page in the Claude plugin directory (claude.com/plugins): Context7 has ★62.4k and 417,801 plugin installs, Playwright MCP ★37.6k and 319,887, GitHub MCP Server ★33.2k and 319,381, Chrome DevTools MCP ★52.6k and 102,569, Atlassian ★1.1k and 92,289, Linear 48,038 installs, and Sentry MCP ★862 (Sentry’s separate sentry plugin, mainly its skills, has 38,810 installs). Stars measure attention on a repository, not use.
Install the five MCP servers in Claude Code, Codex and Cursor
Section titled “Install the five MCP servers in Claude Code, Codex and Cursor”The server URLs and packages are identical across the three agents; only the command or config file differs. Every server except GitHub uses OAuth (Sentry, Linear, Atlassian) or no auth (Context7 without a key, Playwright locally), so the only secret you set is a GitHub token.
-
Create a fine-grained GitHub token limited to the repositories the agent works on: Contents, Issues and Pull requests read and write, Actions read. Store it in your shell as
GITHUB_PATfrom your secret manager. For the full scope table, see which PAT scopes the GitHub MCP server needs. -
Add the servers with the tab for your agent. Use Linear or Atlassian, not both.
Run in a terminal at the repository root.
-s projectwrites a shareable.mcp.json; the single quotes keep${GITHUB_PAT}as a reference that Claude Code expands at connect time, so the token never lands in the file.Terminal window claude mcp add -s project --transport http github https://api.githubcopilot.com/mcp/ -H 'Authorization: Bearer ${GITHUB_PAT}'claude mcp add -s project --transport http context7 https://mcp.context7.com/mcpclaude mcp add -s project playwright -- npx @playwright/mcp@latest --isolatedclaude mcp add -s project --transport http sentry https://mcp.sentry.dev/mcpclaude mcp add -s project --transport http linear https://mcp.linear.app/mcp# or, for Jira and Confluence:claude mcp add -s project --transport http atlassian https://mcp.atlassian.com/v2/mcpThen start
claudeand run/mcpto sign in to Sentry and Linear or Atlassian (or runclaude mcp login sentryfrom the terminal). Teammates who pull.mcp.jsonsee each server as pending approval until they accept it.Prefer plugins?
claude plugin install github@claude-plugins-official(and the same forcontext7,playwright,linear,atlassian) installs the same server packaged as a plugin; the GitHub, Context7, Playwright and Linear plugins carry no skills (Claude Code 2.1.286). The GitHub plugin reads a fixed variable name,GITHUB_PERSONAL_ACCESS_TOKEN.Run in a terminal.
codex mcp addwrites to your user~/.codex/config.toml. To share the set, commit the same[mcp_servers.*]tables to.codex/config.tomlin the repository (env-var names only, e.g.bearer_token_env_var = "GITHUB_PAT"). Codex loads it once each teammate trusts the project; see Codex MCP setup.Terminal window codex mcp add github --url https://api.githubcopilot.com/mcp/ --bearer-token-env-var GITHUB_PATcodex mcp add context7 --url https://mcp.context7.com/mcpcodex mcp add playwright -- npx @playwright/mcp@latest --isolatedcodex mcp add sentry --url https://mcp.sentry.dev/mcpcodex mcp add linear --url https://mcp.linear.app/mcp# or: codex mcp add atlassian --url https://mcp.atlassian.com/v2/mcpcodex mcp login sentrycodex mcp login linearcodex mcp listshowsBearer tokenin the Auth column for GitHub, and the variable is read when Codex connects. Curated plugins exist too:codex plugin add github@openai-curated(it readsGITHUB_PAT_TOKEN).Save as
.cursor/mcp.jsonin the repository (or~/.cursor/mcp.jsonfor all projects). These shapes come from the vendors’ READMEs; they were not tested in a Cursor binary. Cursor’s docs describe${env:NAME}interpolation for secrets; confirm it in Settings → MCP on your version before you commit the file.{"mcpServers": {"github": {"url": "https://api.githubcopilot.com/mcp/","headers": { "Authorization": "Bearer ${env:GITHUB_PAT}" }},"context7": { "url": "https://mcp.context7.com/mcp" },"playwright": { "command": "npx", "args": ["@playwright/mcp@latest", "--isolated"] },"sentry": { "url": "https://mcp.sentry.dev/mcp" },"linear": { "url": "https://mcp.linear.app/mcp" }}}For Jira and Confluence, replace the
linearentry with"atlassian": { "url": "https://mcp.atlassian.com/v2/mcp" }. Sentry and Linear (or Atlassian) use OAuth; complete the sign-in when Cursor asks for it. -
Pick the browser server for the job. Playwright MCP is the default for functional checks. For performance traces, Lighthouse and heap snapshots, use Chrome DevTools MCP in place of Playwright for that work:
claude mcp add -s project chrome-devtools -- npx chrome-devtools-mcp@latest(use-s userinstead to keep it personal) orcodex mcp add chrome-devtools -- npx chrome-devtools-mcp@latest; in Cursor, add"chrome-devtools": { "command": "npx", "args": ["chrome-devtools-mcp@latest"] }undermcpServers. It sends usage statistics to Google by default; add--no-usage-statisticsto opt out. -
Keep merge out of the agent’s reach. The token can merge if you can, so remove the tool on the client. In Claude Code, add
"deny": ["mcp__github__merge_pull_request"]underpermissionsin.claude/settings.json. If you installed the plugin, the tool ismcp__plugin_github_github__merge_pull_request. Deny both names, or run/mcpto see the exact tool name. In Codex, adddisabled_tools = ["merge_pull_request"]under[mcp_servers.github]. In Cursor, turn off themerge_pull_requesttool for thegithubserver in Settings → MCP (check the toggle on your version; this was not tested in a Cursor binary). Branch protection with a required review is the backstop in every tool.
--isolated gives each Playwright session an in-memory browser profile. A persistent profile can be opened by only one browser at a time, so without it the second agent in a parallel worktree fails to launch.
Prove each MCP server works before you trust it
Section titled “Prove each MCP server works before you trust it”Installed is not working. Before the stack touches a real task, run one benign, read-only query per server and check the evidence: the intended resource, a traceable identifier in the answer, and no side effect. This is the acceptance test for the setup, and it takes one prompt.
Replace http://localhost:3000 with your dev server’s URL and start the server first: Playwright MCP opens pages but does not start your app. A FAIL row points you to the failure table below.
What the stack costs in context
Section titled “What the stack costs in context”Claude Code and Codex both load MCP tool schemas through tool search (on by default in Claude Code, and in Codex since 0.143.0), so five servers do not flood the context window up front. Tool results do: a full Actions log, a 30-item issue list or a page snapshot lands in context. Measure it rather than guess:
- In Claude Code, run
/contextin a fresh session before and after the acceptance test. - For a plugin install,
claude plugin details PLUGIN_NAMEprints its always-on token cost. Measured in September 2026 with Claude Code 2.1.286, thegithub,context7,playwrightandlinearplugins each report~0 tokalways-on, because the command does not count MCP tool schemas. For comparison, plugins that ship skills and hooks range from about 84 to about 41,500 always-on tokens. So for this stack,/contextis the number that matters. - Ask for trimmed results in the prompt: failed log lines only, the first five issues, one page snapshot.
For more ways to cut result size, see reducing MCP token cost.
From Sentry error to merged fix: the five-server workflow
Section titled “From Sentry error to merged fix: the five-server workflow”This is the loop the stack exists for. The agent moves between the five systems; you read the evidence it hands back and approve the pull request.
-
Read the ticket. The agent pulls the acceptance criteria and the linked Sentry issue from Linear or Jira. The criteria are the definition of done.
-
Read the trace. Through Sentry MCP it opens the issue, the latest event and the stack trace, and maps the in-app frames to local files.
-
Reproduce first. It writes a failing test that reproduces the error from the event data, and runs it to show it fails. No reproduction, no fix.
-
Fix against current docs. When the fix touches a library API, it checks Context7 for the version in the lockfile instead of trusting training data.
-
Check the running app. The test now passes; the full suite runs. Then Playwright opens the affected page, repeats the user steps from the Sentry breadcrumbs, and reports the console and network.
-
Open the pull request. It pushes the branch with git, then opens a pull request through GitHub MCP (or
gh pr create) whose body carries the evidence: the Sentry issue link, the failing-then-passing test output, the Playwright console report, and the CI status. -
Report back. It comments the pull request link on the ticket and moves the ticket to In Review, not Done. A person merges.
Replace ENG-1423 with your ticket key. On Jira, the same prompt works through Atlassian Rovo; name the project key instead.
How you verify the result without reading every line
Section titled “How you verify the result without reading every line”You check that the evidence exists and holds, and the repository enforces the rest:
- The reproduction is the oracle. The test fails before the fix and passes after, in the output the agent pasted, and CI runs it again. A fix without a failing test first goes back. See how strong your oracle is.
- Required checks gate the merge. Branch protection makes the CI suite required, so green means the same suite now passes on the pull request.
- The browser check is behaviour, not code. The Playwright report shows the page the user hit now loads with a clean console. For UI changes, ask for a screenshot and attach it.
- Production confirms it. After the release, Sentry shows no new events for that issue. Mark it resolved yourself once it stays quiet through a normal traffic cycle.
- One reviewer signs off on the evidence and the test diff, using the evidence bundle as the checklist. Rollback is a
git revertof one pull request.
When gh beats GitHub MCP, and a CLI plus a skill beats MCP
Section titled “When gh beats GitHub MCP, and a CLI plus a skill beats MCP”MCP is the right layer when the agent must read or change live external state that needs authentication. It is not always the cheapest one. All three agents run shell commands, so a well-known CLI is often enough.
| Job | Better route | Why |
|---|---|---|
| Read one failing CI log | gh run view RUN_ID --log-failed | Fewer tokens than a full log through MCP |
| Open a PR and watch checks | gh pr create, gh pr checks --watch | One command each; the agent already has a shell |
| Reply to review threads one by one, triage 50 issues | GitHub MCP | Thread IDs, pagination and structured results are awkward in gh |
| An agent with no shell (desktop chat, hosted agent) | GitHub MCP | It is the only route |
| Many repetitive browser steps in a long session | @playwright/cli with its skill | Playwright’s README says coding agents “might benefit from using the CLI+SKILLS instead”, because tool schemas and snapshots cost context |
| Current library docs in a shell-capable agent | npx ctx7 setup (Context7’s CLI plus a skill) | Same docs, no MCP server to run |
| Sentry, Linear, Jira data | The vendor’s remote MCP server | OAuth-scoped access that a skill alone cannot provide |
The Playwright route installs with npm install -g @playwright/cli@latest and then playwright-cli install --skills in the workspace. Two other options: agent-browser, a browser skill, and installing and managing skills. Rule of thumb: prefer the CLI when the agent has a shell and the output can be trimmed; prefer MCP when the system needs OAuth, typed results or an organization-wide allowlist.
Add a sixth server without breaking the stack
Section titled “Add a sixth server without breaking the stack”The same selection method covers every server after the first five. Each one widens what a prompt injection can reach, so it has to earn its place.
- Name the recurring task, from the last two weeks of work, and what the server must never do.
- Choose a maintained source: the vendor’s own server or one your team reviewed. Record the owner and version. Registry presence proves identity, not quality.
- Limit credentials and data: one development resource, read-only, unless the task proves a write is needed. See MCP security.
- Run one benign acceptance query and check the evidence: right resource, traceable identifier, no side effect.
- Review the set monthly. Remove servers nobody used, expired endpoints, duplicated capabilities and tokens broader than the job.
What breaks in the MCP starter stack, and how do you recover?
Section titled “What breaks in the MCP starter stack, and how do you recover?”| Symptom | Cause | Recovery |
|---|---|---|
| A server added in Claude Code never connects | The URL was added without --transport http, so Claude Code stored it as a stdio command | claude mcp remove NAME, then add it again with --transport http |
error: unknown option '--url' | --url is a Codex flag | In Claude Code, pass the URL as a positional argument after --transport http |
GitHub returns Bad credentials or 401 | GITHUB_PAT is not set in the shell that launched the agent, or the token expired | Export it, restart the agent from that shell, check the token’s repository list |
| GitHub headers ignored in Codex | headers = {…} is not a Codex key and is dropped without an error | Use bearer_token_env_var, http_headers or env_http_headers |
| Sentry token auth fails on the remote server | The header is Authorization: Sentry-Bearer TOKEN, not Bearer | Prefer OAuth through /mcp or codex mcp login sentry |
| Atlassian connection refused | An old /v1/sse URL, unsupported since 30 June 2026 | Use https://mcp.atlassian.com/v2/mcp |
| Second parallel agent cannot start a browser | A persistent Playwright profile is locked by the first agent | Add --isolated, or give each worktree its own --user-data-dir |
| Playwright cannot reach localhost | The dev server is not running | Start it first; the server drives a browser, not your app |
| Context7 has no docs for a library | Not every library is indexed | Point the agent at the library’s own docs or source, and pin a known ID next time (use library /supabase/supabase) |
| The agent grows slower and picks wrong tools | Overlapping servers (two browser servers, two trackers) compete for the same job | Remove the duplicate; keep one server per slot |
A token shows up in .mcp.json or a transcript | The header was typed with a literal token, or double quotes expanded it | Revoke the token, remove it from Git history, add it back as a ${GITHUB_PAT} reference |
| A ticket or Sentry event tells the agent to do something odd | Ticket text and error payloads are untrusted input and can carry a prompt injection | Keep write tools behind the approval rule, merge out of reach, and turn on GitHub lockdown mode for public repositories; see GitHub MCP in depth for how to enable it |
For connection problems beyond this stack, see MCP connection issues.
Where to go next with the MCP starter stack
Section titled “Where to go next with the MCP starter stack”Start from the MCP overview if the protocol is new to you. To place the stack in your team’s rules, see governance and autonomy and the cross-tool capability map.