DescribeAvailableResource
Check resource availability by region, zone, or type to confirm inventory status before creating or modifying instances on Alibaba Cloud MCP Server.
Instructions
查询可用区的资源库存状态。您可以在某一可用区创建实例(RunInstances)或者修改实例规格(ModifyInstanceSpec)时查询该可用区的资源库存状态。
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| Cores | No | 实例规格的vCPU内核数目。取值参见[实例规格族](~~25378~~)。 当DestinationResource取值为InstanceType时,Cores才为有效参数。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: integer,参数示例:2 | |
| DataDiskCategory | No | 数据盘类型。取值范围: - cloud:普通云盘。 - cloud_efficiency:高效云盘。 - cloud_ssd:SSD云盘。 - ephemeral_ssd:本地SSD盘。 - cloud_essd:ESSD云盘。 - cloud_auto:ESSD AutoPL云盘。 <props="china"> - cloud_essd_entry:ESSD Entry云盘。 </props> 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: string,参数示例:cloud_ssd | |
| DedicatedHostId | No | 专有宿主机ID。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: string,参数示例:dh-bp165p6xk2tlw61e**** | |
| DestinationResource | Yes | 要查询的资源类型。取值范围: - Zone:可用区。 - IoOptimized:I/O优化。 - InstanceType:实例规格。 - Network:网络类型。 - ddh:专有宿主机。 - SystemDisk:系统盘。 - DataDisk:数据盘。 >当DestinationResource取值为`SystemDisk`时,由于系统盘受实例规格限制,此时必须传入InstanceType。 参数DestinationResource的取值方式请参见本文中的**接口说明**。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: string,参数示例:InstanceType | |
| InstanceChargeType | No | 资源的计费方式。更多信息,请参见[计费概述](~~25398~~)。取值范围: - PrePaid:包年包月。 - PostPaid:按量付费。 默认值:PostPaid。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: string,参数示例:PrePaid | |
| InstanceType | No | 实例规格。更多信息,请参见[实例规格族](~~25378~~),您也可以调用[DescribeInstanceTypes](~~25620~~)接口获得最新的规格表。 参数InstanceType的取值方式请参见本文开头的**接口说明**。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: string,参数示例:ecs.g5.large | |
| IoOptimized | No | 是否为I/O优化实例。取值范围: - none:非I/O优化实例。 - optimized:I/O优化实例。 默认值:optimized。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: string,参数示例:optimized | |
| Memory | No | 实例规格的内存大小,单位为GiB。取值参见[实例规格族](~~25378~~)。 当DestinationResource取值为InstanceType时,Memory才为有效参数。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: number,参数示例:8.0 | |
| NetworkCategory | No | 网络类型。取值范围: - vpc:专有网络。 - classic:经典网络。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: string,参数示例:vpc | |
| RegionId | Yes | 目标地域ID。您可以调用[DescribeRegions](~~25609~~)查看最新的阿里云地域列表。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: string,参数示例:cn-hangzhou | |
| ResourceType | No | 资源类型。取值范围: - instance:ECS实例。 - disk:云盘。 - reservedinstance:预留实例券。 - ddh:专有宿主机。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: string,参数示例:instance | |
| Scope | No | 预留实例券的范围。取值范围: - Region:地域级别。 - Zone:可用区级别。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: string,参数示例:Region | |
| SpotDuration | No | 抢占式实例的保留时长,单位为小时。 默认值:1。取值范围: - 1:创建后阿里云会保证实例运行1小时不会被自动释放;超过1小时后,系统会自动比较出价与市场价格、检查资源库存,来决定实例的持有和回收。 - 0:创建后,阿里云不保证实例运行1小时,系统会自动比较出价与市场价格、检查资源库存,来决定实例的持有和回收。 实例回收前5分钟阿里云会通过ECS系统事件向您发送通知。抢占式实例按秒计费,建议您结合具体任务执行耗时来选择合适的保留时长。 > 当`InstanceChargeType`取值为`PostPaid`,并且`SpotStrategy`值为`SpotWithPriceLimit`或`SpotAsPriceGo`时该参数生效。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: integer,参数示例:1 | |
| SpotStrategy | No | 按量付费实例的竞价策略。取值范围: - NoSpot:正常按量付费实例。 - SpotWithPriceLimit:设置上限价格的抢占式实例。 - SpotAsPriceGo:系统自动出价,最高按量付费价格。 默认值:NoSpot。 当参数`InstanceChargeType`取值为`PostPaid`时,参数`SpotStrategy`才有效。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: string,参数示例:NoSpot | |
| SystemDiskCategory | No | 系统盘类型。取值范围: - cloud:普通云盘。 - cloud_efficiency:高效云盘。 - cloud_ssd:SSD云盘。 - ephemeral_ssd:本地SSD盘。 - cloud_essd:ESSD云盘。 - cloud_auto:ESSD AutoPL云盘。 <props="china"> - cloud_essd_entry:ESSD Entry云盘。 </props> 默认值:cloud_efficiency。 > 参数ResourceType取值为instance、DestinationResource取值为DataDisk时,参数SystemDiskCategory是必选参数。如果未传递参数值,则以默认值生效。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: string,参数示例:cloud_ssd | |
| ZoneId | No | 可用区ID。 默认值:无。返回该地域(`RegionId`)下所有可用区符合查询条件的资源。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: string,参数示例:cn-hangzhou-e |
Input Schema (JSON Schema)
{
"properties": {
"Cores": {
"default": null,
"description": "实例规格的vCPU内核数目。取值参见[实例规格族](~~25378~~)。\n\n当DestinationResource取值为InstanceType时,Cores才为有效参数。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: integer,参数示例:2",
"title": "Cores",
"type": "integer"
},
"DataDiskCategory": {
"default": null,
"description": "数据盘类型。取值范围: \n \n- cloud:普通云盘。\n- cloud_efficiency:高效云盘。\n- cloud_ssd:SSD云盘。\n- ephemeral_ssd:本地SSD盘。\n- cloud_essd:ESSD云盘。\n- cloud_auto:ESSD AutoPL云盘。\n<props=\"china\">\n- cloud_essd_entry:ESSD Entry云盘。\n</props> 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: string,参数示例:cloud_ssd",
"title": "Datadiskcategory",
"type": "string"
},
"DedicatedHostId": {
"default": null,
"description": "专有宿主机ID。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: string,参数示例:dh-bp165p6xk2tlw61e****",
"title": "Dedicatedhostid",
"type": "string"
},
"DestinationResource": {
"description": "要查询的资源类型。取值范围: \n \n- Zone:可用区。\n- IoOptimized:I/O优化。\n- InstanceType:实例规格。\n- Network:网络类型。\n- ddh:专有宿主机。\n- SystemDisk:系统盘。\n- DataDisk:数据盘。\n\n>当DestinationResource取值为`SystemDisk`时,由于系统盘受实例规格限制,此时必须传入InstanceType。\n\n参数DestinationResource的取值方式请参见本文中的**接口说明**。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: string,参数示例:InstanceType",
"title": "Destinationresource",
"type": "string"
},
"InstanceChargeType": {
"default": null,
"description": "资源的计费方式。更多信息,请参见[计费概述](~~25398~~)。取值范围: \n \n- PrePaid:包年包月。 \n- PostPaid:按量付费。\n\n默认值:PostPaid。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: string,参数示例:PrePaid",
"title": "Instancechargetype",
"type": "string"
},
"InstanceType": {
"default": null,
"description": "实例规格。更多信息,请参见[实例规格族](~~25378~~),您也可以调用[DescribeInstanceTypes](~~25620~~)接口获得最新的规格表。\n\n参数InstanceType的取值方式请参见本文开头的**接口说明**。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: string,参数示例:ecs.g5.large",
"title": "Instancetype",
"type": "string"
},
"IoOptimized": {
"default": null,
"description": "是否为I/O优化实例。取值范围: \n \n- none:非I/O优化实例。\n- optimized:I/O优化实例。\n\n\n默认值:optimized。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: string,参数示例:optimized",
"title": "Iooptimized",
"type": "string"
},
"Memory": {
"default": null,
"description": "实例规格的内存大小,单位为GiB。取值参见[实例规格族](~~25378~~)。\n\n当DestinationResource取值为InstanceType时,Memory才为有效参数。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: number,参数示例:8.0",
"title": "Memory",
"type": "number"
},
"NetworkCategory": {
"default": null,
"description": "网络类型。取值范围: \n \n- vpc:专有网络。\n- classic:经典网络。\n 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: string,参数示例:vpc",
"title": "Networkcategory",
"type": "string"
},
"RegionId": {
"description": "目标地域ID。您可以调用[DescribeRegions](~~25609~~)查看最新的阿里云地域列表。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: string,参数示例:cn-hangzhou",
"title": "Regionid",
"type": "string"
},
"ResourceType": {
"default": null,
"description": "资源类型。取值范围:\n\n- instance:ECS实例。\n- disk:云盘。\n- reservedinstance:预留实例券。\n- ddh:专有宿主机。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: string,参数示例:instance",
"title": "Resourcetype",
"type": "string"
},
"Scope": {
"default": null,
"description": "预留实例券的范围。取值范围:\n \n- Region:地域级别。\n- Zone:可用区级别。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: string,参数示例:Region",
"title": "Scope",
"type": "string"
},
"SpotDuration": {
"default": null,
"description": "抢占式实例的保留时长,单位为小时。 默认值:1。取值范围:\n- 1:创建后阿里云会保证实例运行1小时不会被自动释放;超过1小时后,系统会自动比较出价与市场价格、检查资源库存,来决定实例的持有和回收。\n- 0:创建后,阿里云不保证实例运行1小时,系统会自动比较出价与市场价格、检查资源库存,来决定实例的持有和回收。\n\n实例回收前5分钟阿里云会通过ECS系统事件向您发送通知。抢占式实例按秒计费,建议您结合具体任务执行耗时来选择合适的保留时长。\n\n> 当`InstanceChargeType`取值为`PostPaid`,并且`SpotStrategy`值为`SpotWithPriceLimit`或`SpotAsPriceGo`时该参数生效。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: integer,参数示例:1",
"title": "Spotduration",
"type": "integer"
},
"SpotStrategy": {
"default": null,
"description": "按量付费实例的竞价策略。取值范围: \n \n- NoSpot:正常按量付费实例。\n- SpotWithPriceLimit:设置上限价格的抢占式实例。\n- SpotAsPriceGo:系统自动出价,最高按量付费价格。\n\n默认值:NoSpot。\n\n当参数`InstanceChargeType`取值为`PostPaid`时,参数`SpotStrategy`才有效。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: string,参数示例:NoSpot",
"title": "Spotstrategy",
"type": "string"
},
"SystemDiskCategory": {
"default": null,
"description": "系统盘类型。取值范围: \n \n- cloud:普通云盘。\n- cloud_efficiency:高效云盘。\n- cloud_ssd:SSD云盘。\n- ephemeral_ssd:本地SSD盘。\n- cloud_essd:ESSD云盘。\n- cloud_auto:ESSD AutoPL云盘。\n<props=\"china\">\n- cloud_essd_entry:ESSD Entry云盘。\n</props>\n\n默认值:cloud_efficiency。\n\n> 参数ResourceType取值为instance、DestinationResource取值为DataDisk时,参数SystemDiskCategory是必选参数。如果未传递参数值,则以默认值生效。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: string,参数示例:cloud_ssd",
"title": "Systemdiskcategory",
"type": "string"
},
"ZoneId": {
"default": null,
"description": "可用区ID。\n\n默认值:无。返回该地域(`RegionId`)下所有可用区符合查询条件的资源。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: string,参数示例:cn-hangzhou-e",
"title": "Zoneid",
"type": "string"
}
},
"required": [
"RegionId",
"DestinationResource"
],
"title": "DescribeAvailableResourceArguments",
"type": "object"
}
Implementation Reference
- src/alibaba_cloud_ops_mcp_server/config.py:8-16 (registration)Configures the list of ECS APIs, including 'DescribeAvailableResource', which are dynamically registered as MCP tools.'ecs': [ 'DescribeInstances', 'DescribeRegions', 'DescribeZones', 'DescribeAccountAttributes', 'DescribeAvailableResource', 'DescribeImages', 'DescribeSecurityGroups', 'DeleteInstances'
- The core handler function executed by the dynamic tool ECS_DESCRIBEAVAILABLERESOURCE, which calls the Alibaba Cloud ECS DescribeAvailableResource API.def _tools_api_call(service: str, api: str, parameters: dict, ctx: Context): service = service.lower() api_meta, _ = ApiMetaClient.get_api_meta(service, api) version = ApiMetaClient.get_service_version(service) method = 'POST' if api_meta.get('methods', [])[0] == 'post' else 'GET' path = api_meta.get('path', '/') style = ApiMetaClient.get_service_style(service) # Handling special parameter formats processed_parameters = parameters.copy() processed_parameters = {k: v for k, v in processed_parameters.items() if v is not None} if service == 'ecs': for param_name, param_value in parameters.items(): if param_name in ECS_LIST_PARAMETERS and isinstance(param_value, list): processed_parameters[param_name] = json.dumps(param_value) req = open_api_models.OpenApiRequest( query=OpenApiUtilClient.query(processed_parameters) ) params = open_api_models.Params( action=api, version=version, protocol='HTTPS', pathname=path, method=method, auth_type='AK', style=style, req_body_type='formData', body_type='json' ) logger.info(f'Call API Request: Service: {service} API: {api} Method: {method} Parameters: {processed_parameters}') client = create_client(service, processed_parameters.get('RegionId', 'cn-hangzhou')) runtime = util_models.RuntimeOptions() resp = client.call_api(params, req, runtime) logger.info(f'Call API Response: {resp}') return resp
- Dynamically creates the Pydantic input schema for the tool based on the API metadata fetched for 'ecs'/'DescribeAvailableResource'.def _create_function_schemas(service, api, api_meta): schemas = {} schemas[api] = {} parameters = api_meta.get('parameters', []) required_params = [] optional_params = [] for parameter in parameters: name = parameter.get('name') # TODO 目前忽略了带'.'的参数 if '.' in name: continue schema = parameter.get('schema', '') required = schema.get('required', False) if required: required_params.append(parameter) else: optional_params.append(parameter) def process_parameter(parameter): name = parameter.get('name') schema = parameter.get('schema', '') description = schema.get('description', '') example = schema.get('example', '') type_ = schema.get('type', '') description = f'{description} 参数类型: {type_},参数示例:{example}' required = schema.get('required', False) if service.lower() == 'ecs' and name in ECS_LIST_PARAMETERS and type_ == 'string': python_type = list else: python_type = type_map.get(type_, str) field_info = ( python_type, field( default=None, metadata={'description': description, 'required': required} ) ) return name, field_info for parameter in required_params: name, field_info = process_parameter(parameter) schemas[api][name] = field_info for parameter in optional_params: name, field_info = process_parameter(parameter) schemas[api][name] = field_info if 'RegionId' not in schemas[api]: schemas[api]['RegionId'] = ( str, field( default='cn-hangzhou', metadata={'description': '地域ID', 'required': False} ) ) return schemas
- src/alibaba_cloud_ops_mcp_server/tools/api_tools.py:267-271 (registration)Registers the dynamic MCP tool 'ECS_DESCRIBEAVAILABLERESOURCE' by iterating over the config and calling _create_and_decorate_tool for 'ecs'/'DescribeAvailableResource'.def create_api_tools(mcp: FastMCP, config:dict): for service_code, apis in config.items(): for api_name in apis: _create_and_decorate_tool(mcp, service_code, api_name)
- src/alibaba_cloud_ops_mcp_server/server.py:88-88 (registration)Invokes the registration of all configured API tools, including DescribeAvailableResource, onto the FastMCP server instance.api_tools.create_api_tools(mcp, config)