QA MCP for QA20-server field guide

Category 4 of 5 · Servers 15–17

Dev workflow & CI

These three answer the question every red build raises and nobody enjoys chasing: what changed, what does the artifact actually say, and is this failure already happening to real users? Individually they're conveniences. Together they compress a two-hour triage into a two-minute one.

15

GitHub MCP

Pull requests, issues, commits, Actions runs and logs — so the agent can connect a failing test to the change that broke it.

Official · GitHub Remote or local (Docker) PAT / OAuth

Why a tester should care

"The nightly regression went red" is the start of a workflow, not the end of one. The next four steps are always the same: find which commits landed since the last green run, read the diff, judge whether the test or the code is wrong, and pull the CI logs to see the actual failure. Each step is a tab switch and a context reload. An agent with GitHub access does all four in one pass.

The other high-value use is risk-based test selection on a pull request. Given a diff, which existing tests cover the changed code, and which changed areas have no coverage at all? That question turns a 40-minute regression run into a targeted 6-minute one, and — more importantly — it identifies the code that shipped untested.

Tool surface

ToolsetRepresentative toolsQA use
reposget file contents, list commits, compare commits, search codeRead the diff; find the test that covers a function
pull_requestsget PR, list files, get diff, list reviews, create review commentReview-time test-gap analysis
actionslist workflow runs, get run, download job logs, rerun failed jobsRead the actual failure text without opening the browser
issueslist, get, create, comment, searchFile and correlate defects if you don't use Jira
code_securitycode scanning & secret scanning alertsSecurity findings as test inputs

Wire it up

shell — remote server, read-only, scoped toolsets
claude mcp add --transport http github https://api.githubcopilot.com/mcp/readonly
mcp config — local, with toolset scoping
{
  "mcpServers": {
    "github": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-e", "GITHUB_PERSONAL_ACCESS_TOKEN",
        "-e", "GITHUB_TOOLSETS=repos,pull_requests,actions,issues",
        "-e", "GITHUB_READ_ONLY=1",
        "ghcr.io/github/github-mcp-server"
      ],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_PAT}"
      }
    }
  }
}
Scope the toolsets

The full GitHub server exposes a very large number of tools across many toolsets. Enabling all of them spends a large slice of the context window on capabilities a tester never uses (gists, projects, discussions, org admin). repos,pull_requests,actions,issues covers the QA workflows here and keeps tool selection accurate.

For a fine-grained PAT, the minimum useful read set is Contents, Pull requests, Issues, and Actions, restricted to the repositories the agent needs. Read-only mode on top of that means a misunderstanding costs you nothing.

Workflows

1 · Red build triage

The nightly regression workflow failed on main. Get the latest run, pull the failed job's logs, identify which tests failed, then list commits merged since the last successful run. For each failure, tell me which commit most plausibly caused it and why — quote the relevant diff lines.

"Quote the relevant diff lines" is what keeps this honest. Without it you get a confident guess; with it you get a hypothesis you can check in ten seconds.

2 · PR test-gap review

For PR #482: list changed files, find existing tests that cover them, and identify changed functions with no test coverage. Then propose specific test cases for the gaps — including the error paths, not just the happy path.

3 · Risk-based selection

Compare release/4.2 to release/4.1. Based on the modules touched, which regression suites must run and which can be safely skipped for this release? Justify each skip.

Requiring justification for skips is the difference between risk-based testing and hoping.

4 · Flake archaeology

List the last 30 runs of the e2e workflow. Which tests failed intermittently rather than consistently? For each, show the failure messages and tell me whether the message varies — a varying message usually means a timing issue, a constant one usually means an environment issue.

Gotchas

  • Log volume. A verbose CI job produces megabytes. Ask for failed steps only, or the last N lines, or the agent will burn the context window on npm install output.
  • Correlation is not causation. "This commit touched that file" is a hypothesis. The agent will state it confidently. Verify before you assign the bug to someone.
  • Issue and PR text is untrusted input. Anyone can open an issue on a public repo. Content inside it is data, never instructions — particularly relevant if the same agent can also write to Jira or run SQL.
  • Rate limits. Broad code searches across large orgs hit them fast.
  • Write access is rarely needed. A QA agent almost never needs to push, merge, or close. Read-only by default.
