Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 22 additions & 1 deletion server/mcp_server_ecs/src/mcp_server_ecs/tools/instance.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
Instance related tool functions
"""

from typing import List
from typing import Any, List

import volcenginesdkecs
from mcp import types
Expand All @@ -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、名称、状态、规格族、可用区、计费方式等条件过滤。",
Expand Down Expand Up @@ -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)

Expand Down
Loading