云基础设施管理服务器

DigitalOcean MCP Server 是一个全面的模型上下文协议服务器,提供对DigitalOcean API的程序化访问,支持48种工具跨7大服务类别进行基础设施管理。

  • by rohit-kaundal
  • Go
  • 本地部署
  • 4 星标
  • 更新于
在 GitHub 查看 rohit-kaundal/digitalocean-mcp-server

使用说明

DigitalOcean MCP服务器

一个全面的模型上下文协议(MCP)服务器,提供对DigitalOcean的API的编程访问。此服务器公开 48工具 横跨 7大服务类别 通过MCP接口进行完整的基础设施管理。

特性

  • 🖥️ 液滴管理:具有调整大小和快照功能的完整生命周期管理
  • 💾 卷管理:块存储操作,包括连接/分离和快照
  • 📸 快照操作:液滴和卷的备份和恢复功能
  • 🖼️ 图像管理:自定义图像操作、传输和转换
  • 🌐 浮动IP管理:静态IP分配、分配和管理
  • ⚖️ 负载平衡器操作:具有完整CRUD操作的流量分布
  • 🔥 防火墙管理:通过规则和策略管理实现完整的网络安全
  • ☸️ Kubernetes操作:全面的集群和节点池管理
  • 📦 容器注册表:访问和管理DigitalOcean集装箱登记处
  • ✅ 连接测试:验证API连接和身份验证

先决条件

  • 上涨1.19或更高
  • DigitalOcean API令牌 (必填-请参阅配置部分)

安装

来源

git clone https://github.com/rohit-kaundal/digitalocean-mcp-server.git
cd digitalocean-mcp-server
go mod tidy
go build -o digitalocean-mcp-server

使用Go安装

go install github.com/rohit-kaundal/digitalocean-mcp-server@latest

配置

环境变量

必需:在运行服务器之前设置您的DigitalOcean API令牌:

export DIGITALOCEAN_ACCESS_TOKEN="your_digitalocean_api_token"

⚠️ 没有设置此环境变量,服务器将无法运行。

获取DigitalOcean API代币

  1. 登录到您的 数字海洋控制面板
  2. 导航至 API 在左侧边栏中
  3. 点击 生成新令牌
  4. 为您的令牌命名并选择适当的范围
  5. 复制生成的令牌(您将无法再次看到它)

用法

运行服务器

首先,确保您的DigitalOcean API令牌已设置:

export DIGITALOCEAN_ACCESS_TOKEN="your_digitalocean_api_token"

然后运行服务器:

./digitalocean-mcp-server

或者直接用Go运行:

go run main.go

服务器将启动并通过stdio传输监听MCP请求。

可用工具(共48个)

连接与测试

  • test_connection -测试API连接和身份验证

液滴管理(7个工具)

  • list_droplets -列出所有支持分页的液滴
  • get_droplet -获取特定液滴的详细信息
  • create_droplet -使用自定义规格创建新液滴
  • delete_droplet -永久删除液滴
  • resize_droplet -将液滴大小调整为不同大小(CPU/RAM/磁盘)
  • create_droplet_snapshot -创建液滴的快照备份

卷管理(8个工具)

  • list_volumes -列出所有块存储卷(可选按区域)
  • get_volume -获取详细的卷信息
  • create_volume -创建新的块存储卷
  • delete_volume -删除卷
  • attach_volume -将体积附加到液滴上
  • detach_volume -从液滴中分离体积
  • resize_volume -扩展卷存储容量
  • create_volume_snapshot -创建卷的快照备份

快照操作(6个工具)

  • list_snapshots -列出所有快照(按液滴/体积过滤)
  • list_volume_snapshots -列出特定卷的快照
  • list_droplet_snapshots -列出特定于液滴的快照
  • get_snapshot -获取详细的快照信息
  • delete_snapshot -删除快照

