diff --git a/server/mcp_server_ecs/src/mcp_server_ecs/tools/instance.py b/server/mcp_server_ecs/src/mcp_server_ecs/tools/instance.py index b9fd0342..e58b2fd6 100644 --- a/server/mcp_server_ecs/src/mcp_server_ecs/tools/instance.py +++ b/server/mcp_server_ecs/src/mcp_server_ecs/tools/instance.py @@ -2,7 +2,7 @@ Instance related tool functions """ -from typing import List +from typing import Any, List import volcenginesdkecs from mcp import types @@ -14,6 +14,24 @@ from mcp_server_ecs.tools import mcp +def _sdk_model_to_api_dict(value: Any) -> Any: + """Convert Volcengine SDK models to API response field names.""" + if isinstance(value, list): + return [_sdk_model_to_api_dict(item) for item in value] + if isinstance(value, dict): + return {key: _sdk_model_to_api_dict(item) for key, item in value.items()} + + attribute_map = getattr(value, "attribute_map", None) + swagger_types = getattr(value, "swagger_types", None) + if attribute_map and swagger_types: + return { + api_key: _sdk_model_to_api_dict(getattr(value, sdk_key, None)) + for sdk_key, api_key in attribute_map.items() + } + + return value + + @mcp.tool( name="describe_instances", description="查询实例列表 (Query instance list)\n\n查询一个或多个ECS实例的详细信息,包括实例ID、规格、状态、可用区、计费方式等。\n支持按实例ID、名称、状态、规格族、可用区、计费方式等条件过滤。", @@ -110,6 +128,9 @@ async def describe_instances( "StoppedMode": instance.stopped_mode, "ZoneId": instance.zone_id, "LocalVolumes": instance.local_volumes, + "NetworkInterfaces": _sdk_model_to_api_dict( + getattr(instance, "network_interfaces", None) or [] + ), } total_results.append(filtered_instance)