Skip to main content
Glama
rainhan99

Cloud Manage MCP Server

by rainhan99

get_alibaba_instance_info

Retrieve Alibaba Cloud ECS instance details using IP address or instance ID to access configuration, status, and resource information for cloud management.

Instructions

获取阿里云ECS实例信息

Args:
    ip_address_or_id (str): 公网IP地址或实例ID
    
Returns:
    Dict: 阿里云实例信息

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
ip_address_or_idYes

Implementation Reference

  • main.py:554-570 (handler)
    MCP tool handler and registration for 'get_alibaba_instance_info'. Dispatches to alibaba_provider based on whether the input starts with 'i-' (instance ID) or is an IP address.
    @mcp.tool()
    def get_alibaba_instance_info(ip_address_or_id: str) -> Dict:
        """
        获取阿里云ECS实例信息
        
        Args:
            ip_address_or_id (str): 公网IP地址或实例ID
            
        Returns:
            Dict: 阿里云实例信息
        """
        # 阿里云实例ID通常以i-开头
        if ip_address_or_id.startswith('i-'):
            return alibaba_provider.get_instance_by_id(ip_address_or_id)
        else:
            return alibaba_provider.get_instance_by_ip(ip_address_or_id)
  • Core logic for retrieving Alibaba ECS instance by public IP address. Queries all instances and matches IP in public_ip_address or eip_address.
    def get_instance_by_ip(self, ip_address: str) -> Dict:
        """
        根据公网IP地址查找ECS实例
        
        Args:
            ip_address (str): 公网IP地址
            
        Returns:
            Dict: 实例信息或错误信息
        """
        if not self.available:
            return {
                'error': f'阿里云服务不可用: {getattr(self, "error", "未知错误")}',
                'provider': 'alibaba'
            }
        
        try:
            # 查询所有ECS实例
            request = ecs_models.DescribeInstancesRequest(
                region_id=self.region_id,
                page_size=100
            )
            
            response = self.client.describe_instances(request)
            
            if not response.body.instances:
                return {
                    'provider': 'alibaba',
                    'found': False,
                    'message': f'未找到使用IP地址 {ip_address} 的ECS实例',
                    'searched_region': self.region_id
                }
            
            # 查找匹配的IP地址
            for instance in response.body.instances.instance:
                # 检查公网IP
                public_ips = []
                if hasattr(instance, 'public_ip_address') and instance.public_ip_address:
                    public_ips.extend(instance.public_ip_address.ip_address)
                
                # 检查弹性公网IP
                if hasattr(instance, 'eip_address') and instance.eip_address.ip_address:
                    public_ips.append(instance.eip_address.ip_address)
                
                if ip_address in public_ips:
                    instance_info = self._format_instance_info(instance)
                    return {
                        'provider': 'alibaba',
                        'found': True,
                        'instance_info': instance_info
                    }
            
            return {
                'provider': 'alibaba',
                'found': False,
                'message': f'未找到使用IP地址 {ip_address} 的ECS实例',
                'total_instances_checked': len(response.body.instances.instance)
            }
            
        except Exception as e:
            return {
                'error': f'查询ECS实例时发生错误: {str(e)}',
                'provider': 'alibaba'
            }
  • Core logic for retrieving Alibaba ECS instance by instance ID using DescribeInstancesRequest with instance_ids filter.
    def get_instance_by_id(self, instance_id: str) -> Dict:
        """
        根据实例ID查找ECS实例
        
        Args:
            instance_id (str): ECS实例ID
            
        Returns:
            Dict: 实例信息或错误信息
        """
        if not self.available:
            return {
                'error': f'阿里云服务不可用: {getattr(self, "error", "未知错误")}',
                'provider': 'alibaba'
            }
        
        try:
            request = ecs_models.DescribeInstancesRequest(
                region_id=self.region_id,
                instance_ids=json.dumps([instance_id])
            )
            
            response = self.client.describe_instances(request)
            
            if not response.body.instances or not response.body.instances.instance:
                return {
                    'provider': 'alibaba',
                    'found': False,
                    'message': f'未找到ID为 {instance_id} 的ECS实例'
                }
            
            instance = response.body.instances.instance[0]
            instance_info = self._format_instance_info(instance)
            
            return {
                'provider': 'alibaba',
                'found': True,
                'instance_info': instance_info
            }
            
        except Exception as e:
            return {
                'error': f'查询ECS实例时发生错误: {str(e)}',
                'provider': 'alibaba'
            }
  • Helper function that formats the raw Alibaba ECS instance data into a standardized dictionary with all relevant fields like IPs, status, specs, tags, etc.
    def _format_instance_info(self, instance) -> Dict:
        """格式化实例详细信息"""
        # 获取公网IP
        public_ips = []
        if hasattr(instance, 'public_ip_address') and instance.public_ip_address:
            public_ips.extend(instance.public_ip_address.ip_address)
        
        # 获取弹性公网IP
        eip_address = None
        if hasattr(instance, 'eip_address') and instance.eip_address.ip_address:
            eip_address = instance.eip_address.ip_address
            public_ips.append(eip_address)
        
        # 获取私网IP
        private_ips = []
        if hasattr(instance, 'vpc_attributes') and instance.vpc_attributes.private_ip_address:
            private_ips.extend(instance.vpc_attributes.private_ip_address.ip_address)
        elif hasattr(instance, 'inner_ip_address') and instance.inner_ip_address:
            private_ips.extend(instance.inner_ip_address.ip_address)
        
        # 获取标签
        tags = {}
        if hasattr(instance, 'tags') and instance.tags.tag:
            for tag in instance.tags.tag:
                tags[tag.tag_key] = tag.tag_value
        
        # 获取安全组
        security_groups = []
        if hasattr(instance, 'security_group_ids') and instance.security_group_ids.security_group_id:
            security_groups = instance.security_group_ids.security_group_id
        
        return {
            'instance_id': instance.instance_id,
            'name': instance.instance_name,
            'hostname': getattr(instance, 'hostname', ''),
            'status': instance.status,
            'instance_type': instance.instance_type,
            'image_id': instance.image_id,
            'region_id': instance.region_id,
            'zone_id': instance.zone_id,
            'cpu': instance.cpu,
            'memory': instance.memory,
            'public_ips': public_ips,
            'private_ips': private_ips,
            'eip_address': eip_address,
            'creation_time': instance.creation_time,
            'start_time': getattr(instance, 'start_time', ''),
            'expired_time': getattr(instance, 'expired_time', ''),
            'os_name': getattr(instance, 'osname', ''),
            'os_type': getattr(instance, 'ostype', ''),
            'instance_charge_type': instance.instance_charge_type,
            'internet_charge_type': getattr(instance, 'internet_charge_type', ''),
            'internet_max_bandwidth_in': getattr(instance, 'internet_max_bandwidth_in', 0),
            'internet_max_bandwidth_out': getattr(instance, 'internet_max_bandwidth_out', 0),
            'vpc_id': getattr(instance, 'vpc_id', ''),
            'vswitch_id': getattr(instance, 'vswitch_id', ''),
            'security_group_ids': security_groups,
            'tags': tags
        }

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