mcpField
M
Multi Cloud Manager

Multi Cloud Manager

ローカル
github.com/rainhan99クラウド・インフラ174 週間前に更新

Multi Cloud Manager について

Multi Cloud Managerは、DigitalOcean dropletの特定と管理を行うMCPサーバーです。電源操作、状態・監視・操作履歴の確認に加え、複数の安全策でdropletの削除を阻止します。

主な機能

  1. 01パブリックIPまたは名前でdropletを検索
  2. 02dropletの一覧と状態確認
  3. 03起動、強制停止、シャットダウン、再起動
  4. 04監視メトリクスと操作履歴の取得
  5. 05削除保護による削除の阻止

活用シーン

  1. 01パブリックIPからDigitalOcean dropletを特定
  2. 02dropletの状態とリソース使用量を確認
  3. 03dropletを再起動して操作状況を追跡
  4. 04サーバー整理前に削除の安全性を確認

MCP 対応

DigitalOcean dropletの検索、管理、監視、安全確認をMCPクライアント向けのツールとして公開します。AWS対応は予定段階で、未実装です。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

Cloud Manage MCP サーバー

これは、パブリック IP アドレスからクラウドサーバーの情報を取得できる、MCP(Model Context Protocol)ベースのクラウド管理サーバーです。

機能

  • パブリック IP アドレスからクラウドサービスプロバイダーを識別
  • pydo SDK を使用して DigitalOcean droplet の詳細情報を取得
  • Droplet の電源管理:起動、シャットダウン、再起動、正常なシャットダウン
  • ステータスの監視:droplet の現在のステータスとリソース使用状況を取得
  • 操作履歴:droplet の操作履歴を確認
  • 一括管理:すべての droplets を一覧表示し、名前で検索
  • 監視データ:CPU、メモリ、ディスク、ネットワークの使用率を取得(監視の有効化が必要)
  • 削除保護:重要なサーバーの誤削除を防ぐ多重の安全機構
  • AWS に対応(実装待ち)

セキュリティ機能

🛡️ 削除保護機構

重要な droplet の誤削除を防ぐため、このシステムでは厳格な5層の安全保護を実装しています。

保護レベル
  1. グローバルスイッチ保護:すべての削除操作をデフォルトで無効化
  2. 確認コード保護:削除を試みるには特定の確認コードが必要
  3. ステータス確認保護:実行中の droplet の削除を禁止
  4. タグ保護:重要な droplet を自動的に識別して保護
  5. 最終安全チェック:前段階のチェックを通過しても、実際の削除は無効化
保護タグ

システムは、次のタグが付いた droplet を自動的に保護します。

  • production / prod
  • important
  • critical
  • backup
設定方法
# 默认情况下,删除功能完全禁用
# 如需启用(强烈不推荐),设置环境变量:
export ALLOW_DROPLET_DELETION=true

⚠️ 重要な注意:削除機能を有効にしても、実際の削除操作はすべて最終安全チェックによって阻止されます。DigitalOcean のコントロールパネルから手動で droplet を削除することを常に推奨します。

使用可能な MCP ツール関数

基本的な照会機能
get_dg_info(ipv4_address: str)

パブリック IP アドレスに対応する DigitalOcean droplet の情報を取得します。

パラメーター:

  • ipv4_address (str):照会するパブリック IP アドレス
list_droplets()

アカウントにあるすべての DigitalOcean droplets を一覧表示します。

find_droplet_by_name(name: str)

名前から DigitalOcean droplet を検索します(部分一致に対応)。

パラメーター:

  • name (str):droplet の名前または名前の一部
get_droplet_status(droplet_id: int)

指定した droplet の現在のステータスと詳細情報を取得します。

パラメーター:

  • droplet_id (int):droplet ID
電源管理機能
power_on_droplet(droplet_id: int)

指定した droplet を起動します。

power_off_droplet(droplet_id: int)

指定した droplet を強制的にシャットダウンします(電源プラグを抜くような操作です)。

shutdown_droplet(droplet_id: int)

指定した droplet を正常にシャットダウンします(システムのシャットダウンコマンドと同様の操作です)。

