alibaba-cloud-ops-mcp-server 0.9.15__tar.gz → 0.9.16__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 (44) hide show
  1. {alibaba_cloud_ops_mcp_server-0.9.15 → alibaba_cloud_ops_mcp_server-0.9.16}/PKG-INFO +2 -2
  2. {alibaba_cloud_ops_mcp_server-0.9.15 → alibaba_cloud_ops_mcp_server-0.9.16}/pyproject.toml +2 -2
  3. {alibaba_cloud_ops_mcp_server-0.9.15 → alibaba_cloud_ops_mcp_server-0.9.16}/src/alibaba_cloud_ops_mcp_server/server.py +3 -1
  4. {alibaba_cloud_ops_mcp_server-0.9.15 → alibaba_cloud_ops_mcp_server-0.9.16}/src/alibaba_cloud_ops_mcp_server/tools/application_management_tools.py +7 -7
  5. {alibaba_cloud_ops_mcp_server-0.9.15 → alibaba_cloud_ops_mcp_server-0.9.16}/.github/workflows/python-ci.yml +0 -0
  6. {alibaba_cloud_ops_mcp_server-0.9.15 → alibaba_cloud_ops_mcp_server-0.9.16}/.gitignore +0 -0
  7. {alibaba_cloud_ops_mcp_server-0.9.15 → alibaba_cloud_ops_mcp_server-0.9.16}/Dockerfile +0 -0
  8. {alibaba_cloud_ops_mcp_server-0.9.15 → alibaba_cloud_ops_mcp_server-0.9.16}/LICENSE +0 -0
  9. {alibaba_cloud_ops_mcp_server-0.9.15 → alibaba_cloud_ops_mcp_server-0.9.16}/README.md +0 -0
  10. {alibaba_cloud_ops_mcp_server-0.9.15 → alibaba_cloud_ops_mcp_server-0.9.16}/README_mcp_args.md +0 -0
  11. {alibaba_cloud_ops_mcp_server-0.9.15 → alibaba_cloud_ops_mcp_server-0.9.16}/README_zh.md +0 -0
  12. {alibaba_cloud_ops_mcp_server-0.9.15 → alibaba_cloud_ops_mcp_server-0.9.16}/examples/openapi_mcp_quickstart/server.py +0 -0
  13. {alibaba_cloud_ops_mcp_server-0.9.15 → alibaba_cloud_ops_mcp_server-0.9.16}/image/Alibaba-Cloud-Ops-MCP-User-Group-en.png +0 -0
  14. {alibaba_cloud_ops_mcp_server-0.9.15 → alibaba_cloud_ops_mcp_server-0.9.16}/image/Alibaba-Cloud-Ops-MCP-User-Group-zh.png +0 -0
  15. {alibaba_cloud_ops_mcp_server-0.9.15 → alibaba_cloud_ops_mcp_server-0.9.16}/image/alibaba-cloud.png +0 -0
  16. {alibaba_cloud_ops_mcp_server-0.9.15 → alibaba_cloud_ops_mcp_server-0.9.16}/image/qoder.svg +0 -0
  17. {alibaba_cloud_ops_mcp_server-0.9.15 → alibaba_cloud_ops_mcp_server-0.9.16}/src/__init__.py +0 -0
  18. {alibaba_cloud_ops_mcp_server-0.9.15 → alibaba_cloud_ops_mcp_server-0.9.16}/src/alibaba_cloud_ops_mcp_server/__init__.py +0 -0
  19. {alibaba_cloud_ops_mcp_server-0.9.15 → alibaba_cloud_ops_mcp_server-0.9.16}/src/alibaba_cloud_ops_mcp_server/__main__.py +0 -0
  20. {alibaba_cloud_ops_mcp_server-0.9.15 → alibaba_cloud_ops_mcp_server-0.9.16}/src/alibaba_cloud_ops_mcp_server/alibabacloud/__init__.py +0 -0
  21. {alibaba_cloud_ops_mcp_server-0.9.15 → alibaba_cloud_ops_mcp_server-0.9.16}/src/alibaba_cloud_ops_mcp_server/alibabacloud/api_meta_client.py +0 -0
  22. {alibaba_cloud_ops_mcp_server-0.9.15 → alibaba_cloud_ops_mcp_server-0.9.16}/src/alibaba_cloud_ops_mcp_server/alibabacloud/exception.py +0 -0
  23. {alibaba_cloud_ops_mcp_server-0.9.15 → alibaba_cloud_ops_mcp_server-0.9.16}/src/alibaba_cloud_ops_mcp_server/alibabacloud/static/PROMPT_UNDERSTANDING.md +0 -0
  24. {alibaba_cloud_ops_mcp_server-0.9.15 → alibaba_cloud_ops_mcp_server-0.9.16}/src/alibaba_cloud_ops_mcp_server/alibabacloud/static/__init__.py +0 -0
  25. {alibaba_cloud_ops_mcp_server-0.9.15 → alibaba_cloud_ops_mcp_server-0.9.16}/src/alibaba_cloud_ops_mcp_server/alibabacloud/utils.py +0 -0
  26. {alibaba_cloud_ops_mcp_server-0.9.15 → alibaba_cloud_ops_mcp_server-0.9.16}/src/alibaba_cloud_ops_mcp_server/config.py +0 -0
  27. {alibaba_cloud_ops_mcp_server-0.9.15 → alibaba_cloud_ops_mcp_server-0.9.16}/src/alibaba_cloud_ops_mcp_server/settings.py +0 -0
  28. {alibaba_cloud_ops_mcp_server-0.9.15 → alibaba_cloud_ops_mcp_server-0.9.16}/src/alibaba_cloud_ops_mcp_server/tools/__init__.py +0 -0
  29. {alibaba_cloud_ops_mcp_server-0.9.15 → alibaba_cloud_ops_mcp_server-0.9.16}/src/alibaba_cloud_ops_mcp_server/tools/api_tools.py +0 -0
  30. {alibaba_cloud_ops_mcp_server-0.9.15 → alibaba_cloud_ops_mcp_server-0.9.16}/src/alibaba_cloud_ops_mcp_server/tools/cms_tools.py +0 -0
  31. {alibaba_cloud_ops_mcp_server-0.9.15 → alibaba_cloud_ops_mcp_server-0.9.16}/src/alibaba_cloud_ops_mcp_server/tools/common_api_tools.py +0 -0
  32. {alibaba_cloud_ops_mcp_server-0.9.15 → alibaba_cloud_ops_mcp_server-0.9.16}/src/alibaba_cloud_ops_mcp_server/tools/local_tools.py +0 -0
  33. {alibaba_cloud_ops_mcp_server-0.9.15 → alibaba_cloud_ops_mcp_server-0.9.16}/src/alibaba_cloud_ops_mcp_server/tools/oos_tools.py +0 -0
  34. {alibaba_cloud_ops_mcp_server-0.9.15 → alibaba_cloud_ops_mcp_server-0.9.16}/src/alibaba_cloud_ops_mcp_server/tools/oss_tools.py +0 -0
  35. {alibaba_cloud_ops_mcp_server-0.9.15 → alibaba_cloud_ops_mcp_server-0.9.16}/tests/alibabacloud/test_api_meta_client.py +0 -0
  36. {alibaba_cloud_ops_mcp_server-0.9.15 → alibaba_cloud_ops_mcp_server-0.9.16}/tests/alibabacloud/test_exception.py +0 -0
  37. {alibaba_cloud_ops_mcp_server-0.9.15 → alibaba_cloud_ops_mcp_server-0.9.16}/tests/alibabacloud/test_utils.py +0 -0
  38. {alibaba_cloud_ops_mcp_server-0.9.15 → alibaba_cloud_ops_mcp_server-0.9.16}/tests/test_init.py +0 -0
  39. {alibaba_cloud_ops_mcp_server-0.9.15 → alibaba_cloud_ops_mcp_server-0.9.16}/tests/test_server.py +0 -0
  40. {alibaba_cloud_ops_mcp_server-0.9.15 → alibaba_cloud_ops_mcp_server-0.9.16}/tests/tools/test_api_tools.py +0 -0
  41. {alibaba_cloud_ops_mcp_server-0.9.15 → alibaba_cloud_ops_mcp_server-0.9.16}/tests/tools/test_cms_tools.py +0 -0
  42. {alibaba_cloud_ops_mcp_server-0.9.15 → alibaba_cloud_ops_mcp_server-0.9.16}/tests/tools/test_oos_tools.py +0 -0
  43. {alibaba_cloud_ops_mcp_server-0.9.15 → alibaba_cloud_ops_mcp_server-0.9.16}/tests/tools/test_oss_tools.py +0 -0
  44. {alibaba_cloud_ops_mcp_server-0.9.15 → alibaba_cloud_ops_mcp_server-0.9.16}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: alibaba-cloud-ops-mcp-server
