mcpField
B
Buildkite MCP Server

Buildkite MCP Server

本地服务
github.com/Drew-Goddyn云与基础设施482 周前更新

关于 Buildkite MCP Server

Buildkite MCP Server 可查询 Buildkite 的组织、流水线、构建和任务信息,并支持重试任务,适合通过 MCP 客户端检查 CI 结果和排查构建失败的团队。

主要功能

  1. 01列出组织和流水线
  2. 02筛选并查看构建
  3. 03获取任务详情和日志
  4. 04检查失败任务与测试
  5. 05重试任务

适用场景

  1. 01查找流水线中的失败构建
  2. 02排查任务日志和测试失败
  3. 03重试失败的 Buildkite 任务

MCP 相关

它向 MCP 客户端提供查询 Buildkite 组织、流水线、构建、任务、日志和失败信息的工具,并支持重试任务。需要 Buildkite API 令牌。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"buildkite": {
"command": "npx",
"args": [
"-y",
"@drew-goddyn/buildkite-mcp"
],
"env": {
"BUILDKITE_ACCESS_TOKEN": "<BUILDKITE_ACCESS_TOKEN>"
}
}
}
}
启动命令npx -y @drew-goddyn/buildkite-mcp
需要配置的环境变量
BUILDKITE_ACCESS_TOKEN密钥

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@drew-goddyn/buildkite-mcp

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Buildkite MCP 服务

一个通过 Model Context Protocol(MCP)从 Buildkite 获取信息的微服务。

设置

  1. 克隆此仓库
  2. 运行 npm install
  3. 设置 BUILDKITE_ACCESS_TOKEN 环境变量
  4. 使用 node index.js 启动服务

与 Cursor 配合使用(MCP 集成)

要将此服务添加到 Cursor,需要在 ~/.cursor/config/mcp.json 文件中进行配置:

{
  "mcpServers": {
    "buildkite": {
      "command": "npx",
      "args": [
        "-y",
        "@drew-goddyn/buildkite-mcp"
      ],
      "env": {
        "BUILDKITE_ACCESS_TOKEN": "your-buildkite-access-token"
      }
    }
  }
}

使用此配置:

  • 无需手动安装或运行服务
  • Cursor 会根据需要自动启动和停止服务
  • 将 your-buildkite-access-token 替换为实际的 Buildkite API 令牌

更新配置后,重启 Cursor 以应用更改。

MCP 端点

列出组织
POST /mcp_buildkite_list_organizations

请求正文:

{
  "access_token": "optional-if-set-in-env"
}

响应:

[
  {
    "id": "org-id",
    "name": "Organization Name",
    "slug": "organization-slug"
  }
]
列出流水线
POST /mcp_buildkite_list_pipelines

请求正文:

{
  "organization": "my-org",
  "access_token": "optional-if-set-in-env"
}

响应:

[
  {
    "id": "pipeline-id",
    "name": "Pipeline Name",
    "slug": "pipeline-slug"
  }
]
列出构建
POST /mcp_buildkite_list_builds

请求正文:

{
  "organization": "my-org",
  "pipeline": "my-pipeline",
  "access_token": "optional-if-set-in-env",
  "branch": "main",
  "state": "failed",
  "per_page": 10,
  "page": 1
}

响应:

[
  {
    "id": "build-id",
    "number": 123,
    "state": "failed"
  }
]
获取构建详情
POST /mcp_buildkite_get_build

请求正文:

{
  "organization": "my-org",
  "pipeline": "my-pipeline",
  "build_number": 123,
  "access_token": "optional-if-set-in-env"
}

响应:

{
  "id": "build-id",
  "number": 123,
  "jobs": [
    {
      "id": "job-id",
      "name": "Job Name",
      "state": "failed"
    }
  ]
}
列出所有作业
POST /mcp_buildkite_list_jobs

请求正文:

{
  "organization": "my-org",
  "pipeline": "my-pipeline",
  "build_number": 123,
  "access_token": "optional-if-set-in-env"
}

响应:

[
  {
    "id": "job-id",
    "name": "Job Name",
    "state": "failed"
  }
]
列出失败的作业
POST /mcp_buildkite_list_failed_jobs

请求正文:

{
  "organization": "my-org",
  "pipeline": "my-pipeline",
  "build_number": 123,
  "access_token": "optional-if-set-in-env"
}

响应:

[
  {
    "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"
  }
]
列出作业规范失败
POST /mcp_buildkite_list_job_spec_failures

请求正文:

{
  "organization": "my-org",
  "pipeline": "my-pipeline",
  "build_number": 123,
  "job_id": "01234567-89ab-cdef-0123-456789abcdef",
  "access_token": "optional-if-set-in-env"
}

响应:

[
  {
    "type": "RSpec",
    "spec": "./spec/path/to/file_spec.rb:123",
    "message": "Expected result to be X but got Y"
  }
]
获取作业日志
POST /mcp_buildkite_get_job_log

请求正文:

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

响应:

{
  "content": "...log content...",
  "size": 12345,
  "format": "raw"
}
从构建 URL 列出失败的规范
POST /mcp_buildkite_list_failed_specs

请求正文:

{
  "build_url": "https://buildkite.com/my-org/my-pipeline/builds/123",
  "access_token": "optional-if-set-in-env"
}

响应:

{
  "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"
    }
  ]
}
重试作业
POST /mcp_buildkite_retry_job

请求正文:

{
  "organization": "my-org",
  "pipeline": "my-pipeline",
  "build_number": 123,
  "job_id": "01234567-89ab-cdef-0123-456789abcdef",
  "access_token": "optional-if-set-in-env"
}

响应:

{
  "id": "job-id",
  "state": "scheduled"
}
列出流水线构建失败
POST /mcp_buildkite_list_pipeline_build_failures

请求正文:

{
  "organization": "my-org",
  "pipeline": "my-pipeline",
  "state": "finished",
  "per_page": 10,
  "page": 1,
  "access_token": "optional-if-set-in-env"
}

响应:

[
  {
    "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"
      }
    ]
  }
]

环境变量

  • BUILDKITE_ACCESS_TOKEN:具有读取权限的 Buildkite API 令牌
  • PORT:(可选)运行服务的端口(默认值:63330)

错误处理

发生问题时,服务会返回适当的 HTTP 状态码和错误消息:

  • 400:错误请求 - 缺少或无效的参数
  • 401:未授权 - 访问令牌无效或缺失
  • 404:未找到 - 未找到资源
  • 500:内部服务器错误 - 服务端错误

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。