图像管理(6个工具)

  • list_images -列出可用图像(分发/应用程序/用户)
  • get_image -通过ID或slug获取图像详细信息
  • update_image -更新图像元数据(名称、描述)
  • delete_image -删除自定义图像
  • transfer_image -将图像转移到不同区域
  • convert_image_to_snapshot -将图像转换为快照格式

浮动IP管理(6个工具)

  • list_floating_ips -列出所有浮动IP地址
  • get_floating_ip -获取浮动IP详细信息和分配状态
  • create_floating_ip -创建新的浮动IP(区域或分配)
  • delete_floating_ip -释放浮动IP
  • assign_floating_ip -为液滴分配浮动IP
  • unassign_floating_ip -从液滴中取消分配浮动IP

负载平衡器操作(9个工具)

  • list_load_balancers -列出所有负载平衡器
  • get_load_balancer -获取负载均衡器配置和状态
  • create_load_balancer -使用转发规则创建新的负载平衡器
  • update_load_balancer -更新负载平衡器配置
  • delete_load_balancer -删除负载平衡器
  • add_droplets_to_load_balancer -将液滴添加到负载平衡器池
  • remove_droplets_from_load_balancer -清除水池中的水滴
  • add_forwarding_rules_to_load_balancer -添加流量转发规则
  • remove_forwarding_rules_from_load_balancer -删除转发规则

防火墙管理(11个工具)

  • list_firewalls -列出帐户中的所有防火墙
  • get_firewall -获取详细的防火墙配置和规则
  • create_firewall -使用入站/出站规则创建新防火墙
  • update_firewall -更新防火墙配置和规则
  • delete_firewall -从帐户中删除防火墙
  • add_droplets_to_firewall -将水滴分配给防火墙保护
  • remove_droplets_from_firewall -清除防火墙中的水滴
  • add_tags_to_firewall -为组织的防火墙添加标签
  • remove_tags_from_firewall -从防火墙中删除标签
  • add_rules_to_firewall -向防火墙添加新的安全规则
  • remove_rules_from_firewall -删除现有安全规则

Kubernetes集群(4个工具)

  • list_k8s_clusters -列出所有Kubernetes集群
  • get_k8s_cluster -获取集群详细信息和状态
  • create_k8s_cluster -创建新的Kubernetes集群
  • delete_k8s_cluster -删除Kubernetes集群

容器注册表(2个工具)

  • list_registries -列出所有容器注册表
  • get_registry -获取注册表详细信息和存储库

MCP客户端使用示例

基本操作

{
  "method": "tools/call",
  "params": {
    "name": "list_droplets",
    "arguments": {
      "page": 1,
      "per_page": 25
    }
  }
}
{
  "method": "tools/call",
  "params": {
    "name": "create_droplet",
    "arguments": {
      "name": "my-server",
      "region": "nyc3",
      "size": "s-1vcpu-1gb",
      "image": "ubuntu-22-04-x64"
    }
  }
}

卷管理

{
  "method": "tools/call",
  "params": {
    "name": "create_volume",
    "arguments": {
      "name": "my-storage",
      "region": "nyc3",
      "size_gigabytes": 100,
      "description": "Additional storage for applications"
    }
  }
}
{
  "method": "tools/call",
  "params": {
    "name": "attach_volume",
    "arguments": {
      "volume_id": "volume-123",
      "droplet_id": 456
    }
  }
}

负载平衡器设置

{
  "method": "tools/call",
  "params": {
    "name": "create_load_balancer",
    "arguments": {
      "name": "web-lb",
      "algorithm": "round_robin",
      "region": "nyc3",
      "forwarding_rules": [
        {
          "entry_protocol": "http",
          "entry_port": 80,
          "target_protocol": "http",
          "target_port": 8080
        }
      ],
      "droplet_ids": [123, 456]
    }
  }
}

浮动IP管理

{
  "method": "tools/call",
  "params": {
    "name": "create_floating_ip",
    "arguments": {
      "region": "nyc3"
    }
  }
}
{
  "method": "tools/call",
  "params": {
    "name": "assign_floating_ip",
    "arguments": {
      "ip": "192.168.1.100",
      "droplet_id": 123
    }
  }
}