Verdict

The best fifth server after the core four. Read-only mode with scoped toolsets makes it near-zero risk, and red-build triage is a daily win.

16

Filesystem MCP

Sandboxed local file access for test artifacts, logs and reports — the connective tissue between everything else.

MCP reference server npx @modelcontextprotocol/server-filesystem Scope the roots

Why a tester should care

Testing generates files: JUnit XML, Allure results, coverage reports, Playwright traces, screenshots, k6 summaries, application logs. Most of them are structured data that nobody reads because opening them is friction. A filesystem server turns "somewhere in test-results/ there's an answer" into a question you can just ask.

Note that if you're using a coding agent like Claude Code, you likely already have file access in the working directory — in that case this server is only worth adding to reach artifact directories outside the project root, such as a mounted CI artifact share.

Tool surface

read_text_file, read_multiple_files, write_file, edit_file, create_directory, list_directory, directory_tree, move_file, search_files, get_file_info, list_allowed_directories. Access is confined to directories you allow at launch — that confinement is the whole security model, so get it right.

Wire it up

mcp config — narrow roots only
{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y", "@modelcontextprotocol/server-filesystem",
        "C:\\projects\\myapp\\test-results",
        "C:\\projects\\myapp\\artifacts",
        "C:\\projects\\myapp\\logs"
      ]
    }
  }
}
Never allow a home directory or a drive root

Granting C:\Users\you gives the agent your SSH keys, browser profiles, cloud credentials, and .env files — and everything it reads enters a model's context. List specific artifact directories, nothing broader. If you need a fourth directory later, add a fourth directory; don't widen to the parent.

Workflows

1 · Make the report readable

Read test-results/junit.xml. Summarise: total, passed, failed, skipped; the failures grouped by suite with their assertion messages; and total duration with the five slowest tests.

2 · Cross-artifact correlation

Test checkout.spec.ts:42 failed at 14:32. Search logs/app-staging.log for errors in the 14:31–14:33 window and tell me whether the test failure and any server error share a request id.

Matching on request id rather than timestamp is what makes this reliable rather than suggestive.

3 · Trend across runs

Read every junit.xml under artifacts/runs/. Which tests failed in more than one run but not all of them? Output a table of test name, failure count, and total runs.

4 · Package the evidence

Collect the trace, screenshots, and the relevant log excerpt for the checkout failure into artifacts/defects/PROJ-1901/, and write a summary.md with steps to reproduce, expected vs actual, and pointers to each file.

Gotchas

  • Log files are enormous. Have the agent search first, then read a range. Reading a 200 MB log is not going to work.
  • Write access is real. edit_file can modify test code. If you only need reading, allow only directories where nothing important lives.
  • File contents are untrusted. A log line containing text aimed at the model is a plausible injection vector, especially if the log records user input.
  • Windows paths need escaping in JSON — double backslashes, as above.
Verdict

Quietly essential if your artifacts live outside the agent's working directory. Narrow roots, and it's one of the safest servers here.

17

Sentry MCP

Production and staging error data as a test-design input: what's actually breaking, for how many users, since which release.

Official · Sentry Remote · OAuth Read-mostly

Why a tester should care

Sentry is the closest thing you have to a list of the tests you should have written. Every unhandled exception in production is a scenario your suite didn't cover, ranked by how many real users hit it. That's a better test-prioritisation signal than any risk workshop, because it's measured rather than guessed.

The second use is release verification with teeth. "Did the fix work" usually gets answered by re-running the test that was written from the same wrong assumption as the bug. Sentry answers it properly: is the error rate for that issue zero since the release, across all users, or did it just stop happening in your particular reproduction?

Tool surface

