spinnaker-mcp
<p align="center">
<img src="https://raw.githubusercontent.com/GeiserX/spinnaker-mcp/main/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>
<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/blob/main/LICENSE"><img src="https://img.shields.io/github/license/GeiserX/spinnaker-mcp?style=flat-square" alt="License"/></a>
</p>
<p align="center"><strong>A bridge that exposes any Spinnaker instance as an MCP server via the Gate API, written in Go.</strong></p>
It gives an LLM 37 tools to read and operate Spinnaker: applications, pipelines, executions, strategies and infrastructure.

## Features
- Applications and pipelines: list, read, trigger, save, update and delete pipelines, with revision history.
- Executions: list, search by trigger type, time range and status, cancel, pause, resume, restart a stage, evaluate SpEL.
- Deployment strategies: list, save and delete.
- Infrastructure: server groups, load balancers, clusters, firewalls, instances and console output, images, networks, subnets, accounts.
- Orchestration task status (deploy, resize, rollback).
- Bearer token, basic auth, x509 client certificate, or the session cookie of a Gate behind SSO (`spinnaker-mcp login`).
- stdio or HTTP transport; HTTP binds to `127.0.0.1` by default.
- Ships as an npm package (`npx spinnaker-mcp`), a Docker image and multi-arch Go binaries.
## Quick start
Add the server to your MCP client (Claude Code, Claude Desktop, Cursor):
```json
{
"mcpServers": {
"spinnaker": {
"command": "npx",
"args": ["-y", "spinnaker-mcp"],
"env": { "GATE_URL": "https://spin-gate.example.com", "GATE_TOKEN": "your-token-here" }
}
}
}
```
Needs Node 18 or newer; the npm package runs the Go binary over stdio. Docker, local builds and the other credentials are in [Getting started](https://geiserx.github.io/spinnaker-mcp/getting-started/).
A variable whose value is only an unexpanded placeholder, such as `${GATE_TOKEN}`, counts as unset.
## Documentation
The full documentation is at [geiserx.github.io/spinnaker-mcp](https://geiserx.github.io/spinnaker-mcp/).
- [Getting started](https://geiserx.github.io/spinnaker-mcp/getting-started/): npm, Docker, Helm, local build, and the client configuration
- [Configuration](https://geiserx.github.io/spinnaker-mcp/configuration/): every environment variable, the read-only toolset, the HTTP endpoints
- [Usage](https://geiserx.github.io/spinnaker-mcp/usage/): the 37 tools and which ones change Spinnaker, the 10 resources, the 5 prompts
- [Development](https://geiserx.github.io/spinnaker-mcp/development/): testing, contributing, credits
- [Related projects](https://geiserx.github.io/spinnaker-mcp/related/): the other MCP servers and the registry listings
## License
[GPL-3.0-or-later](https://github.com/GeiserX/spinnaker-mcp/blob/main/LICENSE)
TDQS
Scored across 37 tools
Pipelines, executions, and strategies are cleanly separated, and the descriptions explicitly disambiguate the tricky pairs (save_pipeline vs update_pipeline, list_executions vs search_executions). A few near-neighbors exist (get_cluster vs get_target_server_group vs list_server_groups), but each targets a distinct resource/action so confusion is minimal.
Names uniformly follow a snake_case verb_noun pattern (list_*, get_*, save_*, update_*, delete_*, plus consistent action verbs like trigger_pipeline, pause_execution, cancel_execution). No mixing of conventions or vague verbs.
At 37 tools this is heavy, well above the comfortable 3-15 range. The breadth of the Spinnaker domain (pipelines, executions, clusters, server groups, firewalls, networks, images, accounts) justifies many of them, but the surface is large enough to feel sprawling rather than tightly scoped.
Core lifecycle coverage is strong: full CRUD for pipelines, and comprehensive execution control (trigger, cancel, pause, resume, restart, search). Minor gaps remain in secondary resources (strategies lack get/update; applications, networks, load balancers are read-only), but these are workable.