防火墙配置

{
  "method": "tools/call",
  "params": {
    "name": "create_firewall",
    "arguments": {
      "name": "web-firewall",
      "inbound_rules": [
        {
          "protocol": "tcp",
          "ports": "80",
          "sources": {
            "addresses": ["0.0.0.0/0"]
          }
        },
        {
          "protocol": "tcp",
          "ports": "443",
          "sources": {
            "addresses": ["0.0.0.0/0"]
          }
        }
      ],
      "outbound_rules": [
        {
          "protocol": "tcp",
          "ports": "all",
          "destinations": {
            "addresses": ["0.0.0.0/0"]
          }
        }
      ],
      "droplet_ids": [123, 456]
    }
  }
}
{
  "method": "tools/call",
  "params": {
    "name": "add_droplets_to_firewall",
    "arguments": {
      "firewall_id": "firewall-123",
      "droplet_ids": [789, 101112]
    }
  }
}

发展

项目结构

digitalocean-mcp-server/
├── main.go                 # Entry point
├── server/
│   ├── server.go          # MCP server initialization
│   └── tools.go           # Tool registration
├── client/
│   └── digitalocean.go    # DigitalOcean API client
├── handlers/
│   ├── common.go          # Shared handler functionality
│   ├── droplets.go        # Droplet operations
│   ├── volumes.go         # Volume operations
│   ├── snapshots.go       # Snapshot operations
│   ├── images.go          # Image operations
│   ├── floating_ips.go    # Floating IP operations
│   ├── load_balancers.go  # Load balancer operations
│   ├── firewalls.go       # Firewall operations
│   ├── kubernetes.go      # Kubernetes operations
│   └── registry.go        # Registry operations
├── types/
│   └── args.go            # Request argument types
└── CLAUDE.md              # AI assistant instructions

开发命令

# Run the server
go run main.go

# Run tests
go test ./...

# Build binary
go build -o digitalocean-mcp-server

# Update dependencies
go mod tidy

添加新工具

  1. 在中定义参数类型 types/args.go
  2. 在相应的文件中实现处理程序逻辑 handlers/
  3. 在中注册该工具 server/tools.go
  4. 更新此文档

依赖项

错误处理

所有工具均返回标准化的MCP响应:

  • 成功:包含请求信息的JSON格式数据
  • 错误:结构化错误消息,详细说明问题所在

常见错误场景:

  • API令牌无效或丢失
  • 权限不足
  • 资源未找到
  • API速率限制
  • 网络连接问题

贡献

我们欢迎捐款!请看 贡献.md 作为指导方针。

许可证

此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。

支持

更新日志

v2.0.1

  • 防火墙管理:通过11个防火墙工具增加了全面的网络安全
  • 安全规则:完成入站/出站规则管理和配置
  • 液滴保护:为飞沫分配和管理防火墙保护
  • 标签管理:使用基于标签的分类来组织防火墙
  • 规则修改:动态添加和删除安全规则
  • 增强文档:更新了防火墙管理示例

v2.0.0版本

  • 大规模扩张:在5个附加服务类别中添加了30多个新的API工具
  • 卷管理:完整的块存储生命周期(8个工具)
  • 快照操作:备份和恢复功能(6个工具)
  • 图像管理:自定义图像操作和传输(6个工具)
  • 浮动IP管理:静态IP分配和分配(6个工具)
  • 负载平衡器操作:具有完整CRUD的流量分配(9个工具)
  • 增强液滴:添加了调整大小和快照功能
  • 综合文档:更新为详细的API覆盖范围
  • 改进的体系结构:模块化处理器设计,可扩展

v1.0.0

  • 初始版本
  • 液滴管理工具(5个工具)
  • Kubernetes集群工具(4个工具)
  • 容器注册表工具(2个工具)
  • 连接测试