[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.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:
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
Or pin globally:
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.
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):
Stdio (token):
Claude Desktop
~/Library/Application Support/Claude/claude_desktop_config.json
(macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
Cursor
.cursor/mcp.json (per-project) or ~/.cursor/mcp.json (global).
Hosted with SSO (Cursor prompts you to sign in the first time):
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):
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
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
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
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
Requires Go 1.26+ (see go.mod).
Run tests
See CONTRIBUTING.md for the development workflow
and CHANGELOG.md for release history.
License
MIT — see LICENSE.
Related