BuildPulse

io.github.BuildPulseLLC由 GitHub 账号 BuildPulseLLC 发布v0.2.0更新于 Nov 7, 2026

BuildPulse for AI agents: CI runner usage, cost and savings, plus flaky tests, failures, coverage.

已验证Streamable HTTP可网页运行云端与基础设施开发者工具数据与分析

概览

AI 生成的概览

BuildPulse 的 MCP 服务器,让助手读取 CI 运行器的用量、成本与节省,并排查不稳定测试、失败、CI 运行记录和覆盖率。

可以做什么
  • 查询组织的运行器状态、用量、成本、节省额和可用的运行器标签
  • 列出组织以及 BuildPulse 监控的仓库
  • 搜索仓库中的不稳定测试,并获取单个测试最近的干扰事件
  • 列出最近的 CI 提交记录及单次运行的逐项测试结果,或汇总近期失败
  • 报告仓库当前的波动率和覆盖率百分比
适用场景
适合已将 CI 测试结果上传到 BuildPulse 的团队,让助手分诊不稳定测试、解释构建为何失败,或汇报覆盖率与波动率。也适合查看组织是否已启用 BuildPulse 运行器及其成本与节省情况。
运行要求
可使用托管远程端点并通过 BuildPulse 账号完成 OAuth 登录,或通过 npm 包在本地运行,首次安装会下载对应平台的原生二进制(macOS、Linux、Windows)。本地方式需要在 BUILDPULSE_TOKEN 中提供 BuildPulse API 令牌,或对托管地址使用 Authorization bearer 头。可能需要包含 API 访问权限的付费方案。
安装前请注意
API 令牌可访问与你账号相同的组织,应作为机密保管。拥有多个组织的账号必须在每次范围调用中传入 organization_id,否则会报错。工具为只读,但结果会把仓库、测试和构建数据交给助手及其模型提供方。方案不含 API 访问权限时,部分调用会返回 plan_required。

安装

在 SourceWeft 中

  1. 打开 控制台中的 BuildPulse,将其添加到工作区。
  2. 连接 所需的 凭据。它们会被私密存储,绝不会在公开页面上展示。
  3. 为需要使用其工具的对话启用该服务。

Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。

交给智能体安装

把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。

阅读 https://sourceweft.com/mcp/io.github.BuildPulseLLC%2Fbuildpulse-mcp/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。

查看智能体所依据的安装指南

其他 MCP 客户端

把它添加到你客户端的 mcpServers 配置中。 客户端会在首次连接时完成 OAuth 登录。

{
  "mcpServers": {
    "buildpulse": {
      "type": "http",
      "url": "https://mcp.buildpulse.io/mcp"
    }
  }
}

README

[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):

bash
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:

bash
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

bash
npx -y @buildpulse/mcp

Or pin globally:

bash
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 inNeeds 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 youNoClaude Code, Claude.ai, ChatGPT, Cursor, VS Code, and any client that supports remote MCP servers with OAuth
API tokenBUILDPULSE_TOKEN=bp_... for stdio, or an Authorization: Bearer bp_... header against the hosted URLYesLocal 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):

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

Stdio (token):

bash
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):

