# GeiserX/spinnaker-mcp [Health: Active]

**Category:** ☁️ Cloud Platforms  
**Repository:** https://github.com/GeiserX/spinnaker-mcp  
**GitHub Stars:** 5  
**npm Downloads (last month):** 245  
**Views:** 1  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/geiserx-spinnaker-mcp

## Description
A bridge that exposes any Spinnaker instance as an MCP server via the Gate API, enabling management of applications, pipelines, executions, and cloud infrastructure.

## Tools
Capabilities this server exposes over MCP:

- **cancel_execution** — Cancel a running pipeline execution by its ID, optionally providing a reason. Use this to stop a deployment in progress — for example, when a bad build was triggered. Does not roll back completed stages. Returns a confirmation message.
- **delete_pipeline** — Permanently delete a pipeline configuration from Spinnaker. Use this only when a pipeline is no longer needed — this action cannot be undone. Does not affect past executions. Returns a confirmation message on success.
- **delete_strategy** — Permanently delete a deployment strategy configuration from Spinnaker. Use this only when a strategy is no longer needed — this action cannot be undone. Returns a confirmation message on success.
- **evaluate_expression** — Evaluate a Spring Expression Language (SpEL) expression against a pipeline execution context. Use this to inspect pipeline variables, stage outputs, or computed values during debugging. Dangerous patterns (reflection, class instantiation) are blocked for security. Returns the evaluated expression result as JSON.
- **find_images** — Search for machine images (AMIs, GCE images, Docker images) available in Spinnaker for a given cloud provider. Use this to find images for a deployment or verify which image versions are available. Supports filtering by query string, region, and account. Returns JSON array of matching image objects.
- **get_account** — Get details for a specific Spinnaker account by name, including its cloud provider type, permissions, and regions. Use this to verify account configuration or check permissions before deploying. Returns JSON with full account metadata.
- **get_application** — Get detailed information about a single Spinnaker application including its accounts, clusters, and custom attributes. Use this to inspect an application's configuration before modifying its pipelines or infrastructure. Returns JSON with application metadata, associated cloud accounts, and cluster details.
- **get_cluster** — Get details for a specific cluster in a Spinnaker application by account and cluster name. Use this to inspect server groups, load balancers, and instance counts within a cluster. Returns JSON with cluster metadata and its constituent server groups.
- **get_console_output** — Get the console output (boot log) for a specific compute instance. Use this to debug instance startup failures or inspect early boot messages. Requires account, region, and instance ID. Returns the raw console output text.
- **get_execution** — Get the full details of a single pipeline execution by its ID, including all stage statuses, outputs, variables, and timing. Use this to debug a failed deployment or inspect execution progress. Returns comprehensive JSON with per-stage results. Obtain the execution_id from trigger_pipeline, list_executions, or search_executions.
- **get_firewall** — Get details for a specific firewall rule (security group) by account, region, and name. Use this to inspect inbound/outbound rules and associated resources. Returns JSON with the firewall's full rule set and metadata.
- **get_image_tags** — Get available tags for a Docker image repository registered in Spinnaker. Use this to list version tags before triggering a pipeline with a specific image tag. Returns JSON array of tag strings for the specified repository.
- **get_instance** — Get details for a specific compute instance by account, region, and instance ID. Use this to inspect instance health, metadata, launch time, and cloud-specific attributes. Returns JSON with full instance details including health indicators.
- **get_pipeline** — Get the full configuration of a specific pipeline by application and pipeline name. Use this to inspect pipeline stages, triggers, and parameters before triggering or modifying it. Returns the complete pipeline JSON definition including all stage configurations.
- **get_pipeline_history** — Get the version history of a pipeline configuration showing past revisions. Use this to audit changes to a pipeline or compare previous configurations. Returns JSON array of historical pipeline versions ordered by update time.
- **get_scaling_activities** — Get scaling activities for a server group in a Spinnaker cluster. Use this to audit recent auto-scaling events (scale-up, scale-down) and diagnose capacity issues. Returns JSON array of scaling activity records with timestamps, descriptions, and status.
- **get_target_server_group** — Get a specific server group in a Spinnaker cluster using a target selection strategy (e.g., newest, oldest, largest, smallest, fail). Use this when you need the most recently deployed or a specific server group without knowing its exact name. Returns JSON with the matched server group details.
- **get_task** — Get the status and details of a Spinnaker orchestration task (e.g., deploy, resize, rollback, delete). Use this to monitor the progress of a long-running infrastructure operation. Returns JSON with task status, start/end times, retry info, and step-by-step execution details.
- **list_accounts** — List all configured Spinnaker accounts (cloud provider integrations). Use this to discover available cloud accounts before querying infrastructure or deploying. Returns JSON array of account objects with provider type, environment, and permissions.
- **list_applications** — List all Spinnaker applications with their metadata. Use this as a starting point to discover available applications before querying pipelines or infrastructure. Returns JSON array of application objects with name, email, accounts, and cloud providers.
- **list_clusters** — List all cluster names for a Spinnaker application, grouped by account. Use this to discover clusters before drilling into a specific one with get_cluster. Returns JSON object mapping account names to arrays of cluster names.
- **list_executions** — List recent pipeline executions for a Spinnaker application, optionally filtered by status. Use this to monitor deployment activity or find a specific execution ID. Returns JSON array of execution summaries with status, timing, and trigger info. Use get_execution for full details of a specific run.
- **list_firewalls** — List all firewall rules (security groups) across all Spinnaker accounts and regions. Use this to audit network security posture or find a specific security group before inspecting it with get_firewall. Returns JSON array of firewall objects grouped by account and region.
- **list_load_balancers** — List all load balancers for a Spinnaker application across all accounts and regions. Use this to inspect network routing and health check configuration for an application. Returns JSON array of load balancer objects with listener, health check, and attached server group details.
- **list_networks** — List all networks (VPCs) across all Spinnaker accounts and cloud providers. Use this to discover available networks when configuring deployment targets or security groups. Returns JSON array of network objects with provider, account, and CIDR details.
- **list_pipelines** — List all pipeline configurations for a Spinnaker application. Use this to discover available pipelines before triggering or inspecting a specific one. Returns JSON array of pipeline configuration objects with name, stages, triggers, and parameters.
- **list_server_groups** — List all server groups (ASGs, instance groups, replica sets) for a Spinnaker application. Use this to view active deployment targets and their instance counts across regions and accounts. Returns JSON array of server group objects with instance counts, cloud provider details, and region info.
- **list_strategies** — List all deployment strategy configurations for a Spinnaker application. Use this to discover available strategies (e.g., red/black, rolling, canary) before saving or modifying one. Returns JSON array of strategy configuration objects.
- **list_subnets** — List all subnets for a given cloud provider across Spinnaker accounts. Use this to discover available subnets when configuring server groups or deployment targets. Returns JSON array of subnet objects with CIDR, availability zone, and VPC association.
- **pause_execution** — Pause a running pipeline execution at the current stage boundary. Use this to temporarily halt a deployment for manual review before it continues to the next stage. The execution can be resumed later with resume_execution. Returns a confirmation message.
- **restart_stage** — Restart a specific failed or completed stage within a pipeline execution. Use this to retry a stage that failed due to a transient error without re-running the entire pipeline. Requires the execution ID and stage ID. Returns a confirmation message.
- **resume_execution** — Resume a previously paused pipeline execution, continuing from where it was halted. Use this after pause_execution once the manual review or intervention is complete. Returns a confirmation message.
- **save_pipeline** — Save a new pipeline configuration to Spinnaker. Use this to create a brand-new pipeline definition — use update_pipeline instead to modify an existing one. Accepts a full pipeline JSON definition and returns a confirmation. This is a mutating operation that creates a new pipeline visible in the Spinnaker UI.
- **save_strategy** — Save a new deployment strategy configuration to Spinnaker. Use this to create a reusable deployment strategy (e.g., red/black, rolling push, canary) — use delete_strategy to remove one. Accepts a full strategy JSON definition and returns a confirmation.
- **search_executions** — Search pipeline executions across an application with rich filters such as status, trigger type, and time range. Use this instead of list_executions when you need to find executions matching specific criteria. Returns JSON array of matching execution summaries.
- **trigger_pipeline** — Trigger a new pipeline execution with optional parameters. Use this to start a deployment, build, or any configured pipeline workflow. Returns the execution reference ID that can be passed to get_execution or list_executions to monitor progress. This is a mutating operation that starts a real pipeline run.
- **update_pipeline** — Update an existing pipeline configuration in Spinnaker. Use this to modify stages, triggers, or parameters of a pipeline that already exists — use save_pipeline instead to create a new one. Accepts a full pipeline JSON definition and returns a confirmation. This is a mutating operation that overwrites the current pipeline config.

