内容
# MCP服务器Spotinst
[](https://pypi.org/project/mcp-server-spotinst/)
[](https://github.com/arnstarn/mcp-server-spotinst/actions/workflows/ci.yml)
[](https://opensource.org/licenses/MIT)
[](https://www.python.org/downloads/)
适用于 [Spot.io (Spotinst)](https://spot.io/) API的MCP服务器。支持AWS和Azure Ocean集群,具备多账户访问功能。
## 工具列表
### 跨账户
| 工具 | 描述 |
|------|-------------|
| `list_accounts` | 列出当前令牌可访问的所有Spotinst账户 |
| `list_all_clusters` | 列出所有账户和云平台(AWS + Azure)下的所有集群 |
### AWS Ocean
| 工具 | 描述 |
|------|-------------|
| `list_clusters` | 列出AWS Ocean K8s集群 |
| `get_cluster` | 获取AWS Ocean集群详情 |
| `list_vngs` | 列出AWS虚拟节点组(启动规格) |
| `get_vng` | 获取AWS VNG详情 |
| `list_elastigroups` | 列出所有Elastigroups |
| `get_elastigroup` | 获取Elastigroup详情 |
| `get_allowed_instance_types` | 获取允许的EC2实例类型 |
| `get_right_sizing` | 获取右尺寸资源建议(仅限AWS) |
### Azure Ocean
| 工具 | 描述 |
|------|-------------|
| `list_clusters_azure` | 列出Azure Ocean集群 |
| `get_cluster_azure` | 获取Azure Ocean集群详情 |
| `list_vngs_azure` | 列出Azure虚拟节点组 |
| `get_vng_azure` | 获取Azure VNG详情 |
### 两个云平台(传递`cloud="azure"`以适用于Azure)
| 工具 | 描述 |
|------|-------------|
| `get_cluster_nodes` | 列出Ocean集群中的节点 |
| `get_cluster_costs` | 获取按命名空间或资源划分的聚合成本明细 |
| `list_rolls` | 列出部署滚动 |
| `get_roll` | 获取滚动详情 |
| `get_cluster_log` | 获取缩放和活动日志事件 |
### 有状态节点(AWS托管实例)
| 工具 | 描述 |
|------|-------------|
| `list_stateful_nodes` | 列出所有有状态节点(托管实例) |
| `get_stateful_node` | 获取有状态节点详情 |
### 调度与健康
| 工具 | 描述 |
|------|-------------|
| `get_cluster_scheduling` | 获取调度配置和自动缩放器配置 |
| `get_cluster_health` | 综合健康检查:节点、最近错误、活动滚动 |
### 成本分析
| 工具 | 描述 |
|------|-------------|
| `get_cost_trending` | 周同比(或自定义时间段)成本比较 |
| `get_savings_summary` | 30天成本和节省总结 |
### 标签过滤
| 工具 | 描述 |
|------|-------------|
| `filter_clusters_by_tag` | 按标签键/值过滤集群 |
| `filter_vngs_by_tag` | 按标签键/值过滤VNG |
### 导出(YAML)
| 工具 | 描述 |
|------|-------------|
| `export_cluster_yaml` | 导出集群配置为YAML以用于GitOps/备份 |
| `export_vng_yaml` | 导出VNG配置为YAML以用于GitOps/备份 |
### 写操作(需要`confirm=true`)
| 工具 | 描述 |
|------|-------------|
| `remove_instances` | **推荐** — 使用命名策略删除实例(见下文) |
| `initiate_roll` | Ocean集群节点的滚动重启 |
| `detach_instances` | 从AWS Ocean集群中分离并可选地终止实例 |
| `update_vng` | 更新AWS VNG配置 |
| `update_vng_azure` | 更新Azure VNG配置 |
所有工具都接受可选的`account_id`参数以查询任何账户。
### 实例删除策略
`remove_instances`工具提供了一种安全、基于意图的删除实例接口。您不需要记住要设置哪些API标志,而是选择一个策略:
| 策略 | 操作 | 用例 |
|----------|-------------|----------|
| `drain_and_replace` | 温和地排空Pod(尊重PDB),终止,Ocean替换。**默认且最安全。** | 在生产环境中替换有问题的节点 |
| `replace` | 立即终止,Ocean自动替换。无温和排空。仅限AWS。 | 不需要排空时的快速替换 |
| `remove_permanently` | 终止 + 减少集群容量。无替换。仅限AWS。 | 缩小集群规模 |
当`confirm=false`(默认)时,工具会显示详细的执行计划,以便您在继续之前进行审查:
```
remove_instances("o-abc123", "i-abc123", strategy="drain_and_replace")
→ 安全:操作**未**执行。设置confirm=true以继续。
排空并替换1个实例(s)在集群o-abc123中:
实例:['i-abc123']
方法:滚动重启(每次20%)
- 将温和地排空Pod(尊重PDB)
- 实例将在排空后终止
- Ocean将自动启动替换
```
## 安装
### 环境变量
```bash
export SPOTINST_TOKEN="您的Spotinst API令牌"
export SPOTINST_ACCOUNT_ID="act-xxxxxxxx"
```
### 使用pip安装
```bash
pip install mcp-server-spotinst
```
### 使用uvx安装(无需安装)
```bash
uvx mcp-server-spotinst
```
### Claude代码配置
添加到`~/.mcp.json`:
```json
{
"mcpServers": {
"spotinst": {
"command": "uvx",
"args": ["mcp-server-spotinst"],
"env": {
"SPOTINST_TOKEN": "您的令牌",
"SPOTINST_ACCOUNT_ID": "act-xxxxxxxx"
}
}
}
}
```
### Docker
```bash
docker build -t mcp-server-spotinst .
docker run -e SPOTINST_TOKEN=您的令牌 -e SPOTINST_ACCOUNT_ID=act-xxxxxxxx mcp-server-spotinst
```
### 独立运行
```bash
mcp-server-spotinst
```
## 多账户使用
您的个人API令牌可以访问多个Spotinst账户。使用`list_accounts`查看所有可用账户,然后将`account_id`传递给任何工具:
```
list_clusters(account_id="act-be5e7ffe")
get_cluster_nodes("o-390ef886", account_id="act-9785011e", cloud="azure")
```
或者使用`list_all_clusters`进行跨所有内容的单次调用。
## API参考
使用 [Spot.io REST API](https://docs.spot.io/api/) 于 `https://api.spotinst.io`。