
Connects to the Buildkite API to surface your CI/CD data directly in Claude. You get access to pipelines, builds, jobs, and test analytics without switching contexts. Useful when debugging failing builds, investigating flaky tests, or checking deployment status during development conversations. The server runs in a container built on Chainguard's minimal static image for security. Buildkite maintains this officially, so it tracks their API changes. If you're already using Buildkite for CI/CD and want your AI assistant to help troubleshoot pipeline issues or query build history, this bridges that gap cleanly.
Public tool metadata for what this MCP can expose to an agent.
access_tokenGet information about the current API access token including its scopes and UUIDGet information about the current API access token including its scopes and UUID
No parameter schema in public metadata yet.
create_buildTrigger a new build on a Buildkite pipeline for a specific commit and branch, with optional environment variables, metadata, and author information8 paramsTrigger a new build on a Buildkite pipeline for a specific commit and branch, with optional environment variables, metadata, and author information
branchstringcommitstringenvironmentarrayignore_branch_filtersbooleanmessagestringmetadataarrayorg_slugstringpipeline_slugstringcreate_clusterCreate a new cluster in an organization5 paramsCreate a new cluster in an organization
colorstringdescriptionstringemojistringnamestringorg_slugstringcreate_cluster_queueCreate a new queue in a cluster4 paramsCreate a new queue in a cluster
cluster_idstringdescriptionstringkeystringorg_slugstringcreate_pipelineSet up a new CI/CD pipeline in Buildkite with YAML configuration, repository connection, and cluster assignment11 paramsSet up a new CI/CD pipeline in Buildkite with YAML configuration, repository connection, and cluster assignment
cancel_running_branch_buildsbooleancluster_idstringconfigurationstringcreate_webhookbooleandefault_branchstringdescriptionstringnamestringorg_slugstringrepository_urlstringskip_queued_branch_buildsbooleantagsarraycurrent_userGet details about the user account that owns the API token, including name, email, avatar, and account creation dateGet details about the user account that owns the API token, including name, email, avatar, and account creation date
No parameter schema in public metadata yet.
get_artifactGet detailed information about a specific artifact including its metadata, file size, SHA-1 hash, and download URL1 paramsGet detailed information about a specific artifact including its metadata, file size, SHA-1 hash, and download URL
urlstringget_buildGet build information including job IDs, names, and states. Use job_state to filter (e.g. 'failed,broken'). Returns enough detail to identify which jobs to investigate with log and artifact tools6 paramsGet build information including job IDs, names, and states. Use job_state to filter (e.g. 'failed,broken'). Returns enough detail to identify which jobs to investigate with log and artifact tools
build_numberstringdetail_levelstringinclude_agentbooleanjob_statestringorg_slugstringpipeline_slugstringget_build_test_engine_runsGet test engine runs data for a specific build in Buildkite. This can be used to look up Test Runs.3 paramsGet test engine runs data for a specific build in Buildkite. This can be used to look up Test Runs.
build_numberstringorg_slugstringpipeline_slugstringget_clusterGet detailed information about a specific cluster including its name, description, default queue, and configuration2 paramsGet detailed information about a specific cluster including its name, description, default queue, and configuration
cluster_idstringorg_slugstringget_cluster_queueGet detailed information about a specific queue including its key, description, dispatch status, and hosted agent configuration3 paramsGet detailed information about a specific queue including its key, description, dispatch status, and hosted agent configuration
cluster_idstringorg_slugstringqueue_idstringget_failed_executionsGet failed test executions for a specific test run in Buildkite Test Engine. Optionally get the expanded failure details such as full error messages and stack traces.6 paramsGet failed test executions for a specific test run in Buildkite Test Engine. Optionally get the expanded failure details such as full error messages and stack traces.
include_failure_expandedbooleanorg_slugstringpageintegerper_pageintegerrun_idstringtest_suite_slugstringget_pipelineGet detailed information about a specific pipeline including its configuration, steps, environment variables, and build statistics3 paramsGet detailed information about a specific pipeline including its configuration, steps, environment variables, and build statistics
detail_levelstringorg_slugstringpipeline_slugstringget_testGet a specific test in Buildkite Test Engine. This provides additional metadata for failed test executions3 paramsGet a specific test in Buildkite Test Engine. This provides additional metadata for failed test executions
org_slugstringtest_idstringtest_suite_slugstringget_test_runGet a specific test run in Buildkite Test Engine3 paramsGet a specific test run in Buildkite Test Engine
org_slugstringrun_idstringtest_suite_slugstringlist_annotationsList all annotations for a build, including their context, style (success/info/warning/error), rendered HTML content, and creation timestamps5 paramsList all annotations for a build, including their context, style (success/info/warning/error), rendered HTML content, and creation timestamps
build_numberstringorg_slugstringpageintegerper_pageintegerpipeline_slugstringlist_artifacts_for_buildList all artifacts for a build across all jobs, including file details, paths, sizes, MIME types, and download URLs5 paramsList all artifacts for a build across all jobs, including file details, paths, sizes, MIME types, and download URLs
build_numberstringorg_slugstringpageintegerper_pageintegerpipeline_slugstringlist_artifacts_for_jobList all artifacts for an individual job, including file details, paths, sizes, MIME types, and download URLs6 paramsList all artifacts for an individual job, including file details, paths, sizes, MIME types, and download URLs
build_numberstringjob_idstringorg_slugstringpageintegerper_pageintegerpipeline_slugstringlist_buildsList builds for a pipeline or across all pipelines in an organization. When pipeline_slug is omitted, lists builds across all pipelines in the organization9 paramsList builds for a pipeline or across all pipelines in an organization. When pipeline_slug is omitted, lists builds across all pipelines in the organization
branchstringcommitstringcreatorstringdetail_levelstringorg_slugstringpageintegerper_pageintegerpipeline_slugstringstatestringlist_cluster_queuesList all queues in a cluster with their keys, descriptions, dispatch status, and agent configuration4 paramsList all queues in a cluster with their keys, descriptions, dispatch status, and agent configuration
cluster_idstringorg_slugstringpageintegerper_pageintegerlist_clustersList all clusters in an organization with their names, descriptions, default queues, and creation details3 paramsList all clusters in an organization with their names, descriptions, default queues, and creation details
org_slugstringpageintegerper_pageintegerlist_pipelinesList all pipelines in an organization with their basic details, build counts, and current status6 paramsList all pipelines in an organization with their basic details, build counts, and current status
detail_levelstringnamestringorg_slugstringpageintegerper_pageintegerrepositorystringlist_test_runsList all test runs for a test suite in Buildkite Test Engine4 paramsList all test runs for a test suite in Buildkite Test Engine
org_slugstringpageintegerper_pageintegertest_suite_slugstringpause_cluster_queue_dispatchPause dispatch on a cluster queue, preventing new jobs from being dispatched to agents4 paramsPause dispatch on a cluster queue, preventing new jobs from being dispatched to agents
cluster_idstringnotestringorg_slugstringqueue_idstringread_logsRead log entries from the file, optionally starting from a specific row number. ALWAYS use 'limit' parameter to avoid excessive tokens. For recent failures, use 'tail_logs' instead. Recommended limits: investigation (100-500), exploration (use seek + small limits). The json fo...8 paramsRead log entries from the file, optionally starting from a specific row number. ALWAYS use 'limit' parameter to avoid excessive tokens. For recent failures, use 'tail_logs' instead. Recommended limits: investigation (100-500), exploration (use seek + small limits). The json fo...
build_numberstringcache_ttlstringforce_refreshbooleanjob_idstringlimitintegerorg_slugstringpipeline_slugstringseekintegerresume_cluster_queue_dispatchResume dispatch on a paused cluster queue, allowing jobs to be dispatched to agents again3 paramsResume dispatch on a paused cluster queue, allowing jobs to be dispatched to agents again
cluster_idstringorg_slugstringqueue_idstringsearch_logsSearch log entries using regex patterns with optional context lines. For recent failures, try 'tail_logs' first, then use search_logs with patterns like 'error|failed|exception' and limit: 10-20. The json format: {ts: timestamp_ms, c: content, rn: row_number}.15 paramsSearch log entries using regex patterns with optional context lines. For recent failures, try 'tail_logs' first, then use search_logs with patterns like 'error|failed|exception' and limit: 10-20. The json format: {ts: timestamp_ms, c: content, rn: row_number}.
after_contextintegerbefore_contextintegerbuild_numberstringcache_ttlstringcase_sensitivebooleancontextintegerforce_refreshbooleaninvert_matchbooleanjob_idstringlimitintegerorg_slugstringpatternstringpipeline_slugstringreversebooleanseek_startintegertail_logsShow the last N entries from the log file. RECOMMENDED for failure diagnosis - most build failures appear in the final log entries. More token-efficient than read_logs for recent issues. The json format: {ts: timestamp_ms, c: content, rn: row_number}.7 paramsShow the last N entries from the log file. RECOMMENDED for failure diagnosis - most build failures appear in the final log entries. More token-efficient than read_logs for recent issues. The json format: {ts: timestamp_ms, c: content, rn: row_number}.
build_numberstringcache_ttlstringforce_refreshbooleanjob_idstringorg_slugstringpipeline_slugstringtailintegerunblock_jobUnblock a blocked job in a Buildkite build to allow it to continue execution5 paramsUnblock a blocked job in a Buildkite build to allow it to continue execution
build_numberstringfieldsobjectjob_idstringorg_slugstringpipeline_slugstringupdate_clusterUpdate an existing cluster's name, description, emoji, color, or default queue7 paramsUpdate an existing cluster's name, description, emoji, color, or default queue
cluster_idstringcolorstringdefault_queue_idstringdescriptionstringemojistringnamestringorg_slugstringupdate_cluster_queueUpdate an existing cluster queue's description or retry agent affinity5 paramsUpdate an existing cluster queue's description or retry agent affinity
cluster_idstringdescriptionstringorg_slugstringqueue_idstringretry_agent_affinitystringupdate_pipelineModify an existing Buildkite pipeline's configuration, repository, settings, or metadata11 paramsModify an existing Buildkite pipeline's configuration, repository, settings, or metadata
cancel_running_branch_buildsbooleancluster_idstringconfigurationstringdefault_branchstringdescriptionstringnamestringorg_slugstringpipeline_slugstringrepository_urlstringskip_queued_branch_buildsbooleantagsarrayuser_token_organizationGet the organization associated with the user token used for this requestGet the organization associated with the user token used for this request
No parameter schema in public metadata yet.
Model Context Protocol (MCP) server exposing Buildkite data (pipelines, builds, jobs, tests) to AI tooling and editors.
Full documentation is available at buildkite.com/docs/apis/mcp-server.
The retries toolset supports investigating failures and retrying jobs without
broader build-write access. It includes list_builds, get_build,
wait_for_build, list_jobs, get_job, search_logs, tail_logs, read_logs,
retry_job, and retry_failed_jobs. It requires read_builds,
read_build_logs, and retry_builds scopes, not write_builds.
buildkite-mcp-server stdio --enabled-toolsets retries
retry_failed_jobs retries only infrastructure failures; use its dry_run
option to inspect the proposed retries without executing them. retry_job
retries a specific job. Both are mutating tools and are excluded by
--read-only. The toolset does not expose create, rebuild, cancel, or unblock
operations. Existing retry tools remain available in builds; selecting
builds or all still requires write_builds for the other mutations.
The Buildkite API must have the RetryBuildsScope feature enabled for the token
owner to accept retry_builds; existing write_builds tokens remain accepted.
Hosted MCP OAuth can select this toolset using /mcp/x/retries once the hosted
server adopts a release containing it. Selecting toolsets through request
headers does not change an existing token's OAuth scopes.
For library consumers, WithDisabledToolsets and the HTTP factory's disabled
toolsets exclude all members of those toolsets, even through overlapping
groups. For example, disabling logs also removes log tools from retries;
disabling retries removes its inspection and retry tools from other groups.
The read-only compare_builds tool in the investigations toolset answers questions such as “What changed since this build last worked on main?” Supply org_slug, pipeline_slug, and the target build_number. It selects the most recently created earlier build that is currently passed on the same pipeline and exact branch. It does not require that the baseline had already passed when the target started. Supply baseline_build_number to compare against a specific build in that pipeline instead, including a failed build or one on another branch.
The response identifies the baseline and selection rule, counts outcomes across all jobs, and returns up to 100 job comparisons, prioritizing newly failing, recovered, and still-failing steps. Matching uses step keys, job type, matrix values, and parallel index/total. When both jobs lack keys, it falls back to the exact nonblank name plus type, group key, matrix values, and parallel index/total, only when that combination is unique in each build. Matched pairs expose match_method: "step_key" or "name_fallback"; fallback matches carry a warning that they are heuristic. Unnamed unkeyed jobs and duplicate identities remain unmatched. Explicit keys never fall back to names, even when a key was added, removed, or changed between builds. Added/removed means a job identity is present in only one build, so renaming unkeyed jobs or changing matrix values or parallelism can also produce added/removed entries. Retried attempts are excluded; final-attempt states and retry counts remain visible.
Execution times and deltas cover final attempts only. Scheduling time is scheduled_at to started_at, not dependency or manual waiting. These are not build wall-clock comparisons or total retry costs. Missing or inconsistent timestamps omit the corresponding timing. Unfinished builds are explicitly identified as changing snapshots.
Any change in soft_failed is reported as state_changed: transitions between soft and hard failures, even when both jobs have state failed, and between passed and soft-failed jobs, which are never reported as newly_failing or recovered because a soft failure does not block the build. A passed baseline build can contain soft-failed jobs.
By default, up to three newly blocking failures include their last 20 log entries: newly_failing jobs first, then state_changed jobs that are now hard failures, such as a job that soft-failed in the baseline. Logs are bounded to 8 KiB of log content each. Set include_logs: false to omit logs. Log errors do not discard the comparison, except HTTP 401 authentication errors, which propagate through the server's reauthentication path. The tool requires read_builds and read_build_logs scopes. Use get_build_failure_summary or tail_logs to investigate further; a shared failing step does not establish a shared root cause or make a retry safe.
Baseline discovery searches at most 500 candidates. If none is found, the response says no comparison was performed and asks for an explicit baseline. Job inventories are limited to 1,000 jobs per build; larger inventories return an error instead of misleading partial added/removed results. Output omissions are reported separately from the complete outcome counts.
The exported Go API of this module should be considered unstable, and subject to breaking changes as we evolve this project.
To ensure the MCP server is run in a secure environment, we recommend running it in a container.
This image is built from cgr.dev/chainguard/static and runs as an unprivileged user.
Self-hosted HTTP deployments can forward selected headers from each inbound MCP request to the Buildkite API:
BUILDKITE_API_TOKEN=bkua_xxx \
buildkite-mcp-server http \
--passthrough-http-header X-User-Identity
Repeat --passthrough-http-header to allow more than one header, or set a comma-separated BUILDKITE_PASSTHROUGH_HTTP_HEADERS value. Only explicitly allowed headers are forwarded, and only to the origin configured by BUILDKITE_BASE_URL. They are removed from requests redirected elsewhere.
To authenticate each MCP request with its own Buildkite API token, allow Authorization and omit the process-wide token:
BUILDKITE_PASSTHROUGH_HTTP_HEADERS=Authorization \
buildkite-mcp-server http
In this mode every /mcp request must contain exactly one non-empty Authorization header. Missing credentials return HTTP 401; the server never falls back to a shared API token. The reverse proxy in front of the MCP server is responsible for authenticating callers and setting or validating any forwarded identity headers.
Header passthrough is not available in stdio mode. Before serving job logs, the server verifies that the current caller can access the job log. This check is performed for every log-tool request, including when the log data is already cached.
Development guidelines are in DEVELOPMENT.md.
MIT © Buildkite
SPDX-License-Identifier: MIT
BUILDKITE_API_TOKEN*secretBuildkite API token for authentication. Get one from https://buildkite.com/user/api-access-tokens