Skip to main content
Glama
rainhan99

Cloud Manage MCP Server

by rainhan99

reboot_digitalocean_droplet

Restart a DigitalOcean droplet to resolve issues or apply changes, requiring three confirmations for safety.

Instructions

重启DigitalOcean Droplet(需要三次确认)

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
droplet_idYes
ip_confirmationNo
name_confirmationNo
operation_confirmationNo

Implementation Reference

  • main.py:446-458 (registration)
    Registration of the MCP tool 'reboot_digitalocean_droplet' via @mcp.tool() decorator. This is the entry point handler that delegates to the DigitalOcean provider.
    @mcp.tool()
    def reboot_digitalocean_droplet(
        droplet_id: int, 
        ip_confirmation: str = "", 
        name_confirmation: str = "", 
        operation_confirmation: str = ""
    ) -> Dict:
        """
        重启DigitalOcean Droplet(需要三次确认)
        """
        return digitalocean_provider.reboot_droplet(
            droplet_id, ip_confirmation, name_confirmation, operation_confirmation
        )
  • Core handler logic for power operations including reboot. Performs security triple confirmation, validates inputs, and executes the DigitalOcean API call to reboot the droplet.
    def _execute_power_operation(
        self, 
        droplet_id: int, 
        operation: str, 
        ip_confirmation: str, 
        name_confirmation: str, 
        operation_confirmation: str
    ) -> Dict:
        """
        执行电源操作的通用函数
        """
        if not self.available:
            return {
                'error': f'DigitalOcean服务不可用: {getattr(self, "error", "未知错误")}',
                'provider': 'digitalocean'
            }
        
        # 首先获取droplet信息
        try:
            droplet_response = self.client.droplets.get(droplet_id)
            droplet = droplet_response.get("droplet", {})
            
            if not droplet:
                return {
                    'error': f'未找到ID为 {droplet_id} 的Droplet',
                    'provider': 'digitalocean'
                }
            
            # 格式化droplet信息用于确认
            droplet_info = self._format_droplet_for_confirmation(droplet)
            
        except Exception as e:
            return {
                'error': f'获取Droplet信息时发生错误: {str(e)}',
                'provider': 'digitalocean'
            }
        
        # 检查是否提供了确认信息
        if not ip_confirmation or not name_confirmation or not operation_confirmation:
            # 返回确认要求
            return require_triple_confirmation(droplet_info, operation)
        
        # 验证确认信息
        security = SecurityConfirmation()
        is_valid, error_message = security.validate_power_operation(
            droplet_info, operation, ip_confirmation, name_confirmation, operation_confirmation
        )
        
        if not is_valid:
            return {
                'error': f'确认验证失败: {error_message}',
                'provider': 'digitalocean',
                'requires_confirmation': True
            }
        
        # 执行实际操作
        try:
            action_data = {"type": operation}
            response = self.client.droplet_actions.post(droplet_id=droplet_id, body=action_data)
            
            action = response.get("action", {})
            
            return {
                'provider': 'digitalocean',
                'droplet_id': droplet_id,
                'operation_success': True,
                'action': {
                    'id': action.get("id"),
                    'status': action.get("status"),
                    'type': action.get("type"),
                    'started_at': action.get("started_at"),
                    'resource_id': action.get("resource_id")
                },
                'message': f'已成功提交 {operation} 操作,操作ID: {action.get("id")}',
                'confirmation_validated': True
            }
            
        except Exception as e:
            return {
                'error': f'执行 {operation} 操作时发生错误: {str(e)}',
                'provider': 'digitalocean'
            }
  • Helper method in DigitalOceanProvider class that specifically handles reboot by calling the generic power operation executor.
    def reboot_droplet(
        self, 
        droplet_id: int, 
        ip_confirmation: str = "", 
        name_confirmation: str = "", 
        operation_confirmation: str = ""
    ) -> Dict:
        """
        重启Droplet(需要三次确认)
        """
        return self._execute_power_operation(
            droplet_id, 'reboot', ip_confirmation, name_confirmation, operation_confirmation
        )

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/rainhan99/cloud_manage_mcp_server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server