From 660a7445b0dc53c8861f72eac0af3b9e991dd063 Mon Sep 17 00:00:00 2001 From: jiachenjie Date: Fri, 26 Jun 2026 16:49:21 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20ecs=E6=9F=A5=E8=AF=A2=E5=AE=9E=E4=BE=8B?= =?UTF-8?q?=E8=A1=A5=E5=85=85=E7=BD=91=E7=BB=9C=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/mcp_server_ecs/tools/instance.py | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) 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)