Drone Mcp Server — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Drone Mcp Server (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
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.
go mod tidy
go build -o drone-mcp-server .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_tokenThe 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).
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"
}
}
}
}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
# 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 8080The 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#### list_repos Lists all repositories in your Drone instance.
#### get_repo Get repository details.
Arguments:
owner (string): Repository ownerrepo (string): Repository name#### enable_repo Enable a repository.
Arguments:
owner (string): Repository ownerrepo (string): Repository name#### disable_repo Disable a repository.
Arguments:
owner (string): Repository ownerrepo (string): Repository name#### repair_repo Repair a repository.
Arguments:
owner (string): Repository ownerrepo (string): Repository name#### chown_repo Change repository ownership.
Arguments:
owner (string): Repository ownerrepo (string): Repository name#### sync_repos Synchronize repository list.
#### list_incomplete List repositories with incomplete builds.
#### list_builds Lists builds for a specific repository.
Arguments:
owner (string): Repository ownerrepo (string): Repository name#### get_build Get detailed information about a specific build.
Arguments:
owner (string): Repository ownerrepo (string): Repository namebuild (number): Build number#### get_build_last Get the last build for a repository (optionally by branch).
Arguments:
owner (string): Repository ownerrepo (string): Repository namebranch (string, optional): Branch name#### get_build_logs Get logs for a specific build stage and step.
Arguments:
owner (string): Repository ownerrepo (string): Repository namebuild (number): Build numberstage (number): Stage numberstep (number): Step number#### restart_build Restart a build (optionally with parameters).
Arguments:
owner (string): Repository ownerrepo (string): Repository namebuild (number): Build numberparams (object, optional): Build parameters#### cancel_build Cancel a running build.
Arguments:
owner (string): Repository ownerrepo (string): Repository namebuild (number): Build number#### promote_build Promote a build to a target environment.
Arguments:
owner (string): Repository ownerrepo (string): Repository namebuild (number): Build numbertarget (string): Target environmentparams (object, optional): Promotion parameters#### rollback_build Rollback a deployment to a previous build.
Arguments:
owner (string): Repository ownerrepo (string): Repository namebuild (number): Build numbertarget (string): Target environmentparams (object, optional): Rollback parameters#### approve_build Approve a build stage (for gated deployments).
Arguments:
owner (string): Repository ownerrepo (string): Repository namebuild (number): Build numberstage (number): Stage number#### decline_build Decline a build stage (for gated deployments).
Arguments:
owner (string): Repository ownerrepo (string): Repository namebuild (number): Build numberstage (number): Stage number#### create_build Create a new build from a commit or branch.
Arguments:
owner (string): Repository ownerrepo (string): Repository namecommit (string, optional): Commit SHAbranch (string, optional): Branch nameparams (object, optional): Build parameters#### list_crons List cron jobs for a repository.
Arguments:
owner (string): Repository ownerrepo (string): Repository name#### get_cron Get cron job details.
Arguments:
owner (string): Repository ownerrepo (string): Repository namecron (string): Cron job name#### create_cron Create a new cron job.
Arguments:
owner (string): Repository ownerrepo (string): Repository namename (string): Cron job nameexpr (string): Cron expressionbranch (string): Branch namedisable (boolean, optional): Disable the cron job#### delete_cron Delete a cron job.
Arguments:
owner (string): Repository ownerrepo (string): Repository namecron (string): Cron job name#### execute_cron Execute a cron job immediately.
Arguments:
owner (string): Repository ownerrepo (string): Repository namecron (string): Cron job name#### list_secrets List repository secrets.
Arguments:
owner (string): Repository ownerrepo (string): Repository name#### get_secret Get repository secret details.
Arguments:
owner (string): Repository ownerrepo (string): Repository namename (string): Secret name#### create_secret Create a repository secret.
Arguments:
owner (string): Repository ownerrepo (string): Repository namename (string): Secret namevalue (string): Secret valuepull_request (boolean, optional): Allow in pull requestspull_request_push (boolean, optional): Allow in pull request push events#### update_secret Update a repository secret.
Arguments:
owner (string): Repository ownerrepo (string): Repository namename (string): Secret namevalue (string): Secret valuepull_request (boolean, optional): Allow in pull requestspull_request_push (boolean, optional): Allow in pull request push events#### delete_secret Delete a repository secret.
Arguments:
owner (string): Repository ownerrepo (string): Repository namename (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 namespacename (string): Secret name#### create_org_secret Create an organization secret.
Arguments:
namespace (string): Organization namespacename (string): Secret namevalue (string): Secret valuepull_request (boolean, optional): Allow in pull requestspull_request_push (boolean, optional): Allow in pull request push events#### update_org_secret Update an organization secret.
Arguments:
namespace (string): Organization namespacename (string): Secret namevalue (string): Secret valuepull_request (boolean, optional): Allow in pull requestspull_request_push (boolean, optional): Allow in pull request push events#### delete_org_secret Delete an organization secret.
Arguments:
namespace (string): Organization namespacename (string): Secret name#### 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 nameemail (string, optional): User emailadmin (boolean, optional): Admin privilegesactive (boolean, optional): Active statustoken (string, optional): User token#### update_user Update a user.
Arguments:
login (string): User login nameadmin (boolean, optional): Admin privilegesactive (boolean, optional): Active status#### delete_user Delete a user.
Arguments:
login (string): User login name#### list_templates List templates (optionally by namespace).
Arguments:
namespace (string, optional): Template namespace#### get_template Get template details and data.
Arguments:
namespace (string): Template namespacename (string): Template name#### create_template Create a new template.
Arguments:
namespace (string): Template namespacename (string): Template namedata (string): Template data (YAML)#### update_template Update a template.
Arguments:
namespace (string): Template namespacename (string): Template namedata (string): Template data (YAML)#### delete_template Delete a template.
Arguments:
namespace (string): Template namespacename (string): Template nameAccess build details via resource URI: drone://builds/{owner}/{repo}/{build}
Example:
Read resource: drone://builds/owner1/repo1/123A 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.0version: '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-stoppedPre-built binaries are available for Linux (x64, arm64), macOS (x64, arm64), and Windows (x64) in the GitHub Releases.
The binary includes version information:
./drone-mcp-server --versionOutput example:
drone-mcp-server
Version: v1.0.0
Commit: abc123
Build date: 2024-01-01T00:00:00Z
Go version: go1.25.1.
├── 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.mdgo build -o drone-mcp-server .Set environment variables and run the server:
export DRONE_SERVER=...
export DRONE_TOKEN=...
./drone-mcp-serverMIT
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.