Model Context Protocol server for BuildPulse: faster, cheaper CI runners for GitHub Actions, CircleCI and Semaphore, with Test Intelligence built in. Read runner usage, cost and savings, find out whether an organization is on BuildPulse runners yet, and surface flaky tests, CI run history, failures and coverage in Claude, Cursor, ChatGPT, Cline, Windsurf, Continue, Zed, VS Code Copilot, and any other MCP-aware AI agent.
BuildPulse runners finish jobs about twice as fast at half the cost of
the provider's hosted runners ($0.004 a minute on x64 2 vCPU). Every
organization gets 3,000 free minutes a month, no card required, and Test
Intelligence (flaky-test detection, coverage, CI metrics) is included
with every minute. An organization that has not activated runners can be
pointed at https://buildpulse.io/organizations/{orgId}/runners/setup;
the estimate_runner_savings prompt works out what they would save.
Hosted (recommended) — nothing to install, no API token. Your client opens a browser and you sign in with your BuildPulse account (Google, GitHub, Bitbucket, Apple, or email):
claude mcp add --transport http buildpulse https://mcp.buildpulse.io/mcpClaude.ai, ChatGPT, Cursor, VS Code: add https://mcp.buildpulse.io/mcp
as an HTTP/remote MCP server and complete the sign-in when prompted.
Local stdio — for clients that only spawn a process, or for scripts and CI where a browser sign-in is not possible. This path needs an API token:
BUILDPULSE_TOKEN=bp_... npx -y @buildpulse/mcpSee Authentication for where tokens come from and when you need one.
- "Are we on BuildPulse runners yet? What would they save us?"
- "What did our runners cost last month, and how does that compare to GitHub list price?"
- "Which BuildPulse runner labels can I use in this workflow?"
- "Why is CI red on
web-client? Show me the failing tests from the last run." - "Which tests in
platform-apihave been flakiest this week, and where do they fail?" - "How well tested is
agents? Give me flakiness and coverage." - "Which tests failed in more than one of the last 10 runs of
api?" - "Triage the flaky tests in
frontendand tell me which to quarantine first."
npx -y @buildpulse/mcpOr pin globally:
npm install -g @buildpulse/mcpThe package downloads the matching native binary for your platform on first install. Supported platforms: macOS arm64/x64, Linux arm64/x64, Windows x64.
There are two ways to authenticate, and most people only need the first.
| How you sign in | Needs an API token? | Use it for | |
|---|---|---|---|
Hosted SSO (https://mcp.buildpulse.io/mcp) |
OAuth 2.1: your client opens the BuildPulse login (Google, GitHub, Bitbucket, Apple, or email) and stores a session for you | No | Claude Code, Claude.ai, ChatGPT, Cursor, VS Code, and any client that supports remote MCP servers with OAuth |
| API token | BUILDPULSE_TOKEN=bp_... for stdio, or an Authorization: Bearer bp_... header against the hosted URL |
Yes | Local npx stdio, clients without OAuth support, scripts and CI |
Get a token at https://buildpulse.io → Organization Settings → API
Tokens. Tokens look like bp_<64 hex chars>; the older 40-character
hex tokens still work. A token grants access to the same organizations
your account does.
Hosted snippets sign you in via SSO. Stdio snippets need
BUILDPULSE_TOKEN; replace bp_... with your token.
Hosted (SSO, no token):
claude mcp add --transport http buildpulse https://mcp.buildpulse.io/mcpStdio (token):
claude mcp add buildpulse -e BUILDPULSE_TOKEN=bp_... -- npx -y @buildpulse/mcp~/Library/Application Support/Claude/claude_desktop_config.json
(macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"buildpulse": {
"command": "npx",
"args": ["-y", "@buildpulse/mcp"],
"env": { "BUILDPULSE_TOKEN": "bp_..." }
}
}
}.cursor/mcp.json (per-project) or ~/.cursor/mcp.json (global).
Hosted with SSO (Cursor prompts you to sign in the first time):
{
"mcpServers": {
"buildpulse": {
"url": "https://mcp.buildpulse.io/mcp"
}
}
}To use a token instead of signing in, add
"headers": { "Authorization": "Bearer bp_..." }. For stdio, use the
command / args / env shape from the Claude Desktop snippet.
.vscode/mcp.json. Hosted with SSO (VS Code opens the sign-in when
the server first starts):
{
"servers": {
"buildpulse": {
"type": "http",
"url": "https://mcp.buildpulse.io/mcp"
}
}
}To use a token instead, add "headers": { "Authorization": "Bearer bp_..." }.
For stdio, use "type": "stdio" with the command / args / env
fields from the Claude Desktop snippet.
~/.codeium/windsurf/mcp_config.json — same mcpServers block as
Claude Desktop.
Cline → MCP Servers → Configure → paste the same mcpServers block into
cline_mcp_settings.json.
ChatGPT → Settings → Connectors → Create → URL
https://mcp.buildpulse.io/mcp. ChatGPT completes the SSO sign-in;
no token to paste.
Settings → Connectors → Add custom connector → URL
https://mcp.buildpulse.io/mcp. Sign in when prompted; no token.
Continue, Zed, and anything else MCP-aware takes the same
command / args / env fields. See the
install hub for copy-paste
snippets per client.
Your BuildPulse token may grant access to more than one organization.
Every repo-scoped tool takes an optional organization_id argument (the
org's id UUID, discoverable via list_my_organizations):
- Single-org tokens — omit
organization_id. It auto-defaults to your one organization. Nothing changes; you never need to think about orgs. - Multi-org sessions (
list_my_organizationsreturns 2+ orgs) — you must passorganization_idon every org- or repo-scoped call (get_runner_status,get_runner_usage,get_runner_configs,list_repositories,find_flaky_tests,get_test_history,list_recent_submissions,get_submission_test_results,get_recent_failures,get_repo_flakiness,get_repo_coverage). The org is not auto-selected — omitting it returns an error that lists every accessible organization and its UUID, so the agent can pick the right one and retry. Calllist_my_organizationsfirst to enumerate them.
This avoids silently querying the wrong (often empty) organization and getting confusingly empty results.
| Tool | Purpose |
|---|---|
get_runner_status |
Whether the organization has activated BuildPulse runners, its billing mode, and when it has not, how_to_start (3,000 free minutes a month) with the setup URL. |
get_runner_usage |
Runner jobs, billable minutes, cost before and after free minutes, p50/p90 job duration, queue wait, and the same minutes at GitHub list price with savings_percent, per size and provider; days 1-90 (default 30). The pricing block carries the rate card. |
get_runner_configs |
The runner sizes and runs-on labels (or CircleCI resource class / Semaphore agent type) the organization has configured. |
list_my_organizations |
Enumerate the organizations this token can access; get the id (UUID) to pass as organization_id. |
list_repositories |
List repositories in an organization. |
find_flaky_tests |
Search a repository's flaky test inventory; filter by tags, recency, free-text. |
get_test_history |
Recent disruption events for a specific test. |
list_recent_submissions |
Recent test-result submissions (CI runs) for a repository. |
get_submission_test_results |
Per-test results for one submission (one CI run). |
get_recent_failures |
Tests that failed across the most recent submissions, aggregated by test identity. |
get_repo_flakiness |
Current flakiness % over the last 14 days. -1 means no recent results. |
get_repo_coverage |
Current coverage % from the latest uploaded report. -1 means no report. |
Runner tools are organization-scoped (no repository argument). Every
org- or repo-scoped tool accepts an organization_id argument, required
for multi-org sessions and optional (auto-defaulted) for single-org
tokens. See Organizations above.
Every output that names a test or repo includes a web_url deep-link
back to the BuildPulse web app — the same polish Sentry / Atlassian
use in their MCP responses.
The server also ships five guided prompts (slash-pickable in clients that support them):
/estimate_runner_savings: fetches runner status; with no tenant, estimates CI minutes from recent runs and prices them at BuildPulse versus GitHub list rate (every price read from the API'spricingblock), then points at the setup URL; with a tenant, summarises the last 30 days of usage and savings./triage_flaky_tests/ci_health_check/explain_test_failure/whats_red
| Transport | Binary | Where it goes |
|---|---|---|
| stdio | cmd/mcp |
npm → npx -y @buildpulse/mcp |
| Streamable HTTP | cmd/mcp-remote |
hosted at https://mcp.buildpulse.io/mcp |
Same tool surface; same prompts; same resources. Pick whichever your
client supports. The stdio path is universal; the hosted variant is
the path to Claude.ai web and ChatGPT, and authenticates with OAuth 2.1
SSO by default (PKCE + dynamic client registration; discovery at
/.well-known/oauth-authorization-server) or a Bearer API token. The hosted
server also publishes a landing page, robots.txt, sitemap.xml, and
llms.txt on the bare host.
The server exposes two MCP resource templates so agents can pull state into context without a tool call:
buildpulse://repos/{repo}/flaky-testsbuildpulse://repos/{owner}/{name}/submissions
| Variable | Required | Default |
|---|---|---|
BUILDPULSE_TOKEN |
stdio only (hosted uses SSO) | — |
PLATFORM_API_URL |
no | https://platform.buildpulse.io |
The hosted server (mcp-remote) will refuse to start unless
PLATFORM_API_URL is production or development Platform API. Local stdio
(npx @buildpulse/mcp) is unchanged. See SECURITY.md for
the threat model, tenant isolation, P1 rate limits (120 tool calls / token /
minute), the tool audit log, RFC 7009 /oauth/revoke, and what we
deliberately do not gate (HITL on reads, hiding tools, killing multi-step
triage).
git clone https://github.com/BuildPulseLLC/buildpulse-mcp
cd buildpulse-mcp
go build -o ./bin/buildpulse-mcp ./cmd/mcp
go build -o ./bin/buildpulse-mcp-remote ./cmd/mcp-remoteRequires Go 1.26+ (see go.mod).
go test -race ./...See CONTRIBUTING.md for the development workflow and CHANGELOG.md for release history.
MIT — see LICENSE.
- BuildPulse Platform API — the underlying public REST API
- @buildpulse/mcp on npm
- Distribution strategy — Claude, OpenAI, Smithery, Cursor publishing details
/docs/mcp— branded install hub with copy buttons- MCP Registry listing —
io.github.BuildPulseLLC/buildpulse-mcp