json
{  "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):

json
{  "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):

json
{  "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

ToolPurpose
get_runner_statusWhether 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_usageRunner 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_configsThe runner sizes and runs-on labels (or CircleCI resource class / Semaphore agent type) the organization has configured.
list_my_organizationsEnumerate the organizations this token can access; get the id (UUID) to pass as organization_id.
list_repositoriesList repositories in an organization.
find_flaky_testsSearch a repository's flaky test inventory; filter by tags, recency, free-text.
get_test_historyRecent disruption events for a specific test.
list_recent_submissionsRecent test-result submissions (CI runs) for a repository.
get_submission_test_resultsPer-test results for one submission (one CI run).
get_recent_failuresTests that failed across the most recent submissions, aggregated by test identity.
get_repo_flakinessCurrent flakiness % over the last 14 days. -1 means no recent results.
get_repo_coverageCurrent 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

TransportBinaryWhere it goes
stdiocmd/mcpnpm → npx -y @buildpulse/mcp
Streamable HTTPcmd/mcp-remotehosted 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

VariableRequiredDefault
BUILDPULSE_TOKENstdio only (hosted uses SSO)—
PLATFORM_API_URLnohttps://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

bash
git clone https://github.com/BuildPulseLLC/buildpulse-mcpcd buildpulse-mcpgo build -o ./bin/buildpulse-mcp ./cmd/mcpgo build -o ./bin/buildpulse-mcp-remote ./cmd/mcp-remote

Requires Go 1.26+ (see go.mod).

Run tests

bash
go test -race ./...

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

License

MIT — see LICENSE.

Related

来源:README.md,提交 2ee2f8d

工具

12

find_flaky_tests

Find flaky tests

Search a repository's flaky / disruptive test inventory. Returns tests that have been intermittently failing in the last 14 days, sorted by disruptiveness (default) or recency. Filter by tags, free-text on test name / file / class, and a since-date. Use this as the entry point for any flaky-test investigation. An empty list means no test crossed the flakiness threshold in the window — it does not mean the repository is unmonitored; check get_repo_flakiness for whether results were uploaded at all. For users in multiple organizations, pass `organization_id` (call list_my_organizations first to enumerate).

输入参数sorttagslimitsincesearchrepository必填quarantinedorganization_id

get_recent_failures

Get failures across recent CI runs

Return tests that failed in any of the most recent N submissions for a repository, aggregated by test identity (name+suite+file). For each test, returns failure_count (how many of the recent runs it failed in), most_recent_failure_at, most_recent_build_url, and the failure message from the most recent occurrence. Unlike find_flaky_tests, this is NOT filtered by the statistical flakiness threshold — it surfaces every test that failed in the recent window, which matches workflows where customers only upload to BuildPulse after their own CI has already passed (so any failure observed by BuildPulse is by definition unexpected). Default window is the last 10 submissions.

输入参数name必填owner必填submissionsorganization_id

get_repo_coverage

Get repo coverage %

Return the current test coverage percentage for a repository, taken from the most recent coverage report uploaded to BuildPulse. `color` maps the value to green / light_green / yellow / red using the same thresholds as the BuildPulse coverage badge. Reach for this when the user asks "what's our coverage?", "how well tested is X?", "is the suite healthy?", or wants a repo health snapshot (pair it with get_repo_flakiness). `percentage` is -1 when no coverage report exists for the repository — BuildPulse only knows about coverage when the CI job uploads a report (see https://platform.buildpulse.io/docs); it is not derived from test results. For users in multiple organizations, pass `organization_id` (call list_my_organizations first to enumerate).

输入参数repository必填organization_id

get_repo_flakiness

Get repo flakiness %

Return the current flakiness percentage for a repository over the last 14 days — the share of CI runs disrupted by tests that failed and then passed without a code change. Higher is worse: `color` maps the value to green / yellow / red using the same thresholds as the BuildPulse badge. Reach for this when the user asks "is the suite healthy?", "how flaky is X?", "how well tested is X?", or wants a repo health snapshot (pair it with get_repo_coverage), then drill into individual tests with find_flaky_tests. `percentage` is -1 when BuildPulse has no test results for the repository in the window — that means nothing has been uploaded recently, not that the suite is clean. For users in multiple organizations, pass `organization_id` (call list_my_organizations first to enumerate).

输入参数repository必填organization_id

get_runner_configs

List configured runner sizes and labels

List the BuildPulse runner sizes the organization has configured: the `label` a workflow targets (the GitHub Actions `runs-on` value, e.g. bp-ubuntu-latest-x64-2x), CI provider, vCPU, memory, architecture, list price per minute and provisioning status. For CircleCI and Semaphore, `provider_config` holds the resource class or agent type the pipeline points at (never a token). Use this when editing a workflow onto BuildPulse runners or answering "which runner labels can I use?". An empty list with runners activated means no size has been added yet; `web_url` is the setup page. For users in multiple organizations, pass `organization_id`.

输入参数organization_id

get_runner_status

Get BuildPulse runner status

Report whether the organization has activated BuildPulse CI runners, and how to start if it has not. BuildPulse runners are drop-in runners for GitHub Actions, CircleCI and Semaphore that finish jobs about 2x faster at half the cost of the provider's hosted runners, with Test Intelligence (flaky-test detection, coverage and CI metrics) included with every minute. Every organization gets 3,000 free minutes a month, no card required. With a tenant: `status`, `billing_mode` (free: cardless, served from the monthly grant; metered: card on file; exempt: BuildPulse's own) and `activated_at`. Without one: `how_to_start` is a sentence you can relay, and `setup_url` (https://buildpulse.io/organizations/{orgId}/runners/setup) is where activation happens: the customer picks a size and changes one line in the workflow (the runs-on label, resource class or agent type). Call this before get_runner_usage when you do not know whether the organization uses runners. For users in multiple organizations, pass `organization_id`.

输入参数organization_id

get_runner_usage

Get runner usage, cost and savings

Return what the organization's BuildPulse runners did over the last `days` days (1-90, default 30): jobs, billable minutes, cost before free minutes, free minutes used and their value, net cost, p50 and p90 job duration in seconds, p50 queue wait (only when jobs measured it), and the same minutes priced at GitHub's hosted larger-runner list rate with `savings_percent`. Given as `totals` and as a `breakdown` per runner size, architecture and CI provider (highest cost first). `pricing` carries the published offer and the full rate card (BuildPulse and GitHub list price per size, free minutes per month, speedup), and is returned even when the organization has no runners, so use it for any estimate instead of remembering prices. Zeroed totals with an empty breakdown means nothing ran on BuildPulse runners in the window; check get_runner_status for whether runners are activated at all. For users in multiple organizations, pass `organization_id`.

输入参数daysorganization_id

get_submission_test_results

Get per-test results for a submission

Return the individual test results recorded against one submission (one CI run). Use `status="failed"` to filter to just the failures and errors — the typical "red build" set. Each result carries the test name / suite / file / class, the per-attempt duration in microseconds, the failure message, and the runner-recorded run count (1=first attempt, 2+=retries). Get a submission `id` from list_recent_submissions first.

输入参数name必填limitowner必填statussubmission_id必填organization_id

get_test_history

Get test history

Return the most-recent disruption (failure / flake) events for a specific test, identified by its BuildPulse test_id. Up to 10 events from the last 14 days. Each event includes the CI build URL and commit SHA — useful for correlating regressions with code changes. An empty list means the test has not been disrupted in that window; an unknown test_id is an error, not an empty result. Get test_id values from find_flaky_tests.

输入参数test_id必填organization_id

list_my_organizations

List my BuildPulse organizations

Return every BuildPulse organization the current MCP session can access. Multi-tenant users must call this first to discover the `id` (UUID) of the organization they want to scope subsequent tool calls to — pass that `id` as the `organization_id` argument on find_flaky_tests / get_test_history / list_recent_submissions / get_repo_flakiness / get_repo_coverage. Single-tenant callers will see exactly one entry and don't need to pass `organization_id`.

无需输入参数。

list_recent_submissions

List recent CI runs

List the most-recent test submissions (CI runs) for a repository. Each entry corresponds to one CI run that uploaded test results to BuildPulse. Reach for this first when a user asks "why is CI red?" or "what changed in the last hour". Each entry includes an `id` you can pass to get_submission_test_results to drill into the individual test results for that run.

输入参数name必填limitowner必填organization_id

list_repositories

List repositories in a BuildPulse organization

Return every repository BuildPulse is monitoring for the given organization, sorted alphabetically. An empty list means the organization has no repositories reporting to BuildPulse yet, not that the call failed. Call this whenever the user asks a repo-scoped question ("do I have flaky tests?", "why is CI red?") without naming a specific repo — the `name` field is what you pass to find_flaky_tests / list_recent_submissions / get_repo_flakiness / get_repo_coverage as their `repository` argument. For multi-tenant users, pass `organization_id` (call list_my_organizations first to enumerate); single-tenant tokens see exactly the bound org's repos.

输入参数organization_id

版本历史

2
  1. v0.2.0最新Nov 5, 2026
  2. v0.1.7Sep 16, 2026

评分

已满足适用检查项的 100%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通必需25 分
  • 已声明认证方式必需10 分
  • 已列出工具15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分