# arnstarn/mcp-server-spotinst [Health: Active]

**Category:** ☁️ Cloud Platforms  
**Repository:** https://github.com/arnstarn/mcp-server-spotinst  
**GitHub Stars:** 1  
**Views:** 1  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/arnstarn-mcp-server-spotinst

## Description
MCP server for Spot.io (Spotinst) API with 23 tools for managing Ocean clusters, VNGs, Elastigroups, costs, right-sizing, and logs across AWS and Azure with multi-account support.

## Tools
Capabilities this server exposes over MCP:

- **list_accounts** — List all Spotinst accounts accessible with the current token
- **list_all_clusters** — List ALL clusters across ALL accounts and clouds (AWS + Azure)
- **list_clusters** — List AWS Ocean K8s clusters
- **get_cluster** — Get AWS Ocean cluster details
- **list_vngs** — List AWS Virtual Node Groups (launch specs)
- **get_vng** — Get AWS VNG details
- **list_elastigroups** — List all Elastigroups
- **get_elastigroup** — Get Elastigroup details
- **get_allowed_instance_types** — Get allowed EC2 instance types
- **get_right_sizing** — Get right-sizing resource suggestions (AWS only)
- **list_clusters_azure** — List Azure Ocean clusters
- **get_cluster_azure** — Get Azure Ocean cluster details
- **list_vngs_azure** — List Azure Virtual Node Groups
- **get_vng_azure** — Get Azure VNG details
- **get_cluster_nodes** — List nodes in an Ocean cluster
- **get_cluster_costs** — Get aggregated cost breakdown by namespace or resource
- **list_rolls** — List deployment rolls
- **get_roll** — Get roll details
- **get_cluster_log** — Get scaling and activity log events
- **list_stateful_nodes** — List all Stateful Nodes (Managed Instances)
- **get_stateful_node** — Get Stateful Node details
- **get_cluster_scheduling** — Get scheduling and auto-scaler configuration
- **get_cluster_health** — Composite health check: nodes, recent errors, active rolls
- **get_cost_trending** — Week-over-week (or custom period) cost comparison
- **get_savings_summary** — 30-day cost and savings summary
- **filter_clusters_by_tag** — Filter clusters by tag key/value
- **filter_vngs_by_tag** — Filter VNGs by tag key/value
- **export_cluster_yaml** — Export cluster config as YAML for GitOps/backup
- **export_vng_yaml** — Export VNG config as YAML for GitOps/backup
- **remove_instances** — Recommended** — Remove instances using a named strategy (see below)
- **initiate_roll** — Rolling restart of nodes in an Ocean cluster
- **detach_instances** — Detach and optionally terminate instances from an AWS Ocean cluster
- **update_vng** — Update an AWS VNG configuration
- **update_vng_azure** — Update an Azure VNG configuration

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

```json
"mcpServers": {
  "mcp-server-spotinst": {
    "command": "uvx",
    "args": ["mcp-server-spotinst"],
    "env": {
      "SPOTINST_TOKEN": "",
      "SPOTINST_ACCOUNT_ID": ""
    }
  }
}
```

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

## Documentation & README

# mcp-server-spotinst