reboot_droplet(droplet_id: int)

指定した droplet を再起動します。

パラメーター:

  • droplet_id (int):操作する droplet ID
監視および履歴機能
get_droplet_monitoring(droplet_id: int)

CPU、メモリ、ディスク、ネットワークの使用率など、droplet の監視データを取得します。

注意:droplet で監視機能を有効にする必要があります。

get_droplet_actions(droplet_id: int)

指定した droplet の操作履歴を取得します。

get_action_status(action_id: int)

特定の操作のステータスを照会します(電源操作の実行後に進捗を追跡するために使用できます)。

パラメーター:

  • droplet_id (int):droplet ID
  • action_id (int):操作 ID
削除保護機能
delete_droplet_with_protection(droplet_id: int, confirmation_code: str = "")

厳格な安全保護機能付きで DigitalOcean droplet を削除します。

注意:この機能には多重の安全制限があり、実際には削除操作を阻止するように設計されています。

パラメーター:

  • droplet_id (int):削除する droplet ID
  • confirmation_code (str):確認コード("CONFIRM_DELETE_DROPLET"である必要があります)
get_droplet_deletion_policy()

現在の削除ポリシーと安全設定情報を取得します。

check_droplet_deletion_safety(droplet_id: int)

指定した droplet の削除時の安全性を確認します(実際には削除しません)。

パラメーター:

  • droplet_id (int):確認する droplet ID

使用例

基本操作の例
# 列出所有 droplets
result = list_droplets()
print(f"总共有 {result['total_droplets']} 个 droplets")

# 查找特定名称的 droplet
result = find_droplet_by_name("web-server")
if result['found']:
    droplet = result['droplets'][0]
    droplet_id = droplet['id']

    # 获取详细状态
    status = get_droplet_status(droplet_id)
    print(f"Droplet 状态: {status['status']}")

    # 重启 droplet
    if status['status'] == 'active':
        action_result = reboot_droplet(droplet_id)
        action_id = action_result['action']['id']

        # 检查操作状态
        action_status = get_action_status(action_id)
        print(f"重启操作状态: {action_status['action']['status']}")
削除時の安全性確認の例
# 检查删除策略
policy = get_droplet_deletion_policy()
print(f"删除功能状态: {policy['deletion_policy']['current_status']}")

# 检查特定 droplet 的删除安全性
safety_check = check_droplet_deletion_safety(droplet_id)
print(f"安全等级: {safety_check['safety_level']}")

# 查看安全检查详情
for check in safety_check['safety_checks']:
    print(f"{check['check']}: {check['status']} - {check['message']}")

# 尝试删除(会被安全机制阻止)
deletion_result = delete_droplet_with_protection(droplet_id, "CONFIRM_DELETE_DROPLET")
if deletion_result.get('error'):
    print(f"删除被阻止: {deletion_result['error']}")
監視データ取得の例
# 获取监控数据
monitoring_result = get_droplet_monitoring(droplet_id)
if monitoring_result['monitoring_enabled']:
    metrics = monitoring_result['metrics']

    for metric_type, data in metrics.items():
        if data['available']:
            print(f"{metric_type} 监控数据可用")
        else:
            print(f"{metric_type} 暂无数据")
else:
    print("请先在 DigitalOcean 控制面板中启用监控功能")

戻り値の説明