## Claude Desktop Quick Installation
Install path detected from listing signals. Uses `npx` (confidence: high):

```json
"mcpServers": {
  "spinnaker-mcp": {
    "command": "npx",
    "args": ["-y","spinnaker-mcp"],
    "env": {
      "GATE_URL": ""
    }
  }
}
```

**Requires environment variables:** `GATE_URL` — the values above are empty placeholders; fill in real credentials before running (see the repository for what each one is for).

## Documentation & README

<p align="center">
  <img src="https://raw.githubusercontent.com/GeiserX/spinnaker-mcp/HEAD/docs/images/banner.svg" alt="Spinnaker MCP banner" width="900"/>
</p>

<h1 align="center">Spinnaker-MCP</h1>

<p align="center">
  <a href="https://www.npmjs.com/package/spinnaker-mcp"><img src="https://img.shields.io/npm/v/spinnaker-mcp?style=flat-square&logo=npm" alt="npm"/></a>
  <a href="https://github.com/GeiserX/spinnaker-mcp/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/GeiserX/spinnaker-mcp/ci.yml?style=flat-square&logo=github&label=CI" alt="CI"/></a>
  <a href="https://codecov.io/gh/GeiserX/spinnaker-mcp"><img src="https://img.shields.io/codecov/c/github/GeiserX/spinnaker-mcp?style=flat-square&logo=codecov&label=Coverage" alt="Coverage"/></a>
  <img src="https://img.shields.io/badge/Go-1.25-blue?style=flat-square&logo=go&logoColor=white" alt="Go"/>
  <a href="https://hub.docker.com/r/drumsergio/spinnaker-mcp"><img src="https://img.shields.io/docker/pulls/drumsergio/spinnaker-mcp?style=flat-square&logo=docker" alt="Docker Pulls"/></a>
  <a href="https://github.com/GeiserX/spinnaker-mcp/stargazers"><img src="https://img.shields.io/github/stars/GeiserX/spinnaker-mcp?style=flat-square&logo=github" alt="GitHub Stars"/></a>
  <a href="https://github.com/GeiserX/spinnaker-mcp/blob/main/LICENSE"><img src="https://img.shields.io/github/license/GeiserX/spinnaker-mcp?style=flat-square" alt="License"/></a>
