Skip to main content
Glama
rainhan99

Cloud Manage MCP Server

by rainhan99

manage_instance_power

Control cloud instance power states across multiple providers, enabling power on, power off, reboot, and shutdown operations with confirmation steps.

Instructions

通用的实例电源管理函数(支持所有云平台)

Args:
    provider (str): 云服务提供商 ('digitalocean', 'vultr', 'alibaba')
    instance_id (str): 实例ID
    action (str): 操作类型 ('power_on', 'power_off', 'reboot', 'shutdown')
    ip_confirmation (str): 确认IP地址
    name_confirmation (str): 确认实例名称
    operation_confirmation (str): 确认操作类型
    
Returns:
    Dict: 操作结果

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
providerYes
instance_idYes
actionYes
ip_confirmationNo
name_confirmationNo
operation_confirmationNo

Implementation Reference

  • main.py:220-323 (handler)
    Primary handler and registration for the 'manage_instance_power' MCP tool. Validates provider and action, dispatches to provider-specific power management functions in DigitalOcean, Vultr, and Alibaba providers with triple confirmation security checks.
    @mcp.tool()
    def manage_instance_power(
        provider: str, 
        instance_id: str, 
        action: str,
        ip_confirmation: str = "", 
        name_confirmation: str = "", 
        operation_confirmation: str = ""
    ) -> Dict:
        """
        通用的实例电源管理函数(支持所有云平台)
        
        Args:
            provider (str): 云服务提供商 ('digitalocean', 'vultr', 'alibaba')
            instance_id (str): 实例ID
            action (str): 操作类型 ('power_on', 'power_off', 'reboot', 'shutdown')
            ip_confirmation (str): 确认IP地址
            name_confirmation (str): 确认实例名称
            operation_confirmation (str): 确认操作类型
            
        Returns:
            Dict: 操作结果
        """
        provider_name = provider.lower()
        
        # AWS不支持电源管理
        if provider_name == 'aws':
            return {
                'error': 'AWS平台仅支持只读查询,不允许执行电源管理操作',
                'provider': 'aws',
                'suggestion': '如需管理AWS实例,请使用AWS控制台或CLI'
            }
        
        if provider_name not in ['digitalocean', 'vultr', 'alibaba']:
            return {
                'error': f'不支持的云服务提供商: {provider_name}',
                'supported_providers': ['digitalocean', 'vultr', 'alibaba']
            }
        
        if action not in ['power_on', 'power_off', 'reboot', 'shutdown']:
            return {
                'error': f'不支持的操作类型: {action}',
                'supported_actions': ['power_on', 'power_off', 'reboot', 'shutdown']
            }
        
        provider_obj = PROVIDERS[provider_name]
        provider_info = get_cloud_provider_info(provider_name)
        
        # 检查提供商是否可用
        if not getattr(provider_obj, 'available', False):
            error_msg = getattr(provider_obj, 'error', '提供商不可用')
            return {
                'error': f'{provider_info["name"]} 提供商不可用: {error_msg}',
                'provider': provider_name
            }
        
        print(f"🎯 {provider_info['name']} 电源管理: {action} for {instance_id}")
        
        try:
            # 调用对应提供商的电源管理方法
            if provider_name == 'digitalocean':
                droplet_id = int(instance_id) if instance_id.isdigit() else None
                if not droplet_id:
                    return {'error': 'DigitalOcean Droplet ID必须是数字'}
                    
                if action == 'power_on':
                    return provider_obj.power_on_droplet(droplet_id, ip_confirmation, name_confirmation, operation_confirmation)
                elif action == 'power_off':
                    return provider_obj.power_off_droplet(droplet_id, ip_confirmation, name_confirmation, operation_confirmation)
                elif action == 'reboot':
                    return provider_obj.reboot_droplet(droplet_id, ip_confirmation, name_confirmation, operation_confirmation)
                elif action == 'shutdown':
                    return provider_obj.shutdown_droplet(droplet_id, ip_confirmation, name_confirmation, operation_confirmation)
                    
            elif provider_name == 'vultr':
                if action == 'power_on':
                    return provider_obj.power_on_instance(instance_id, ip_confirmation, name_confirmation, operation_confirmation)
                elif action == 'power_off':
                    return provider_obj.power_off_instance(instance_id, ip_confirmation, name_confirmation, operation_confirmation)
                elif action == 'reboot':
                    return provider_obj.reboot_instance(instance_id, ip_confirmation, name_confirmation, operation_confirmation)
                elif action == 'shutdown':
                    # Vultr可能不支持优雅关闭,使用强制关闭
                    return provider_obj.power_off_instance(instance_id, ip_confirmation, name_confirmation, operation_confirmation)
                    
            elif provider_name == 'alibaba':
                if action == 'power_on':
                    return provider_obj.power_on_instance(instance_id, ip_confirmation, name_confirmation, operation_confirmation)
                elif action == 'power_off':
                    return provider_obj.power_off_instance(instance_id, ip_confirmation, name_confirmation, operation_confirmation)
                elif action == 'reboot':
                    return provider_obj.reboot_instance(instance_id, ip_confirmation, name_confirmation, operation_confirmation)
                elif action == 'shutdown':
                    # 阿里云使用power_off作为关闭操作
                    return provider_obj.power_off_instance(instance_id, ip_confirmation, name_confirmation, operation_confirmation)
            
        except Exception as e:
            return {
                'error': f'执行 {action} 操作时发生错误: {str(e)}',
                'provider': provider_name,
                'instance_id': instance_id,
                'action': action
            }

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