alibaba-cloud-ops-mcp-server 0.9.3__tar.gz → 0.9.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. {alibaba_cloud_ops_mcp_server-0.9.3 → alibaba_cloud_ops_mcp_server-0.9.4}/PKG-INFO +1 -1
  2. {alibaba_cloud_ops_mcp_server-0.9.3 → alibaba_cloud_ops_mcp_server-0.9.4}/pyproject.toml +1 -1
  3. {alibaba_cloud_ops_mcp_server-0.9.3 → alibaba_cloud_ops_mcp_server-0.9.4}/src/alibaba_cloud_ops_mcp_server/alibabacloud/static/PROMPT_UNDERSTANDING.md +1 -0
  4. {alibaba_cloud_ops_mcp_server-0.9.3 → alibaba_cloud_ops_mcp_server-0.9.4}/src/alibaba_cloud_ops_mcp_server/server.py +2 -1
  5. {alibaba_cloud_ops_mcp_server-0.9.3 → alibaba_cloud_ops_mcp_server-0.9.4}/src/alibaba_cloud_ops_mcp_server/tools/api_tools.py +37 -11
  6. {alibaba_cloud_ops_mcp_server-0.9.3 → alibaba_cloud_ops_mcp_server-0.9.4}/uv.lock +1 -1
  7. {alibaba_cloud_ops_mcp_server-0.9.3 → alibaba_cloud_ops_mcp_server-0.9.4}/.github/workflows/python-ci.yml +0 -0
  8. {alibaba_cloud_ops_mcp_server-0.9.3 → alibaba_cloud_ops_mcp_server-0.9.4}/.gitignore +0 -0
  9. {alibaba_cloud_ops_mcp_server-0.9.3 → alibaba_cloud_ops_mcp_server-0.9.4}/Dockerfile +0 -0
  10. {alibaba_cloud_ops_mcp_server-0.9.3 → alibaba_cloud_ops_mcp_server-0.9.4}/LICENSE +0 -0
  11. {alibaba_cloud_ops_mcp_server-0.9.3 → alibaba_cloud_ops_mcp_server-0.9.4}/README.md +0 -0
  12. {alibaba_cloud_ops_mcp_server-0.9.3 → alibaba_cloud_ops_mcp_server-0.9.4}/README_mcp_args.md +0 -0
  13. {alibaba_cloud_ops_mcp_server-0.9.3 → alibaba_cloud_ops_mcp_server-0.9.4}/README_zh.md +0 -0
  14. {alibaba_cloud_ops_mcp_server-0.9.3 → alibaba_cloud_ops_mcp_server-0.9.4}/examples/openapi_mcp_quickstart/server.py +0 -0
  15. {alibaba_cloud_ops_mcp_server-0.9.3 → alibaba_cloud_ops_mcp_server-0.9.4}/image/Alibaba-Cloud-Ops-MCP-User-Group-en.png +0 -0
  16. {alibaba_cloud_ops_mcp_server-0.9.3 → alibaba_cloud_ops_mcp_server-0.9.4}/image/Alibaba-Cloud-Ops-MCP-User-Group-zh.png +0 -0
  17. {alibaba_cloud_ops_mcp_server-0.9.3 → alibaba_cloud_ops_mcp_server-0.9.4}/image/alibaba-cloud.png +0 -0
  18. {alibaba_cloud_ops_mcp_server-0.9.3 → alibaba_cloud_ops_mcp_server-0.9.4}/src/__init__.py +0 -0
  19. {alibaba_cloud_ops_mcp_server-0.9.3 → alibaba_cloud_ops_mcp_server-0.9.4}/src/alibaba_cloud_ops_mcp_server/__init__.py +0 -0
  20. {alibaba_cloud_ops_mcp_server-0.9.3 → alibaba_cloud_ops_mcp_server-0.9.4}/src/alibaba_cloud_ops_mcp_server/__main__.py +0 -0
  21. {alibaba_cloud_ops_mcp_server-0.9.3 → alibaba_cloud_ops_mcp_server-0.9.4}/src/alibaba_cloud_ops_mcp_server/alibabacloud/__init__.py +0 -0
  22. {alibaba_cloud_ops_mcp_server-0.9.3 → alibaba_cloud_ops_mcp_server-0.9.4}/src/alibaba_cloud_ops_mcp_server/alibabacloud/api_meta_client.py +0 -0
  23. {alibaba_cloud_ops_mcp_server-0.9.3 → alibaba_cloud_ops_mcp_server-0.9.4}/src/alibaba_cloud_ops_mcp_server/alibabacloud/exception.py +0 -0
  24. {alibaba_cloud_ops_mcp_server-0.9.3 → alibaba_cloud_ops_mcp_server-0.9.4}/src/alibaba_cloud_ops_mcp_server/alibabacloud/static/__init__.py +0 -0
  25. {alibaba_cloud_ops_mcp_server-0.9.3 → alibaba_cloud_ops_mcp_server-0.9.4}/src/alibaba_cloud_ops_mcp_server/alibabacloud/utils.py +0 -0
  26. {alibaba_cloud_ops_mcp_server-0.9.3 → alibaba_cloud_ops_mcp_server-0.9.4}/src/alibaba_cloud_ops_mcp_server/config.py +0 -0
  27. {alibaba_cloud_ops_mcp_server-0.9.3 → alibaba_cloud_ops_mcp_server-0.9.4}/src/alibaba_cloud_ops_mcp_server/settings.py +0 -0
  28. {alibaba_cloud_ops_mcp_server-0.9.3 → alibaba_cloud_ops_mcp_server-0.9.4}/src/alibaba_cloud_ops_mcp_server/tools/__init__.py +0 -0
  29. {alibaba_cloud_ops_mcp_server-0.9.3 → alibaba_cloud_ops_mcp_server-0.9.4}/src/alibaba_cloud_ops_mcp_server/tools/cms_tools.py +0 -0
  30. {alibaba_cloud_ops_mcp_server-0.9.3 → alibaba_cloud_ops_mcp_server-0.9.4}/src/alibaba_cloud_ops_mcp_server/tools/common_api_tools.py +0 -0
  31. {alibaba_cloud_ops_mcp_server-0.9.3 → alibaba_cloud_ops_mcp_server-0.9.4}/src/alibaba_cloud_ops_mcp_server/tools/oos_tools.py +0 -0
  32. {alibaba_cloud_ops_mcp_server-0.9.3 → alibaba_cloud_ops_mcp_server-0.9.4}/src/alibaba_cloud_ops_mcp_server/tools/oss_tools.py +0 -0
  33. {alibaba_cloud_ops_mcp_server-0.9.3 → alibaba_cloud_ops_mcp_server-0.9.4}/tests/alibabacloud/test_api_meta_client.py +0 -0
  34. {alibaba_cloud_ops_mcp_server-0.9.3 → alibaba_cloud_ops_mcp_server-0.9.4}/tests/alibabacloud/test_exception.py +0 -0
  35. {alibaba_cloud_ops_mcp_server-0.9.3 → alibaba_cloud_ops_mcp_server-0.9.4}/tests/alibabacloud/test_utils.py +0 -0
  36. {alibaba_cloud_ops_mcp_server-0.9.3 → alibaba_cloud_ops_mcp_server-0.9.4}/tests/test_init.py +0 -0
  37. {alibaba_cloud_ops_mcp_server-0.9.3 → alibaba_cloud_ops_mcp_server-0.9.4}/tests/test_server.py +0 -0
  38. {alibaba_cloud_ops_mcp_server-0.9.3 → alibaba_cloud_ops_mcp_server-0.9.4}/tests/tools/test_api_tools.py +0 -0
  39. {alibaba_cloud_ops_mcp_server-0.9.3 → alibaba_cloud_ops_mcp_server-0.9.4}/tests/tools/test_cms_tools.py +0 -0
  40. {alibaba_cloud_ops_mcp_server-0.9.3 → alibaba_cloud_ops_mcp_server-0.9.4}/tests/tools/test_oos_tools.py +0 -0
  41. {alibaba_cloud_ops_mcp_server-0.9.3 → alibaba_cloud_ops_mcp_server-0.9.4}/tests/tools/test_oss_tools.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: alibaba-cloud-ops-mcp-server