</p>
<p align="center">
  <a href="https://registry.modelcontextprotocol.io"><img src="https://img.shields.io/badge/MCP-Official%20Registry-E6522C?style=flat-square" alt="Official MCP Registry"/></a>
  <a href="https://glama.ai/mcp/servers/GeiserX/spinnaker-mcp"><img src="https://glama.ai/mcp/servers/GeiserX/spinnaker-mcp/badges/score.svg" alt="Glama MCP Server" /></a>
  <a href="https://mcpservers.org/servers/geiserx/spinnaker-mcp"><img src="https://img.shields.io/badge/MCPServers.org-listed-green?style=flat-square" alt="MCPServers.org"/></a>
  <a href="https://mcp.so/server/spinnaker-mcp"><img src="https://img.shields.io/badge/mcp.so-listed-blue?style=flat-square" alt="mcp.so"/></a>
  <a href="https://github.com/toolsdk-ai/toolsdk-mcp-registry"><img src="https://img.shields.io/badge/ToolSDK-Registry-orange?style=flat-square" alt="ToolSDK Registry"/></a>
  <a href="https://github.com/punkpeye/awesome-mcp-servers#readme"><img src="https://img.shields.io/badge/listed%20on-awesome--mcp--servers-E6522C?style=flat-square" alt="listed on awesome-mcp-servers"/></a>
  <a href="https://mcpindex.ai/server/io-github-geiserx-spinnaker-mcp"><img src="https://mcpindex.ai/api/v1/badge/io-github-geiserx-spinnaker-mcp" alt="mcpindex"/></a>
</p>

<p align="center"><strong>A bridge that exposes any Spinnaker instance as an MCP v1 server via the Gate API, written in Go.</strong></p>

---

## What you get

| Category | Tool | Description |
|----------|------|-------------|
| **Applications** | `list_applications` | List all Spinnaker applications |
| | `get_application` | Get detailed application info (accounts, clusters, attributes) |
| **Pipelines** | `list_pipelines` | List pipeline configurations for an application |
| | `get_pipeline` | Get a specific pipeline's full configuration |
| | `trigger_pipeline` | Trigger a pipeline with optional parameters |
| | `save_pipeline` | Save/create a pipeline definition |
| | `update_pipeline` | Update an existing pipeline definition |
| | `delete_pipeline` | Delete a pipeline definition |
| | `get_pipeline_history` | Get revision history for a pipeline config |
| **Executions** | `list_executions` | List recent executions, filterable by status |
| | `get_execution` | Get full execution details (stages, outputs, timing) |
| | `search_executions` | Rich search by trigger type, time range, status |
| | `cancel_execution` | Cancel a running execution with optional reason |
| | `pause_execution` | Pause a running execution at the current stage |
| | `resume_execution` | Resume a paused execution |
| | `restart_stage` | Restart a failed stage within an execution |
| | `evaluate_expression` | Evaluate a SpEL expression against an execution |
| **Strategies** | `list_strategies` | List deployment strategy configurations |
| | `save_strategy` | Create or update a deployment strategy |
| | `delete_strategy` | Delete a deployment strategy |
| **Infrastructure** | `list_server_groups` | List server groups (deployment targets) with instance counts |
| | `list_load_balancers` | List load balancers across all accounts and regions |
| | `list_clusters` | List cluster names grouped by account |
| | `get_cluster` | Get cluster details including server groups |
| | `get_scaling_activities` | Get scaling activities for a cluster |
| | `get_target_server_group` | Target-based server group lookup (newest, oldest, etc.) |
| | `list_firewalls` | List all firewalls/security groups across accounts |
| | `get_firewall` | Get firewall details by account, region, and name |
| | `get_instance` | Get instance details (health, metadata, launch time) |
| | `get_console_output` | Get instance console output for debugging |
| | `find_images` | Search for machine images by tags, region, account |
| | `get_image_tags` | List image tags for a repository |
| | `list_networks` | List VPCs/networks by cloud provider |
| | `list_subnets` | List subnets by cloud provider |
| | `list_accounts` | List all configured cloud accounts/credentials |
| | `get_account` | Get account details and permissions |
| **Tasks** | `get_task` | Get orchestration task status (deploy, resize, rollback) |

