{"id":50222343,"url":"https://github.com/GeiserX/spinnaker-mcp","last_synced_at":"2026-06-12T04:00:57.723Z","repository":{"id":353342580,"uuid":"1218965451","full_name":"GeiserX/spinnaker-mcp","owner":"GeiserX","description":"MCP Server for Spinnaker — manage applications, pipelines, and deployments via the Model Context Protocol","archived":false,"fork":false,"pushed_at":"2026-06-07T17:26:43.000Z","size":140,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-06-07T19:15:36.745Z","etag":null,"topics":["ai","automation","ci-cd","cloud-native","continuous-delivery","deployment","devops","docker","go","golang","infrastructure","kubernetes","llm","mcp","mcp-server","model-context-protocol","pipeline","self-hosted","spinnaker","spinnaker-gate"],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/GeiserX.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"geiserx","patreon":"geiser","buy_me_a_coffee":"geiser","thanks_dev":"u/gh/geiserx"}},"created_at":"2026-04-23T11:50:47.000Z","updated_at":"2026-06-07T17:26:45.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/GeiserX/spinnaker-mcp","commit_stats":null,"previous_names":["geiserx/spinnaker-mcp"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/GeiserX/spinnaker-mcp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GeiserX%2Fspinnaker-mcp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GeiserX%2Fspinnaker-mcp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GeiserX%2Fspinnaker-mcp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GeiserX%2Fspinnaker-mcp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GeiserX","download_url":"https://codeload.github.com/GeiserX/spinnaker-mcp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GeiserX%2Fspinnaker-mcp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34228097,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-12T02:00:06.859Z","response_time":109,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","automation","ci-cd","cloud-native","continuous-delivery","deployment","devops","docker","go","golang","infrastructure","kubernetes","llm","mcp","mcp-server","model-context-protocol","pipeline","self-hosted","spinnaker","spinnaker-gate"],"created_at":"2026-05-26T13:00:18.257Z","updated_at":"2026-06-12T04:00:57.705Z","avatar_url":"https://github.com/GeiserX.png","language":"Go","funding_links":["https://github.com/sponsors/geiserx","https://patreon.com/geiser","https://buymeacoffee.com/geiser","https://thanks.dev/u/gh/geiserx"],"categories":["CI/CD \u0026 DevOps Pipelines"],"sub_categories":["🔄 Continuous Integration"],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/images/banner.svg\" alt=\"Spinnaker MCP banner\" width=\"900\"/\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eSpinnaker-MCP\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://www.npmjs.com/package/spinnaker-mcp\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/spinnaker-mcp?style=flat-square\u0026logo=npm\" alt=\"npm\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/GeiserX/spinnaker-mcp/actions/workflows/ci.yml\"\u003e\u003cimg src=\"https://img.shields.io/github/actions/workflow/status/GeiserX/spinnaker-mcp/ci.yml?style=flat-square\u0026logo=github\u0026label=CI\" alt=\"CI\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://codecov.io/gh/GeiserX/spinnaker-mcp\"\u003e\u003cimg src=\"https://img.shields.io/codecov/c/github/GeiserX/spinnaker-mcp?style=flat-square\u0026logo=codecov\u0026label=Coverage\" alt=\"Coverage\"/\u003e\u003c/a\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Go-1.25-blue?style=flat-square\u0026logo=go\u0026logoColor=white\" alt=\"Go\"/\u003e\n  \u003ca href=\"https://hub.docker.com/r/drumsergio/spinnaker-mcp\"\u003e\u003cimg src=\"https://img.shields.io/docker/pulls/drumsergio/spinnaker-mcp?style=flat-square\u0026logo=docker\" alt=\"Docker Pulls\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/GeiserX/spinnaker-mcp/stargazers\"\u003e\u003cimg src=\"https://img.shields.io/github/stars/GeiserX/spinnaker-mcp?style=flat-square\u0026logo=github\" alt=\"GitHub Stars\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/GeiserX/spinnaker-mcp/blob/main/LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/github/license/GeiserX/spinnaker-mcp?style=flat-square\" alt=\"License\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://registry.modelcontextprotocol.io\"\u003e\u003cimg src=\"https://img.shields.io/badge/MCP-Official%20Registry-E6522C?style=flat-square\" alt=\"Official MCP Registry\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://glama.ai/mcp/servers/GeiserX/spinnaker-mcp\"\u003e\u003cimg src=\"https://glama.ai/mcp/servers/GeiserX/spinnaker-mcp/badges/score.svg\" alt=\"Glama MCP Server\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://mcpservers.org/servers/geiserx/spinnaker-mcp\"\u003e\u003cimg src=\"https://img.shields.io/badge/MCPServers.org-listed-green?style=flat-square\" alt=\"MCPServers.org\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://mcp.so/server/spinnaker-mcp\"\u003e\u003cimg src=\"https://img.shields.io/badge/mcp.so-listed-blue?style=flat-square\" alt=\"mcp.so\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/toolsdk-ai/toolsdk-mcp-registry\"\u003e\u003cimg src=\"https://img.shields.io/badge/ToolSDK-Registry-orange?style=flat-square\" alt=\"ToolSDK Registry\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/punkpeye/awesome-mcp-servers#readme\"\u003e\u003cimg src=\"https://img.shields.io/badge/listed%20on-awesome--mcp--servers-E6522C?style=flat-square\" alt=\"listed on awesome-mcp-servers\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\u003cstrong\u003eA bridge that exposes any Spinnaker instance as an MCP v1 server via the Gate API, written in Go.\u003c/strong\u003e\u003c/p\u003e\n\n---\n\n## What you get\n\n| Category | Tool | Description |\n|----------|------|-------------|\n| **Applications** | `list_applications` | List all Spinnaker applications |\n| | `get_application` | Get detailed application info (accounts, clusters, attributes) |\n| **Pipelines** | `list_pipelines` | List pipeline configurations for an application |\n| | `get_pipeline` | Get a specific pipeline's full configuration |\n| | `trigger_pipeline` | Trigger a pipeline with optional parameters |\n| | `save_pipeline` | Save/create a pipeline definition |\n| | `update_pipeline` | Update an existing pipeline definition |\n| | `delete_pipeline` | Delete a pipeline definition |\n| | `get_pipeline_history` | Get revision history for a pipeline config |\n| **Executions** | `list_executions` | List recent executions, filterable by status |\n| | `get_execution` | Get full execution details (stages, outputs, timing) |\n| | `search_executions` | Rich search by trigger type, time range, status |\n| | `cancel_execution` | Cancel a running execution with optional reason |\n| | `pause_execution` | Pause a running execution at the current stage |\n| | `resume_execution` | Resume a paused execution |\n| | `restart_stage` | Restart a failed stage within an execution |\n| | `evaluate_expression` | Evaluate a SpEL expression against an execution |\n| **Strategies** | `list_strategies` | List deployment strategy configurations |\n| | `save_strategy` | Create or update a deployment strategy |\n| | `delete_strategy` | Delete a deployment strategy |\n| **Infrastructure** | `list_server_groups` | List server groups (deployment targets) with instance counts |\n| | `list_load_balancers` | List load balancers across all accounts and regions |\n| | `list_clusters` | List cluster names grouped by account |\n| | `get_cluster` | Get cluster details including server groups |\n| | `get_scaling_activities` | Get scaling activities for a cluster |\n| | `get_target_server_group` | Target-based server group lookup (newest, oldest, etc.) |\n| | `list_firewalls` | List all firewalls/security groups across accounts |\n| | `get_firewall` | Get firewall details by account, region, and name |\n| | `get_instance` | Get instance details (health, metadata, launch time) |\n| | `get_console_output` | Get instance console output for debugging |\n| | `find_images` | Search for machine images by tags, region, account |\n| | `get_image_tags` | List image tags for a repository |\n| | `list_networks` | List VPCs/networks by cloud provider |\n| | `list_subnets` | List subnets by cloud provider |\n| | `list_accounts` | List all configured cloud accounts/credentials |\n| | `get_account` | Get account details and permissions |\n| **Tasks** | `get_task` | Get orchestration task status (deploy, resize, rollback) |\n\nEverything is exposed over JSON-RPC. LLMs and agents can: `initialize` -\u003e `listTools` -\u003e `callTool` and interact with your Spinnaker deployments.\n\n---\n\n## Quick-start\n\n### npm (stdio transport)\n\n```sh\nnpx spinnaker-mcp\n```\n\nOr install globally:\n\n```sh\nnpm install -g spinnaker-mcp\nspinnaker-mcp\n```\n\nThis downloads the pre-built Go binary for your platform and runs it with stdio transport.\n\n### Docker\n\n```sh\ndocker run --rm -e GATE_URL=http://spin-gate:8084 -e TRANSPORT=stdio drumsergio/spinnaker-mcp:0.3.1\n```\n\n### Local build\n\n```sh\ngit clone https://github.com/GeiserX/spinnaker-mcp\ncd spinnaker-mcp\n\ncp .env.example .env \u0026\u0026 $EDITOR .env\n\ngo run ./cmd/server\n```\n\n## Configuration\n\n| Variable | Default | Description |\n|----------|---------|-------------|\n| `GATE_URL` | `http://localhost:8084` | Spinnaker Gate API endpoint (without trailing /) |\n| `GATE_TOKEN` | _(empty)_ | Bearer token for authentication |\n| `GATE_USER` | _(empty)_ | Basic auth username (alternative to token) |\n| `GATE_PASS` | _(empty)_ | Basic auth password |\n| `GATE_CERT_FILE` | _(empty)_ | Path to x509 client certificate (PEM) |\n| `GATE_KEY_FILE` | _(empty)_ | Path to x509 client key (PEM) |\n| `GATE_INSECURE` | `false` | Skip TLS certificate verification |\n| `TRANSPORT` | _(empty = HTTP)_ | Set to `stdio` for stdio transport |\n| `MCP_PORT` | `8085` | HTTP transport port (ignored when TRANSPORT=stdio) |\n| `MCP_BIND_ADDR` | `127.0.0.1` | HTTP transport bind address (set to `0.0.0.0` to listen on all interfaces) |\n\n**Authentication priority**: Bearer token \u003e Basic auth \u003e x509 client cert \u003e No auth.\n\nPut them in a `.env` file (from `.env.example`) or set them in the environment.\n\n## Claude Code / Claude Desktop configuration\n\n```json\n{\n  \"mcpServers\": {\n    \"spinnaker\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"spinnaker-mcp\"],\n      \"env\": {\n        \"GATE_URL\": \"https://spin-gate.example.com\",\n        \"GATE_TOKEN\": \"your-token-here\"\n      }\n    }\n  }\n}\n```\n\n## Testing\n\n```sh\ngo test -v -race ./...\n```\n\nTested with [Inspector](https://modelcontextprotocol.io/docs/tools/inspector). Before making a PR, make sure this MCP server behaves well via that tool.\n\n## Credits\n\n[Spinnaker](https://spinnaker.io/) -- open-source continuous delivery platform\n\n[MCP-GO](https://github.com/mark3labs/mcp-go) -- Go MCP implementation\n\n[GoReleaser](https://goreleaser.com/) -- painless multi-arch releases\n\n## Maintainers\n\n[@GeiserX](https://github.com/GeiserX).\n\n## Contributing\n\nFeel free to dive in! [Open an issue](https://github.com/GeiserX/spinnaker-mcp/issues/new) or submit PRs.\n\nSpinnaker-MCP follows the [Contributor Covenant](http://contributor-covenant.org/version/2/1/) Code of Conduct.\n\n## Other MCP Servers by GeiserX\n\n- [genieacs-mcp](https://github.com/GeiserX/genieacs-mcp) -- TR-069 device management\n- [cashpilot-mcp](https://github.com/GeiserX/cashpilot-mcp) -- Passive income monitoring\n- [duplicacy-mcp](https://github.com/GeiserX/duplicacy-mcp) -- Backup health monitoring\n- [lynxprompt-mcp](https://github.com/GeiserX/lynxprompt-mcp) -- AI configuration blueprints\n- [pumperly-mcp](https://github.com/GeiserX/pumperly-mcp) -- Fuel and EV charging prices\n- [telegram-archive-mcp](https://github.com/GeiserX/telegram-archive-mcp) -- Telegram message archive\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FGeiserX%2Fspinnaker-mcp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FGeiserX%2Fspinnaker-mcp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FGeiserX%2Fspinnaker-mcp/lists"}