Skip to content

About

BuildPulse Model Context Protocol server — surface flaky tests, CI run history, and coverage health to Claude, Cursor, ChatGPT, and any MCP-aware AI agent.

Topics

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

buildpulse-mcp, by BuildPulse

Runs on BuildPulse

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.

npm version npm downloads License: MIT MCP Registry Install on Smithery Docs

Quickstart

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/mcp

Claude.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/mcp

See Authentication for where tokens come from and when you need one.

Try asking

  • "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-api have 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 frontend and tell me which to quarantine first."

Install

npx -y @buildpulse/mcp

Or pin globally:

npm install -g @buildpulse/mcp

The package downloads the matching native binary for your platform on first install. Supported platforms: macOS arm64/x64, Linux arm64/x64, Windows x64.

Authentication

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.

Configure

Hosted snippets sign you in via SSO. Stdio snippets need BUILDPULSE_TOKEN; replace bp_... with your token.

Claude Code

Hosted (SSO, no token):

claude mcp add --transport http buildpulse https://mcp.buildpulse.io/mcp

Stdio (token):

claude mcp add buildpulse -e BUILDPULSE_TOKEN=bp_... -- npx -y @buildpulse/mcp

Claude Desktop

~/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

.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.

VS Code (GitHub Copilot agent mode)

.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.

Windsurf

~/.codeium/windsurf/mcp_config.json — same mcpServers block as Claude Desktop.

Cline

Cline → MCP Servers → Configure → paste the same mcpServers block into cline_mcp_settings.json.

ChatGPT

ChatGPT → Settings → Connectors → Create → URL https://mcp.buildpulse.io/mcp. ChatGPT completes the SSO sign-in; no token to paste.

Claude.ai

Settings → Connectors → Add custom connector → URL https://mcp.buildpulse.io/mcp. Sign in when prompted; no token.

Other clients

Continue, Zed, and anything else MCP-aware takes the same command / args / env fields. See the install hub for copy-paste snippets per client.

Organizations (multi-tenant)

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_organizations returns 2+ orgs) — you must pass organization_id on 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. Call list_my_organizations first to enumerate them.

This avoids silently querying the wrong (often empty) organization and getting confusingly empty results.

Tools

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.

Prompts

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's pricing block), 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

Two transports

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.

Resources

The server exposes two MCP resource templates so agents can pull state into context without a tool call:

  • buildpulse://repos/{repo}/flaky-tests
  • buildpulse://repos/{owner}/{name}/submissions

Environment variables

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).

Build from source

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-remote

Requires Go 1.26+ (see go.mod).

Run tests

go test -race ./...

See CONTRIBUTING.md for the development workflow and CHANGELOG.md for release history.

License

MIT — see LICENSE.

Related

About

BuildPulse Model Context Protocol server — surface flaky tests, CI run history, and coverage health to Claude, Cursor, ChatGPT, and any MCP-aware AI agent.

Topics

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages