drone-mcp-server

drone-mcp-server

Enables to interact with Drone CI/CD for managing repositories, builds, cron jobs, secrets, and users.

Category
访问服务器

README

Drone MCP Server

A Model Context Protocol (MCP) server for interacting with Drone CI/CD. This server provides tools and resources to query build information, repositories, and more from your Drone instance.

Features

  • List repositories: Get all repositories in your Drone instance
  • List builds: List builds for a specific repository
  • Get build details: Retrieve detailed information about a specific build
  • Resource access: Access build details via resource URIs

Installation

go mod tidy
go build -o drone-mcp-server .

Configuration

Set the following environment variables:

export DRONE_SERVER=https://drone.example.com
export DRONE_TOKEN=your_drone_token
# Optional: For SSE transport authentication
export MCP_AUTH_TOKEN=your_sse_auth_token

The DRONE_TOKEN should be a personal access token with appropriate permissions to read repositories and builds.

SSE Authentication: When using SSE transport, you can optionally set MCP_AUTH_TOKEN to require Bearer token authentication. Clients must include Authorization: Bearer <token> header in their requests. If not set, SSE endpoints will be publicly accessible (use with caution in production).

Usage

As an MCP server

Add the server to your MCP client configuration (e.g., Claude Desktop):

{
  "mcpServers": {
    "drone": {
      "command": "/path/to/drone-mcp-server",
      "env": {
        "DRONE_SERVER": "https://drone.example.com",
        "DRONE_TOKEN": "your_token"
      }
    }
  }
}

Direct execution

You can run the server directly for testing:

# Stdio mode (default)
./drone-mcp-server

# SSE HTTP mode
./drone-mcp-server --sse --host localhost --port 8080

Transport Modes

  1. Stdio mode (default): Communicates via stdin/stdout using the MCP protocol. Suitable for local integration with MCP clients.

  2. SSE HTTP mode: Uses Server-Sent Events (SSE) over HTTP. Suitable for remote access or testing.

    # Without authentication (public access)
    ./drone-mcp-server --sse --host 0.0.0.0 --port 8080
    
    # With authentication (recommended for production)
     export MCP_AUTH_TOKEN=your-secret-token
    ./drone-mcp-server --sse --host 0.0.0.0 --port 8080
    

    The server will be available at http://localhost:8080/ for SSE connections.

    Authentication: If MCP_AUTH_TOKEN is set, clients must include the header:

    Authorization: Bearer your-secret-token
    

Available Tools

Repository Management

list_repos

Lists all repositories in your Drone instance.

get_repo

Get repository details.

Arguments:

  • owner (string): Repository owner
  • repo (string): Repository name

enable_repo

Enable a repository.

Arguments:

  • owner (string): Repository owner
  • repo (string): Repository name

disable_repo

Disable a repository.

Arguments:

  • owner (string): Repository owner
  • repo (string): Repository name

repair_repo

Repair a repository.

Arguments:

  • owner (string): Repository owner
  • repo (string): Repository name

chown_repo

Change repository ownership.

Arguments:

  • owner (string): Repository owner
  • repo (string): Repository name

sync_repos

Synchronize repository list.

list_incomplete

List repositories with incomplete builds.

Build Management

list_builds

Lists builds for a specific repository.

Arguments:

  • owner (string): Repository owner
  • repo (string): Repository name

get_build

Get detailed information about a specific build.

Arguments:

  • owner (string): Repository owner
  • repo (string): Repository name
  • build (number): Build number

get_build_last

Get the last build for a repository (optionally by branch).

Arguments:

  • owner (string): Repository owner
  • repo (string): Repository name
  • branch (string, optional): Branch name

get_build_logs

Get logs for a specific build stage and step.

Arguments:

  • owner (string): Repository owner
  • repo (string): Repository name
  • build (number): Build number
  • stage (number): Stage number
  • step (number): Step number

restart_build

Restart a build (optionally with parameters).

Arguments:

  • owner (string): Repository owner
  • repo (string): Repository name
  • build (number): Build number
  • params (object, optional): Build parameters

cancel_build

Cancel a running build.

Arguments:

  • owner (string): Repository owner
  • repo (string): Repository name
  • build (number): Build number

promote_build

Promote a build to a target environment.

Arguments:

  • owner (string): Repository owner
  • repo (string): Repository name
  • build (number): Build number
  • target (string): Target environment
  • params (object, optional): Promotion parameters

rollback_build

Rollback a deployment to a previous build.

Arguments:

  • owner (string): Repository owner
  • repo (string): Repository name
  • build (number): Build number
  • target (string): Target environment
  • params (object, optional): Rollback parameters

approve_build

Approve a build stage (for gated deployments).

Arguments:

  • owner (string): Repository owner
  • repo (string): Repository name
  • build (number): Build number
  • stage (number): Stage number

decline_build

Decline a build stage (for gated deployments).

Arguments:

  • owner (string): Repository owner
  • repo (string): Repository name
  • build (number): Build number
  • stage (number): Stage number

create_build

Create a new build from a commit or branch.

Arguments:

  • owner (string): Repository owner
  • repo (string): Repository name
  • commit (string, optional): Commit SHA
  • branch (string, optional): Branch name
  • params (object, optional): Build parameters

Cron Job Management

list_crons

List cron jobs for a repository.

Arguments:

  • owner (string): Repository owner
  • repo (string): Repository name

get_cron

Get cron job details.

Arguments:

  • owner (string): Repository owner
  • repo (string): Repository name
  • cron (string): Cron job name

create_cron

Create a new cron job.

Arguments:

  • owner (string): Repository owner
  • repo (string): Repository name
  • name (string): Cron job name
  • expr (string): Cron expression
  • branch (string): Branch name
  • disable (boolean, optional): Disable the cron job

delete_cron

Delete a cron job.

Arguments:

  • owner (string): Repository owner
  • repo (string): Repository name
  • cron (string): Cron job name

execute_cron

Execute a cron job immediately.

Arguments:

  • owner (string): Repository owner
  • repo (string): Repository name
  • cron (string): Cron job name

Secret Management

list_secrets

List repository secrets.

Arguments:

  • owner (string): Repository owner
  • repo (string): Repository name

get_secret

Get repository secret details.

Arguments:

  • owner (string): Repository owner
  • repo (string): Repository name
  • name (string): Secret name

create_secret

Create a repository secret.

Arguments:

  • owner (string): Repository owner
  • repo (string): Repository name
  • name (string): Secret name
  • value (string): Secret value
  • pull_request (boolean, optional): Allow in pull requests
  • pull_request_push (boolean, optional): Allow in pull request push events

update_secret

Update a repository secret.

Arguments:

  • owner (string): Repository owner
  • repo (string): Repository name
  • name (string): Secret name
  • value (string): Secret value
  • pull_request (boolean, optional): Allow in pull requests
  • pull_request_push (boolean, optional): Allow in pull request push events

delete_secret

Delete a repository secret.

Arguments:

  • owner (string): Repository owner
  • repo (string): Repository name
  • name (string): Secret name

Organization Secrets

list_org_secrets

List organization secrets.

Arguments:

  • namespace (string): Organization namespace

get_org_secret

Get organization secret details.

Arguments:

  • namespace (string): Organization namespace
  • name (string): Secret name

create_org_secret

Create an organization secret.

Arguments:

  • namespace (string): Organization namespace
  • name (string): Secret name
  • value (string): Secret value
  • pull_request (boolean, optional): Allow in pull requests
  • pull_request_push (boolean, optional): Allow in pull request push events

update_org_secret

Update an organization secret.

Arguments:

  • namespace (string): Organization namespace
  • name (string): Secret name
  • value (string): Secret value
  • pull_request (boolean, optional): Allow in pull requests
  • pull_request_push (boolean, optional): Allow in pull request push events

delete_org_secret

Delete an organization secret.

Arguments:

  • namespace (string): Organization namespace
  • name (string): Secret name

User Management

get_self

Get current authenticated user.