3
- Version: 0.9.3
3
+ Version: 0.9.4
4
4
  Summary: A MCP server for Alibaba Cloud
5
5
  Author-email: Zheng Dayu <dayu.zdy@alibaba-inc.com>
6
6
  License-File: LICENSE
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "alibaba-cloud-ops-mcp-server"
3
- version = "0.9.3"
3
+ version = "0.9.4"
4
4
  description = "A MCP server for Alibaba Cloud"
5
5
  readme = "README.md"
6
6
  authors = [
@@ -39,6 +39,7 @@ When a user submits a request, analyze their needs and check if matching tools e
39
39
  - cbn: Cloud Enterprise Network (CBN)
40
40
  - dds: MongoDB Database Service (DDS)
41
41
  - r-kvstore: Cloud database Tair (compatible with Redis) (R-KVStore)
42
+ - bssopenapi: Billing and Cost Management (BssOpenAPI)
42
43
 
43
44
  2. **API Process**
44
45
  - Use `ListAPIs` for available APIs
@@ -19,7 +19,8 @@ SUPPORTED_SERVICES_MAP = {
19
19
  "ros": "Resource Orchestration Service (ROS)",
20
20
  "cbn": "Cloud Enterprise Network (CBN)",
21
21
  "dds": "MongoDB Database Service (DDS)",
22
- "r-kvstore": "Cloud database Tair (compatible with Redis) (R-KVStore)"
22
+ "r-kvstore": "Cloud database Tair (compatible with Redis) (R-KVStore)",
23
+ "bssopenapi": "Billing and Cost Management (BssOpenAPI)"
23
24
  }
24
25
 
25
26
 
@@ -34,32 +34,58 @@ DOUBLE_ENDPOINT_SERVICE = {
34
34
  'r-kvstore': ['cn-qingdao', 'cn-beijing', 'cn-wulanchabu', 'cn-hangzhou', 'cn-shanghai', 'cn-shenzhen', 'cn-heyuan']
35
35
  }
36
36
 
37
- CENTRAL_ENDPOINTS_SERVICE = ['cbn', 'ros']
37
+ CENTRAL_SERVICE = ['cbn', 'ros', 'ram']
38
+
39
+ CENTRAL_SERVICE_ENDPOINTS = {
40
+ 'bssopenapi': {
41
+ 'DomesticEndpoint': 'business.aliyuncs.com',
42
+ 'InternationalEndpoint': 'business.ap-southeast-1.aliyuncs.com',
43
+ 'DomesticRegion': ['cn-qingdao', 'cn-beijing', 'cn-zhangjiakou', 'cn-huhehaote', 'cn-wulanchabu',
44
+ 'cn-hangzhou', 'cn-shanghai', 'cn-shenzhen', 'cn-chengdu', 'cn-hongkong']
45
+ }
46
+ }
38
47
 
39
48
 
40
49
  def _get_service_endpoint(service: str, region_id: str):
41
50
  region_id = region_id.lower()
42
- use_region_endpoint = service in REGION_ENDPOINT_SERVICE or (
43
- service in DOUBLE_ENDPOINT_SERVICE and region_id not in DOUBLE_ENDPOINT_SERVICE[service]
44
- )
45
51
 
46
- if use_region_endpoint:
52
+ # Prioritizing central service endpoints
53
+ central = CENTRAL_SERVICE_ENDPOINTS.get(service)
54
+ if central:
55
+ if region_id in central.get('DomesticRegion', []):
56
+ return central['DomesticEndpoint']
57
+ else:
58
+ return central['InternationalEndpoint']
59
+
60
+ # Determine whether to use regional endpoints
61
+ if service in REGION_ENDPOINT_SERVICE:
47
62
  return f'{service}.{region_id}.aliyuncs.com'
48
- elif service in CENTRAL_ENDPOINTS_SERVICE or service in DOUBLE_ENDPOINT_SERVICE:
63
+
64
+ if service in DOUBLE_ENDPOINT_SERVICE:
65
+ not_in_central = region_id not in DOUBLE_ENDPOINT_SERVICE[service]
66
+ if not_in_central:
67
+ return f'{service}.{region_id}.aliyuncs.com'
68
+ else:
69
+ return f'{service}.aliyuncs.com'
70
+
71
+ if service in CENTRAL_SERVICE:
49
72
  return f'{service}.aliyuncs.com'
50
- else:
51
- return f'{service}.{region_id}.aliyuncs.com'
73
+
74
+ # Default
75
+ return f'{service}.{region_id}.aliyuncs.com'
52
76
 
53
77
 
54
78
  def create_client(service: str, region_id: str) -> OpenApiClient:
55
79
  config = create_config()
56
80
  if isinstance(service, str):
57
81
  service = service.lower()
58
- config.endpoint = _get_service_endpoint(service, region_id.lower())
82
+ endpoint = _get_service_endpoint(service, region_id.lower())
83
+ config.endpoint = endpoint
84
+ logger.info(f'Service Endpoint: {endpoint}')
59
85
  return OpenApiClient(config)
60
86
 
61
87
 
62
- # 类型为String的JSON数组参数
88
+ # JSON array parameter of type String
63
89
  ECS_LIST_PARAMETERS = {
64
90
  'HpcClusterIds', 'DedicatedHostClusterIds', 'DedicatedHostIds',
65
91
  'InstanceIds', 'DeploymentSetIds', 'KeyPairNames', 'SecurityGroupIds',
@@ -76,7 +102,7 @@ def _tools_api_call(service: str, api: str, parameters: dict, ctx: Context):
76
102
  path = api_meta.get('path', '/')
77
103
  style = ApiMetaClient.get_service_style(service)
78
104
 
79
- # 处理特殊参数格式
105
+ # Handling special parameter formats
80
106
  processed_parameters = parameters.copy()
81
107
  processed_parameters = {k: v for k, v in processed_parameters.items() if v is not None}
82
108
  if service == 'ecs':
@@ -116,7 +116,7 @@ wheels = [
116
116
 
117
117
  [[package]]
118
118
  name = "alibaba-cloud-ops-mcp-server"
119
- version = "0.9.3"
119
+ version = "0.9.4"
120
120
  source = { editable = "." }
121
121
  dependencies = [
122
122
  { name = "alibabacloud-cms20190101" },