{
  "markdown": "<a href=\"https://buildpulse.io\"><img src=\".github/banner.svg\" alt=\"buildpulse-mcp, by BuildPulse\" width=\"100%\"></a>\n\n<a href=\"https://buildpulse.io/mcp?ref=github-badge\"><img src=\".github/runs-on-buildpulse-compact.svg\" alt=\"Runs on BuildPulse\" height=\"28\"></a>\n\n> Model Context Protocol server for the [BuildPulse](https://buildpulse.io)\n> Platform API. Surface flaky tests, CI run history, and coverage health\n> in Claude Desktop, Cursor, ChatGPT, Cline, Windsurf, Continue, Zed,\n> VS Code Copilot, and any other MCP-aware AI agent.\n\n[![npm version](https://img.shields.io/npm/v/@buildpulse/mcp.svg)](https://www.npmjs.com/package/@buildpulse/mcp)\n[![Install on Smithery](https://img.shields.io/badge/Install-Smithery-blueviolet)](https://smithery.ai)\n[![Docs](https://img.shields.io/badge/Docs-platform.buildpulse.io%2Fdocs%2Fmcp-3e82f7)](https://platform.buildpulse.io/docs/mcp)\n\n## Install\n\n```bash\nnpx -y @buildpulse/mcp\n```\n\nOr pin globally:\n\n```bash\nnpm install -g @buildpulse/mcp\n```\n\nThe package downloads the matching native binary for your platform on\nfirst install. Supported platforms: macOS arm64/x64, Linux arm64/x64,\nWindows x64.\n\n## Configure\n\nGet a BuildPulse API token at <https://buildpulse.io> → Organization\nSettings → API Tokens.\n\n### Claude Desktop\n\n`~/Library/Application Support/Claude/claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"buildpulse\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@buildpulse/mcp\"],\n      \"env\": { \"BUILDPULSE_TOKEN\": \"your-buildpulse-api-token\" }\n    }\n  }\n}\n```\n\n### Cursor\n\n`.cursor/mcp.json` (per-project) or `~/.cursor/mcp.json` (global):\nsame JSON shape.\n\n### Other clients\n\nCline, Continue, Windsurf, Zed, and VS Code Copilot all read an\n`mcpServers` block in their respective config files. See the\n[install hub](https://platform.buildpulse.io/docs/mcp) for copy-paste\nsnippets per client.\n\n## Organizations (multi-tenant)\n\nYour BuildPulse token may grant access to more than one organization.\nEvery repo-scoped tool takes an optional `organization_id` argument (the\norg's `id` UUID, discoverable via `list_my_organizations`):\n\n- **Single-org tokens** — omit `organization_id`. It auto-defaults to your\n  one organization. Nothing changes; you never need to think about orgs.\n- **Multi-org sessions** (`list_my_organizations` returns 2+ orgs) — you\n  **must** pass `organization_id` on every repo-scoped call\n  (`list_repositories`, `find_flaky_tests`, `get_test_history`,\n  `list_recent_submissions`, `get_submission_test_results`,\n  `get_recent_failures`, `get_repo_flakiness`, `get_repo_coverage`). The\n  org is **not** auto-selected — omitting it returns an error that lists\n  every accessible organization and its UUID, so the agent can pick the\n  right one and retry. Call `list_my_organizations` first to enumerate\n  them.\n\nThis avoids silently querying the wrong (often empty) organization and\ngetting confusingly empty results.\n\n## Tools\n\n| Tool | Purpose |\n|------|---------|\n| `list_my_organizations` | Enumerate the organizations this token can access; get the `id` (UUID) to pass as `organization_id`. |\n| `list_repositories` | List repositories in an organization. |\n| `find_flaky_tests` | Search a repository's flaky test inventory; filter by tags, recency, free-text. |\n| `get_test_history` | Recent disruption events for a specific test. |\n| `list_recent_submissions` | Recent test-result submissions (CI runs) for a repository. |\n| `get_submission_test_results` | Per-test results for one submission (one CI run). |\n| `get_recent_failures` | Tests that failed across the most recent submissions, aggregated by test identity. |\n| `get_repo_flakiness` | Current flakiness % over the last 14 days. |\n| `get_repo_coverage` | Current coverage % from the latest report. |\n\nRepo-scoped tools accept an `organization_id` argument — required for\nmulti-org sessions, optional (auto-defaulted) for single-org tokens. See\n[Organizations](#organizations-multi-tenant) above.\n\nEvery output that names a test or repo includes a `web_url` deep-link\nback to the BuildPulse web app — the same polish Sentry / Atlassian\nuse in their MCP responses.\n\n## Prompts\n\nThe server also ships four guided prompts (slash-pickable in clients\nthat support them):\n\n- `/triage_flaky_tests`\n- `/ci_health_check`\n- `/explain_test_failure`\n- `/whats_red`\n\n## Two transports\n\n| Transport | Binary | Where it goes |\n|---|---|---|\n| **stdio** | [`cmd/mcp`](./cmd/mcp) | npm → `npx -y @buildpulse/mcp` |\n| **Streamable HTTP** | [`cmd/mcp-remote`](./cmd/mcp-remote) | hosted at `https://mcp.buildpulse.io/mcp` |\n\nSame tool surface; same prompts; same resources. Pick whichever your\nclient supports. The stdio path is universal; the hosted variant is\nthe path to Claude.ai web and ChatGPT.\n\n## Resources\n\nThe server exposes two MCP resource templates so agents can pull\nstate into context without a tool call:\n\n- `buildpulse://repos/{repo}/flaky-tests`\n- `buildpulse://repos/{owner}/{name}/submissions`\n\n## Environment variables\n\n| Variable | Required | Default |\n|---|---|---|\n| `BUILDPULSE_TOKEN` | yes | — |\n| `PLATFORM_API_URL` | no | `https://platform.buildpulse.io` |\n\nThe **hosted** server (`mcp-remote`) will refuse to start unless\n`PLATFORM_API_URL` is production or development Platform API. Local stdio\n(`npx @buildpulse/mcp`) is unchanged. See [SECURITY.md](./SECURITY.md) for\nthe threat model, tenant isolation, P1 rate limits (120 tool calls / token /\nminute), the tool audit log, RFC 7009 `/oauth/revoke`, and what we\ndeliberately do not gate (HITL on reads, hiding tools, killing multi-step\ntriage).\n\n## Build from source\n\n```bash\ngit clone https://github.com/BuildPulseLLC/buildpulse-mcp\ncd buildpulse-mcp\ngo build -o ./bin/buildpulse-mcp ./cmd/mcp\ngo build -o ./bin/buildpulse-mcp-remote ./cmd/mcp-remote\n```\n\nRequires Go 1.24+.\n\n## Run tests\n\n```bash\ngo test ./...\n```\n\n## License\n\nMIT — see [LICENSE](./LICENSE).\n\n## Related\n\n- [BuildPulse Platform API](https://platform.buildpulse.io/docs) — the underlying public REST API\n- [@buildpulse/mcp on npm](https://www.npmjs.com/package/@buildpulse/mcp)\n- [Distribution strategy](./DISTRIBUTION.md) — Claude, OpenAI, Smithery, Cursor publishing details\n- [`/docs/mcp`](https://platform.buildpulse.io/docs/mcp) — branded install hub with copy buttons\n\n## CI / Dependabot\n\n- Push to `main` / `feat/**` / `fix/**` runs build-and-push + deploy (production vs development by branch).\n- Dependabot opens weekly grouped update PRs. This repo is on the **Dependabot weekly rollup** allowlist in `BuildPulseLLC/agents` (`dependabot-rollup` workflow / DEV-85): open Dependabot PRs are folded onto `feat/deps-dependabot-batch-*` so development CI runs before any merge to `main`. See `agents/scripts/dependabot-rollup.md`.\n",
  "bytes": 6731,
  "sha": "8554b2cb6203265fe39fc18474b32a011cd344f6be83e514008443edb9eaf71b",
  "repo_slug": "buildpulsellc/buildpulse-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_buildpulsellc_buildpulse_mcp_72dafd9d/readme"
}