DescribeVSwitches
Retrieve detailed information about VSwitches within Alibaba Cloud VPCs, including ID, name, zone, and region, to facilitate network planning and configuration.
Instructions
查询可组网的信息,内网按vswitch进行组网。
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| DryRun | No | 是否只预检此次请求。取值: - **true**:发送检查请求,不会创建资源(接口功能)。检查项包括是否填写了必需参数、请求格式、业务限制。如果检查不通过,则返回对应错误。如果检查通过,则返回错误码`DryRunOperation`。 - **false**(默认值):发送正常请求,通过检查后返回HTTP 2xx状态码并直接进行操作。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: boolean,参数示例:true | |
| EnableIpv6 | No | 是否查询指定地域下开启IPv6网段的交换机,取值: - **true**:查询指定地域下开启IPv6网段的交换机。 - **false**:不查询指定地域下开启IPv6网段的交换机。 如果不传入该参数,系统默认查询指定地域下的所有交换机。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: boolean,参数示例:false | |
| IsDefault | No | 是否查询指定地域下的默认交换机,取值: - **true**:查询指定地域下的默认交换机。 - **false**:不查询指定地域下的默认交换机。 如果不传入该参数,系统默认查询指定地域下的所有交换机。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: boolean,参数示例:true | |
| PageNumber | No | 列表的页码,默认值为**1**。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: integer,参数示例:1 | |
| PageSize | No | 分页查询时每页的行数,最大值为**50**。默认值为**10**。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: integer,参数示例:10 | |
| RegionId | No | 交换机所属地域的ID。您可以通过调用[DescribeRegions](~~36063~~)接口获取地域ID。 > **RegionId**和**VpcId**参数至少输入一个。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: string,参数示例:cn-hangzhou | |
| ResourceGroupId | No | 交换机所属的资源组ID。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: string,参数示例:rg-bp67acfmxazb4ph**** | |
| RouteTableId | No | 路由表的ID。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: string,参数示例:vtb-bp145q7glnuzdvzu2**** | |
| Tag | No | 资源的标签。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: array,参数示例: | |
| VSwitchId | No | 要查询的交换机的ID。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: string,参数示例:vsw-23dscddcffvf3**** | |
| VSwitchName | No | 交换机的名称。 名称长度为1~128个字符,不能以`http://`或`https://`开头。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: string,参数示例:vSwitch | |
| VSwitchOwnerId | No | 资源归属的阿里云账号ID。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: integer,参数示例:2546073170691**** | |
| VpcId | No | 要查询的交换机所属VPC的ID。 > **RegionId**和**VpcId**参数至少输入一个。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: string,参数示例:vpc-25cdvfeq58pl**** | |
| ZoneId | No | 交换机所属可用区的ID。您可以通过调用[DescribeZones](~~36064~~)接口获取可用区ID。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: string,参数示例:cn-hangzhou-d |
Input Schema (JSON Schema)
{
"properties": {
"DryRun": {
"default": null,
"description": "是否只预检此次请求。取值:\n- **true**:发送检查请求,不会创建资源(接口功能)。检查项包括是否填写了必需参数、请求格式、业务限制。如果检查不通过,则返回对应错误。如果检查通过,则返回错误码`DryRunOperation`。\n- **false**(默认值):发送正常请求,通过检查后返回HTTP 2xx状态码并直接进行操作。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: boolean,参数示例:true",
"title": "Dryrun",
"type": "boolean"
},
"EnableIpv6": {
"default": null,
"description": "是否查询指定地域下开启IPv6网段的交换机,取值:\n\n- **true**:查询指定地域下开启IPv6网段的交换机。\n\n- **false**:不查询指定地域下开启IPv6网段的交换机。\n\n如果不传入该参数,系统默认查询指定地域下的所有交换机。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: boolean,参数示例:false",
"title": "Enableipv6",
"type": "boolean"
},
"IsDefault": {
"default": null,
"description": "是否查询指定地域下的默认交换机,取值: \n\n- **true**:查询指定地域下的默认交换机。 \n\n- **false**:不查询指定地域下的默认交换机。 \n\n如果不传入该参数,系统默认查询指定地域下的所有交换机。\n\n 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: boolean,参数示例:true",
"title": "Isdefault",
"type": "boolean"
},
"PageNumber": {
"default": null,
"description": " 列表的页码,默认值为**1**。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: integer,参数示例:1",
"title": "Pagenumber",
"type": "integer"
},
"PageSize": {
"default": null,
"description": " 分页查询时每页的行数,最大值为**50**。默认值为**10**。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: integer,参数示例:10",
"title": "Pagesize",
"type": "integer"
},
"RegionId": {
"default": null,
"description": "交换机所属地域的ID。您可以通过调用[DescribeRegions](~~36063~~)接口获取地域ID。\n\n> **RegionId**和**VpcId**参数至少输入一个。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: string,参数示例:cn-hangzhou",
"title": "Regionid",
"type": "string"
},
"ResourceGroupId": {
"default": null,
"description": "交换机所属的资源组ID。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: string,参数示例:rg-bp67acfmxazb4ph****",
"title": "Resourcegroupid",
"type": "string"
},
"RouteTableId": {
"default": null,
"description": "路由表的ID。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: string,参数示例:vtb-bp145q7glnuzdvzu2****",
"title": "Routetableid",
"type": "string"
},
"Tag": {
"default": null,
"description": "资源的标签。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: array,参数示例:",
"items": {},
"title": "Tag",
"type": "array"
},
"VSwitchId": {
"default": null,
"description": "要查询的交换机的ID。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: string,参数示例:vsw-23dscddcffvf3****",
"title": "Vswitchid",
"type": "string"
},
"VSwitchName": {
"default": null,
"description": "交换机的名称。\n\n名称长度为1~128个字符,不能以`http://`或`https://`开头。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: string,参数示例:vSwitch",
"title": "Vswitchname",
"type": "string"
},
"VSwitchOwnerId": {
"default": null,
"description": "资源归属的阿里云账号ID。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: integer,参数示例:2546073170691****",
"title": "Vswitchownerid",
"type": "integer"
},
"VpcId": {
"default": null,
"description": "要查询的交换机所属VPC的ID。 \n\n> **RegionId**和**VpcId**参数至少输入一个。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: string,参数示例:vpc-25cdvfeq58pl****",
"title": "Vpcid",
"type": "string"
},
"ZoneId": {
"default": null,
"description": "交换机所属可用区的ID。您可以通过调用[DescribeZones](~~36064~~)接口获取可用区ID。 请注意,提供参数要严格按照参数的类型和参数示例的提示,如果提到参数为String,且为一个 JSON 数组字符串,应在数组内使用单引号包裹对应的参数以避免转义问题,并在最外侧用双引号包裹以确保其是字符串,否则可能会导致参数解析错误。参数类型: string,参数示例:cn-hangzhou-d",
"title": "Zoneid",
"type": "string"
}
},
"title": "DescribeVSwitchesArguments",
"type": "object"
}
Implementation Reference
- src/alibaba_cloud_ops_mcp_server/config.py:18-21 (registration)Configuration entry listing 'DescribeVSwitches' as one of the APIs/tools to register for the VPC service.'Vpc': [ 'DescribeVpcs', 'DescribeVSwitches' ],
- src/alibaba_cloud_ops_mcp_server/tools/api_tools.py:267-271 (registration)Iterates over the config to dynamically register tools like DescribeVSwitches by calling _create_and_decorate_tool for each service API pair.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)
- Core handler logic executed by the dynamic tool for DescribeVSwitches: fetches API metadata, constructs request, calls Alibaba Cloud OpenAPI client, and returns response.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 generates the input schema for the DescribeVSwitches tool based on Alibaba Cloud API metadata.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
- Helper that creates and registers the dynamic tool handler for specific APIs like DescribeVSwitches, naming it 'VPC_DESCRIBEVSWITCHES'.def _create_and_decorate_tool(mcp: FastMCP, service: str, api: str): """Create a tool function for an AlibabaCloud openapi.""" api_meta, _ = ApiMetaClient.get_api_meta(service, api) fields = _create_function_schemas(service, api, api_meta).get(api, {}) description = api_meta.get('summary', '') dynamic_lambda = _create_tool_function_with_signature(service, api, fields, description) function_name = f'{service.upper()}_{api}' decorated_function = mcp.tool(name=function_name)(dynamic_lambda) return decorated_function