alibaba-cloud-ops-mcp-server 0.9.10__tar.gz → 0.9.13__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 (46) hide show
  1. {alibaba_cloud_ops_mcp_server-0.9.10 → alibaba_cloud_ops_mcp_server-0.9.13}/.github/workflows/python-ci.yml +1 -1
  2. {alibaba_cloud_ops_mcp_server-0.9.10 → alibaba_cloud_ops_mcp_server-0.9.13}/.gitignore +1 -1
  3. {alibaba_cloud_ops_mcp_server-0.9.10 → alibaba_cloud_ops_mcp_server-0.9.13}/PKG-INFO +38 -7
  4. {alibaba_cloud_ops_mcp_server-0.9.10 → alibaba_cloud_ops_mcp_server-0.9.13}/README.md +34 -3
  5. {alibaba_cloud_ops_mcp_server-0.9.10 → alibaba_cloud_ops_mcp_server-0.9.13}/README_zh.md +43 -2
  6. alibaba_cloud_ops_mcp_server-0.9.13/image/qoder.svg +1 -0
  7. {alibaba_cloud_ops_mcp_server-0.9.10 → alibaba_cloud_ops_mcp_server-0.9.13}/pyproject.toml +5 -4
  8. alibaba_cloud_ops_mcp_server-0.9.13/src/alibaba_cloud_ops_mcp_server/alibabacloud/utils.py +234 -0
  9. alibaba_cloud_ops_mcp_server-0.9.13/src/alibaba_cloud_ops_mcp_server/server.py +179 -0
  10. {alibaba_cloud_ops_mcp_server-0.9.10 → alibaba_cloud_ops_mcp_server-0.9.13}/src/alibaba_cloud_ops_mcp_server/tools/api_tools.py +8 -2
  11. alibaba_cloud_ops_mcp_server-0.9.13/src/alibaba_cloud_ops_mcp_server/tools/application_management_tools.py +748 -0
  12. alibaba_cloud_ops_mcp_server-0.9.13/src/alibaba_cloud_ops_mcp_server/tools/local_tools.py +323 -0
  13. {alibaba_cloud_ops_mcp_server-0.9.10 → alibaba_cloud_ops_mcp_server-0.9.13}/src/alibaba_cloud_ops_mcp_server/tools/oss_tools.py +68 -3
  14. {alibaba_cloud_ops_mcp_server-0.9.10 → alibaba_cloud_ops_mcp_server-0.9.13}/tests/tools/test_oos_tools.py +6 -1
  15. {alibaba_cloud_ops_mcp_server-0.9.10 → alibaba_cloud_ops_mcp_server-0.9.13}/uv.lock +38 -29
  16. alibaba_cloud_ops_mcp_server-0.9.10/src/alibaba_cloud_ops_mcp_server/alibabacloud/utils.py +0 -51
  17. alibaba_cloud_ops_mcp_server-0.9.10/src/alibaba_cloud_ops_mcp_server/server.py +0 -96
  18. {alibaba_cloud_ops_mcp_server-0.9.10 → alibaba_cloud_ops_mcp_server-0.9.13}/Dockerfile +0 -0
  19. {alibaba_cloud_ops_mcp_server-0.9.10 → alibaba_cloud_ops_mcp_server-0.9.13}/LICENSE +0 -0
  20. {alibaba_cloud_ops_mcp_server-0.9.10 → alibaba_cloud_ops_mcp_server-0.9.13}/README_mcp_args.md +0 -0
  21. {alibaba_cloud_ops_mcp_server-0.9.10 → alibaba_cloud_ops_mcp_server-0.9.13}/examples/openapi_mcp_quickstart/server.py +0 -0
  22. {alibaba_cloud_ops_mcp_server-0.9.10 → alibaba_cloud_ops_mcp_server-0.9.13}/image/Alibaba-Cloud-Ops-MCP-User-Group-en.png +0 -0
  23. {alibaba_cloud_ops_mcp_server-0.9.10 → alibaba_cloud_ops_mcp_server-0.9.13}/image/Alibaba-Cloud-Ops-MCP-User-Group-zh.png +0 -0
  24. {alibaba_cloud_ops_mcp_server-0.9.10 → alibaba_cloud_ops_mcp_server-0.9.13}/image/alibaba-cloud.png +0 -0
  25. {alibaba_cloud_ops_mcp_server-0.9.10 → alibaba_cloud_ops_mcp_server-0.9.13}/src/__init__.py +0 -0
  26. {alibaba_cloud_ops_mcp_server-0.9.10 → alibaba_cloud_ops_mcp_server-0.9.13}/src/alibaba_cloud_ops_mcp_server/__init__.py +0 -0
  27. {alibaba_cloud_ops_mcp_server-0.9.10 → alibaba_cloud_ops_mcp_server-0.9.13}/src/alibaba_cloud_ops_mcp_server/__main__.py +0 -0
  28. {alibaba_cloud_ops_mcp_server-0.9.10 → alibaba_cloud_ops_mcp_server-0.9.13}/src/alibaba_cloud_ops_mcp_server/alibabacloud/__init__.py +0 -0
  29. {alibaba_cloud_ops_mcp_server-0.9.10 → alibaba_cloud_ops_mcp_server-0.9.13}/src/alibaba_cloud_ops_mcp_server/alibabacloud/api_meta_client.py +0 -0
  30. {alibaba_cloud_ops_mcp_server-0.9.10 → alibaba_cloud_ops_mcp_server-0.9.13}/src/alibaba_cloud_ops_mcp_server/alibabacloud/exception.py +0 -0
  31. {alibaba_cloud_ops_mcp_server-0.9.10 → alibaba_cloud_ops_mcp_server-0.9.13}/src/alibaba_cloud_ops_mcp_server/alibabacloud/static/PROMPT_UNDERSTANDING.md +0 -0
  32. {alibaba_cloud_ops_mcp_server-0.9.10 → alibaba_cloud_ops_mcp_server-0.9.13}/src/alibaba_cloud_ops_mcp_server/alibabacloud/static/__init__.py +0 -0
  33. {alibaba_cloud_ops_mcp_server-0.9.10 → alibaba_cloud_ops_mcp_server-0.9.13}/src/alibaba_cloud_ops_mcp_server/config.py +0 -0
  34. {alibaba_cloud_ops_mcp_server-0.9.10 → alibaba_cloud_ops_mcp_server-0.9.13}/src/alibaba_cloud_ops_mcp_server/settings.py +0 -0
  35. {alibaba_cloud_ops_mcp_server-0.9.10 → alibaba_cloud_ops_mcp_server-0.9.13}/src/alibaba_cloud_ops_mcp_server/tools/__init__.py +0 -0
  36. {alibaba_cloud_ops_mcp_server-0.9.10 → alibaba_cloud_ops_mcp_server-0.9.13}/src/alibaba_cloud_ops_mcp_server/tools/cms_tools.py +0 -0
  37. {alibaba_cloud_ops_mcp_server-0.9.10 → alibaba_cloud_ops_mcp_server-0.9.13}/src/alibaba_cloud_ops_mcp_server/tools/common_api_tools.py +0 -0
  38. {alibaba_cloud_ops_mcp_server-0.9.10 → alibaba_cloud_ops_mcp_server-0.9.13}/src/alibaba_cloud_ops_mcp_server/tools/oos_tools.py +0 -0
  39. {alibaba_cloud_ops_mcp_server-0.9.10 → alibaba_cloud_ops_mcp_server-0.9.13}/tests/alibabacloud/test_api_meta_client.py +0 -0
  40. {alibaba_cloud_ops_mcp_server-0.9.10 → alibaba_cloud_ops_mcp_server-0.9.13}/tests/alibabacloud/test_exception.py +0 -0
  41. {alibaba_cloud_ops_mcp_server-0.9.10 → alibaba_cloud_ops_mcp_server-0.9.13}/tests/alibabacloud/test_utils.py +0 -0
  42. {alibaba_cloud_ops_mcp_server-0.9.10 → alibaba_cloud_ops_mcp_server-0.9.13}/tests/test_init.py +0 -0
  43. {alibaba_cloud_ops_mcp_server-0.9.10 → alibaba_cloud_ops_mcp_server-0.9.13}/tests/test_server.py +0 -0
  44. {alibaba_cloud_ops_mcp_server-0.9.10 → alibaba_cloud_ops_mcp_server-0.9.13}/tests/tools/test_api_tools.py +0 -0
  45. {alibaba_cloud_ops_mcp_server-0.9.10 → alibaba_cloud_ops_mcp_server-0.9.13}/tests/tools/test_cms_tools.py +0 -0
  46. {alibaba_cloud_ops_mcp_server-0.9.10 → alibaba_cloud_ops_mcp_server-0.9.13}/tests/tools/test_oss_tools.py +0 -0
@@ -25,4 +25,4 @@ jobs:
25
25
  env:
26
26
  PYTHONPATH: src
27
27
  run: |
28
- uv run pytest --cov=src --cov-report=term-missing
28
+ uv run pytest --cov=src/alibaba_cloud_ops_mcp_server/src --cov-report=term-missing
@@ -6,7 +6,7 @@ dist/
6
6
  wheels/
7
7
  *.egg-info
8
8
  .coverage
9
-
9
+ .code_deploy
10
10
  # Virtual environments
11
11
  .venv
12
12
 
@@ -1,14 +1,14 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: alibaba-cloud-ops-mcp-server
3
- Version: 0.9.10
3
+ Version: 0.9.13
4
4
  Summary: A MCP server for Alibaba Cloud
5
- Author-email: Zheng Dayu <dayu.zdy@alibaba-inc.com>
5
+ Author-email: Zheng Dayu <dayu.zdy@alibaba-inc.com>, Zhao Shuaibo <zhaoshuaibo.zsb@alibaba-inc.com>
6
6
  License-File: LICENSE
7
7
  Requires-Python: >=3.10
8
8
  Requires-Dist: alibabacloud-cms20190101>=3.1.4
9
- Requires-Dist: alibabacloud-credentials>=1.0.0
9
+ Requires-Dist: alibabacloud-credentials>=1.0.3
10
10
  Requires-Dist: alibabacloud-ecs20140526>=6.1.0
11
- Requires-Dist: alibabacloud-oos20190601>=3.4.1
11
+ Requires-Dist: alibabacloud-oos20190601>=3.5.0
12
12
  Requires-Dist: alibabacloud-oss-v2>=1.1.0
13
13
  Requires-Dist: click>=8.1.8
14
14
  Requires-Dist: fastmcp==2.8.0
@@ -21,7 +21,19 @@ Description-Content-Type: text/markdown
21
21
 
22
22
  [中文版本](./README_zh.md)
23
23
 
