Buildkite Server
FreeNot checkedEnables interaction with Buildkite CI/CD to list organizations, pipelines, builds, jobs, and logs, as well as retry jobs.
About
Enables interaction with Buildkite CI/CD to list organizations, pipelines, builds, jobs, and logs, as well as retry jobs.
README
A microservice for retrieving information from Buildkite via Model Context Protocol (MCP).
Setup
- Clone this repository
- Run
npm install - Set the
BUILDKITE_ACCESS_TOKENenvironment variable - Start the server with
node index.js
Using with Cursor (MCP Integration)
To add this server to Cursor, you need to configure it in your ~/.cursor/config/mcp.json file:
{
"mcpServers": {
"buildkite": {
"command": "npx",
"args": [
"-y",
"@drew-goddyn/buildkite-mcp"
],
"env": {
"BUILDKITE_ACCESS_TOKEN": "your-buildkite-access-token"
}
}
}
}
With this configuration:
- You don't need to install or run the server manually
- Cursor will automatically start and stop the server as needed
- Replace
your-buildkite-access-tokenwith your actual Buildkite API token
After updating the configuration, restart Cursor to apply the changes.
MCP Endpoints
List Organizations
POST /mcp_buildkite_list_organizations
Request Body:
{
"access_token": "optional-if-set-in-env"
}
Response:
[
{
"id": "org-id",
"name": "Organization Name",
"slug": "organization-slug"
}
]
List Pipelines
POST /mcp_buildkite_list_pipelines
Request Body:
{
"organization": "my-org",
"access_token": "optional-if-set-in-env"
}
Response:
[
{
"id": "pipeline-id",
"name": "Pipeline Name",
"slug": "pipeline-slug"
}
]
List Builds
POST /mcp_buildkite_list_builds
Request Body:
{
"organization": "my-org",
"pipeline": "my-pipeline",
"access_token": "optional-if-set-in-env",
"branch": "main",
"state": "failed",
"per_page": 10,
"page": 1
}
Response:
[
{
"id": "build-id",
"number": 123,
"state": "failed"
}
]
Get Build Details
POST /mcp_buildkite_get_build
Request Body:
{
"organization": "my-org",
"pipeline": "my-pipeline",
"build_number": 123,
"access_token": "optional-if-set-in-env"
}
Response:
{
"id": "build-id",
"number": 123,
"jobs": [
{
"id": "job-id",
"name": "Job Name",
"state": "failed"
}
]
}
List All Jobs
POST /mcp_buildkite_list_jobs
Request Body:
{
"organization": "my-org",
"pipeline": "my-pipeline",
"build_number": 123,
"access_token": "optional-if-set-in-env"
}
Response:
[
{
"id": "job-id",
"name": "Job Name",
"state": "failed"
}
]
List Failed Jobs
POST /mcp_buildkite_list_failed_jobs
Request Body:
{
"organization": "my-org",
"pipeline": "my-pipeline",
"build_number": 123,
"access_token": "optional-if-set-in-env"
}
Response:
[
{
"id": "01234567-89ab-cdef-0123-456789abcdef",
"name": "Test Job",
"state": "failed",
"web_url": "https://buildkite.com/my-org/my-pipeline/builds/123#01234567-89ab-cdef-0123-456789abcdef"
}
]
List Job Spec Failures
POST /mcp_buildkite_list_job_spec_failures
Request Body:
{
"organization": "my-org",
"pipeline": "my-pipeline",
"build_number": 123,
"job_id": "01234567-89ab-cdef-0123-456789abcdef",
"access_token": "optional-if-set-in-env"
}
Response:
[
{
"type": "RSpec",
"spec": "./spec/path/to/file_spec.rb:123",
"message": "Expected result to be X but got Y"
}
]
Get Job Log
POST /mcp_buildkite_get_job_log
Request Body:
{
"organization": "my-org",
"pipeline": "my-pipeline",
"build_number": 123,
"job_id": "01234567-89ab-cdef-0123-456789abcdef",
"access_token": "optional-if-set-in-env",
"limit": 100 // optional, defaults to all content
}
Response:
{
"content": "...log content...",
"size": 12345,
"format": "raw"
}
List Failed Specs from Build URL
POST /mcp_buildkite_list_failed_specs
Request Body:
{
"build_url": "https://buildkite.com/my-org/my-pipeline/builds/123",
"access_token": "optional-if-set-in-env"
}
Response:
{
"build_url": "https://buildkite.com/my-org/my-pipeline/builds/123",
"failed_job_count": 2,
"jobs": [
{
"id": "01234567-89ab-cdef-0123-456789abcdef",
"name": "Test Job 1",
"web_url": "https://buildkite.com/my-org/my-pipeline/builds/123#01234567-89ab-cdef-0123-456789abcdef",
"failures": [
{
"spec": "./spec/path/to/file_spec.rb:123",
"message": "Expected result to be X but got Y"
}
]
},
{
"id": "fedcba98-7654-3210-fedc-ba9876543210",
"name": "Test Job 2",
"web_url": "https://buildkite.com/my-org/my-pipeline/builds/123#fedcba98-7654-3210-fedc-ba9876543210",
"failures": []
}
],
"failures": [
{
"job_id": "01234567-89ab-cdef-0123-456789abcdef",
"job_name": "Test Job 1",
"job_url": "https://buildkite.com/my-org/my-pipeline/builds/123#01234567-89ab-cdef-0123-456789abcdef",
"spec": "./spec/path/to/file_spec.rb:123",
"message": "Expected result to be X but got Y"
}
]
}
Retry Job
POST /mcp_buildkite_retry_job
Request Body:
{
"organization": "my-org",
"pipeline": "my-pipeline",
"build_number": 123,
"job_id": "01234567-89ab-cdef-0123-456789abcdef",
"access_token": "optional-if-set-in-env"
}
Response:
{
"id": "job-id",
"state": "scheduled"
}
List Pipeline Build Failures
POST /mcp_buildkite_list_pipeline_build_failures
Request Body:
{
"organization": "my-org",
"pipeline": "my-pipeline",
"state": "finished",
"per_page": 10,
"page": 1,
"access_token": "optional-if-set-in-env"
}
Response:
[
{
"build_number": 123,
"build_url": "https://buildkite.com/my-org/my-pipeline/builds/123",
"failed_jobs": [
{
"name": "Test Job",
"url": "https://buildkite.com/my-org/my-pipeline/builds/123#01234567-89ab-cdef-0123-456789abcdef"
}
]
}
]
Environment Variables
BUILDKITE_ACCESS_TOKEN: Your Buildkite API token with read accessPORT: (Optional) Port to run the server on (default: 63330)
Error Handling
The server returns appropriate HTTP status codes and error messages when something goes wrong:
400: Bad Request - Missing or invalid parameters401: Unauthorized - Invalid or missing access token404: Not Found - Resource not found500: Internal Server Error - Server-side error
Install Buildkite Server in Claude Desktop, Claude Code & Cursor
unyly install buildkite-mcp-serverInstalls into Claude Desktop, Claude Code, Cursor & VS Code — handles npx, uvx and build-from-source repos for you.
First time? Get the CLI: curl -fsSL https://unyly.org/install | sh
Or configure manually
Run in your terminal:
claude mcp add buildkite-mcp-server -- npx -y github:Drew-Goddyn/buildkite-mcpFAQ
Is Buildkite Server MCP free?
Yes, Buildkite Server MCP is free — one-click install via Unyly at no cost.
Does Buildkite Server need an API key?
No, Buildkite Server runs without API keys or environment variables.
Is Buildkite Server hosted or self-hosted?
A hosted option is available: Unyly runs the server in the cloud, no local setup required.
How do I install Buildkite Server in Claude Desktop, Claude Code or Cursor?
Open Buildkite Server on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.
Related MCPs
GitHub
PRs, issues, code search, CI status
by GitHubFilesystem
Secure file operations with configurable access controls.
Memory
Knowledge graph-based persistent memory system.
Template MCP Server
A CLI tool to create a new Model Context Protocol server project with TypeScript support, dual transport options, and an extensible structure
by mcpdotdirectCompare Buildkite Server with
Not sure what to pick?
Find your stack in 60 seconds
Author?
Embed badge for your README
Browse similar
All development MCPs
