get_instance_by_provider
Retrieve instance details from specified cloud providers like AWS, DigitalOcean, Vultr, or Alibaba using the instance identifier, enabling efficient cloud resource management and monitoring.
Instructions
通过明确指定的云服务提供商查询实例信息
Args:
provider (str): 云服务提供商 ('aws', 'digitalocean', 'vultr', 'alibaba')
identifier (str): 实例标识符(IP地址或实例ID)
Returns:
Dict: 实例信息
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| identifier | Yes | ||
| provider | Yes |
Implementation Reference
- main.py:148-219 (handler)Handler function implementing the 'get_instance_by_provider' MCP tool. It determines the appropriate provider-specific method based on provider and identifier type (IP or ID), executes the query, and handles errors. Registered via @mcp.tool() decorator.@mcp.tool() def get_instance_by_provider(provider: str, identifier: str) -> Dict: """ 通过明确指定的云服务提供商查询实例信息 Args: provider (str): 云服务提供商 ('aws', 'digitalocean', 'vultr', 'alibaba') identifier (str): 实例标识符(IP地址或实例ID) Returns: Dict: 实例信息 """ provider_name = provider.lower() if provider_name not in PROVIDERS: return { 'error': f'不支持的云服务提供商: {provider_name}', 'supported_providers': list(PROVIDERS.keys()) } 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, 'suggestion': '请检查相关环境变量是否正确配置' } print(f"🎯 直接查询 {provider_info['name']} 实例: {identifier}") try: # 根据标识符类型判断查询方式 if provider_name == 'aws': if identifier.startswith('i-'): result = provider_obj.get_instance_by_id(identifier) else: result = provider_obj.get_instance_by_ip(identifier) elif provider_name == 'digitalocean': if identifier.isdigit(): result = provider_obj.get_droplet_by_id(int(identifier)) else: result = provider_obj.get_droplet_by_ip(identifier) elif provider_name == 'vultr': # Vultr实例ID通常是UUID格式 if len(identifier) > 16 and '-' in identifier: result = provider_obj.get_instance_by_id(identifier) else: result = provider_obj.get_instance_by_ip(identifier) elif provider_name == 'alibaba': if identifier.startswith('i-'): result = provider_obj.get_instance_by_id(identifier) else: result = provider_obj.get_instance_by_ip(identifier) # 添加提供商信息 result['provider'] = provider_name result['provider_info'] = provider_info result['search_identifier'] = identifier return result except Exception as e: return { 'error': f'查询 {provider_info["name"]} 实例时发生错误: {str(e)}', 'provider': provider_name, 'identifier': identifier }