成功レスポンスの例
削除時の安全性確認
{
    "cloud_provider": "digitalocean",
    "droplet_id": 123456789,
    "droplet_name": "web-server-01",
    "overall_safety": "BLOCKED",
    "safety_level": "删除被阻止",
    "safety_checks": [
        {
            "check": "全局删除策略",
            "status": "BLOCKED",
            "message": "删除功能已被全局禁用"
        },
        {
            "check": "droplet状态",
            "status": "WARNING",
            "message": "droplet正在运行 (active),建议先关机"
        },
        {
            "check": "保护标签",
            "status": "BLOCKED",
            "message": "发现保护标签: production"
        }
    ],
    "warnings": [
        "此droplet带有保护标签,表明它可能是重要服务器"
    ],
    "summary": {
        "total_checks": 5,
        "blocked": 2,
        "warnings": 1,
        "passed": 2
    }
}
削除ポリシー情報
{
    "cloud_provider": "digitalocean",
    "deletion_policy": {
        "enabled": false,
        "protection_level": "MAXIMUM",
        "current_status": "所有删除操作被禁用",
        "safety_checks": [
            "环境变量 ALLOW_DROPLET_DELETION 必须设置为 true",
            "必须提供正确的确认码 'CONFIRM_DELETE_DROPLET'",
            "droplet 必须处于关机状态",
            "droplet 不能带有保护标签",
            "多重确认机制"
        ],
        "protected_tags": ["production", "prod", "important", "critical", "backup"]
    },
    "security_info": {
        "philosophy": "安全第一,防止意外删除重要服务器",
        "recommendation": "强烈建议通过DigitalOcean控制面板手动删除droplet"
    }
}
droplet の操作成功
{
    "cloud_provider": "digitalocean",
    "droplet_id": 123456789,
    "action": {
        "id": 987654321,
        "status": "in-progress",
        "type": "reboot",
        "started_at": "2024-01-01T12:00:00Z",
        "completed_at": null,
        "resource_id": 123456789,
        "resource_type": "droplet",
        "region": "New York 3"
    },
    "message": "已成功提交 reboot 操作,操作ID: 987654321"
}
droplet のステータス照会
{
    "cloud_provider": "digitalocean",
    "droplet_id": 123456789,
    "status": "active",
    "name": "web-server-01",
    "locked": false,
    "size_slug": "s-1vcpu-1gb",
    "memory": 1024,
    "vcpus": 1,
    "disk": 25,
    "region": {
        "name": "New York 3",
        "slug": "nyc3"
    },
    "image": {
        "name": "Ubuntu 20.04 x64",
        "distribution": "Ubuntu"
    },
    "created_at": "2024-01-01T10:00:00Z",
    "features": ["monitoring", "ipv6"],
    "tags": ["web", "production"]
}
監視データのレスポンス
{
    "cloud_provider": "digitalocean",
    "droplet_id": 123456789,
    "monitoring_enabled": true,
    "metrics": {
        "cpu": {
            "available": true,
            "data": [...]
        },
        "memory": {
            "available": true,
            "data": [...]
        },
        "disk": {
            "available": false,
            "data": []
        },
        "network": {
            "available": true,
            "data": [...]
        }
    },
    "note": "监控数据可能需要几分钟才能在新启用监控的droplet上显示。"
}
エラーレスポンスの例
削除操作の阻止
{
    "cloud_provider": "digitalocean",
    "error": "删除操作已被禁用。出于安全考虑,所有droplet删除操作被限制。",
    "security_info": {
        "protection_level": "MAXIMUM",
        "reason": "防止意外删除重要服务器",
        "how_to_enable": "设置环境变量 ALLOW_DROPLET_DELETION=true (不推荐)"
    }
}
一般的なエラー
{
    "cloud_provider": "digitalocean",
    "error": "未找到ID为 123456789 的droplet"
}

テスト機能

プロジェクトには、すべての機能をテストできる完全なテストスクリプト test_dg_info.py が含まれています。

python test_dg_info.py

テストスクリプトには、次のテストモジュールが含まれています。

  • 基本機能テスト:droplets の一覧表示、API 接続テスト
  • Droplet 操作テスト:ステータス照会、電源管理、操作履歴
  • 監視機能テスト:監視データの取得と利用可能性の確認
  • 削除保護テスト:安全ポリシーの確認、削除時の安全性評価
  • IP 検索テスト:IP アドレスから対応する droplet を検索

注意事項

