{
  "markdown": "# Drone MCP Server\n\nA 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.\n\n## Features\n\n- **List repositories**: Get all repositories in your Drone instance\n- **List builds**: List builds for a specific repository\n- **Get build details**: Retrieve detailed information about a specific build\n- **Resource access**: Access build details via resource URIs\n\n## Installation\n\n```bash\ngo mod tidy\ngo build -o drone-mcp-server .\n```\n\n## Configuration\n\nSet the following environment variables:\n\n```bash\nexport DRONE_SERVER=https://drone.example.com\nexport DRONE_TOKEN=your_drone_token\n# Optional: For SSE transport authentication\nexport MCP_AUTH_TOKEN=your_sse_auth_token\n```\n\nThe `DRONE_TOKEN` should be a personal access token with appropriate permissions to read repositories and builds.\n\n**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).\n\n## Usage\n\n### As an MCP server\n\nAdd the server to your MCP client configuration (e.g., Claude Desktop):\n\n```json\n{\n  \"mcpServers\": {\n    \"drone\": {\n      \"command\": \"/path/to/drone-mcp-server\",\n      \"env\": {\n        \"DRONE_SERVER\": \"https://drone.example.com\",\n        \"DRONE_TOKEN\": \"your_token\"\n      }\n    }\n  }\n}\n```\n\n### Direct execution\n\nYou can run the server directly for testing:\n\n```bash\n# Stdio mode (default)\n./drone-mcp-server\n\n# SSE HTTP mode\n./drone-mcp-server --sse --host localhost --port 8080\n```\n\n#### Transport Modes\n\n1. **Stdio mode (default)**: Communicates via stdin/stdout using the MCP protocol. Suitable for local integration with MCP clients.\n\n2. **SSE HTTP mode**: Uses Server-Sent Events (SSE) over HTTP. Suitable for remote access or testing.\n\n   ```bash\n   # Without authentication (public access)\n   ./drone-mcp-server --sse --host 0.0.0.0 --port 8080\n   \n   # With authentication (recommended for production)\n    export MCP_AUTH_TOKEN=your-secret-token\n   ./drone-mcp-server --sse --host 0.0.0.0 --port 8080\n   ```\n   \n   The server will be available at `http://localhost:8080/` for SSE connections.\n   \n    **Authentication**: If `MCP_AUTH_TOKEN` is set, clients must include the header:\n   ```\n   Authorization: Bearer your-secret-token\n   ```\n\n## Available Tools\n\n### Repository Management\n\n#### `list_repos`\nLists all repositories in your Drone instance.\n\n#### `get_repo`\nGet repository details.\n\n**Arguments:**\n- `owner` (string): Repository owner\n- `repo` (string): Repository name\n\n#### `enable_repo`\nEnable a repository.\n\n**Arguments:**\n- `owner` (string): Repository owner\n- `repo` (string): Repository name\n\n#### `disable_repo`\nDisable a repository.\n\n**Arguments:**\n- `owner` (string): Repository owner\n- `repo` (string): Repository name\n\n#### `repair_repo`\nRepair a repository.\n\n**Arguments:**\n- `owner` (string): Repository owner\n- `repo` (string): Repository name\n\n#### `chown_repo`\nChange repository ownership.\n\n**Arguments:**\n- `owner` (string): Repository owner\n- `repo` (string): Repository name\n\n#### `sync_repos`\nSynchronize repository list.\n\n#### `list_incomplete`\nList repositories with incomplete builds.\n\n### Build Management\n\n#### `list_builds`\nLists builds for a specific repository.\n\n**Arguments:**\n- `owner` (string): Repository owner\n- `repo` (string): Repository name\n\n#### `get_build`\nGet detailed information about a specific build.\n\n**Arguments:**\n- `owner` (string): Repository owner\n- `repo` (string): Repository name\n- `build` (number): Build number\n\n#### `get_build_last`\nGet the last build for a repository (optionally by branch).\n\n**Arguments:**\n- `owner` (string): Repository owner\n- `repo` (string): Repository name\n- `branch` (string, optional): Branch name\n\n#### `get_build_logs`\nGet logs for a specific build stage and step.\n\n**Arguments:**\n- `owner` (string): Repository owner\n- `repo` (string): Repository name\n- `build` (number): Build number\n- `stage` (number): Stage number\n- `step` (number): Step number\n\n#### `restart_build`\nRestart a build (optionally with parameters).\n\n**Arguments:**\n- `owner` (string): Repository owner\n- `repo` (string): Repository name\n- `build` (number): Build number\n- `params` (object, optional): Build parameters\n\n#### `cancel_build`\nCancel a running build.\n\n**Arguments:**\n- `owner` (string): Repository owner\n- `repo` (string): Repository name\n- `build` (number): Build number\n\n#### `promote_build`\nPromote a build to a target environment.\n\n**Arguments:**\n- `owner` (string): Repository owner\n- `repo` (string): Repository name\n- `build` (number): Build number\n- `target` (string): Target environment\n- `params` (object, optional): Promotion parameters\n\n#### `rollback_build`\nRollback a deployment to a previous build.\n\n**Arguments:**\n- `owner` (string): Repository owner\n- `repo` (string): Repository name\n- `build` (number): Build number\n- `target` (string): Target environment\n- `params` (object, optional): Rollback parameters\n\n#### `approve_build`\nApprove a build stage (for gated deployments).\n\n**Arguments:**\n- `owner` (string): Repository owner\n- `repo` (string): Repository name\n- `build` (number): Build number\n- `stage` (number): Stage number\n\n#### `decline_build`\nDecline a build stage (for gated deployments).\n\n**Arguments:**\n- `owner` (string): Repository owner\n- `repo` (string): Repository name\n- `build` (number): Build number\n- `stage` (number): Stage number\n\n#### `create_build`\nCreate a new build from a commit or branch.\n\n**Arguments:**\n- `owner` (string): Repository owner\n- `repo` (string): Repository name\n- `commit` (string, optional): Commit SHA\n- `branch` (string, optional): Branch name\n- `params` (object, optional): Build parameters\n\n### Cron Job Management\n\n#### `list_crons`\nList cron jobs for a repository.\n\n**Arguments:**\n- `owner` (string): Repository owner\n- `repo` (string): Repository name\n\n#### `get_cron`\nGet cron job details.\n\n**Arguments:**\n- `owner` (string): Repository owner\n- `repo` (string): Repository name\n- `cron` (string): Cron job name\n\n#### `create_cron`\nCreate a new cron job.\n\n**Arguments:**\n- `owner` (string): Repository owner\n- `repo` (string): Repository name\n- `name` (string): Cron job name\n- `expr` (string): Cron expression\n- `branch` (string): Branch name\n- `disable` (boolean, optional): Disable the cron job\n\n#### `delete_cron`\nDelete a cron job.\n\n**Arguments:**\n- `owner` (string): Repository owner\n- `repo` (string): Repository name\n- `cron` (string): Cron job name\n\n#### `execute_cron`\nExecute a cron job immediately.\n\n**Arguments:**\n- `owner` (string): Repository owner\n- `repo` (string): Repository name\n- `cron` (string): Cron job name\n\n### Secret Management\n\n#### `list_secrets`\nList repository secrets.\n\n**Arguments:**\n- `owner` (string): Repository owner\n- `repo` (string): Repository name\n\n#### `get_secret`\nGet repository secret details.\n\n**Arguments:**\n- `owner` (string): Repository owner\n- `repo` (string): Repository name\n- `name` (string): Secret name\n\n#### `create_secret`\nCreate a repository secret.\n\n**Arguments:**\n- `owner` (string): Repository owner\n- `repo` (string): Repository name\n- `name` (string): Secret name\n- `value` (string): Secret value\n- `pull_request` (boolean, optional): Allow in pull requests\n- `pull_request_push` (boolean, optional): Allow in pull request push events\n\n#### `update_secret`\nUpdate a repository secret.\n\n**Arguments:**\n- `owner` (string): Repository owner\n- `repo` (string): Repository name\n- `name` (string): Secret name\n- `value` (string): Secret value\n- `pull_request` (boolean, optional): Allow in pull requests\n- `pull_request_push` (boolean, optional): Allow in pull request push events\n\n#### `delete_secret`\nDelete a repository secret.\n\n**Arguments:**\n- `owner` (string): Repository owner\n- `repo` (string): Repository name\n- `name` (string): Secret name\n\n#### Organization Secrets\n\n#### `list_org_secrets`\nList organization secrets.\n\n**Arguments:**\n- `namespace` (string): Organization namespace\n\n#### `get_org_secret`\nGet organization secret details.\n\n**Arguments:**\n- `namespace` (string): Organization namespace\n- `name` (string): Secret name\n\n#### `create_org_secret`\nCreate an organization secret.\n\n**Arguments:**\n- `namespace` (string): Organization namespace\n- `name` (string): Secret name\n- `value` (string): Secret value\n- `pull_request` (boolean, optional): Allow in pull requests\n- `pull_request_push` (boolean, optional): Allow in pull request push events\n\n#### `update_org_secret`\nUpdate an organization secret.\n\n**Arguments:**\n- `namespace` (string): Organization namespace\n- `name` (string): Secret name\n- `value` (string): Secret value\n- `pull_request` (boolean, optional): Allow in pull requests\n- `pull_request_push` (boolean, optional): Allow in pull request push events\n\n#### `delete_org_secret`\nDelete an organization secret.\n\n**Arguments:**\n- `namespace` (string): Organization namespace\n- `name` (string): Secret name\n\n### User Management\n\n#### `get_self`\nGet current authenticated user.\n\n#### `list_users`\nList all users.\n\n#### `get_user`\nGet user details.\n\n**Arguments:**\n- `login` (string): User login name\n\n#### `create_user`\nCreate a new user.\n\n**Arguments:**\n- `login` (string): User login name\n- `email` (string, optional): User email\n- `admin` (boolean, optional): Admin privileges\n- `active` (boolean, optional): Active status\n- `token` (string, optional): User token\n\n#### `update_user`\nUpdate a user.\n\n**Arguments:**\n- `login` (string): User login name\n- `admin` (boolean, optional): Admin privileges\n- `active` (boolean, optional): Active status\n\n#### `delete_user`\nDelete a user.\n\n**Arguments:**\n- `login` (string): User login name\n\n### Template Management\n\n#### `list_templates`\nList templates (optionally by namespace).\n\n**Arguments:**\n- `namespace` (string, optional): Template namespace\n\n#### `get_template`\nGet template details and data.\n\n**Arguments:**\n- `namespace` (string): Template namespace\n- `name` (string): Template name\n\n#### `create_template`\nCreate a new template.\n\n**Arguments:**\n- `namespace` (string): Template namespace\n- `name` (string): Template name\n- `data` (string): Template data (YAML)\n\n#### `update_template`\nUpdate a template.\n\n**Arguments:**\n- `namespace` (string): Template namespace\n- `name` (string): Template name\n- `data` (string): Template data (YAML)\n\n#### `delete_template`\nDelete a template.\n\n**Arguments:**\n- `namespace` (string): Template namespace\n- `name` (string): Template name\n\n## Resources\n\n### Build details resource\n\nAccess build details via resource URI: `drone://builds/{owner}/{repo}/{build}`\n\n**Example:**\n```\nRead resource: drone://builds/owner1/repo1/123\n```\n\n## Docker\n\nA multi-architecture Docker image is available on GitHub Container Registry:\n\n```bash\n# Pull the latest image\ndocker pull ghcr.io/yusiwen/drone-mcp-server:latest\n\n# Run in stdio mode (for MCP clients)\ndocker run -e DRONE_SERVER=https://drone.example.com \\\n           -e DRONE_TOKEN=your_token \\\n           ghcr.io/yusiwen/drone-mcp-server\n\n# Run in SSE mode with custom port\ndocker run -e DRONE_SERVER=https://drone.example.com \\\n           -e DRONE_TOKEN=your_token \\\n           -p 8080:8080 \\\n           ghcr.io/yusiwen/drone-mcp-server --sse --host 0.0.0.0\n\n# Run with SSE authentication\ndocker run -e DRONE_SERVER=https://drone.example.com \\\n           -e DRONE_TOKEN=your_token \\\n           -e MCP_AUTH_TOKEN=your_sse_token \\\n           -p 8080:8080 \\\n           ghcr.io/yusiwen/drone-mcp-server --sse --host 0.0.0.0\n```\n\n### Docker Compose Example\n\n```yaml\nversion: '3.8'\nservices:\n  drone-mcp-server:\n    image: ghcr.io/yusiwen/drone-mcp-server:latest\n    environment:\n      DRONE_SERVER: https://drone.example.com\n      DRONE_TOKEN: ${DRONE_TOKEN}\n      MCP_AUTH_TOKEN: ${MCP_AUTH_TOKEN:-}\n    ports:\n      - \"8080:8080\"\n    command: [\"--sse\", \"--host\", \"0.0.0.0\"]\n    restart: unless-stopped\n```\n\n## Releases\n\nPre-built binaries are available for Linux (x64, arm64), macOS (x64, arm64), and Windows (x64) in the [GitHub Releases](https://github.com/yusiwen/drone-mcp-server/releases).\n\n### Version Information\n\nThe binary includes version information:\n\n```bash\n./drone-mcp-server --version\n```\n\nOutput example:\n```\ndrone-mcp-server\nVersion: v1.0.0\nCommit: abc123\nBuild date: 2024-01-01T00:00:00Z\nGo version: go1.25.1\n```\n\n## Project Structure\n\n```\n.\n├── main.go              # Main entry point, handles command line arguments and server startup\n├── tool/                # Tool handlers module\n│   ├── build.go         # Build-related tools (list_builds, get_build, restart_build, etc.)\n│   ├── repo.go          # Repository-related tools (list_repos, enable_repo, disable_repo, etc.)\n│   ├── resource.go      # Resource handling (drone://builds/...)\n│   ├── cron.go          # Cron job management tools\n│   ├── secret.go        # Secret management tools\n│   ├── user.go          # User management tools\n│   └── template.go      # Template management tools\n├── test_env.sh          # Test script (uses environment variables)\n├── test_mcp.go          # MCP integration test\n└── README.md\n```\n\n## Development\n\n### Dependencies\n\n- Go 1.21+\n- [github.com/modelcontextprotocol/go-sdk](https://github.com/modelcontextprotocol/go-sdk) - MCP SDK\n- [github.com/drone/drone-go](https://github.com/drone/drone-go) - Drone API client\n\n### Building\n\n```bash\ngo build -o drone-mcp-server .\n```\n\n### Testing\n\nSet environment variables and run the server:\n\n```bash\nexport DRONE_SERVER=...\nexport DRONE_TOKEN=...\n./drone-mcp-server\n```\n\n## License\n\nMIT",
  "bytes": 13667,
  "sha": "bc8ef0becc40f78daf5d3e35ad3e229e92ad7ac31e40056e1f55e6f4cc34b45d",
  "repo_slug": "yusiwen/drone-mcp-server",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_yusiwen_drone_mcp_server_8307c47e/readme"
}