24
- Alibaba Cloud Ops MCP Server is a [Model Context Protocol (MCP)](https://modelcontextprotocol.io/introduction) server that provides seamless integration with Alibaba Cloud APIs, enabling AI assistants to operation resources on Alibaba Cloud, supporting ECS, Cloud Monitor, OOS and other widely used cloud products.
24
+ Alibaba Cloud Ops MCP Server is a [Model Context Protocol (MCP)](https://modelcontextprotocol.io/introduction) server that provides seamless integration with Alibaba Cloud APIs, enabling AI assistants to operate resources on Alibaba Cloud, supporting ECS, Cloud Monitor, OOS, OSS, VPC, RDS and other widely used cloud products. It also enables AI assistants to analyze, build, and deploy applications to Alibaba Cloud ECS instances.
25
+
26
+ ## Features
27
+
28
+ - **ECS Management**: Create, start, stop, reboot, delete instances, run commands, view instances, regions, zones, images, security groups, and more
29
+ - **VPC Management**: View VPCs and VSwitches
30
+ - **RDS Management**: List, start, stop, and restart RDS instances
31
+ - **OSS Management**: List, create, delete buckets, and view objects
32
+ - **Cloud Monitor**: Get CPU usage, load average, memory usage, and disk usage metrics for ECS instances
33
+ - **Application Deployment**: Deploy applications to ECS instances with automatic application and application group management
34
+ - **Project Analysis**: Automatically identify project technology stack and deployment methods (npm, Python, Java, Go, Docker, etc.)
35
+ - **Local File Operations**: List directories, run shell scripts, and analyze project structures
36
+ - **Dynamic API Tools**: Support for Alibaba Cloud OpenAPI operations
25
37
 
26
38
  ## Prepare
27
39
 
@@ -60,8 +72,9 @@ To use `alibaba-cloud-ops-mcp-server` MCP Server with any other MCP Client, you
60
72
 
61
73
  ## MCP Maketplace Integration
62
74
 
63
- * [Cline](https://cline.bot/mcp-marketplace)
75
+ * [Qoder](https://qoder.com) <a href="qoder://aicoding.aicoding-deeplink/mcp/add?name=alibaba-cloud-ops-mcp-server&config=JTdCJTIyY29tbWFuZCUyMiUzQSUyMnV2eCUyMiUyQyUyMmFyZ3MlMjIlM0ElNUIlMjJhbGliYWJhLWNsb3VkLW9wcy1tY3Atc2VydmVyJTQwbGF0ZXN0JTIyJTVEJTJDJTIyZW52JTIyJTNBJTdCJTIyQUxJQkFCQV9DTE9VRF9BQ0NFU1NfS0VZX0lEJTIyJTNBJTIyWW91ciUyMEFjY2VzcyUyMEtleSUyMElkJTIyJTJDJTIyQUxJQkFCQV9DTE9VRF9BQ0NFU1NfS0VZX1NFQ1JFVCUyMiUzQSUyMllvdXIlMjBBY2Nlc3MlMjBLZXklMjBTRUNSRVQlMjIlN0QlN0Q%3D"><img src="./image/qoder.svg" alt="Install MCP Server" height="20"></a>
64
76
  * [Cursor](https://docs.cursor.com/tools) [![Install MCP Server](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en/install-mcp?name=alibaba-cloud-ops-mcp-server&config=eyJ0aW1lb3V0Ijo2MDAsImNvbW1hbmQiOiJ1dnggYWxpYmFiYS1jbG91ZC1vcHMtbWNwLXNlcnZlckBsYXRlc3QiLCJlbnYiOnsiQUxJQkFCQV9DTE9VRF9BQ0NFU1NfS0VZX0lEIjoiWW91ciBBY2Nlc3MgS2V5IElkIiwiQUxJQkFCQV9DTE9VRF9BQ0NFU1NfS0VZX1NFQ1JFVCI6IllvdXIgQWNjZXNzIEtleSBTZWNyZXQifX0%3D)
77
+ * [Cline](https://cline.bot/mcp-marketplace)
65
78
  * [ModelScope](https://www.modelscope.cn/mcp/servers/@aliyun/alibaba-cloud-ops-mcp-server?lang=en_US)
66
79
  * [Lingma](https://lingma.aliyun.com/)
67
80
  * [Smithery AI](https://smithery.ai/server/@aliyun/alibaba-cloud-ops-mcp-server)
@@ -77,7 +90,7 @@ To use `alibaba-cloud-ops-mcp-server` MCP Server with any other MCP Client, you
77
90
 
78
91
  ## Tools
79
92
 
80
- | **Product** | **Tool** | **Function** | **Implematation** | **Status** |
93
+ | **Product** | **Tool** | **Function** | **Implementation** | **Status** |
81
94
  | --- | --- | --- | --- | --- |
82
95
  | ECS | RunCommand | Run Command | OOS | Done |
83
96
  | | StartInstances | Start Instances | OOS | Done |
@@ -112,6 +125,24 @@ To use `alibaba-cloud-ops-mcp-server` MCP Server with any other MCP Client, you
112
125
  | | GetDiskUsageData | Get Disk Utilization Metric Data | API | Done |
113
126
  | | GetDiskTotalData | Get Total Disk Partition Capacity Metric Data | API | Done |
114
127
  | | GetDiskUsedData | Get Disk Partition Usage Metric Data | API | Done |
128
+ | Application Management | OOS_CodeDeploy | Deploy applications to ECS instances with automatic artifact upload to OSS | OOS | Done |
129
+ | | OOS_GetDeployStatus | Query deployment status of application groups | API | Done |
130
+ | | OOS_GetLastDeploymentInfo | Retrieve information about the last deployment | API | Done |
131
+ | Local | LOCAL_ListDirectory | List files and subdirectories in a directory | Local | Done |
132
+ | | LOCAL_RunShellScript | Execute shell scripts or commands | Local | Done |
133
+ | | LOCAL_AnalyzeDeployStack | Identify project deployment methods and technology stack | Local | Done |
134
+
135
+ ## Deployment Workflow
136
+
137
+ The typical deployment workflow includes:
138
+
139
+ 1. **Project Analysis**: Use `LOCAL_AnalyzeDeployStack` to identify the project's technology stack and deployment method
140
+ 2. **Build Artifacts**: Build or package the application locally (e.g., create tar.gz or zip files)
141
+ 3. **Deploy Application**: Use `OOS_CodeDeploy` to deploy the application to ECS instances
142
+ - Automatically creates application and application group if they don't exist
143
+ - Uploads artifacts to OSS
144
+ - Deploys to specified ECS instances
145
+ 4. **Monitor Deployment**: Use `OOS_GetDeployStatus` to check deployment status
115
146
 
116
147
  ## Contact us
117
148
 
@@ -4,7 +4,19 @@
4
4
 
5
5
  [中文版本](./README_zh.md)
6
6
 
7
- Alibaba Cloud Ops MCP Server is a [Model Context Protocol (MCP)](https://modelcontextprotocol.io/introduction) server that provides seamless integration with Alibaba Cloud APIs, enabling AI assistants to operation resources on Alibaba Cloud, supporting ECS, Cloud Monitor, OOS and other widely used cloud products.
7
+ Alibaba Cloud Ops MCP Server is a [Model Context Protocol (MCP)](https://modelcontextprotocol.io/introduction) server that provides seamless integration with Alibaba Cloud APIs, enabling AI assistants to operate resources on Alibaba Cloud, supporting ECS, Cloud Monitor, OOS, OSS, VPC, RDS and other widely used cloud products. It also enables AI assistants to analyze, build, and deploy applications to Alibaba Cloud ECS instances.
8
+
9
+ ## Features
10
+
11
+ - **ECS Management**: Create, start, stop, reboot, delete instances, run commands, view instances, regions, zones, images, security groups, and more
12
+ - **VPC Management**: View VPCs and VSwitches
13
+ - **RDS Management**: List, start, stop, and restart RDS instances
14
+ - **OSS Management**: List, create, delete buckets, and view objects
15
+ - **Cloud Monitor**: Get CPU usage, load average, memory usage, and disk usage metrics for ECS instances
16
+ - **Application Deployment**: Deploy applications to ECS instances with automatic application and application group management
17
+ - **Project Analysis**: Automatically identify project technology stack and deployment methods (npm, Python, Java, Go, Docker, etc.)
18
+ - **Local File Operations**: List directories, run shell scripts, and analyze project structures
19
+ - **Dynamic API Tools**: Support for Alibaba Cloud OpenAPI operations
8
20
 
9
21
  ## Prepare
10
22
 
@@ -43,8 +55,9 @@ To use `alibaba-cloud-ops-mcp-server` MCP Server with any other MCP Client, you
43
55
 
44
56
  ## MCP Maketplace Integration
45
57
 
46
- * [Cline](https://cline.bot/mcp-marketplace)
58
+ * [Qoder](https://qoder.com) <a href="qoder://aicoding.aicoding-deeplink/mcp/add?name=alibaba-cloud-ops-mcp-server&config=JTdCJTIyY29tbWFuZCUyMiUzQSUyMnV2eCUyMiUyQyUyMmFyZ3MlMjIlM0ElNUIlMjJhbGliYWJhLWNsb3VkLW9wcy1tY3Atc2VydmVyJTQwbGF0ZXN0JTIyJTVEJTJDJTIyZW52JTIyJTNBJTdCJTIyQUxJQkFCQV9DTE9VRF9BQ0NFU1NfS0VZX0lEJTIyJTNBJTIyWW91ciUyMEFjY2VzcyUyMEtleSUyMElkJTIyJTJDJTIyQUxJQkFCQV9DTE9VRF9BQ0NFU1NfS0VZX1NFQ1JFVCUyMiUzQSUyMllvdXIlMjBBY2Nlc3MlMjBLZXklMjBTRUNSRVQlMjIlN0QlN0Q%3D"><img src="./image/qoder.svg" alt="Install MCP Server" height="20"></a>
47
59
  * [Cursor](https://docs.cursor.com/tools) [![Install MCP Server](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en/install-mcp?name=alibaba-cloud-ops-mcp-server&config=eyJ0aW1lb3V0Ijo2MDAsImNvbW1hbmQiOiJ1dnggYWxpYmFiYS1jbG91ZC1vcHMtbWNwLXNlcnZlckBsYXRlc3QiLCJlbnYiOnsiQUxJQkFCQV9DTE9VRF9BQ0NFU1NfS0VZX0lEIjoiWW91ciBBY2Nlc3MgS2V5IElkIiwiQUxJQkFCQV9DTE9VRF9BQ0NFU1NfS0VZX1NFQ1JFVCI6IllvdXIgQWNjZXNzIEtleSBTZWNyZXQifX0%3D)
60
+ * [Cline](https://cline.bot/mcp-marketplace)
48
61
  * [ModelScope](https://www.modelscope.cn/mcp/servers/@aliyun/alibaba-cloud-ops-mcp-server?lang=en_US)
49
62
  * [Lingma](https://lingma.aliyun.com/)
50
63
  * [Smithery AI](https://smithery.ai/server/@aliyun/alibaba-cloud-ops-mcp-server)
@@ -60,7 +73,7 @@ To use `alibaba-cloud-ops-mcp-server` MCP Server with any other MCP Client, you
60
73
 
61
74
  ## Tools
62
75
 
63
- | **Product** | **Tool** | **Function** | **Implematation** | **Status** |
76
+ | **Product** | **Tool** | **Function** | **Implementation** | **Status** |
64
77
  | --- | --- | --- | --- | --- |
65
78
  | ECS | RunCommand | Run Command | OOS | Done |
66
79
  | | StartInstances | Start Instances | OOS | Done |
@@ -95,6 +108,24 @@ To use `alibaba-cloud-ops-mcp-server` MCP Server with any other MCP Client, you
95
108
  | | GetDiskUsageData | Get Disk Utilization Metric Data | API | Done |
96
109
  | | GetDiskTotalData | Get Total Disk Partition Capacity Metric Data | API | Done |
97
110
  | | GetDiskUsedData | Get Disk Partition Usage Metric Data | API | Done |
111
+ | Application Management | OOS_CodeDeploy | Deploy applications to ECS instances with automatic artifact upload to OSS | OOS | Done |
112
+ | | OOS_GetDeployStatus | Query deployment status of application groups | API | Done |
113
+ | | OOS_GetLastDeploymentInfo | Retrieve information about the last deployment | API | Done |
114
+ | Local | LOCAL_ListDirectory | List files and subdirectories in a directory | Local | Done |
115
+ | | LOCAL_RunShellScript | Execute shell scripts or commands | Local | Done |
116
+ | | LOCAL_AnalyzeDeployStack | Identify project deployment methods and technology stack | Local | Done |
117
+
118
+ ## Deployment Workflow
119
+
120
+ The typical deployment workflow includes:
121
+
122
+ 1. **Project Analysis**: Use `LOCAL_AnalyzeDeployStack` to identify the project's technology stack and deployment method
123
+ 2. **Build Artifacts**: Build or package the application locally (e.g., create tar.gz or zip files)
124
+ 3. **Deploy Application**: Use `OOS_CodeDeploy` to deploy the application to ECS instances
125
+ - Automatically creates application and application group if they don't exist
126
+ - Uploads artifacts to OSS
127
+ - Deploys to specified ECS instances
128
+ 4. **Monitor Deployment**: Use `OOS_GetDeployStatus` to check deployment status
98
129
 
99
130
  ## Contact us
100
131
 
@@ -4,7 +4,19 @@
4
4
 
5
5
  [English README](./README.md)
6
6
 
7
- Alibaba Cloud Ops MCP Server是一个[模型上下文协议(MCP)](https://modelcontextprotocol.io/introduction)服务器,提供与阿里云API的无缝集成,使AI助手能够操作阿里云上的资源,支持ECS、云监控、OOS等广泛使用的云产品。
7
+ Alibaba Cloud Ops MCP Server是一个[模型上下文协议(MCP)](https://modelcontextprotocol.io/introduction)服务器,提供与阿里云API的无缝集成,使AI助手能够操作阿里云上的资源,支持ECS、云监控、OOS、OSS、VPC、RDS等广泛使用的云产品。同时,它还使AI助手能够分析、构建和部署应用到阿里云ECS实例。
8
+
9
+ ## 功能特性
10
+
11
+ - **ECS 管理**:创建、启动、停止、重启、删除实例,运行命令,查看实例、地域、可用区、镜像、安全组等
12
+ - **VPC 管理**:查看 VPC 和 VSwitch
13
+ - **RDS 管理**:查询、启动、停止、重启 RDS 实例
14
+ - **OSS 管理**:查看、创建、删除存储桶,查看对象信息
15
+ - **云监控**:获取 ECS 实例的 CPU 使用率、负载平均值、内存使用率和磁盘使用率指标
16
+ - **应用部署**:自动部署应用到 ECS 实例,支持自动创建应用和应用分组
17
+ - **项目分析**:自动识别项目技术栈和部署方式(npm、Python、Java、Go、Docker 等)
18
+ - **本地文件操作**:列出目录、执行 shell 脚本、分析项目结构
19
+ - **动态 API 工具**:支持阿里云 OpenAPI 操作
8
20
 
9
21
  ## 准备
10
22
 
@@ -43,8 +55,9 @@ curl -LsSf https://astral.sh/uv/install.sh | sh
43
55
 
44
56
  ## MCP市场集成
45
57
 
46
- * [Cline](https://cline.bot/mcp-marketplace)
58
+ * [Qoder](https://qoder.com) <a href="qoder://aicoding.aicoding-deeplink/mcp/add?name=alibaba-cloud-ops-mcp-server&config=JTdCJTIyY29tbWFuZCUyMiUzQSUyMnV2eCUyMiUyQyUyMmFyZ3MlMjIlM0ElNUIlMjJhbGliYWJhLWNsb3VkLW9wcy1tY3Atc2VydmVyJTQwbGF0ZXN0JTIyJTVEJTJDJTIyZW52JTIyJTNBJTdCJTIyQUxJQkFCQV9DTE9VRF9BQ0NFU1NfS0VZX0lEJTIyJTNBJTIyWW91ciUyMEFjY2VzcyUyMEtleSUyMElkJTIyJTJDJTIyQUxJQkFCQV9DTE9VRF9BQ0NFU1NfS0VZX1NFQ1JFVCUyMiUzQSUyMllvdXIlMjBBY2Nlc3MlMjBLZXklMjBTRUNSRVQlMjIlN0QlN0Q%3D"><img src="./image/qoder.svg" alt="Install MCP Server" height="20"></a>
47
59
  * [Cursor](https://docs.cursor.com/tools) [![Install MCP Server](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en/install-mcp?name=alibaba-cloud-ops-mcp-server&config=eyJ0aW1lb3V0Ijo2MDAsImNvbW1hbmQiOiJ1dnggYWxpYmFiYS1jbG91ZC1vcHMtbWNwLXNlcnZlckBsYXRlc3QiLCJlbnYiOnsiQUxJQkFCQV9DTE9VRF9BQ0NFU1NfS0VZX0lEIjoiWW91ciBBY2Nlc3MgS2V5IElkIiwiQUxJQkFCQV9DTE9VRF9BQ0NFU1NfS0VZX1NFQ1JFVCI6IllvdXIgQWNjZXNzIEtleSBTZWNyZXQifX0%3D)
60
+ * [Cline](https://cline.bot/mcp-marketplace)
48
61
  * [魔搭](https://www.modelscope.cn/mcp/servers/@aliyun/alibaba-cloud-ops-mcp-server)
49
62
  * [通义灵码](https://lingma.aliyun.com/)
50
63
  * [Smithery AI](https://smithery.ai/server/@aliyun/alibaba-cloud-ops-mcp-server)
@@ -95,6 +108,34 @@ curl -LsSf https://astral.sh/uv/install.sh | sh
95
108
  | | GetDiskUsageData | 获取磁盘利用率指标数据 | API | Done |
96
109
  | | GetDiskTotalData | 获取磁盘分区总容量指标数据 | API | Done |
97
110
  | | GetDiskUsedData | 获取磁盘分区使用量指标数据 | API | Done |
111
+ | 应用管理 | OOS_CodeDeploy | 部署应用到 ECS 实例,自动上传部署产物到 OSS | OOS | Done |
112
+ | | OOS_GetDeployStatus | 查询应用分组的部署状态 | API | Done |
113
+ | | OOS_GetLastDeploymentInfo | 获取上次部署的信息 | API | Done |
114
+ | 本地工具 | LOCAL_ListDirectory | 列出目录中的文件和子目录 | Local | Done |
115
+ | | LOCAL_RunShellScript | 执行 shell 脚本或命令 | Local | Done |
116
+ | | LOCAL_AnalyzeDeployStack | 识别项目部署方式和技术栈 | Local | Done |
117
+
118
+ ## 部署流程
119
+
120
+ 典型的部署流程包括:
121
+
122
+ 1. **项目分析**:使用 `LOCAL_AnalyzeDeployStack` 识别项目的技术栈和部署方式
123
+ 2. **构建产物**:在本地构建或打包应用(例如,创建 tar.gz 或 zip 文件)
124
+ 3. **部署应用**:使用 `OOS_CodeDeploy` 将应用部署到 ECS 实例
125
+ - 如果应用和应用分组不存在,会自动创建
126
+ - 自动上传部署产物到 OSS
127
+ - 部署到指定的 ECS 实例
128
+ 4. **监控部署**:使用 `OOS_GetDeployStatus` 检查部署状态
129
+
130
+ ## 重要提示
131
+
132
+ 1. **启动脚本**:启动脚本(`application_start`)必须与上传的产物对应。如果产物是压缩包(tar、tar.gz、zip 等),需要先解压并进入对应目录后再执行启动命令。
133
+
134
+ 2. **后台运行**:启动命令应该将程序运行在后台并打印日志到指定文件,使用非交互式命令(如 `unzip -o` 等自动覆盖的命令)。
135
+
136
+ 3. **安全组配置**:部署完成后,需要在 ECS 实例的安全组中开放应用端口,否则应用无法从外部访问。
137
+
138
+ 4. **ECS 实例**:部署前需要提供 ECS 实例 ID。如果未提供,工具会返回提示信息,引导用户到 ECS 控制台创建实例。
98
139
 
99
140
  ## 联系我们
100
141
 
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="640" height="180" viewBox="0 0 640 180"><defs><clipPath id="master_svg0_618_04811"><rect x="0" y="0" width="640" height="180" rx="0"/></clipPath><clipPath id="master_svg1_618_04811/167_025500"><rect x="0" y="0" width="180" height="180" rx="0"/></clipPath><clipPath id="master_svg2_618_04811/167_025499"><rect x="206" y="24" width="434" height="132" rx="0"/></clipPath></defs><g clip-path="url(#master_svg0_618_04811)"><g clip-path="url(#master_svg1_618_04811/167_025500)"><g style="opacity:0.5;"><path d="M162.00039019775392,104.26335893554688L162.00039019775392,79.27595893554687C162.00039019775392,65.07975893554688,155.82239019775392,53.687358935546875,145.0693901977539,48.01645893554688L89.5315901977539,18.731658935546875L89.2530901977539,19.263304935546874L88.97469019775392,19.794948935546874C99.3227901977539,25.250648935546874,105.2594901977539,36.256958935546876,105.2594901977539,49.99115893554688L105.2594901977539,74.97845893554688C105.2594901977539,75.73165893554688,105.2404901977539,76.52275893554688,105.2024901977539,77.31395893554688C105.19619019775391,77.46585893554688,105.18349019775391,77.61775893554687,105.1708901977539,77.77595893554687L105.1455901977539,78.14935893554687C105.1138901977539,78.64935893554687,105.0822901977539,79.15575893554688,105.0315901977539,79.65575893554688C105.01259019775391,79.85825893554687,104.98729019775391,80.06705893554687,104.9619901977539,80.26965893554687L104.9050901977539,80.74435893554687C104.8543901977539,81.16205893554687,104.81009019775391,81.57345893554688,104.74679019775391,81.99115893554688C104.71519019775391,82.22535893554686,104.6771901977539,82.45315893554687,104.6391901977539,82.68735893554688L104.5822901977539,83.04815893554688C104.51269019775391,83.47215893554687,104.4429901977539,83.89625893554687,104.3607901977539,84.32025893554687C104.2404901977539,84.95315893554688,104.1138901977539,85.57975893554688,103.9746901977539,86.20635893554687L103.93039019775391,86.38985893554687C103.7910901977539,86.99745893554687,103.6391901977539,87.59875893554687,103.4746901977539,88.20005893554688L103.3290901977539,88.73165893554688C103.15819019775391,89.33925893554688,102.98099019775391,89.94685893554687,102.7910901977539,90.55445893554688L102.6201901977539,91.07975893554688C102.4049901977539,91.74435893554687,102.1771901977539,92.40885893554687,101.9366901977539,93.06705893554688C101.8733901977539,93.24435893554687,101.80379019775391,93.41525893554687,101.7341901977539,93.59245893554687L101.62659019775391,93.87725893554688C101.43039019775391,94.38355893554687,101.2341901977539,94.89625893554687,101.0252901977539,95.40255893554688C100.9049901977539,95.70005893554688,100.77209019775391,95.99745893554687,100.6454901977539,96.29495893554687L100.60119019775391,96.40255893554688C100.4366901977539,96.78865893554688,100.2657901977539,97.17475893554688,100.0885901977539,97.55445893554688C99.9366901977539,97.89625893554687,99.77209019775391,98.23165893554688,99.6138901977539,98.56715893554687C99.43039019775391,98.94685893554687,99.2530901977539,99.32025893554687,99.0632901977539,99.69365893554688C98.88599019775391,100.04175893554688,98.70879019775391,100.38355893554687,98.5252901977539,100.72535893554688C98.3480901977539,101.06075893554687,98.1644901977539,101.40255893554688,97.98099019775391,101.73795893554687C97.7910901977539,102.07975893554688,97.59489019775391,102.42155893554687,97.39869019775391,102.76335893554688C97.20879019775391,103.09245893554687,97.01899019775391,103.42785893554688,96.8163901977539,103.75065893554688C96.6138901977539,104.09245893554687,96.4049901977539,104.42785893554688,96.18989019775391,104.76335893554688C95.98729019775391,105.08615893554688,95.7910901977539,105.40255893554688,95.5822901977539,105.71905893554687C95.3670901977539,106.05445893554688,95.1455901977539,106.37725893554688,94.89239019775391,106.75695893554688C94.6898901977539,107.05445893554688,94.48729019775391,107.35195893554688,94.2847901977539,107.64305893554688C94.06959019775391,107.94685893554687,93.8543901977539,108.24435893554687,93.60129019775391,108.59245893554687C93.3670901977539,108.91515893554687,93.13289019775391,109.23165893554688,92.89239019775391,109.54815893554688C92.6581901977539,109.85825893554687,92.42399019775391,110.15575893554687,92.18349019775391,110.45955893554688C91.9366901977539,110.76965893554687,91.6898901977539,111.08605893554687,91.44299019775391,111.38985893554687C91.2277901977539,111.65575893554687,91.00629019775391,111.91525893554687,90.7847901977539,112.17475893554688L90.7404901977539,112.22535893554688C90.4492901977539,112.57345893554688,90.15189019775391,112.91525893554687,89.8480901977539,113.25695893554688C89.60759019775391,113.52915893554687,89.3670901977539,113.79495893554687,89.1265901977539,114.06075893554687C88.8227901977539,114.39625893554687,88.51899019775391,114.71905893554687,88.2087901977539,115.04815893554688C87.97469019775392,115.29495893554687,87.7341901977539,115.53545893554687,87.4935901977539,115.78235893554688C87.0822901977539,116.20005893554688,86.6644901977539,116.60515893554688,86.2404901977539,117.01015893554687L86.05689019775392,117.18735893554687C85.9049901977539,117.33295893554687,85.7594901977539,117.47215893554687,85.60759019775391,117.61775893554687C85.0758901977539,118.11145893554688,84.53799019775391,118.59245893554687,83.98729019775391,119.06665893554687L83.83539019775391,119.19965893554688C83.77849019775391,119.25065893554688,83.71519019775391,119.30765893554687,83.6581901977539,119.35865893554687L83.39869019775391,119.57365893554687C82.9492901977539,119.95365893554687,82.4936901977539,120.32065893554687,82.03799019775391,120.68765893554688C81.89869019775391,120.80165893554687,81.7530901977539,120.90865893554688,81.60759019775391,121.02265893554687L81.4999901977539,121.10465893554688C81.1138901977539,121.40265893554688,80.7277901977539,121.69365893554688,80.3037901977539,122.00365893554688C80.1265901977539,122.13065893554688,79.95569019775391,122.26365893554687,79.77849019775391,122.38965893554688C79.32909019775391,122.71265893554687,78.87969019775392,123.02265893554687,78.42399019775391,123.32665893554687L78.06959019775391,123.57365893554687C77.47469019775392,123.96565893554687,76.8733901977539,124.34565893554688,76.26579019775392,124.71265893554687L75.87969019775392,124.94065893554688C75.39869019775391,125.22565893554687,74.9176901977539,125.50365893554688,74.43039019775391,125.77565893554687C74.2847901977539,125.85865893554687,74.1391901977539,125.93465893554688,73.9936901977539,126.00965893554688L73.76579019775392,126.13065893554688C73.36069019775391,126.34565893554688,72.9619901977539,126.55465893554687,72.55689019775392,126.76365893554687C72.33539019775391,126.87065893554687,72.1138901977539,126.97865893554687,71.89239019775391,127.08565893554687L71.8163901977539,127.12365893554687C71.42399019775391,127.31365893554687,71.03799019775391,127.49165893554688,70.6391901977539,127.66865893554687C70.3859901977539,127.78265893554688,70.13289019775391,127.89665893554688,69.8733901977539,128.00365893554687C69.47469019775392,128.17465893554686,69.06959019775391,128.33965893554688,68.6708901977539,128.4976589355469L68.45569019775391,128.5796589355469C68.27849019775391,128.64965893554688,68.10119019775391,128.71865893554687,67.92399019775391,128.7886589355469C67.48729019775391,128.95365893554685,67.04429019775391,129.10465893554687,66.60119019775391,129.25665893554688L66.36069019775391,129.33965893554688C66.2277901977539,129.38365893554686,66.0948901977539,129.43465893554688,65.9619901977539,129.4786589355469C65.2594901977539,129.70665893554687,64.60759019775391,129.90265893554687,63.97469019775391,130.0796589355469L60.094890197753905,131.14265893554688C59.51899019775391,131.30165893554687,58.94299019775391,131.44665893554688,58.373390197753906,131.5796589355469C58.2657901977539,131.60465893554687,58.164490197753906,131.62365893554687,58.0568901977539,131.64265893554688L57.626590197753906,131.73165893554688C57.303790197753905,131.80165893554687,56.98729019775391,131.87065893554689,56.664490197753906,131.92765893554687C56.53159019775391,131.95365893554685,56.392390197753905,131.97265893554686,56.259490197753905,131.9976589355469L55.74049019775391,132.08565893554686C55.48729019775391,132.13065893554688,55.234190197753904,132.17465893554686,54.98099019775391,132.20665893554687C54.83539019775391,132.22565893554687,54.68989019775391,132.24465893554688,54.54429019775391,132.25665893554688L54.01899019775391,132.32065893554687C53.78479019775391,132.35165893554688,53.550590197753905,132.3776589355469,53.316390197753904,132.40265893554687C53.22149019775391,132.4086589355469,53.126590197753906,132.41565893554687,53.037990197753906,132.42765893554687L52.8227901977539,132.44665893554688C52.45569019775391,132.4786589355469,52.0885901977539,132.51065893554687,51.72149019775391,132.52865893554687C51.582290197753906,132.53565893554688,51.44929019775391,132.54165893554688,51.31009019775391,132.54165893554688L51.10759019775391,132.54165893554688C50.78479019775391,132.56065893554688,50.4682901977539,132.57365893554686,50.15189019775391,132.57365893554686C49.9999901977539,132.57365893554686,49.841690197753906,132.57365893554686,49.68989019775391,132.57365893554686L49.4999901977539,132.57365893554686C49.2024901977539,132.57365893554686,48.89869019775391,132.56665893554685,48.60119019775391,132.55465893554685C48.436690197753904,132.55465893554685,48.27209019775391,132.54165893554688,48.10759019775391,132.52965893554688L47.94299019775391,132.52965893554688C47.63289019775391,132.50365893554687,47.32909019775391,132.48465893554686,47.01899019775391,132.45965893554688L46.6138901977539,132.42165893554687C46.227790197753905,132.38365893554686,45.848090197753905,132.34565893554688,45.461990197753906,132.29465893554686L45.215190197753905,132.26365893554686C44.76579019775391,132.1996589355469,44.316390197753904,132.13065893554688,43.86709019775391,132.04765893554688L43.53159019775391,131.98465893554686C43.253090197753906,131.92765893554687,42.97469019775391,131.87065893554689,42.69619019775391,131.80765893554687C42.259490197753905,131.71265893554687,41.82909019775391,131.60465893554687,41.39871019775391,131.48465893554686L41.2151601977539,131.43465893554688C41.132880197753906,131.41565893554687,41.0569401977539,131.3896589355469,40.974660197753906,131.37065893554689C40.4050301977539,131.20665893554687,39.848070197753906,131.02965893554688,39.32276019775391,130.84565893554688L38.93035019775391,130.6996589355469C38.544280197753906,130.56065893554688,38.15187019775391,130.4086589355469,37.77212019775391,130.25065893554688C37.6265601977539,130.1876589355469,37.480990197753904,130.12365893554687,37.335420197753905,130.06065893554688L37.240480197753904,130.01665893554687C36.90503019775391,129.87065893554689,36.57592019775391,129.71865893554687,36.24681019775391,129.56065893554688L36.094910197753904,129.48465893554686Q36.03795019775391,129.45365893554685,36.00630019775391,129.44065893554688L31.873390197753906,127.27565893554687L34.86706019775391,130.2696589355469L34.96833019775391,130.2696589355469L90.3733901977539,159.4786589355469C90.5632901977539,159.5796589355469,90.75319019775391,159.6746589355469,90.9493901977539,159.7756589355469C91.0126901977539,159.80765893554687,91.0758901977539,159.83265893554687,91.1391901977539,159.86465893554688L91.2594901977539,159.92165893554687C91.60129019775391,160.0856589355469,91.94299019775391,160.24465893554688,92.29749019775392,160.39665893554687L92.39869019775391,160.44065893554688C92.5505901977539,160.50365893554687,92.69619019775391,160.5736589355469,92.8480901977539,160.63665893554688C93.24679019775391,160.80165893554687,93.6455901977539,160.95365893554688,94.0505901977539,161.10465893554687L94.18349019775391,161.15565893554688C94.25319019775391,161.1806589355469,94.31649019775391,161.20665893554687,94.3733901977539,161.23165893554688L94.45569019775391,161.25665893554688C95.0126901977539,161.45365893554688,95.5948901977539,161.63665893554688,96.1771901977539,161.80165893554687C96.2657901977539,161.82665893554687,96.3543901977539,161.85165893554688,96.4429901977539,161.87065893554689L96.6138901977539,161.91565893554687C97.0569901977539,162.03565893554688,97.51259019775391,162.14965893554688,97.9682901977539,162.25065893554688L98.0758901977539,162.2756589355469C98.13289019775391,162.28865893554686,98.18349019775391,162.30165893554687,98.2404901977539,162.31365893554687C98.3733901977539,162.34565893554688,98.51269019775391,162.37065893554689,98.6518901977539,162.39665893554687L99.18989019775391,162.49765893554687C99.6518901977539,162.5796589355469,100.1138901977539,162.65565893554688,100.5822901977539,162.72565893554687L100.84179019775391,162.75665893554688C101.2341901977539,162.80765893554687,101.63289019775391,162.85165893554688,102.0315901977539,162.88965893554686L102.81009019775391,162.95965893554688C102.93039019775391,162.96565893554688,103.0505901977539,162.9726589355469,103.1771901977539,162.9786589355469L103.48099019775391,162.99165893554687C103.68349019775391,163.00365893554687,103.8796901977539,163.01665893554687,104.0885901977539,163.02265893554687C104.3733901977539,163.03565893554688,104.66459019775391,163.03565893554688,104.9493901977539,163.04165893554688L105.18989019775391,163.04165893554688C105.31009019775391,163.04165893554688,105.42409019775391,163.04165893554688,105.54429019775391,163.04165893554688C105.59489019775391,163.04165893554688,105.6391901977539,163.04165893554688,105.68989019775391,163.04165893554688C105.9999901977539,163.04165893554688,106.31009019775391,163.02965893554688,106.6835901977539,163.01065893554687L106.8860901977539,163.01065893554687C107.0252901977539,162.99765893554687,107.1708901977539,162.99765893554687,107.31649019775391,162.98465893554686C107.68989019775391,162.96565893554688,108.06959019775391,162.93465893554688,108.4493901977539,162.90265893554687L108.6518901977539,162.88365893554686C108.75319019775391,162.87765893554686,108.8543901977539,162.87065893554689,109.01269019775391,162.85165893554688C109.2341901977539,162.82665893554687,109.45569019775391,162.80165893554687,109.6771901977539,162.7756589355469L110.1771901977539,162.71265893554687C110.34179019775391,162.69365893554686,110.50629019775391,162.6746589355469,110.6708901977539,162.64965893554688C110.9366901977539,162.61165893554687,111.19619019775391,162.56665893554688,111.4619901977539,162.52265893554687L111.9683901977539,162.44065893554688C112.1138901977539,162.41565893554687,112.2594901977539,162.39665893554687,112.4050901977539,162.36465893554688C112.7341901977539,162.30165893554687,113.0632901977539,162.23165893554688,113.39239019775391,162.16165893554688L113.7974901977539,162.0796589355469C113.91769019775391,162.05465893554688,114.0379901977539,162.02965893554688,114.15819019775391,162.00365893554687C114.74679019775391,161.87065893554689,115.33549019775391,161.71865893554687,115.93039019775391,161.55465893554688L119.81009019775391,160.49165893554687C120.4493901977539,160.31365893554687,121.1202901977539,160.11765893554687,121.8480901977539,159.87765893554686C121.98739019775391,159.83265893554687,122.1202901977539,159.78865893554686,122.25319019775391,159.73765893554688L122.50629019775391,159.64965893554688C122.9619901977539,159.49165893554687,123.41769019775391,159.33265893554687,123.86709019775391,159.1686589355469C124.0632901977539,159.09865893554687,124.25319019775391,159.01665893554687,124.4429901977539,158.94065893554688L124.62659019775391,158.86465893554688C125.0379901977539,158.69965893554686,125.45569019775391,158.53565893554688,125.8607901977539,158.35865893554688C126.1202901977539,158.24465893554688,126.3797901977539,158.13065893554688,126.6455901977539,158.01665893554687C127.0505901977539,157.83265893554687,127.4493901977539,157.64965893554688,127.8480901977539,157.45965893554688L127.98099019775391,157.39665893554687C128.18989019775393,157.29465893554686,128.39869019775392,157.19365893554686,128.6075901977539,157.09265893554686C129.02529019775392,156.88365893554686,129.4366901977539,156.6686589355469,129.8480901977539,156.44665893554688L130.07599019775392,156.32665893554687C130.2278901977539,156.24465893554688,130.3797901977539,156.1686589355469,130.52529019775392,156.0856589355469C131.02529019775392,155.81365893554687,131.5126901977539,155.52265893554687,132.0063901977539,155.23165893554688L132.1703901977539,155.13665893554688C132.2463901977539,155.09265893554686,132.32239019775392,155.04765893554688,132.4053901977539,155.00365893554687C132.9933901977539,154.64965893554688,133.5763901977539,154.28265893554686,134.1523901977539,153.90265893554687L134.55039019775393,153.63065893554688L146.7463901977539,159.18765893554686C153.8733901977539,162.43465893554688,161.9743901977539,157.22565893554687,161.9743901977539,149.38965893554686L161.9743901977539,104.25065893554688Q161.9743901977539,104.24435893554687,161.9743901977539,104.23795893554687L162.00039019775392,104.26335893554688Z" fill="#2ADB5C" fill-opacity="1"/></g><g><path d="M89.5633,18.74431220703125C89.3734,18.64305220703125,89.1835,18.54811220703125,88.9937,18.45317220703125C88.8924,18.40254220703125,88.7848,18.35824220703125,88.6835,18.307602207031252C88.3418,18.14305220703125,88,17.98482220703125,87.6582,17.83292220703125C87.4747,17.750642207031248,87.2975,17.67469220703125,87.1076,17.592422207031248C86.7152,17.42786220703125,86.3165,17.27596220703125,85.9114,17.13039220703125C85.8038,17.092422207031248,85.6962,17.04178220703125,85.5823,17.00381220703125C85.557,16.99748220703125,85.5317,16.98482220703125,85.5063,16.978492207031252C84.943,16.78229220703125,84.3734,16.59874220703125,83.7975,16.43419220703125C83.6519,16.38988220703125,83.5063,16.35824220703125,83.3608,16.32026220703125C82.9177,16.20001220703125,82.4684,16.08608820703125,82.019,15.99115120703125C81.924,15.97216420703125,81.83539999999999,15.94051820703125,81.74680000000001,15.92153120703125C81.5506,15.87722720703125,81.3544,15.84558220703125,81.1582,15.80760720703125C81.04429999999999,15.78229020703125,80.92410000000001,15.76330320703125,80.8101,15.73798720703125C80.3544,15.65570820703125,79.89240000000001,15.57975920703125,79.424,15.51646820703125C79.33539999999999,15.50380920703125,79.24680000000001,15.49748020703125,79.1582,15.48482220703125C78.7658,15.43418920703125,78.3797,15.38988520703125,77.981,15.35191120703125C77.8418,15.33925220703125,77.7025,15.32659420703125,77.5633,15.31393620703125C77.443,15.30127820703125,77.3228,15.28861960703125,77.2025,15.28229050703125C77.00630000000001,15.26963230703125,76.8101,15.26330320703125,76.6139,15.25064490703125C76.3861,15.23798670703125,76.1582,15.22532850703125,75.93039999999999,15.21899940703125C75.6266,15.20634114703125,75.3164,15.20634114703125,75.00630000000001,15.20001203609225C74.78479999999999,15.20001203609225,74.557,15.19368292703125,74.33539999999999,15.20001203609225C74.0127,15.20001203609225,73.68350000000001,15.21899940703125,73.3544,15.22532850703125C73.1456,15.23165760703125,72.93039999999999,15.23798670703125,72.72149999999999,15.25064490703125C72.3481,15.26963230703125,71.9683,15.30127820703125,71.5949,15.33292320703125C71.424,15.34558120703125,71.25319999999999,15.35824020703125,71.0823,15.37089820703125C71.0633,15.37089820703125,71.04429999999999,15.37089820703125,71.0316,15.37089820703125C70.7278,15.40254320703125,70.4177,15.44684720703125,70.10759999999999,15.48482220703125C69.8608,15.51646820703125,69.6203,15.54178420703125,69.3734,15.573430207031251C69.0253,15.62406220703125,68.6772,15.68735420703125,68.3291,15.74431620703125C68.10130000000001,15.78229020703125,67.8734,15.81393620703125,67.6456,15.85824020703125C67.25319999999999,15.93418920703125,66.8544,16.01646820703125,66.45570000000001,16.10507520703125C66.2658,16.14305020703125,66.0823,16.18102520703125,65.89240000000001,16.22533220703125C65.3038,16.35824220703125,64.71520000000001,16.51014220703125,64.1266,16.67469220703125L60.2468,17.73798220703125C59.5633,17.92786220703125,58.8861,18.13039220703125,58.2089,18.35191220703125C57.9873,18.421532207031248,57.7721,18.50381220703125,57.5506,18.57976220703125C57.0949,18.73798220703125,56.6392,18.89621220703125,56.1899,19.06077220703125C55.9367,19.15571220703125,55.6835,19.25697220703125,55.424,19.35824220703125C55.0126,19.52279220703125,54.6013,19.68735220703125,54.1899,19.86457220703125C53.9304,19.978492207031252,53.6645,20.092422207031248,53.4051,20.20634220703125C53,20.38988220703125,52.6013,20.57343220703125,52.2025,20.763302207031252C51.9494,20.88355220703125,51.6962,21.00381220703125,51.443,21.13039220703125C51.0253,21.33925220703125,50.6139,21.55444220703125,50.2025,21.77596220703125C49.9747,21.89621220703125,49.7468,22.01647220703125,49.5253,22.136722207031248C49.0253,22.40887220703125,48.538,22.70001220703125,48.0443,22.99115220703125C47.9114,23.06710220703125,47.7785,23.14305220703125,47.6456,23.22533220703125C47.0569,23.57976220703125,46.4747,23.95317220703125,45.892399999999995,24.332922207031253C45.8607,24.351912207031248,45.8291,24.37723220703125,45.7975,24.396212207031247C45.6709,24.478492207031252,45.5506,24.567102207031247,45.4304,24.649382207031252C44.962,24.965832207031248,44.5,25.28231220703125,44.0443,25.61141220703125C43.8544,25.75061220703125,43.664500000000004,25.88991220703125,43.4747,26.02281220703125C43.075900000000004,26.32031220703125,42.6772,26.61771220703125,42.284800000000004,26.92151220703125C42.1012,27.060812207031248,41.917699999999996,27.20631220703125,41.7405,27.34561220703125C41.272099999999995,27.71901220703125,40.803799999999995,28.098712207031248,40.3418,28.48481220703125C40.2531,28.560812207031248,40.164500000000004,28.63041220703125,40.075900000000004,28.70001220703125C40.0569,28.712712207031252,40.038,28.731612207031247,40.019,28.74431220703125C39.924,28.82661220703125,39.8354,28.91521220703125,39.7405,28.99751220703125C39.183499999999995,29.47851220703125,38.626599999999996,29.972212207031248,38.0886,30.47851220703125C37.8671,30.68101220703125,37.6582,30.88991220703125,37.4367,31.098712207031248C37.006299999999996,31.51011220703125,36.582300000000004,31.92781220703125,36.1582,32.35191220703125C36.0443,32.46581220703125,35.9304,32.573412207031254,35.8164,32.687312207031255C35.683499999999995,32.82031220703125,35.5633,32.96581220703125,35.4304,33.098712207031255C35.1139,33.43421220703125,34.7975,33.76961220703125,34.487300000000005,34.11141220703125C34.2405,34.383512207031245,33.993700000000004,34.65571220703125,33.7468,34.92781220703125C33.4367,35.275912207031254,33.1392,35.63041220703125,32.8354,35.97851220703125C32.6835,36.15571220703125,32.5316,36.326612207031246,32.3861,36.503812207031245C32.2975,36.61141220703125,32.2088,36.72531220703125,32.1202,36.83291220703125C31.8607,37.14941220703125,31.607599999999998,37.46581220703125,31.3607,37.78861220703125C31.1202,38.098712207031255,30.8734,38.40891220703125,30.6329,38.71901220703125C30.3861,39.04181220703125,30.1456,39.37091220703125,29.905,39.70001220703125C29.7531,39.90891220703125,29.594900000000003,40.11141220703125,29.442999999999998,40.326612207031246C29.3607,40.44051220703125,29.2911,40.55441220703125,29.2088,40.66841220703125C28.987299999999998,40.984812207031254,28.772100000000002,41.307612207031255,28.5506,41.624112207031246C28.3228,41.95951220703125,28.094900000000003,42.294912207031246,27.8734,42.63671220703125C27.664540000000002,42.95951220703125,27.45568,43.28861220703125,27.253149999999998,43.617712207031246C27.11391,43.83291220703125,26.97467,44.04811220703125,26.84176,44.26961220703125C26.765810000000002,44.396212207031255,26.69619,44.52911220703125,26.61391,44.65571220703125C26.41138,44.99111220703125,26.21517,45.326612207031246,26.0253,45.66841220703125C25.82277,46.016512207031255,25.62657,46.36461220703125,25.43036,46.71901220703125C25.24049,47.06081220703125,25.05695,47.40891220703125,24.8734,47.75061220703125C24.75948,47.96581220703125,24.63289,48.18101220703125,24.5253,48.40251220703125C24.45568,48.53541220703125,24.39872,48.66841220703125,24.3291,48.80131220703125C24.13289,49.18731220703125,23.94935,49.57341220703125,23.75948,49.95951220703125C23.594920000000002,50.30131220703125,23.43036,50.64301220703125,23.27214,50.99111220703125C23.094920000000002,51.38351220703125,22.924030000000002,51.77601220703125,22.753149999999998,52.16841220703125C22.65188,52.40251220703125,22.537959999999998,52.63671220703125,22.44302,52.87721220703125C22.39872,52.97851220703125,22.36074,53.08611220703125,22.31644,53.19371220703125C22.10125,53.70631220703125,21.90505,54.22531220703125,21.70251,54.75061220703125C21.594920000000002,55.02911220703125,21.48732,55.30131220703125,21.38606,55.57971220703125C21.13922,56.25061220703125,20.91138,56.92791220703125,20.68986,57.61141220703125C20.65188,57.72531220703125,20.60758,57.83921220703125,20.5696,57.95951220703125C20.5696,57.97221220703125,20.56327,57.99111220703125,20.55695,58.00381220703125C20.537959999999998,58.05441220703125,20.5253,58.11141220703125,20.50631,58.16201220703125C20.31011,58.78231220703125,20.13289,59.40251220703125,19.95568,60.02281220703125C19.90505,60.20631220703125,19.85441,60.38361220703125,19.81011,60.56711220703125C19.64555,61.18101220703125,19.48732,61.80131220703125,19.34808,62.42151220703125C19.33543,62.48481220703125,19.31644,62.54811220703125,19.30378,62.61141220703125C19.1772,63.15571220703125,19.06327,63.70001220703125,18.955679,64.25061220703125C18.936692,64.35191220703125,18.924034,64.44681220703126,18.905046,64.54811220703125C18.816439,65.00381220703125,18.746818,65.45951220703125,18.670869,65.92151220703124C18.613907,66.25701220703125,18.556945,66.59871220703124,18.506312,66.93421220703125C18.436692,67.41521220703126,18.386059,67.89621220703125,18.329097,68.37721220703125C18.291122,68.69371220703124,18.246818,69.01011220703126,18.221502,69.32661220703125C18.170869,69.85821220703124,18.132894,70.39621220703125,18.101249,70.93421220703125C18.0822614,71.20001220703125,18.056945,71.45951220703125,18.0442867,71.72531220703125C18.0189873,72.50381220703125,18,73.30761220703124,18,74.10511220703125L18,99.09241220703124C18,108.20001220703125,20.58228,115.97801220703126,25.01266,121.83901220703125C25.4557,122.42801220703124,25.91772,122.99101220703125,26.392409999999998,123.54201220703125C27.11392,124.36501220703126,27.867089999999997,125.14301220703125,28.6646,125.87101220703126C30.519,127.57301220703125,32.582300000000004,129.02901220703126,34.816500000000005,130.20601220703125L90.3544,159.48501220703125C80.1519,154.10501220703125,73.54429999999999,142.94701220703126,73.538,128.37101220703124L73.538,103.38351220703125C73.538,102.58611220703125,73.557,101.78231220703125,73.5949,100.98481220703125C73.60759999999999,100.71901220703126,73.6329,100.45951220703125,73.6519,100.19371220703125C73.6899,99.65571220703124,73.72149999999999,99.12411220703125,73.7722,98.58611220703125C73.8038,98.26961220703124,73.8481,97.95321220703126,73.8797,97.63671220703125C73.9367,97.15571220703124,73.9873,96.67471220703125,74.057,96.19371220703125C74.10759999999999,95.85831220703125,74.16460000000001,95.51651220703125,74.22149999999999,95.18101220703124C74.2975,94.72531220703125,74.3734,94.26331220703125,74.45570000000001,93.80761220703126C74.576,93.16201220703125,74.7089,92.51651220703125,74.8544,91.87721220703125C74.8671,91.81391220703125,74.8861,91.75071220703126,74.89869999999999,91.68741220703124C75.04429999999999,91.06711220703124,75.1962,90.44681220703124,75.3608,89.83291220703126C75.4114,89.65571220703124,75.45570000000001,89.47221220703125,75.50630000000001,89.29491220703125C75.6772,88.67471220703125,75.8608,88.04811220703125,76.057,87.43421220703125C76.076,87.38361220703125,76.0886,87.32661220703125,76.10759999999999,87.27601220703124C76.1456,87.14941220703125,76.1962,87.01651220703125,76.2405,86.88991220703124C76.462,86.21271220703125,76.6899,85.52911220703125,76.9367,84.85821220703124C77.038,84.57981220703125,77.1456,84.30761220703126,77.25319999999999,84.02911220703125C77.4494,83.51011220703126,77.6519,82.99121220703125,77.8671,82.47221220703125C78.00630000000001,82.13041220703126,78.1582,81.78861220703125,78.3038,81.45321220703126C78.4747,81.06081220703125,78.6456,80.66841220703125,78.8228,80.27601220703124C78.981,79.92791220703126,79.1456,79.58611220703125,79.3101,79.24431220703126C79.49369999999999,78.85821220703124,79.6836,78.47221220703125,79.8798,78.08611220703125C80.057,77.73171220703125,80.2405,77.38361220703125,80.42410000000001,77.02911220703125C80.60759999999999,76.68101220703124,80.7911,76.33931220703124,80.981,75.99751220703125C81.1772,75.64311220703125,81.3734,75.29501220703125,81.576,74.94681220703126C81.7722,74.61141220703125,81.9684,74.26961220703126,82.1646,73.93421220703125C82.3734,73.58611220703125,82.5886,73.24431220703124,82.8038,72.90261220703124C83.0063,72.57341220703125,83.2152,72.25071220703126,83.4241,71.92151220703124C83.6456,71.57981220703125,83.8734,71.24431220703124,84.1013,70.90891220703125C84.3165,70.58611220703125,84.5317,70.26961220703126,84.7595,69.95321220703124C84.9874,69.63041220703124,85.2215,69.30761220703124,85.4557,68.99121220703125C85.6962,68.66201220703125,85.9367,68.33291220703126,86.1836,68.01011220703126C86.4241,67.69371220703124,86.6646,67.38991220703124,86.9114,67.07981220703125C87.1646,66.76331220703125,87.4177,66.44051220703125,87.6709,66.12411220703126C87.9051,65.83931220703124,88.1456,65.55441220703125,88.3861,65.26961220703126C88.6899,64.91521220703126,88.9874,64.56081220703125,89.2975,64.21271220703125C89.538,63.94051220703125,89.7848,63.66841220703125,90.0317,63.39621220703125C90.3418,63.05441220703125,90.6582,62.71901220703125,90.9747,62.38361220703125C91.2152,62.13041220703125,91.4557,61.88361220703125,91.7026,61.63671220703125C92.1203,61.21271220703125,92.5506,60.79491220703125,92.981,60.38361220703125C93.1962,60.17471220703125,93.4114,59.96581220703125,93.6329,59.76331220703125C94.1772,59.25701220703125,94.7279,58.76331220703125,95.2848,58.28231220703125C95.3988,58.18741220703125,95.5063,58.07981220703125,95.6203,57.98481220703125C95.7089,57.90891220703125,95.7975,57.83931220703125,95.8861,57.76961220703125C96.3481,57.38361220703125,96.8101,57.00381220703125,97.2848,56.63041220703125C97.4684,56.48481220703125,97.6519,56.34561220703125,97.8355,56.20631220703125C98.2279,55.90251220703125,98.6266,55.59871220703125,99.0253,55.30761220703125C99.2152,55.16841220703125,99.4051,55.02911220703125,99.5949,54.88991220703125C100.0507,54.56081220703125,100.519,54.23801220703125,100.981,53.92791220703125C101.1013,53.84561220703125,101.2215,53.75701220703125,101.3481,53.68101220703125C101.9557,53.27601220703125,102.5696,52.88991220703125,103.1899,52.51011220703125C103.3228,52.43421220703125,103.4557,52.35821220703125,103.5823,52.28231220703125C104.076,51.99121220703125,104.5696,51.70001220703125,105.0696,51.42791220703125C105.2912,51.30131220703125,105.519,51.18741220703125,105.7469,51.06711220703125C106.1582,50.84561220703125,106.576,50.63041220703125,106.9937,50.42151220703125C107.2468,50.29501220703125,107.4937,50.17471220703125,107.7469,50.05441220703125C108.1456,49.86461220703125,108.5507,49.67471220703125,108.9557,49.49121220703125C109.2152,49.37721220703125,109.4747,49.26331220703125,109.7342,49.14941220703125C110.1456,48.97221220703125,110.557,48.80761220703125,110.9747,48.64311220703125C111.2279,48.54181220703125,111.481,48.44051220703125,111.7342,48.34561220703125C112.1836,48.17471220703125,112.6393,48.01651220703125,113.095,47.86461220703125C113.3165,47.78861220703125,113.5317,47.71271220703125,113.7532,47.63671220703125C114.4304,47.41521220703125,115.1076,47.21271220703125,115.7911,47.02281220703125L119.671,45.95951220703125C120.266,45.79501220703125,120.854,45.64941220703125,121.437,45.516512207031255C121.639,45.47221220703125,121.835,45.43421220703125,122.032,45.38991220703125C122.418,45.307612207031255,122.804,45.21901220703125,123.184,45.14941220703125C123.418,45.105112207031254,123.652,45.073412207031254,123.886,45.035512207031246C124.228,44.97851220703125,124.57,44.915212207031246,124.911,44.86461220703125C125.158,44.826612207031246,125.405,44.807612207031255,125.652,44.77601220703125C125.975,44.73801220703125,126.297,44.693712207031254,126.62,44.66201220703125C126.791,44.64311220703125,126.956,44.63671220703125,127.127,44.624112207031246C127.506,44.592412207031245,127.886,44.56081220703125,128.25900000000001,44.54181220703125C128.46800000000002,44.52911220703125,128.67700000000002,44.52911220703125,128.886,44.516512207031255C129.215,44.503812207031245,129.54399999999998,44.49111220703125,129.873,44.484812207031254C130.101,44.484812207031254,130.32299999999998,44.484812207031254,130.54399999999998,44.484812207031254C130.85399999999998,44.484812207031254,131.16500000000002,44.484812207031254,131.46800000000002,44.503812207031245C131.696,44.51011220703125,131.924,44.52281220703125,132.152,44.535512207031246C132.46800000000002,44.55441220703125,132.785,44.573412207031254,133.095,44.598712207031255C133.23399999999998,44.61141220703125,133.373,44.624112207031246,133.513,44.63671220703125C133.905,44.67471220703125,134.298,44.71901220703125,134.69,44.76961220703125C134.779,44.782312207031254,134.86700000000002,44.78861220703125,134.95600000000002,44.801312207031245C135.424,44.86461220703125,135.886,44.94051220703125,136.34199999999998,45.02281220703125C136.45600000000002,45.04181220703125,136.576,45.06711220703125,136.69,45.092412207031245C136.981,45.14941220703125,137.26600000000002,45.212712207031245,137.55700000000002,45.27601220703125C138.006,45.37721220703125,138.45600000000002,45.49111220703125,138.899,45.605112207031254C139.04399999999998,45.64301220703125,139.19,45.68101220703125,139.33499999999998,45.71901220703125C139.911,45.883512207031245,140.481,46.06081220703125,141.04399999999998,46.25701220703125C141.184,46.307612207031255,141.316,46.35821220703125,141.45600000000002,46.40891220703125C141.85399999999998,46.55441220703125,142.253,46.706312207031246,142.64600000000002,46.87091220703125C142.829,46.94681220703125,143.013,47.02911220703125,143.196,47.11141220703125C143.54399999999998,47.26331220703125,143.886,47.42151220703125,144.22199999999998,47.58611220703125C144.519,47.73171220703125,144.81,47.87091220703125,145.101,48.02281220703125L89.5633,18.74431220703125Z" fill="#2ADB5C" fill-opacity="1"/></g></g><g clip-path="url(#master_svg2_618_04811/167_025499)"><g><path d="M276.62,136.66Q267.24,136.66,258.77,133.01999999999998Q250.3,129.38,243.72,122.94Q237.14,116.5,233.57,108.03Q230,99.56,230,90.03999999999999Q230,80.52000000000001,233.64,71.77Q237.28,63.019999999999996,243.72,56.72Q250.16,50.28,258.63,46.64Q267.1,43,276.62,43Q286.14,43,294.68,46.64Q303.22,50.28,309.65999999999997,56.72Q316.1,63.16,319.74,71.84Q323.38,80.52000000000001,323.38,90.03999999999999Q323.38,99.97999999999999,319.46,108.8Q315.54,117.62,308.54,124.06L323.38,124.06L323.38,136.66L276.62,136.66ZM276.62,55.74Q269.76,55.74,263.53,58.33Q257.3,60.92,252.54,65.68Q247.92000000000002,70.3,245.26,76.67Q242.6,83.03999999999999,242.6,90.03999999999999Q242.6,96.9,245.19,103.13Q247.78,109.36,252.54,114.12Q257.3,118.88,263.53,121.47Q269.76,124.06,276.62,124.06Q283.48,124.06,289.71,121.47Q295.94,118.88,300.7,114.12Q305.46,109.36,308.05,103.13Q310.64,96.9,310.64,90.03999999999999Q310.64,83.03999999999999,307.98,76.67Q305.32,70.3,300.7,65.68Q295.94,60.92,289.71,58.33Q283.48,55.74,276.62,55.74ZM370,137.07999999999998Q362.86,137.07999999999998,356.42,134.28Q349.98,131.48000000000002,345.08,126.58Q340.18,121.68,337.38,115.24Q334.58,108.8,334.58,101.66Q334.58,94.38,337.38,87.8Q340.18,81.22,345.08,76.32Q349.98,71.42,356.42,68.69Q362.86,65.96000000000001,370,65.96000000000001Q377.28,65.96000000000001,383.86,68.69Q390.44,71.42,395.34000000000003,76.32Q400.24,81.22,402.97,87.8Q405.7,94.38,405.7,101.66Q405.7,108.8,402.97,115.24Q400.24,121.68,395.34000000000003,126.58Q390.44,131.48000000000002,383.86,134.28Q377.28,137.07999999999998,370,137.07999999999998ZM370,78.42Q360.62,78.42,353.9,85.14Q350.68,88.36,348.86,92.7Q347.04,97.03999999999999,347.04,101.66Q347.04,106.28,348.86,110.48Q350.68,114.68,353.9,117.9Q357.12,121.12,361.25,122.94Q365.38,124.76,370,124.76Q374.62,124.76,378.96000000000004,122.94Q383.3,121.12,386.38,117.9Q389.46000000000004,114.68,391.28,110.48Q393.1,106.28,393.1,101.66Q393.1,97.03999999999999,391.28,92.7Q389.46000000000004,88.36,386.38,85.14Q383.3,81.92,379.03,80.17Q374.76,78.42,370,78.42ZM472.76,136.38L472.76,125.6Q468.28,130.92000000000002,462.19,134Q456.1,137.07999999999998,449.52,137.07999999999998Q442.1,137.07999999999998,435.65999999999997,134.35Q429.22,131.62,424.46000000000004,126.58Q419.56,121.54,416.83000000000004,115.03Q414.1,108.52,414.1,101.24000000000001Q414.1,93.96000000000001,416.83000000000004,87.45Q419.56,80.94,424.46000000000004,75.9Q429.22,70.86,435.65999999999997,68.13Q442.1,65.4,449.52,65.4Q456.8,65.4,462.75,68.34Q468.7,71.28,472.76,76.46000000000001L472.76,43.419998L485.08000000000004,43.419998L485.08000000000004,136.38L472.76,136.38ZM449.52,78.14Q444.9,78.14,440.7,79.89Q436.5,81.64,433.41999999999996,84.86Q430.34000000000003,88.08,428.52,92.35Q426.7,96.62,426.7,101.24000000000001Q426.7,110.62,433.41999999999996,117.62Q436.5,120.84,440.7,122.66Q444.9,124.48,449.52,124.48Q454.14,124.48,458.40999999999997,122.66Q462.68,120.84,465.76,117.62Q472.48,110.62,472.48,101.24000000000001Q472.48,96.62,470.65999999999997,92.35Q468.84000000000003,88.08,465.76,84.86Q462.68,81.64,458.40999999999997,79.89Q454.14,78.14,449.52,78.14ZM511.12,106.7Q511.12,110.06,513.5699999999999,113.7Q516.02,117.34,519.24,119.86Q525.12,124.48,532.96,124.48Q545.4200000000001,124.48,553.26,112.44L563.9,118.74Q558.44,127.56,550.46,132.32Q542.48,137.07999999999998,532.96,137.07999999999998Q525.8199999999999,137.07999999999998,519.38,134.35Q512.94,131.62,508.04,126.72Q503.14,121.82,500.41,115.38Q497.68,108.94,497.68,101.8Q497.68,94.66,500.41,88.15Q503.14,81.64,508.04,76.74000000000001Q512.8,71.84,519.31,69.18Q525.8199999999999,66.52,532.96,66.52Q540.1,66.52,546.61,69.18Q553.12,71.84,557.88,76.74000000000001Q568.24,87.38,568.24,101.38Q568.24,103.9,567.8199999999999,106.7L511.12,106.7ZM532.96,78Q527.22,78,522.1800000000001,80.52000000000001Q517.14,83.03999999999999,514.13,87.17Q511.12,91.3,511.12,95.92L554.8,95.92Q554.8,91.3,551.79,87.17Q548.78,83.03999999999999,543.74,80.52000000000001Q538.7,78,532.96,78ZM612.06,79.82Q608.7,78.28,606.04,78.28Q600.44,78.28,596.8,82.2Q592.88,86.4,592.88,91.86L592.88,136.38L580.8399999999999,136.38L580.8399999999999,91.86Q580.8399999999999,84.3,584.69,78Q588.54,71.7,595.26,68.2Q600.3,65.82,606.04,65.82Q610.6600000000001,65.82,614.86,67.5Q619.06,69.18,623.6800000000001,72.96000000000001L612.06,79.82Z" fill="#2B3547" fill-opacity="1"/></g></g></g></svg>
@@ -1,18 +1,19 @@
1
1
  [project]
2
2
  name = "alibaba-cloud-ops-mcp-server"
3
- version = "0.9.10"
3
+ version = "0.9.13"
4
4
  description = "A MCP server for Alibaba Cloud"
5
5
  readme = "README.md"
6
6
  authors = [
7
- { name = "Zheng Dayu", email = "dayu.zdy@alibaba-inc.com" }
7
+ { name = "Zheng Dayu", email = "dayu.zdy@alibaba-inc.com" },
8
+ { name = "Zhao Shuaibo", email = "zhaoshuaibo.zsb@alibaba-inc.com" },
8
9
  ]
9
10
  requires-python = ">=3.10"
10
11
  dependencies = [
11
12
  "alibabacloud-cms20190101>=3.1.4",
12
13
  "alibabacloud-ecs20140526>=6.1.0",
13
- "alibabacloud-oos20190601>=3.4.1",
14
+ "alibabacloud-oos20190601>=3.5.0",
14
15
  "alibabacloud_oss_v2>=1.1.0",
15
- "alibabacloud-credentials>=1.0.0",
16
+ "alibabacloud-credentials>=1.0.3",
16
17
  "click>=8.1.8",
17
18
  "fastmcp==2.8.0",
18
19
  "pydantic==2.11.3"
@@ -0,0 +1,234 @@
1
+ import logging
2
+ import logging
3
+ import json
4
+ import uuid
5
+ from pathlib import Path
6
+ from typing import Dict, Any, Optional
7
+
8
+ from alibabacloud_oos20190601.client import Client as oos20190601Client
9
+ from alibabacloud_ecs20140526.client import Client as ecs20140526Client
10
+ from alibaba_cloud_ops_mcp_server.tools.oss_tools import create_client as create_oss_client
11
+ import alibabacloud_oss_v2 as oss
12
+
13
+ logger = logging.getLogger(__name__)
14
+
15
+ # Global variable to store the project path
16
+ _project_path: Optional[Path] = None
17
+ from alibabacloud_credentials.client import Client as CredClient
18
+ from alibabacloud_tea_openapi.models import Config
19
+ from fastmcp.server.dependencies import get_http_request
20
+ from alibaba_cloud_ops_mcp_server.settings import settings
21
+
22
+ logger = logging.getLogger(__name__)
23
+
24
+
25
+ def get_credentials_from_header():
26
+ credentials = None
27
+ try:
28
+ request = get_http_request()
29
+ headers = request.headers
30
+ access_key_id = headers.get('x-acs-accesskey-id', None)
31
+ access_key_secret = headers.get('x-acs-accesskey-secret', None)
32
+ token = headers.get('x-acs-security-token', None)
33
+
34
+ if access_key_id:
35
+ credentials = {
36
+ 'AccessKeyId': access_key_id,
37
+ 'AccessKeySecret': access_key_secret,
38
+ 'SecurityToken': token
39
+ }
40
+
41
+ except Exception as e:
42
+ logger.info(f'get_credentials_from_header error: {e}')
43
+ return credentials
44
+
45
+
46
+ def create_config():
47
+ credentials = get_credentials_from_header()
48
+
49
+ if credentials:
50
+ access_key_id = credentials.get('AccessKeyId')
51
+ access_key_secret = credentials.get('AccessKeySecret')
52
+ token = credentials.get('SecurityToken')
53
+ config = Config(
54
+ access_key_id=access_key_id,
55
+ access_key_secret=access_key_secret,
56
+ security_token=token
57
+ )
58
+ elif settings.headers_credential_only:
59
+ config = Config()
60
+ else:
61
+ credentials_client = CredClient()
62
+ config = Config(credential=credentials_client)
63
+
64
+ config.user_agent = 'alibaba-cloud-ops-mcp-server'
65
+ return config
66
+
67
+
68
+ def set_project_path(project_path: Optional[str] = None):
69
+ """
70
+ Set the project root path for code deployment.
71
+ This determines where the .code_deploy directory will be created.
72
+
73
+ Args:
74
+ project_path: The root path of the project. If None, will use current working directory.
75
+ """
76
+ global _project_path
77
+ if project_path:
78
+ _project_path = Path(project_path).resolve()
79
+ logger.info(f"[set_project_path] Project path set to: {_project_path}")
80
+ else:
81
+ _project_path = None
82
+ logger.info(f"[set_project_path] Project path reset to None, will use current working directory")
83
+
84
+
85
+ def _get_code_deploy_base_dir() -> Path:
86
+ """
87
+ Get the .code_deploy base directory in the project root directory.
88
+ This ensures each project has its own isolated deployment configuration.
89
+
90
+ If project_path is set, use it. Otherwise, use current working directory.
91
+ """
92
+ if _project_path is not None:
93
+ return _project_path / '.code_deploy'
94
+ return Path.cwd() / '.code_deploy'
95
+
96
+
97
+ CODE_DEPLOY_BASE_DIR = _get_code_deploy_base_dir()
98
+ CODE_DEPLOY_DIR = CODE_DEPLOY_BASE_DIR
99
+ RELEASE_DIR = CODE_DEPLOY_DIR / 'release'
100
+ APPLICATION_JSON_FILE = CODE_DEPLOY_DIR / 'application.json'
101
+
102
+
103
+ def ensure_code_deploy_dirs():
104
+ """
105
+ Ensure that the .code_deploy and release directories exist (in the project root directory)
106
+ """
107
+ # Recalculate paths to ensure we use the current working directory
108
+ code_deploy_dir = _get_code_deploy_base_dir()
109
+ release_dir = code_deploy_dir / 'release'
110
+
111
+ code_deploy_dir.mkdir(parents=True, exist_ok=True)
112
+ release_dir.mkdir(parents=True, exist_ok=True)
113
+
114
+ return code_deploy_dir, code_deploy_dir, release_dir
115
+
116
+
117
+ def load_application_info() -> Dict[str, Any]:
118
+ """
119
+ Load deployment information from the .application.json file
120
+ (from the .code_deploy directory under the project root directory)
121
+ """
122
+ json_file = _get_code_deploy_base_dir() / 'application.json'
123
+
124
+ if json_file.exists():
125
+ try:
126
+ with open(json_file, 'r', encoding='utf-8') as f:
127
+ return json.load(f)
128
+ except Exception as e:
129
+ logger.warning(f"[_load_application_info] Failed to load application info: {e}")
130
+ return {}
131
+ return {}
132
+
133
+
134
+ def save_application_info(info: Dict[str, Any]):
135
+ """
136
+ Save deployment information to the .application.json file
137
+ (save it to the .code_deploy directory under the project root directory)
138
+ """
139
+ json_file = _get_code_deploy_base_dir() / 'application.json'
140
+
141
+ try:
142
+ json_file.parent.mkdir(parents=True, exist_ok=True)
143
+
144
+ existing_info = load_application_info()
145
+ existing_info.update(info)
146
+
147
+ with open(json_file, 'w', encoding='utf-8') as f:
148
+ json.dump(existing_info, f, ensure_ascii=False, indent=2)
149
+ logger.info(f"[_save_application_info] Saved application info to {json_file}")
150
+ except Exception as e:
151
+ logger.error(f"[_save_application_info] Failed to save application info: {e}")
152
+
153
+
154
+ def get_release_path(filename: str) -> Path:
155
+ """
156
+ Get the file path in the release directory
157
+ (the .code_deploy/release directory under the project root directory)
158
+ """
159
+ release_dir = _get_code_deploy_base_dir() / 'release'
160
+ release_dir.mkdir(parents=True, exist_ok=True)
161
+ return release_dir / filename
162
+
163
+
164
+ def create_client(region_id: str) -> oos20190601Client:
165
+ config = create_config()
166
+ config.endpoint = f'oos.{region_id}.aliyuncs.com'
167
+ return oos20190601Client(config)
168
+
169
+
170
+ def create_ecs_client(region_id: str) -> ecs20140526Client:
171
+ config = create_config()
172
+ config.endpoint = f'ecs.{region_id}.aliyuncs.com'
173
+ return ecs20140526Client(config)
174
+
175
+
176
+ def put_bucket_tagging(client: oss.Client, bucket_name: str, tags: dict):
177
+ tag_list = [oss.Tag(key=k, value=v) for k, v in tags.items()]
178
+ tag_set = oss.TagSet(tags=tag_list)
179
+ client.put_bucket_tags(oss.PutBucketTagsRequest(
180
+ bucket=bucket_name,
181
+ tagging=oss.Tagging(tag_set=tag_set)
182
+ ))
183
+
184
+
185
+ def find_bucket_by_tag(client: oss.Client, tag_key: str, tag_value: str) -> Optional[str]:
186
+ paginator = client.list_buckets_paginator(tag_key=tag_key, tag_value=tag_value)
187
+ buckets = []
188
+ for page in paginator.iter_page(oss.ListBucketsRequest(tag_key=tag_key, tag_value=tag_value)):
189
+ for bucket in page.buckets:
190
+ buckets.append(bucket.name)
191
+ logger.info(f'[code_deploy] Trying to find bucket with tag {tag_key}:{tag_value}, buckets: {buckets}')
192
+ return buckets[0] if buckets else None
193
+
194
+
195
+ def get_or_create_bucket_for_code_deploy(application_name: str, region_id: str) -> str:
196
+ """
197
+ Obtain or create an OSS bucket for code deployment
198
+
199
+ 1. If a bucket_name is provided, check if it exists. If not, create it and tag it.
200
+
201
+ 2. If not provided, search for an existing bucket using the tag (key: app_management, value: code_deploy).
202
+
203
+ 3. If found, use it. If not found, create a new bucket and tag it.
204
+
205
+ 4. New bucket naming convention: app-{application_name}-code-deploy-{uuid}
206
+ """
207
+ tag_key = 'app_management'
208
+ tag_value = 'code_deploy'
209
+ client = create_oss_client(region_id=region_id)
210
+
211
+ found_bucket = find_bucket_by_tag(client, tag_key, tag_value)
212
+ if found_bucket:
213
+ logger.info(f"[code_deploy] Found existing bucket by tag: {found_bucket}")
214
+ return found_bucket
215
+
216
+ safe_app_name = application_name.lower().replace('_', '-').replace(' ', '-')
217
+
218
+ safe_app_name = ''.join(c if c.isalnum() or c == '-' else '' for c in safe_app_name)
219
+ bucket_name = f'app-{safe_app_name}-code-deploy-{str(uuid.uuid4())[:8]}'
220
+
221
+ try:
222
+ client.put_bucket(oss.PutBucketRequest(
223
+ bucket=bucket_name,
224
+ create_bucket_configuration=oss.CreateBucketConfiguration(
225
+ storage_class='Standard',
226
+ data_redundancy_type='LRS'
227
+ )
228
+ ))
229
+ put_bucket_tagging(client, bucket_name, {tag_key: tag_value})
230
+ logger.info(f"[code_deploy] Created new bucket: {bucket_name}")
231
+ return bucket_name
232
+ except Exception as e:
233
+ logger.info(f"[code_deploy] Failed to create bucket: {e}")
234
+ raise e