list_users

List all users.

get_user

Get user details.

Arguments:

  • login (string): User login name

create_user

Create a new user.

Arguments:

  • login (string): User login name
  • email (string, optional): User email
  • admin (boolean, optional): Admin privileges
  • active (boolean, optional): Active status
  • token (string, optional): User token

update_user

Update a user.

Arguments:

  • login (string): User login name
  • admin (boolean, optional): Admin privileges
  • active (boolean, optional): Active status

delete_user

Delete a user.

Arguments:

  • login (string): User login name

Template Management

list_templates

List templates (optionally by namespace).

Arguments:

  • namespace (string, optional): Template namespace

get_template

Get template details and data.

Arguments:

  • namespace (string): Template namespace
  • name (string): Template name

create_template

Create a new template.

Arguments:

  • namespace (string): Template namespace
  • name (string): Template name
  • data (string): Template data (YAML)

update_template

Update a template.

Arguments:

  • namespace (string): Template namespace
  • name (string): Template name
  • data (string): Template data (YAML)

delete_template

Delete a template.

Arguments:

  • namespace (string): Template namespace
  • name (string): Template name

Resources

Build details resource

Access build details via resource URI: drone://builds/{owner}/{repo}/{build}

Example:

Read resource: drone://builds/owner1/repo1/123

Docker

A multi-architecture Docker image is available on GitHub Container Registry:

# Pull the latest image
docker pull ghcr.io/yusiwen/drone-mcp-server:latest

# Run in stdio mode (for MCP clients)
docker run -e DRONE_SERVER=https://drone.example.com \
           -e DRONE_TOKEN=your_token \
           ghcr.io/yusiwen/drone-mcp-server

# Run in SSE mode with custom port
docker run -e DRONE_SERVER=https://drone.example.com \
           -e DRONE_TOKEN=your_token \
           -p 8080:8080 \
           ghcr.io/yusiwen/drone-mcp-server --sse --host 0.0.0.0

# Run with SSE authentication
docker run -e DRONE_SERVER=https://drone.example.com \
           -e DRONE_TOKEN=your_token \
           -e MCP_AUTH_TOKEN=your_sse_token \
           -p 8080:8080 \
           ghcr.io/yusiwen/drone-mcp-server --sse --host 0.0.0.0

Docker Compose Example

version: '3.8'
services:
  drone-mcp-server:
    image: ghcr.io/yusiwen/drone-mcp-server:latest
    environment:
      DRONE_SERVER: https://drone.example.com
      DRONE_TOKEN: ${DRONE_TOKEN}
      MCP_AUTH_TOKEN: ${MCP_AUTH_TOKEN:-}
    ports:
      - "8080:8080"
    command: ["--sse", "--host", "0.0.0.0"]
    restart: unless-stopped

Releases

Pre-built binaries are available for Linux (x64, arm64), macOS (x64, arm64), and Windows (x64) in the GitHub Releases.

Version Information

The binary includes version information:

./drone-mcp-server --version

Output example:

drone-mcp-server
Version: v1.0.0
Commit: abc123
Build date: 2024-01-01T00:00:00Z
Go version: go1.25.1

Project Structure

.
├── main.go              # Main entry point, handles command line arguments and server startup
├── tool/                # Tool handlers module
│   ├── build.go         # Build-related tools (list_builds, get_build, restart_build, etc.)
│   ├── repo.go          # Repository-related tools (list_repos, enable_repo, disable_repo, etc.)
│   ├── resource.go      # Resource handling (drone://builds/...)
│   ├── cron.go          # Cron job management tools
│   ├── secret.go        # Secret management tools
│   ├── user.go          # User management tools
│   └── template.go      # Template management tools
├── test_env.sh          # Test script (uses environment variables)
├── test_mcp.go          # MCP integration test
└── README.md

Development

Dependencies

Building

go build -o drone-mcp-server .

Testing

Set environment variables and run the server:

export DRONE_SERVER=...
export DRONE_TOKEN=...
./drone-mcp-server

License

MIT

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选