Everything is exposed over JSON-RPC. LLMs and agents can: `initialize` -> `listTools` -> `callTool` and interact with your Spinnaker deployments.

---

## Quick-start

### npm (stdio transport)

```sh
npx spinnaker-mcp
```

Or install globally:

```sh
npm install -g spinnaker-mcp
spinnaker-mcp
```

This downloads the pre-built Go binary for your platform and runs it with stdio transport.

### Docker

```sh
docker run --rm -e GATE_URL=http://spin-gate:8084 -e TRANSPORT=stdio drumsergio/spinnaker-mcp:0.3.1
```

### Local build

```sh
git clone https://github.com/GeiserX/spinnaker-mcp
cd spinnaker-mcp

cp .env.example .env && $EDITOR .env

go run ./cmd/server
```

## Configuration

| Variable | Default | Description |
|----------|---------|-------------|
| `GATE_URL` | `http://localhost:8084` | Spinnaker Gate API endpoint (without trailing /) |
| `GATE_TOKEN` | _(empty)_ | Bearer token for authentication |
| `GATE_USER` | _(empty)_ | Basic auth username (alternative to token) |
| `GATE_PASS` | _(empty)_ | Basic auth password |
| `GATE_CERT_FILE` | _(empty)_ | Path to x509 client certificate (PEM) |
| `GATE_KEY_FILE` | _(empty)_ | Path to x509 client key (PEM) |
| `GATE_INSECURE` | `false` | Skip TLS certificate verification |
| `TRANSPORT` | _(empty = HTTP)_ | Set to `stdio` for stdio transport |
| `MCP_PORT` | `8085` | HTTP transport port (ignored when TRANSPORT=stdio) |
| `MCP_BIND_ADDR` | `127.0.0.1` | HTTP transport bind address (set to `0.0.0.0` to listen on all interfaces) |

**Authentication priority**: Bearer token > Basic auth > x509 client cert > No auth.

Put them in a `.env` file (from `.env.example`) or set them in the environment.

## Claude Code / Claude Desktop configuration

```json
{
  "mcpServers": {
    "spinnaker": {
      "command": "npx",
      "args": ["-y", "spinnaker-mcp"],
      "env": {
        "GATE_URL": "https://spin-gate.example.com",
        "GATE_TOKEN": "your-token-here"
      }
    }
  }
}
```

## Testing

```sh
go test -v -race ./...
```

Tested with [Inspector](https://modelcontextprotocol.io/docs/tools/inspector). Before making a PR, make sure this MCP server behaves well via that tool.

## Credits

[Spinnaker](https://spinnaker.io/) -- open-source continuous delivery platform

[MCP-GO](https://github.com/mark3labs/mcp-go) -- Go MCP implementation

[GoReleaser](https://goreleaser.com/) -- painless multi-arch releases

## Maintainers

[@GeiserX](https://github.com/GeiserX).

## Contributing

Feel free to dive in! [Open an issue](https://github.com/GeiserX/spinnaker-mcp/issues/new) or submit PRs.

Spinnaker-MCP follows the [Contributor Covenant](http://contributor-covenant.org/version/2/1/) Code of Conduct.

## Other MCP Servers by GeiserX

- [genieacs-mcp](https://github.com/GeiserX/genieacs-mcp) -- TR-069 device management
- [cashpilot-mcp](https://github.com/GeiserX/cashpilot-mcp) -- Passive income monitoring
- [duplicacy-mcp](https://github.com/GeiserX/duplicacy-mcp) -- Backup health monitoring
- [lynxprompt-mcp](https://github.com/GeiserX/lynxprompt-mcp) -- AI configuration blueprints
- [pumperly-mcp](https://github.com/GeiserX/pumperly-mcp) -- Fuel and EV charging prices
- [telegram-archive-mcp](https://github.com/GeiserX/telegram-archive-mcp) -- Telegram message archive