3
- Version: 0.9.15
3
+ Version: 0.9.16
4
4
  Summary: A MCP server for Alibaba Cloud
5
5
  Author-email: Zheng Dayu <dayu.zdy@alibaba-inc.com>, Zhao Shuaibo <zhaoshuaibo.zsb@alibaba-inc.com>
6
6
  License-File: LICENSE
@@ -9,7 +9,7 @@ Requires-Dist: alibabacloud-cms20190101>=3.1.4
9
9
  Requires-Dist: alibabacloud-credentials>=1.0.3
10
10
  Requires-Dist: alibabacloud-ecs20140526>=6.1.0
11
11
  Requires-Dist: alibabacloud-oos20190601>=3.5.0
12
- Requires-Dist: alibabacloud-oss-v2>=1.1.0
12
+ Requires-Dist: alibabacloud-oss-v2>=1.2.0
13
13
  Requires-Dist: click>=8.1.8
14
14
  Requires-Dist: fastmcp==2.8.0
15
15
  Requires-Dist: pydantic==2.11.3
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "alibaba-cloud-ops-mcp-server"
3
- version = "0.9.15"
3
+ version = "0.9.16"
4
4
  description = "A MCP server for Alibaba Cloud"
5
5
  readme = "README.md"
6
6
  authors = [
@@ -12,7 +12,7 @@ dependencies = [
12
12
  "alibabacloud-cms20190101>=3.1.4",
13
13
  "alibabacloud-ecs20140526>=6.1.0",
14
14
  "alibabacloud-oos20190601>=3.5.0",
15
- "alibabacloud_oss_v2>=1.1.0",
15
+ "alibabacloud_oss_v2>=1.2.0",
16
16
  "alibabacloud-credentials>=1.0.3",
17
17
  "click>=8.1.8",
18
18
  "fastmcp==2.8.0",
@@ -190,7 +190,9 @@ def main(transport: str, port: int, host: str, services: str, headers_credential
190
190
  for tool in oos_tools.tools:
191
191
  mcp.tool(tool)
192
192
  for tool in application_management_tools.tools:
193
- mcp.tool(tool)
193
+ # Skip ECS_DescribeInstances in normal mode
194
+ if tool.__name__ != 'ECS_DescribeInstances':
195
+ mcp.tool(tool)
194
196
  for tool in cms_tools.tools:
195
197
  mcp.tool(tool)
196
198
  for tool in oss_tools.tools:
@@ -89,13 +89,11 @@ def OOS_CodeDeploy(
89
89
  - 记录文件路径,留待后续CodeDeploy使用
90
90
 
91
91
  步骤 3:调用此工具进行部署
92
- - 此工具会依次调用:CreateApplication(如果不存在)、CreateApplicationGroup(如果不存在)、
93
- TagResources(可选,如果是已有资源需要打 tag 导入应用分组)、DeployApplicationGroup
94
92
 
95
93
  重要提示:
96
94
  1. 启动脚本(application_start)必须与上传的产物对应。如果产物是压缩包(tar、tar.gz、zip等),
97
95
  需要先解压并进入对应目录后再执行启动命令。
98
- 2. 示例:如果上传的是 app.tar.gz,启动脚本应该类似,一般压缩包就在当前目录下,直接解压即可:
96
+ 2. 示例:如果上传的是 app.tar.gz,启动脚本应该类似,一般压缩包就在当前目录下,直接解压即可,不要盲目cd,使用前务必确认对应文件和路径存在:
99
97
  "tar -xzf app.tar.gz && ./start.sh"
100
98
  或者如果解压后是Java应用:
101
99
  "tar -xzf app.tar.gz && java -jar app.jar"
@@ -153,7 +151,7 @@ def OOS_CodeDeploy(
153
151
  logger.info(f"[code_deploy] Using file directory as project path: {file_path_resolved.parent}")
154
152
 
155
153
  # Check ECS instance ID
156
- if not instance_ids or len(instance_ids) == 0:
154
+ if not instance_ids:
157
155
  ecs_purchase_link = f'https://ecs-buy.aliyun.com/ecs#/custom/prepay/{deploy_region_id}?orderSource=buyWizard-console-list'
158
156
  security_group_link = f'https://ecs.console.aliyun.com/securityGroup?regionId={deploy_region_id}'
159
157
  port_info = f'port {port}' if port else 'application port'
@@ -311,6 +309,8 @@ def OOS_CodeDeploy(
311
309
  'security_group_link': security_group_link,
312
310
  'port': port,
313
311
  'deploy_region_id': deploy_region_id,
312
+ 'bucket_name': bucket_name,
313
+ 'oss_bucket_link': f'https://oss.console.aliyun.com/bucket/oss-cn-hangzhou/{bucket_name}/object',
314
314
  'security_group_instructions': f'''
315
315
  ## Deployment Successful!
316
316
 
@@ -548,7 +548,7 @@ def _check_ecs_instances_exist(deploy_region_id: str, instance_ids: list) -> Tup
548
548
  response = _describe_instances_with_retry(deploy_region_id, describe_instances_request)
549
549
 
550
550
  existing_instance_ids = set()
551
- if response.body and response.body.instances:
551
+ if response.body and response.body.instances and response.body.instances.instance:
552
552
  for instance in response.body.instances.instance:
553
553
  if instance.instance_id:
554
554
  existing_instance_ids.add(instance.instance_id)
@@ -579,7 +579,7 @@ def _check_instance_has_tag(deploy_region_id: str, instance_id: str, tag_key: st
579
579
  response = _describe_instances_with_retry(deploy_region_id, describe_instances_request)
580
580
  if response.body and response.body.instances and response.body.instances.instance:
581
581
  instance = response.body.instances.instance[0]
582
- if instance.tags and instance.tags.tag:
582
+ if instance.tags and instance.tags.tag is not None:
583
583
  for tag in instance.tags.tag:
584
584
  if tag.tag_key == tag_key and tag.tag_value == tag_value:
585
585
  logger.info(f"[_check_instance_has_tag] Instance {instance_id} already has tag {tag_key}={tag_value}")
@@ -631,7 +631,7 @@ def _ensure_instances_tagged(deploy_region_id: str, name: str, application_group
631
631
 
632
632
  def _tag_multiple_instances(deploy_region_id, name, application_group_name, instance_ids):
633
633
  """
634
- 为多个实例打 tag(已废弃,使用 _ensure_instances_tagged 代替)
634
+ 为多个实例打 tag
635
635
  """
636
636
  remaining_instance_ids = instance_ids[1:]
637
637
  if remaining_instance_ids: