get_instance_info
Retrieve instance details from cloud service providers using a public IP address. Identify provider and access instance information without manual configuration.
Instructions
根据IP地址自动检测云服务提供商并获取实例信息
Args:
ip_address (str): 公网IP地址
provider (str, optional): 明确指定的云服务提供商 ('aws', 'digitalocean', 'vultr', 'alibaba')
Returns:
Dict: 实例信息,包含提供商信息和实例详情
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| ip_address | Yes | ||
| provider | No |
Implementation Reference
- main.py:50-147 (handler)The main handler function for the 'get_instance_info' tool. It is decorated with @mcp.tool(), which registers it as an MCP tool. The function detects the cloud provider from the IP address (or uses provided one), checks availability, and delegates to the specific provider's get_instance_by_ip method (or equivalent). It handles errors and enriches the response with provider info.@mcp.tool() def get_instance_info(ip_address: str, provider: Optional[str] = None) -> Dict: """ 根据IP地址自动检测云服务提供商并获取实例信息 Args: ip_address (str): 公网IP地址 provider (str, optional): 明确指定的云服务提供商 ('aws', 'digitalocean', 'vultr', 'alibaba') Returns: Dict: 实例信息,包含提供商信息和实例详情 """ # 如果用户明确指定了云服务提供商,直接使用 if provider: provider_name = provider.lower() if provider_name not in PROVIDERS: return { 'error': f'不支持的云服务提供商: {provider_name}', 'supported_providers': list(PROVIDERS.keys()), 'suggestion': f'请使用以下支持的提供商之一: {", ".join(PROVIDERS.keys())}' } # 直接使用指定的提供商,跳过IP检测 provider_obj = PROVIDERS[provider_name] provider_info = get_cloud_provider_info(provider_name) print(f"🎯 用户指定云服务提供商: {provider_info['name']}") else: # 检测云服务提供商 print("🔍 正在检测IP地址对应的云服务提供商...") provider_name = detect_cloud_provider(ip_address, IPINFO_API_TOKEN) provider_info = get_cloud_provider_info(provider_name) if provider_name == 'unknown': return { 'error': '无法识别IP地址对应的云服务提供商', 'ip_address': ip_address, 'detected_provider': 'unknown', 'suggestion': '请手动指定云服务提供商或检查IP地址是否正确', 'supported_providers': list(PROVIDERS.keys()), 'manual_usage': '您可以在调用时添加 provider 参数来明确指定云厂商,例如:get_instance_info(ip_address="1.2.3.4", provider="aws")' } # 获取对应的提供商 provider_obj = PROVIDERS.get(provider_name) if not provider_obj: return { 'error': f'不支持的云服务提供商: {provider_name}', 'detected_provider': provider_name, 'supported_providers': list(PROVIDERS.keys()) } print(f"✅ 检测到云服务提供商: {provider_info['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, 'provider_info': provider_info, 'suggestion': '请检查相关环境变量是否正确配置' } # 调用提供商的查询方法 print(f"🔍 正在查询 {provider_info['name']} 实例信息...") try: if provider_name == 'aws': result = provider_obj.get_instance_by_ip(ip_address) elif provider_name == 'digitalocean': result = provider_obj.get_droplet_by_ip(ip_address) elif provider_name == 'vultr': result = provider_obj.get_instance_by_ip(ip_address) elif provider_name == 'alibaba': result = provider_obj.get_instance_by_ip(ip_address) else: return { 'error': f'提供商 {provider_name} 的查询方法未实现', 'detected_provider': provider_name } # 添加检测信息到结果中 result['detected_provider'] = provider_name if not provider else f'{provider_name} (用户指定)' result['provider_info'] = provider_info result['search_ip'] = ip_address return result except Exception as e: return { 'error': f'查询 {provider_info["name"]} 实例时发生错误: {str(e)}', 'provider': provider_name, 'provider_info': provider_info, 'search_ip': ip_address }
- main.py:50-50 (registration)The @mcp.tool() decorator registers the get_instance_info function as an MCP tool.@mcp.tool()