[![PyPI version](https://img.shields.io/pypi/v/mcp-server-spotinst)](https://pypi.org/project/mcp-server-spotinst/)
[![CI](https://github.com/arnstarn/mcp-server-spotinst/actions/workflows/ci.yml/badge.svg)](https://github.com/arnstarn/mcp-server-spotinst/actions/workflows/ci.yml)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)

MCP server for the [Spot.io (Spotinst)](https://spot.io/) API. Supports both AWS and Azure Ocean clusters with multi-account access.

## Tools (34)

### Cross-Account

| Tool | Description |
|------|-------------|
| `list_accounts` | List all Spotinst accounts accessible with the current token |
| `list_all_clusters` | List ALL clusters across ALL accounts and clouds (AWS + Azure) |

### AWS Ocean

| Tool | Description |
|------|-------------|
| `list_clusters` | List AWS Ocean K8s clusters |
| `get_cluster` | Get AWS Ocean cluster details |
| `list_vngs` | List AWS Virtual Node Groups (launch specs) |
| `get_vng` | Get AWS VNG details |
| `list_elastigroups` | List all Elastigroups |
| `get_elastigroup` | Get Elastigroup details |
| `get_allowed_instance_types` | Get allowed EC2 instance types |
| `get_right_sizing` | Get right-sizing resource suggestions (AWS only) |

### Azure Ocean

| Tool | Description |
|------|-------------|
| `list_clusters_azure` | List Azure Ocean clusters |
| `get_cluster_azure` | Get Azure Ocean cluster details |
| `list_vngs_azure` | List Azure Virtual Node Groups |
| `get_vng_azure` | Get Azure VNG details |

### Both Clouds (pass `cloud="azure"` for Azure)

| Tool | Description |
|------|-------------|
| `get_cluster_nodes` | List nodes in an Ocean cluster |
| `get_cluster_costs` | Get aggregated cost breakdown by namespace or resource |
| `list_rolls` | List deployment rolls |
| `get_roll` | Get roll details |
| `get_cluster_log` | Get scaling and activity log events |

### Stateful Nodes (AWS Managed Instances)

| Tool | Description |
|------|-------------|
| `list_stateful_nodes` | List all Stateful Nodes (Managed Instances) |
| `get_stateful_node` | Get Stateful Node details |

### Scheduling & Health

| Tool | Description |
|------|-------------|
| `get_cluster_scheduling` | Get scheduling and auto-scaler configuration |
| `get_cluster_health` | Composite health check: nodes, recent errors, active rolls |

### Cost Analysis

| Tool | Description |
|------|-------------|
| `get_cost_trending` | Week-over-week (or custom period) cost comparison |
| `get_savings_summary` | 30-day cost and savings summary |

### Tag Filtering

| Tool | Description |
|------|-------------|
| `filter_clusters_by_tag` | Filter clusters by tag key/value |
| `filter_vngs_by_tag` | Filter VNGs by tag key/value |

### Export (YAML)

| Tool | Description |
|------|-------------|
| `export_cluster_yaml` | Export cluster config as YAML for GitOps/backup |
| `export_vng_yaml` | Export VNG config as YAML for GitOps/backup |

### Write Operations (require `confirm=true`)

| Tool | Description |
|------|-------------|
| `remove_instances` | **Recommended** — Remove instances using a named strategy (see below) |
| `initiate_roll` | Rolling restart of nodes in an Ocean cluster |
| `detach_instances` | Detach and optionally terminate instances from an AWS Ocean cluster |
| `update_vng` | Update an AWS VNG configuration |
| `update_vng_azure` | Update an Azure VNG configuration |

All tools accept an optional `account_id` parameter to query any account.

### Instance Removal Strategies

The `remove_instances` tool provides a safe, intent-based interface for removing instances. Instead of remembering which API flags to set, you pick a strategy:

| Strategy | What happens | Use case |
|----------|-------------|----------|
| `drain_and_replace` | Gracefully drain pods (respects PDBs), terminate, Ocean replaces. **Default and safest.** | Replacing a problematic node in production |
| `replace` | Immediately terminate, Ocean auto-replaces. No graceful drain. AWS only. | Fast replacement when drain isn't needed |
| `remove_permanently` | Terminate + reduce cluster capacity. No replacement. AWS only. | Downsizing the cluster |

When `confirm=false` (default), the tool shows a detailed execution plan so you can review before proceeding:

```
remove_instances("o-abc123", "i-abc123", strategy="drain_and_replace")

→ SAFETY: Action NOT executed. Set confirm=true to proceed.
  DRAIN AND REPLACE 1 instance(s) in cluster o-abc123:
    Instances: ['i-abc123']
    Method: Rolling restart (20% per batch)
    - Pods will be gracefully drained (PDBs respected)
    - Instances will be terminated after drain
    - Ocean will automatically launch replacements
```

## Setup

### Environment Variables

```bash
export SPOTINST_TOKEN="your-spotinst-api-token"
export SPOTINST_ACCOUNT_ID="act-xxxxxxxx"
```

### Install with pip

```bash
pip install mcp-server-spotinst
```

### Install with uvx (no install needed)

```bash
uvx mcp-server-spotinst
```

### Claude Code Config

Add to `~/.mcp.json`:

```json
{
  "mcpServers": {
    "spotinst": {
      "command": "uvx",
      "args": ["mcp-server-spotinst"],
      "env": {
        "SPOTINST_TOKEN": "your-token",
        "SPOTINST_ACCOUNT_ID": "act-xxxxxxxx"
      }
    }
  }
}
```

### Docker

```bash
docker build -t mcp-server-spotinst .
docker run -e SPOTINST_TOKEN=your-token -e SPOTINST_ACCOUNT_ID=act-xxxxxxxx mcp-server-spotinst
```

### Run Standalone

```bash
mcp-server-spotinst
```

## Multi-Account Usage

Your personal API token can access multiple Spotinst accounts. Use `list_accounts` to see all available accounts, then pass `account_id` to any tool:

```
list_clusters(account_id="act-be5e7ffe")
get_cluster_nodes("o-390ef886", account_id="act-9785011e", cloud="azure")
```

Or use `list_all_clusters` for a single-call inventory across everything.

## API Reference

Uses the [Spot.io REST API](https://docs.spot.io/api/) at `https://api.spotinst.io`.

