BuildPulse MCP server: 9 tools for flaky tests
A narrow connector for flaky-test triage, why the tool count changed between releases, and what the tools do not cover.
Checked 1 September 2026 · from The BuildPulse repository and source, npm and the server's own tools/list response
One of 91 guides to monitoring and developer tools. Each covers what an AI coding agent can get out of the tool through MCP, the protocol that lets the agent query the tool directly.
Summary
BuildPulse publishes a deliberately narrow MCP server. The 0.1.7 package, published 14 September 2026, registers 9 tools, and every one reads.
The five from 0.1.5 cover the flaky inventory, a repository flakiness score, a coverage percentage, one test's failure history and the recent CI submissions. The four added after 0.1.5 list organizations and repositories, return one submission's test results, and aggregate recent failures.
On 0.1.5, measured 24 August 2026, the five definitions cost 686 to 1,463 tokens, or 0.3% to 0.7% of a 200,000-token window. The 0.1.7 list adds four tools and longer descriptions, so it costs more.
Three tools describe a fixed fourteen-day window, so an answer is about the last fourteen days rather than about all history. get_recent_failures reads the last 10 submissions by default.
What is the BuildPulse MCP server?
It is BuildPulse's server for the Model Context Protocol. BuildPulse tracks flaky and disruptive tests across CI runs, so a connected agent can tell a real regression from a known flake.
The core tools follow one workflow. list_recent_submissions shows which CI runs uploaded results, get_repo_flakiness gives a health score, find_flaky_tests lists the offenders and get_test_history shows one test's recent failures with build URLs and commit hashes.
The 0.1.7 additions fill the gaps around that workflow. list_my_organizations and list_repositories find the right scope, get_submission_test_results opens one CI run, and get_recent_failures lists every test that failed in recent runs.
get_repo_coverage is the odd one out. It returns the coverage percentage from the most recent coverage report rather than anything about flakiness.
BuildPulse's nine tools stay deliberately close to test evidence: inventory, score, coverage, history, CI submissions and recent failures. That narrow focus does not make it an operational, agent-observability or cost connector.
| Part of the work | What BuildPulse has here | Can an agent reach it |
|---|---|---|
| Code, tests & review | Flaky test inventory, coverage, test history | Yes. Core strength, within a fourteen-day window on three of the nine tools |
| CI & release | CI submissions | Partial. list_recent_submissions, get_submission_test_results and get_recent_failures read uploaded CI results; there are no pipeline tools |
| Production observability | None | No metrics, logs or traces from running services |
| Agent observability & evals | None | No traces, evaluations or prompt versioning for your own agents |
| AI cost management | None | No spend data of any kind |
For an agent, that means BuildPulse answers one question well: is this failure new, or is this test always like that. It cannot show the code, the pipeline configuration or the running service, so it is a companion to a repository connector rather than a replacement for one.
What can an AI agent do with BuildPulse?
| Task | Tools | Works | Watch out for |
|---|---|---|---|
| Ask why CI is red | list_recent_submissions get_submission_test_results | Yes | Its own description names this as the first call for that question |
| Take a health snapshot | get_repo_flakiness get_repo_coverage | Yes | Flakiness covers fourteen days; coverage is from the most recent report |
| List the worst offenders | find_flaky_tests | Yes | Two sort orders: BuildPulse's own disruptiveness ranking, which is the default, and recency |
| Check one test's record | get_test_history | Yes | Up to ten events from the last fourteen days, keyed by BuildPulse test ID |
| Get from a flake to the build that failed | get_test_history | Yes | Each event carries the CI build URL and the commit hash |
| List every test that failed recently | get_recent_failures | Yes | Last 10 submissions by default, up to 50, with the flakiness threshold left out |
| See the test code | GitHub | No, separate server | BuildPulse holds outcomes, never source |
| Re-run a failing job | CircleCI, GitHub or Harness | No, separate server | Every tool reads; CI triggers sit in a pipeline connector |
find_flaky_tests returns BuildPulse test IDs, and get_test_history needs one. Running them in that order is the whole workflow.
9 tools registered in 0.1.7, all on by default, all read-only
- Orientation3
list_my_organizationslist_repositorieslist_recent_submissions- Health2
get_repo_flakinessget_repo_coverage- Inventory1
find_flaky_tests- Detail2
get_test_historyget_submission_test_results- Recent failures1
get_recent_failures
Every tool carries readOnlyHint: true, and none writes, triggers a build or changes state. Counted on 6 October 2026 from the mcp-v0.1.7 source, the commit npm 0.1.7 was built from. The 0.1.5 package registered five of them: find_flaky_tests, get_test_history, list_recent_submissions, get_repo_flakiness and get_repo_coverage.
What the tool definitions cost in context
A client that loads every tool definition at the start of a session spends this much context before the first question. Claude Code defers definitions by default through tool search, and loads a tool's definition when the agent needs it. The method below gives the version and date measured.
A context window is the amount of text a model can hold at once. A client that loads every tool definition upfront sends each tool's name, description and input schema to the model when the session starts. That list is charged whether or not a single tool is called.
On 0.1.5, 5 tools cost between 686 and 1,463 tokens, measured 24 August 2026. The 0.1.7 package registers 9 tools with longer descriptions, and its cost is still to be measured.
The 0.1.5 proportions were unremarkable, which is the point. Descriptions averaged 221 characters and schemas 336, so a narrow server with ordinary text cost almost nothing to keep connected.
| Tool set | Tools | Tokens (GPT-5.6, GPT-5.5) | Tokens (GPT-4, GPT-3.5) | Tokens (Claude Haiku 4.5 to Opus 5) | Share of a 200,000-token window |
|---|---|---|---|---|---|
| Every tool on 0.1.5, 24 August 2026 | 5 | 696 to 982 | 686 to 984 | 1,411 to 1,463 | 0.3% to 0.7% |
Encodings: GPT-5.6, GPT-5.5 o200k_base; GPT-4, GPT-3.5 cl100k_base; Claude Haiku 4.5 to Opus 5 count_tokens. Counted 24 August 2026 from tools/list on the released npm package 0.1.5. It was run locally with a placeholder token.
Registration is static, so no BuildPulse account was involved. Figures cover name, description and input schema. The two models in column one share the o200k_base encoding, so they get one count. The spread is formatting, about 43%. Reasoning tokens are output, spent per request. This count is billed as input whenever the client loads it.
The Claude figures are measured rather than encoded. Anthropic publishes no local tokenizer. The definitions were sent to the API's count_tokens endpoint, and a no-tools baseline was subtracted. The range covers two tokenizer generations rather than two serializations. Haiku 4.5 and Opus 4.6 sit at the low end. Opus 5 and Sonnet 5 sit at the high end. The gap between them is a small fraction.
BuildPulse MCP server limits: where answers come back incomplete
Both limits below come from a bounded window that the results themselves do not mention.
The agent says: “This test has never been flaky.” It means not in fourteen days.
find_flaky_tests returns tests that failed intermittently in the last fourteen days, get_repo_flakiness scores the same period, and get_test_history returns up to ten events from it.
None of the results restates the window, so an absence reads as a permanent fact rather than a recent one.
Guard: Require the agent to state the fourteen-day window whenever it reports an absence.
The agent says: “Coverage is at 74%.” That is the most recent report, not a trend.
get_repo_coverage returns the current coverage percentage from the most-recent coverage report. There is no history tool for coverage, unlike for flakiness.
Guard: Have the agent say that a coverage figure comes from one report rather than a period.
The tool count changed between releases.
The published 0.1.5 package registered five tools in its tools/list response, captured on 24 August 2026. The 0.1.7 package, published 14 September 2026, registers nine.
A catalog listing is metadata submitted at publication and is not re-derived from the running server, so it can lag either release.
Guard: Count tools from tools/list on the version you actually run, not from a catalog entry.
How to configure BuildPulse MCP for agents
- 1
Expect a fourteen-day horizon
find_flaky_tests,get_repo_flakinessandget_test_historyall describe that window.get_recent_failurescounts submissions instead, the last 10 by default. - 2
Get the token from the right place
The server's own startup error names the path: the BuildPulse app, then Organization Settings, then API Tokens.
- 3
Pair it with a repository connector
The tools return build URLs and commit hashes, and something else has to open them.
- 4
Expect a small context cost
The five-tool 0.1.5 build measured 686 tokens at the low end. The 0.1.7 build adds four tools, so expect more.
Paste this into your agent’s instructions
Every headline number here is bounded by a fourteen-day window that does not appear in the result. The block makes the agent say so.
When you answer using BuildPulse MCP tools, state: - The repository the numbers cover. - The window. find_flaky_tests, get_repo_flakiness and get_test_history all report the last fourteen days. - Whether a coverage figure came from get_repo_coverage, which reads the most recent report rather than a period. - For get_recent_failures, how many submissions it read. Do not state that data does not exist. State that no results were returned for the repository and window above. Write your answer in ASD-STE100 Simplified Technical English. Use short sentences with one idea in each.
Do you need the MCP server at all?
Yes, during triage. For a weekly review the BuildPulse web application is the better surface, and reading a dashboard costs no context at all.
The connector earns its place inside a failing build. An agent that can ask whether this failure is known, and get a commit hash back, saves the round trip to a browser.
For CI itself, a pipeline connector answers what ran and lets you re-run it. This one only reports on test outcomes.
Connect it during triage. Use the web application for periodic review of the same numbers.
BuildPulse MCP server setup
The package runs with npx and needs one token in BUILDPULSE_TOKEN. Without it the server exits before registering anything.
The startup message names where to find a token, which is unusual and worth using rather than searching the documentation.
Claude Code
One token is the only credential, and the tool list is small.
claude mcp add-json "buildpulse" '{"command":"npx",
"args":["-y","@buildpulse/mcp"],
"env":{"BUILDPULSE_TOKEN":"<your-token>"}}'Cursor
In ~/.cursor/mcp.json. The token is the only credential involved.
{"mcpServers":{"buildpulse":{"command":"npx",
"args":["-y","@buildpulse/mcp"],
"env":{"BUILDPULSE_TOKEN":"<your-token>"}}}}Codex CLI
Codex reads TOML, so the JSON blocks above will not transfer. The token still applies.
[mcp_servers.buildpulse]
command = "npx"
args = ["-y", "@buildpulse/mcp"]
env = { BUILDPULSE_TOKEN = "<your-token>" }Every other client
Each block below is the configuration for one client, with the file path and the key that client expects.
Claude Desktop
macOS ~/Library/Application Support/Claude/claude_desktop_config.json. Windows %APPDATA%\Claude\claude_desktop_config.json. There is no CLI. Edit through Settings, Developer, Edit Config.
Quit and restart fully for changes to load. Paths in args must be absolute. Logs at ~/Library/Logs/Claude/mcp.log.
{"mcpServers":{"buildpulse":{"command":"npx",
"args":["-y","@buildpulse/mcp"],
"env":{"BUILDPULSE_TOKEN":"<your-token>"}}}}Gemini CLI
~/.gemini/settings.json globally, or .gemini/settings.json per project. Key mcpServers. CLI: gemini mcp add.
{"mcpServers":{"buildpulse":{"command":"npx",
"args":["-y","@buildpulse/mcp"],
"env":{"BUILDPULSE_TOKEN":"<your-token>"}}}}VS Code Copilot
.vscode/mcp.json per workspace, or your user profile. CLI: code --add-mcp.
{"servers":{"buildpulse":{"command":"npx",
"args":["-y","@buildpulse/mcp"],
"env":{"BUILDPULSE_TOKEN":"<your-token>"}}}}The key depends on the file. .vscode/mcp.json uses servers. The portable .mcp.json at the project root and ~/.copilot/mcp-config.json use mcpServers. VS Code's docs recommend the portable files for new servers.
Windsurf
~/.codeium/windsurf/mcp_config.json, which is the path Windsurf documents. Key mcpServers, the same JSON shape as Cursor, carrying the same API token.
Zed
~/.config/zed/settings.json, carrying the same API token as the blocks above.
The key is `context_servers`. Zed does not call them MCP servers in config, so searching its settings for mcp finds nothing.
Google Antigravity
~/.gemini/config/mcp_config.json globally, or .agents/mcp_config.json per project. Key mcpServers. There is no CLI. Use the /mcp overlay in the editor. Supports stdio, streamable HTTP, SSE and websocket.
{"mcpServers":{"buildpulse":{"command":"npx",
"args":["-y","@buildpulse/mcp"],
"env":{"BUILDPULSE_TOKEN":"<your-token>"}}}}Amp (Sourcegraph)
~/.config/amp/settings.json or .amp/settings.json, carrying the same API token. The amp mcp CLI covers approve, doctor and oauth.
The key is `amp.mcpServers`, namespaced. A bare mcpServers block is ignored.
Cline
~/.cline/mcp.json per the docs. The source also reads ~/.cline/data/settings/cline_mcp_settings.json. Key mcpServers, standard JSON shape, carrying the same API token. Supports stdio, streamable HTTP and SSE.
Goose (Block)
~/.config/goose/config.yaml, carrying the same API token.
YAML, and servers are called `extensions`. Goose does not use the MCP vocabulary in config at all. Add one interactively with goose configure, or per session with goose session --with-extension.
Kiro (AWS)
.kiro/settings/mcp.json per workspace, or ~/.kiro/settings/mcp.json globally. Key mcpServers, standard JSON shape, carrying the same API token.
Warp
~/.warp/.mcp.json or .warp/.mcp.json. Key mcpServers, standard shape, carrying the same API token. Also addable through the /agent-add-mcp skill.
JetBrains Junie
.junie/mcp/mcp.json per project, or ~/.junie/mcp/mcp.json. Key mcpServers, carrying the same API token. Use /mcp in the CLI to manage.
Roo Code
.roo/mcp.json per project. The global file is mcp_settings.json, opened from the Roo Code MCP settings view with Edit Global MCP. Key mcpServers, carrying the same API token.
Continue
.continue/mcpServers/*.yaml, one file per server, carrying the same API token.
YAML, and `mcpServers` is a list, not an object. Every JSON client keys servers by name. Continue takes an array, so a converted config will not parse.
Trae
.trae/mcp.json per project, or paste into the UI under Raw Config (JSON). Key mcpServers, standard shape, carrying the same API token.
Devin
Devin has no config file to edit. Servers are added through a web form in the settings UI, and Devin's documentation states you do not need to write or paste JSON. The block below is the shape those fields describe, shown for reference. Either route uses the same API token.
Pinned version
Pinning avoids a tool list changing under you between sessions. The token is unchanged.
{"mcpServers":{"buildpulse":{"command":"npx",
"args":["-y","@buildpulse/mcp@0.1.7"],
"env":{"BUILDPULSE_TOKEN":"<your-token>"}}}}Read-only access, permissions and security
BuildPulse exposes test evidence only
All nine tools read. They create, update, delete and trigger nothing.
The token is the whole boundary
There is no scoping inside the server, so what the token can see is what the agent can see.
Results carry links outward
get_test_historyreturns CI build URLs and commit hashes, which points the agent at systems this connector does not cover.The tool list is small enough to audit
Nine names and nine schemas can be read in full before connecting, which is not true of most servers here.
Troubleshooting
- The server exits immediately
BUILDPULSE_TOKENis not set. The server prints the requirement and names the path to a token: the BuildPulse app, Organization Settings, then API Tokens.- A known flaky test is missing
find_flaky_testscovers tests that failed intermittently in the last fourteen days. A test that was quiet for fourteen days is outside the window.- `get_test_history` returns nothing
- It needs a BuildPulse test ID rather than a test name. Run
find_flaky_testsfirst and pass the identifier it returns. - A catalog lists a different tool count
- Check the version. The released 0.1.5 package registered five tools on 24 August 2026. The 0.1.7 package, published 14 September 2026, registers nine.
BuildPulse MCP server: Reference
| Item | Value |
|---|---|
| Status | npm 0.1.7, published 14 September 2026 · repository pushed 20 September 2026 |
| Adoption | 0 stars · 0 forks · 4 releases · repository created 17 May 2026 |
| License | MIT |
| Package | @buildpulse/mcp on npm, binary buildpulse-mcp |
| Auth | BUILDPULSE_TOKEN, required at startup |
| Tools | 9 in 0.1.7, all on by default, all read-only |
| Window | Fourteen days on three tools · last 10 submissions on get_recent_failures |
| Context cost | 686 to 1,463 tokens for the five 0.1.5 tools |
What engineers report
BuildPulse published @buildpulse/mcp to npm on 17 May 2026, released 0.1.7 on 14 September 2026, and pushed the repository on 20 September 2026. It has no stars and little public discussion, so the figures below come from the package and the wire rather than from community reports.
| What was checked | What it shows |
|---|---|
| Stars | 0 |
| Last push | 20 September 2026 |
| Latest release | 0.1.7 on npm, 14 September 2026 |
| License | MIT |
| Tools | 5 returned by tools/list on 0.1.5 · 9 registered in 0.1.7 |
| Average description | 221 characters per tool, on 0.1.5 |
| Average schema size | 336 characters per tool, on 0.1.5 |
Repository facts from the GitHub API and npm, retrieved 6 October 2026. Tool sizes come from the 0.1.5 package's own tools/list response on 24 August 2026. The 0.1.7 tool list comes from its tagged source.
Should you connect an agent to BuildPulse?
Yes. Best for leaving connected permanently, given how small its tool list is.
- Strongest fit
- Teams already uploading test results to BuildPulse who want flake triage without leaving the editor.
- Main advantage
- A small, read-only tool list, with a workflow that runs in two calls.
- Main weakness
- A fourteen-day horizon on the tools that matter, and no way to reach further back.
- Operational risk
- None from the tools themselves. Every one reads, and nothing triggers a build.
From Oodle
One platform for agent traces and infrastructure
Agent traces usually sit in a different product from the rest of your telemetry, so when a slow database makes an agent slow the symptom is in one tool and the cause is in another. Oodle keeps both in one query surface.
See agent observabilityFrequently asked questions
How many tools does the BuildPulse MCP server have?
The 0.1.7 npm package, published 14 September 2026, registers nine read-only tools, all on by default. The 0.1.5 package registered five, counted from its own tools/list response on 24 August 2026.
What do the tool definitions cost?
The five-tool 0.1.5 package cost 686 to 1,463 tokens, or 0.3% to 0.7% of a 200,000-token window. The nine-tool 0.1.7 package costs more and is still to be measured.
How far back can it see?
Fourteen days for flaky tests, repository flakiness and test history. Coverage comes from the most recent report rather than a period.
Can an agent re-run a failing job?
No. Every tool reads. Test history returns the CI build URL, and a pipeline connector is needed to act on it.
Where do I get a token?
The server's own startup message names the path: the BuildPulse app, then Organization Settings, then API Tokens.