セキュリティ関連
  1. 削除保護:

    • 誤削除を防ぐため、すべての削除操作はデフォルトで無効です
    • 多重の安全確認機構により、重要なサーバーを保護します
    • 設定で削除を許可しても、実際の削除は最終安全チェックによって阻止されます
    • DigitalOcean のコントロールパネルから手動で削除することを強く推奨します
  2. API 権限:DigitalOcean API token に適切な権限があることを確認してください。

    • droplets を読み取る権限
    • droplet を操作する権限(起動、シャットダウン、再起動など)
    • 監視データにアクセスする権限
  3. 監視機能の制限:

    • droplet で監視機能を有効にする必要があります(作成時、または後からコントロールパネルで有効にできます)
    • 監視データが表示されるまで数分かかる場合があります
    • 無料の monitoring 機能では、5 分ごとにデータポイントが収集されます
  4. API 呼び出しの制限:

    • DigitalOcean API には頻度制限があります(1 時間あたり 5,000 件のリクエスト)
    • 電源操作は非同期で実行されるため、完了を確認するには操作ステータスを照会する必要があります
  5. セキュリティ上の考慮事項:

    • API token は安全に保管してください
    • 機密情報の保存には環境変数を使用することを推奨します
    • 本番環境では API token の権限範囲を制限してください
    • 自動化スクリプトで削除機能を有効にしないでください

操作ステータスの説明

droplet のステータスには次のものがあります。

  • new:新規作成され、初期化中
  • active:実行中
  • off:シャットダウン済み
  • archive:アーカイブ済み(長期間シャットダウン)

操作ステータスには次のものがあります。

  • in-progress:実行中
  • completed:完了
  • errored:実行失敗

削除時の安全レベル:

  • BLOCKED:削除が阻止されました(深刻なセキュリティ上の問題があります)
  • WARNING:慎重な検討が必要です(潜在的なリスクがあります)
  • CAUTION:削除できますが、確認が必要です(引き続き制限があります)

最佳实践

  1. 安全操作:

    • 避免启用删除功能,始终通过控制面板手动删除
    • 定期使用 check_droplet_deletion_safety() 评估服务器安全性
    • 为重要服务器添加保护标签
  2. 批量操作: 使用 list_droplets() 获取所有 droplets,然后根据需要过滤和操作

  3. 状态检查: 在执行电源操作前,先检查 droplet 当前状态

  4. 操作跟踪: 保存操作 ID,用于后续状态查询

  5. 错误处理: 始终检查返回结果中的 error 字段

  6. 监控启用: 在创建 droplet 时启用监控功能,以便后续获取使用数据

依赖安装

pip install -r requirements.txt

环境变量配置

创建 .env 文件并设置以下环境变量:

# DigitalOcean API Token
# 在 https://cloud.digitalocean.com/account/api/tokens 获取
DIGITALOCEAN_TOKEN=your_digitalocean_api_token_here

# IPInfo API Token (可选,用于IP地址查询)
# 在 https://ipinfo.io/account/token 获取
IPINFO_API_TOKEN=your_ipinfo_api_token_here

# 删除功能控制 (强烈不推荐启用)
# ALLOW_DROPLET_DELETION=false  # 默认值,建议保持禁用

使用方法

启动服务器
python main.py

API 说明

pydo SDK 集成

本项目使用官方的 pydo SDK 来与 DigitalOcean API 交互:

  1. 安装 pydo: pip install pydo
  2. 配置 API Token: 设置 DIGITALOCEAN_TOKEN 环境变量
  3. 调用 API: 使用 client.droplets.list() 获取所有 droplets
工作原理
  1. 初始化 pydo 客户端,使用配置的 API token
  2. 调用 client.droplets.list() 获取账户下所有 droplets
  3. 遍历每个 droplet 的网络配置
  4. 查找匹配指定公网 IP 地址的 droplet
  5. 返回找到的 droplet 的详细信息

错误处理

  • 自动检测 pydo SDK 是否已安装
  • 验证 DIGITALOCEAN_TOKEN 环境变量是否配置
  • 捕获 API 调用异常并返回友好的错误信息
  • 提供详细的调试信息

注意事项

  1. 确保您的 DigitalOcean API token 具有读取 droplets 的权限
  2. API 有调用频率限制,请合理使用
  3. 该功能会列出账户下所有 droplets,请确保 token 的安全性

扩展功能

  • 支持按标签过滤 droplets
  • 支持分页查询大量 droplets
  • 缓存查询结果以提高性能
  • 支持其他云服务提供商(AWS、GCP 等)

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。