Skip to content

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)
TOOLSETS (empty = all) Tool groups to register, see Toolsets

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. The npm package always runs with TRANSPORT=stdio, and the Docker image sets TRANSPORT=stdio unless you override it.

Toolsets

TOOLSETS, or the --toolsets= flag (the flag wins), chooses which tools the server registers. A tool that is not registered does not exist for the client. Resources and prompts are registered whatever it says.

Value Tools
all (default) all 37
readonly the 27 that only read
mutating the 10 that change Spinnaker, the two deletes included
applications 2
pipelines 7
executions 8
strategies 3
infrastructure 16
tasks 1

Groups combine with commas: TOOLSETS=pipelines,executions. all, readonly and mutating stand alone; combined with each other or with a group, the server exits at start with Invalid toolsets. To keep an assistant from changing anything, add "TOOLSETS": "readonly" to the env block of your client configuration. Usage lists which tools change Spinnaker.

HTTP transport

When TRANSPORT is anything but stdio, the server listens on MCP_BIND_ADDR:MCP_PORT (127.0.0.1:8085 by default) and serves:

Path Answers
/mcp MCP over streamable HTTP
/healthz 200 with {"status":"ok","version":"..."}
/readyz 200 when Gate answers a HEAD /applications within 5 s with any status below 500, otherwise 503; the body carries gate_url and gate_reachable

/readyz proves Gate is reachable, not that the credentials work: a 401 from Gate still counts as ready.

/mcp has no authentication of its own. Anyone who reaches it acts with the Gate credentials the server holds, so keep the default loopback address, or put an authenticating proxy in front and consider TOOLSETS=readonly. In Docker, 127.0.0.1 is the container's own loopback: run the HTTP transport with -e TRANSPORT=http -e MCP_BIND_ADDR=0.0.0.0 -p 127.0.0.1:8085:8085 so only the host reaches it.