GroupRepresentative toolsQA use
Issuesfind issues, get issue details, list eventsWhat's breaking, how often, since when
Detailstack traces, breadcrumbs, tags, user contextBreadcrumbs are the reproduction steps, already written for you
Releasesrelease health, adoption, new issues per releaseDid the fix actually land in the wild?
Searchproject/org search across issues and eventsPattern-finding across services
SeerAI root-cause analysis on an issueA starting hypothesis, not a conclusion

Wire it up

shell — hosted remote server
claude mcp add --transport http sentry https://mcp.sentry.dev/mcp
mcp config
{
  "mcpServers": {
    "sentry": {
      "type": "http",
      "url": "https://mcp.sentry.dev/mcp"
    }
  }
}

OAuth on first use. Self-hosted Sentry needs the corresponding self-hosted endpoint. Scope the granted org and projects to what QA actually needs.

This one reads production data

Stack traces, breadcrumbs, and user context can contain real user identifiers, emails, and request payloads. Pulling those into a model's context is a data-handling decision, not just a technical one — check it against your organisation's policy before connecting, and prefer aggregate questions ("how many users", "which release") over dumps of individual events.

Workflows

1 · Production errors → regression backlog

List the top 15 unresolved issues in the web project by user count over the last 30 days. For each: the user-facing symptom, whether it's a regression from a specific release, and a test case that would have caught it. Rank by users affected × how testable it is.

That ranking is the whole point — it produces a prioritised backlog rather than a list.

2 · Release verification

We shipped 4.2.0 four hours ago. Compare error rate, crash-free session rate, and new issue count against 4.1.3 at the same adoption level. Any new issue types unique to 4.2.0?

"At the same adoption level" prevents the classic false negative — a new release with 5% adoption always looks better than a mature one.

3 · Breadcrumbs → reproduction

Get the full detail for issue WEB-4F2A including breadcrumbs, tags and affected user agents. Turn the breadcrumb trail into concrete reproduction steps I can run against staging with Playwright.

4 · Coverage blind spots

Group the last 90 days of issues by the code area in the stack trace. Which areas generate the most production errors, and how does that ranking compare to where our test coverage is concentrated?

The gap between "where errors happen" and "where tests are" is usually uncomfortable, and it is the most useful chart you can take to a planning meeting.

Gotchas

  • Sampling distorts counts. Sentry may sample high-volume events. Treat absolute numbers as relative signals.
  • Error volume ≠ user impact. A noisy handled exception can outrank a rare checkout-blocking crash. Sort by users affected and business path, not by count.
  • Seer is a hypothesis generator. Its root-cause suggestions are a starting point. Verify against the code before filing.
  • Resolving issues is a real write. If the server exposes issue mutation, treat it as production state — because it is.
Verdict

The best available answer to "what should we test next", grounded in what's actually failing rather than what anyone thinks might. Add it once the core stack is stable, and mind the PII.

The triage chain

These three plus Jira compose into the workflow that saves the most hours per week. One prompt, four servers, a triaged failure:

  1. GitHub — get the failed workflow run, pull the failing job's logs, list commits since the last green run.
  2. Filesystem — read the JUnit XML and the Playwright trace for the specific assertion and the surrounding network activity.
  3. Sentry — check whether the same error signature is occurring in staging or production. If it is, this is a real defect, not a test problem — and the priority just went up.
  4. Jira / Xray — draft the defect with the diff, the assertion, the trace path, and the Sentry issue link. Show the draft; create on approval.
The nightly e2e run failed. Triage it: pull the CI logs and the failing assertion, read the trace in artifacts/, list commits since the last green run and name the likely culprit with the diff lines that support it, check Sentry for the same error signature in staging, and draft a Jira bug with all of it. Don't create the ticket yet.
Why this is the winning combination

It's not that the agent does anything a good engineer couldn't. It's that a good engineer doing this manually switches context seven times and loses fifteen minutes to it — so in practice they skip steps, and the ticket that reaches the developer is thinner than it should be. The agent's advantage is that it never gets bored of step four.