Buildkite MCP Server
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
Recommend MCP Servers 💡
rocketreach-mcp-server
A Model Context Protocol (MCP) server that integrates with the RocketReach API to provide email finding, phone number finding, and company enrichment capabilities.
mcp-jira-server
Comprehensive MCP server for Jira integration with Claude Code
mcp-server-ipfs-context
An MCP server that leverages IPFS for decentralized storage and retrieval of conversational context across sessions.
nacos-mcp-router
A MCP server that provides search, installation, proxy functionalities for other MCP servers with advanced search capabilities.

Rember
Rember is an AI-powered flashcard application that integrates with AI chat platforms like Claude and ChatGPT via an MCP Server, allowing users to easily capture and organize information into flashcards for spaced repetition.
dank-mcp
An MCP server that provides tools and data for cannabis datasets, enabling Large Language Models (LLMs) to answer questions about cannabis products and related information.