MCP server for Spot.io (Spotinst) API - manage Ocean clusters, VNGs, and Elastigroups
Project description
mcp-server-spotinst
MCP server for the Spot.io (Spotinst) 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
export SPOTINST_TOKEN="your-spotinst-api-token"
export SPOTINST_ACCOUNT_ID="act-xxxxxxxx"
Install with pip
pip install mcp-server-spotinst
Install with uvx (no install needed)
uvx mcp-server-spotinst
Claude Code Config
Add to ~/.mcp.json:
{
"mcpServers": {
"spotinst": {
"command": "uvx",
"args": ["mcp-server-spotinst"],
"env": {
"SPOTINST_TOKEN": "your-token",
"SPOTINST_ACCOUNT_ID": "act-xxxxxxxx"
}
}
}
}
Docker
docker build -t mcp-server-spotinst .
docker run -e SPOTINST_TOKEN=your-token -e SPOTINST_ACCOUNT_ID=act-xxxxxxxx mcp-server-spotinst
Run Standalone
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 at https://api.spotinst.io.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mcp_server_spotinst-0.7.0.tar.gz.
File metadata
- Download URL: mcp_server_spotinst-0.7.0.tar.gz
- Upload date:
- Size: 36.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c120d6b75a1897632c5a20f9d927933b185c65916eb0071217c1d3886f91b9b4
|
|
| MD5 |
363aa5811a4930629dff41a38061760d
|
|
| BLAKE2b-256 |
c3a88e628ef6d392ca7242d5802ab2f2568d40b3c22077275f3924a2037bec40
|
Provenance
The following attestation bundles were made for mcp_server_spotinst-0.7.0.tar.gz:
Publisher:
publish.yml on arnstarn/mcp-server-spotinst
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mcp_server_spotinst-0.7.0.tar.gz -
Subject digest:
c120d6b75a1897632c5a20f9d927933b185c65916eb0071217c1d3886f91b9b4 - Sigstore transparency entry: 1440081247
- Sigstore integration time:
-
Permalink:
arnstarn/mcp-server-spotinst@f5178072765e0cb5c4e193331cad41ca38d79179 -
Branch / Tag:
refs/tags/v0.7.0 - Owner: https://github.com/arnstarn
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f5178072765e0cb5c4e193331cad41ca38d79179 -
Trigger Event:
release
-
Statement type:
File details
Details for the file mcp_server_spotinst-0.7.0-py3-none-any.whl.
File metadata
- Download URL: mcp_server_spotinst-0.7.0-py3-none-any.whl
- Upload date:
- Size: 20.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
783879d45560606331e3374337bd712890efb3e100a24c3cce001b09d5664a61
|
|
| MD5 |
53b1b73aace93e540f090b3130679eac
|
|
| BLAKE2b-256 |
966fcf83a2b68d195bc4a735473ea153d86a46b9f440a98e052b235a89b1e34f
|
Provenance
The following attestation bundles were made for mcp_server_spotinst-0.7.0-py3-none-any.whl:
Publisher:
publish.yml on arnstarn/mcp-server-spotinst
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mcp_server_spotinst-0.7.0-py3-none-any.whl -
Subject digest:
783879d45560606331e3374337bd712890efb3e100a24c3cce001b09d5664a61 - Sigstore transparency entry: 1440081254
- Sigstore integration time:
-
Permalink:
arnstarn/mcp-server-spotinst@f5178072765e0cb5c4e193331cad41ca38d79179 -
Branch / Tag:
refs/tags/v0.7.0 - Owner: https://github.com/arnstarn
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f5178072765e0cb5c4e193331cad41ca38d79179 -
Trigger Event:
release
-
Statement type: