alibaba-cloud-ops-mcp-server 0.9.25__tar.gz → 0.9.27__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 (51) hide show
  1. {alibaba_cloud_ops_mcp_server-0.9.25 → alibaba_cloud_ops_mcp_server-0.9.27}/PKG-INFO +15 -12
  2. alibaba_cloud_ops_mcp_server-0.9.27/README_mcp_args.md +78 -0
  3. alibaba_cloud_ops_mcp_server-0.9.27/README_mcp_args_zh.md +78 -0
  4. {alibaba_cloud_ops_mcp_server-0.9.25 → alibaba_cloud_ops_mcp_server-0.9.27}/README_zh.md +12 -12
  5. {alibaba_cloud_ops_mcp_server-0.9.25 → alibaba_cloud_ops_mcp_server-0.9.27}/pyproject.toml +4 -1
  6. {alibaba_cloud_ops_mcp_server-0.9.25 → alibaba_cloud_ops_mcp_server-0.9.27}/src/alibaba_cloud_ops_mcp_server/server.py +151 -3
  7. {alibaba_cloud_ops_mcp_server-0.9.25 → alibaba_cloud_ops_mcp_server-0.9.27}/src/alibaba_cloud_ops_mcp_server/tools/application_management_tools.py +572 -41
  8. alibaba_cloud_ops_mcp_server-0.9.27/tests/alibabacloud/test_utils.py +293 -0
  9. alibaba_cloud_ops_mcp_server-0.9.27/tests/test_server.py +535 -0
  10. alibaba_cloud_ops_mcp_server-0.9.27/tests/tools/test_application_management_tools.py +357 -0
  11. alibaba_cloud_ops_mcp_server-0.9.27/tests/tools/test_local_tools.py +304 -0
  12. alibaba_cloud_ops_mcp_server-0.9.27/tests/tools/test_oss_tools.py +262 -0
  13. alibaba_cloud_ops_mcp_server-0.9.25/README_mcp_args.md +0 -22
  14. alibaba_cloud_ops_mcp_server-0.9.25/tests/alibabacloud/test_utils.py +0 -75
  15. alibaba_cloud_ops_mcp_server-0.9.25/tests/test_server.py +0 -106
  16. alibaba_cloud_ops_mcp_server-0.9.25/tests/tools/test_oss_tools.py +0 -98
  17. alibaba_cloud_ops_mcp_server-0.9.25/uv.lock +0 -1567
  18. {alibaba_cloud_ops_mcp_server-0.9.25 → alibaba_cloud_ops_mcp_server-0.9.27}/.github/workflows/python-ci.yml +0 -0
  19. {alibaba_cloud_ops_mcp_server-0.9.25 → alibaba_cloud_ops_mcp_server-0.9.27}/.gitignore +0 -0
  20. {alibaba_cloud_ops_mcp_server-0.9.25 → alibaba_cloud_ops_mcp_server-0.9.27}/Dockerfile +0 -0
  21. {alibaba_cloud_ops_mcp_server-0.9.25 → alibaba_cloud_ops_mcp_server-0.9.27}/LICENSE +0 -0
  22. {alibaba_cloud_ops_mcp_server-0.9.25 → alibaba_cloud_ops_mcp_server-0.9.27}/README.md +11 -11
  23. {alibaba_cloud_ops_mcp_server-0.9.25 → alibaba_cloud_ops_mcp_server-0.9.27}/examples/openapi_mcp_quickstart/server.py +0 -0
  24. {alibaba_cloud_ops_mcp_server-0.9.25 → alibaba_cloud_ops_mcp_server-0.9.27}/image/Alibaba-Cloud-Ops-MCP-User-Group-en.png +0 -0
  25. {alibaba_cloud_ops_mcp_server-0.9.25 → alibaba_cloud_ops_mcp_server-0.9.27}/image/Alibaba-Cloud-Ops-MCP-User-Group-zh.png +0 -0
  26. {alibaba_cloud_ops_mcp_server-0.9.25 → alibaba_cloud_ops_mcp_server-0.9.27}/image/alibaba-cloud.png +0 -0
  27. {alibaba_cloud_ops_mcp_server-0.9.25 → alibaba_cloud_ops_mcp_server-0.9.27}/image/qoder.svg +0 -0
  28. {alibaba_cloud_ops_mcp_server-0.9.25 → alibaba_cloud_ops_mcp_server-0.9.27}/src/__init__.py +0 -0
  29. {alibaba_cloud_ops_mcp_server-0.9.25 → alibaba_cloud_ops_mcp_server-0.9.27}/src/alibaba_cloud_ops_mcp_server/__init__.py +0 -0
  30. {alibaba_cloud_ops_mcp_server-0.9.25 → alibaba_cloud_ops_mcp_server-0.9.27}/src/alibaba_cloud_ops_mcp_server/__main__.py +0 -0
  31. {alibaba_cloud_ops_mcp_server-0.9.25 → alibaba_cloud_ops_mcp_server-0.9.27}/src/alibaba_cloud_ops_mcp_server/alibabacloud/__init__.py +0 -0
  32. {alibaba_cloud_ops_mcp_server-0.9.25 → alibaba_cloud_ops_mcp_server-0.9.27}/src/alibaba_cloud_ops_mcp_server/alibabacloud/api_meta_client.py +0 -0
  33. {alibaba_cloud_ops_mcp_server-0.9.25 → alibaba_cloud_ops_mcp_server-0.9.27}/src/alibaba_cloud_ops_mcp_server/alibabacloud/exception.py +0 -0
  34. {alibaba_cloud_ops_mcp_server-0.9.25 → alibaba_cloud_ops_mcp_server-0.9.27}/src/alibaba_cloud_ops_mcp_server/alibabacloud/static/PROMPT_UNDERSTANDING.md +0 -0
  35. {alibaba_cloud_ops_mcp_server-0.9.25 → alibaba_cloud_ops_mcp_server-0.9.27}/src/alibaba_cloud_ops_mcp_server/alibabacloud/static/__init__.py +0 -0
  36. {alibaba_cloud_ops_mcp_server-0.9.25 → alibaba_cloud_ops_mcp_server-0.9.27}/src/alibaba_cloud_ops_mcp_server/alibabacloud/utils.py +0 -0
  37. {alibaba_cloud_ops_mcp_server-0.9.25 → alibaba_cloud_ops_mcp_server-0.9.27}/src/alibaba_cloud_ops_mcp_server/config.py +0 -0
  38. {alibaba_cloud_ops_mcp_server-0.9.25 → alibaba_cloud_ops_mcp_server-0.9.27}/src/alibaba_cloud_ops_mcp_server/settings.py +0 -0
  39. {alibaba_cloud_ops_mcp_server-0.9.25 → alibaba_cloud_ops_mcp_server-0.9.27}/src/alibaba_cloud_ops_mcp_server/tools/__init__.py +0 -0
  40. {alibaba_cloud_ops_mcp_server-0.9.25 → alibaba_cloud_ops_mcp_server-0.9.27}/src/alibaba_cloud_ops_mcp_server/tools/api_tools.py +0 -0
  41. {alibaba_cloud_ops_mcp_server-0.9.25 → alibaba_cloud_ops_mcp_server-0.9.27}/src/alibaba_cloud_ops_mcp_server/tools/cms_tools.py +0 -0
  42. {alibaba_cloud_ops_mcp_server-0.9.25 → alibaba_cloud_ops_mcp_server-0.9.27}/src/alibaba_cloud_ops_mcp_server/tools/common_api_tools.py +0 -0
  43. {alibaba_cloud_ops_mcp_server-0.9.25 → alibaba_cloud_ops_mcp_server-0.9.27}/src/alibaba_cloud_ops_mcp_server/tools/local_tools.py +0 -0
  44. {alibaba_cloud_ops_mcp_server-0.9.25 → alibaba_cloud_ops_mcp_server-0.9.27}/src/alibaba_cloud_ops_mcp_server/tools/oos_tools.py +0 -0
  45. {alibaba_cloud_ops_mcp_server-0.9.25 → alibaba_cloud_ops_mcp_server-0.9.27}/src/alibaba_cloud_ops_mcp_server/tools/oss_tools.py +0 -0
  46. {alibaba_cloud_ops_mcp_server-0.9.25 → alibaba_cloud_ops_mcp_server-0.9.27}/tests/alibabacloud/test_api_meta_client.py +0 -0
  47. {alibaba_cloud_ops_mcp_server-0.9.25 → alibaba_cloud_ops_mcp_server-0.9.27}/tests/alibabacloud/test_exception.py +0 -0
  48. {alibaba_cloud_ops_mcp_server-0.9.25 → alibaba_cloud_ops_mcp_server-0.9.27}/tests/test_init.py +0 -0
  49. {alibaba_cloud_ops_mcp_server-0.9.25 → alibaba_cloud_ops_mcp_server-0.9.27}/tests/tools/test_api_tools.py +0 -0
  50. {alibaba_cloud_ops_mcp_server-0.9.25 → alibaba_cloud_ops_mcp_server-0.9.27}/tests/tools/test_cms_tools.py +0 -0
  51. {alibaba_cloud_ops_mcp_server-0.9.25 → alibaba_cloud_ops_mcp_server-0.9.27}/tests/tools/test_oos_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.25
3
+ Version: 0.9.27
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,10 @@ 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-openapi-util>=0.2.0
12
13
  Requires-Dist: alibabacloud-oss-v2>=1.2.0
14
+ Requires-Dist: alibabacloud-tea-openapi>=0.3.0
15
+ Requires-Dist: alibabacloud-tea-util>=0.3.0
13
16
  Requires-Dist: click>=8.1.8
14
17
  Requires-Dist: fastmcp==2.8.0
15
18
  Requires-Dist: pydantic==2.11.3
@@ -23,6 +26,17 @@ Description-Content-Type: text/markdown
23
26
 
24
27
  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
28
 
29
+ ## MCP Maketplace Integration
30
+
31
+ * [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>
32
+ * [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)
33
+ * [Cline](https://cline.bot/mcp-marketplace)
34
+ * [ModelScope](https://www.modelscope.cn/mcp/servers/@aliyun/alibaba-cloud-ops-mcp-server?lang=en_US)
35
+ * [Lingma](https://lingma.aliyun.com/)
36
+ * [Smithery AI](https://smithery.ai/server/@aliyun/alibaba-cloud-ops-mcp-server)
37
+ * [FC-Function AI](https://cap.console.aliyun.com/template-detail?template=237)
38
+ * [Alibaba Cloud Model Studio](https://bailian.console.aliyun.com/?tab=mcp#/mcp-market/detail/alibaba-cloud-ops)
39
+
26
40
  ## Features
27
41
 
28
42
  - **ECS Management**: Create, start, stop, reboot, delete instances, run commands, view instances, regions, zones, images, security groups, and more
@@ -70,17 +84,6 @@ To use `alibaba-cloud-ops-mcp-server` MCP Server with any other MCP Client, you
70
84
 
71
85
  [For detailed parameter description, see MCP startup parameter document](./README_mcp_args.md)
72
86
 
73
- ## MCP Maketplace Integration
74
-
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>
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)
78
- * [ModelScope](https://www.modelscope.cn/mcp/servers/@aliyun/alibaba-cloud-ops-mcp-server?lang=en_US)
79
- * [Lingma](https://lingma.aliyun.com/)
80
- * [Smithery AI](https://smithery.ai/server/@aliyun/alibaba-cloud-ops-mcp-server)
81
- * [FC-Function AI](https://cap.console.aliyun.com/template-detail?template=237)
82
- * [Alibaba Cloud Model Studio](https://bailian.console.aliyun.com/?tab=mcp#/mcp-market/detail/alibaba-cloud-ops)
83
-
84
87
  ## Know More
85
88
 
86
89
  * [Alibaba Cloud Ops MCP Server is ready to use out of the box!!](https://developer.aliyun.com/article/1661348)
@@ -0,0 +1,78 @@
1
+ # MCP Startup Parameters Guide
2
+
3
+ This document provides a detailed introduction to the available parameters for starting the Alibaba Cloud MCP Server, helping users configure the server according to their needs.
4
+
5
+ ## Parameter Table
6
+
7
+ | Parameter | Required | Type | Default | Description |
8
+ |:---------------------------:|:--------:|:-------:|:------------:|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
9
+ | `--transport` | No | string | `stdio` | Transport protocol for MCP Server communication.<br>Options:<br>&nbsp;&nbsp;&nbsp;&nbsp;• `stdio` <br>&nbsp;&nbsp;&nbsp;&nbsp;• `sse` <br>&nbsp;&nbsp;&nbsp;&nbsp;• `streamable-http` |
10
+ | `--port` | No | int | `8000` | Specifies the port number MCP Server listens on. Make sure the port is not occupied. |
11
+ | `--host` | No | string | `127.0.0.1` | Specifies the host address MCP Server listens on. `0.0.0.0` means listening on all network interfaces. |
12
+ | `--services` | No | string | None | Comma-separated services, e.g., `ecs,vpc`.<br>Supported services:<br>&nbsp;&nbsp;&nbsp;&nbsp;• `ecs`<br>&nbsp;&nbsp;&nbsp;&nbsp;• `oos`<br>&nbsp;&nbsp;&nbsp;&nbsp;• `rds`<br>&nbsp;&nbsp;&nbsp;&nbsp;• `vpc`<br>&nbsp;&nbsp;&nbsp;&nbsp;• `slb`<br>&nbsp;&nbsp;&nbsp;&nbsp;• `ess`<br>&nbsp;&nbsp;&nbsp;&nbsp;• `ros`<br>&nbsp;&nbsp;&nbsp;&nbsp;• `cbn`<br>&nbsp;&nbsp;&nbsp;&nbsp;• `dds`<br>&nbsp;&nbsp;&nbsp;&nbsp;• `r-kvstore`<br>&nbsp;&nbsp;&nbsp;&nbsp;• `bssopenapi` |
13
+ | `--headers-credential-only` | No | bool | `false` | Whether to use credentials only from HTTP headers. When enabled, credentials must be provided via request headers instead of environment variables. |
14
+ | `--env` | No | string | `domestic` | Environment type for API endpoints.<br>Options:<br>&nbsp;&nbsp;&nbsp;&nbsp;• `domestic` - Use domestic (China) endpoints<br>&nbsp;&nbsp;&nbsp;&nbsp;• `international` - Use international (overseas) endpoints |
15
+ | `--code-deploy` | No | flag | `false` | Enable code deploy mode. When enabled, only loads 6 specific tools:<br>&nbsp;&nbsp;&nbsp;&nbsp;• `OOS_CodeDeploy`<br>&nbsp;&nbsp;&nbsp;&nbsp;• `OOS_GetDeployStatus`<br>&nbsp;&nbsp;&nbsp;&nbsp;• `OOS_GetLastDeploymentInfo`<br>&nbsp;&nbsp;&nbsp;&nbsp;• `LOCAL_ListDirectory`<br>&nbsp;&nbsp;&nbsp;&nbsp;• `LOCAL_RunShellScript`<br>&nbsp;&nbsp;&nbsp;&nbsp;• `LOCAL_AnalyzeDeployStack` |
16
+ | `--extra-config` | No | string | None | Add extra services and APIs to config (additive, does not replace existing config). Supports JSON format or Python dict format with single quotes.<br>Example: `"{'sls': ['GetProject', 'ListProject'], 'ecs': ['StartInstance']}"` |
17
+ | `--visible-tools` | No | string | None | Comma-separated list of tool names to make visible (whitelist mode). Only these specified tools will be registered when this parameter is provided.<br>Example: `OOS_RunCommand,ECS_DescribeInstances,LOCAL_ListDirectory` |
18
+
19
+ ## Usage Examples
20
+
21
+ ### Basic Usage
22
+ ```bash
23
+ uv run src/alibaba_cloud_ops_mcp_server/server.py --transport sse --port 8080 --host 0.0.0.0 --services ecs,vpc
24
+ ```
25
+
26
+ ### Code Deploy Mode
27
+ ```bash
28
+ uv run src/alibaba_cloud_ops_mcp_server/server.py --code-deploy
29
+ ```
30
+
31
+ ### Add Extra APIs via MCP Config
32
+ Using `--extra-config` to dynamically add services and APIs:
33
+
34
+ ```bash
35
+ # JSON format (double quotes inside)
36
+ uv run src/alibaba_cloud_ops_mcp_server/server.py --extra-config '{"sls": ["GetProject", "ListProject"], "ecs": ["StartInstance"]}'
37
+
38
+ # Python dict format (single quotes inside)
39
+ uv run src/alibaba_cloud_ops_mcp_server/server.py --extra-config "{'sls': ['GetProject', 'ListProject'], 'ecs': ['StartInstance']}"
40
+ ```
41
+
42
+ ### Whitelist Mode
43
+ Using `--visible-tools` to only expose specific tools:
44
+
45
+ ```bash
46
+ uv run src/alibaba_cloud_ops_mcp_server/server.py --visible-tools "OOS_RunCommand,ECS_DescribeInstances,LOCAL_ListDirectory"
47
+ ```
48
+
49
+ ### International Environment
50
+ ```bash
51
+ uv run src/alibaba_cloud_ops_mcp_server/server.py --env international --services ecs,vpc
52
+ ```
53
+
54
+ ### MCP JSON Configuration Example
55
+
56
+ You can configure these parameters in your MCP client's JSON configuration file:
57
+
58
+ ```json
59
+ {
60
+ "mcpServers": {
61
+ "alibaba-cloud-ops-mcp-server": {
62
+ "timeout": 600,
63
+ "command": "uvx",
64
+ "args": [
65
+ "alibaba-cloud-ops-mcp-server@latest"
66
+ ],
67
+ "env": {
68
+ "ALIBABA_CLOUD_ACCESS_KEY_ID": "Your Access Key ID",
69
+ "ALIBABA_CLOUD_ACCESS_KEY_SECRET": "Your Access Key SECRET"
70
+ }
71
+ }
72
+ }
73
+ }
74
+ ```
75
+
76
+ ---
77
+
78
+ For more help, please refer to the main project documentation or contact the maintainer.
@@ -0,0 +1,78 @@
1
+ # MCP 启动参数说明
2
+
3
+ 本文档详细介绍 Alibaba Cloud MCP Server 的可用启动参数,帮助用户根据需求配置服务器。
4
+
5
+ ## 参数列表
6
+
7
+ | 参数 | 是否必需 | 类型 | 默认值 | 说明 |
8
+ |:---------------------------:|:-------:|:-------:|:------------:|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
9
+ | `--transport` | 否 | string | `stdio` | MCP Server 通信传输协议。<br>可选值:<br>&nbsp;&nbsp;&nbsp;&nbsp;• `stdio` <br>&nbsp;&nbsp;&nbsp;&nbsp;• `sse` <br>&nbsp;&nbsp;&nbsp;&nbsp;• `streamable-http` |
10
+ | `--port` | 否 | int | `8000` | MCP Server 监听的端口号,请确保端口未被占用。 |
11
+ | `--host` | 否 | string | `127.0.0.1` | MCP Server 监听的主机地址。`0.0.0.0` 表示监听所有网络接口。 |
12
+ | `--services` | 否 | string | None | 逗号分隔的服务列表,例如 `ecs,vpc`。<br>支持的服务:<br>&nbsp;&nbsp;&nbsp;&nbsp;• `ecs` - 弹性计算服务<br>&nbsp;&nbsp;&nbsp;&nbsp;• `oos` - 运维编排服务<br>&nbsp;&nbsp;&nbsp;&nbsp;• `rds` - 关系型数据库<br>&nbsp;&nbsp;&nbsp;&nbsp;• `vpc` - 专有网络<br>&nbsp;&nbsp;&nbsp;&nbsp;• `slb` - 负载均衡<br>&nbsp;&nbsp;&nbsp;&nbsp;• `ess` - 弹性伸缩<br>&nbsp;&nbsp;&nbsp;&nbsp;• `ros` - 资源编排<br>&nbsp;&nbsp;&nbsp;&nbsp;• `cbn` - 云企业网<br>&nbsp;&nbsp;&nbsp;&nbsp;• `dds` - MongoDB 数据库<br>&nbsp;&nbsp;&nbsp;&nbsp;• `r-kvstore` - Tair (兼容 Redis)<br>&nbsp;&nbsp;&nbsp;&nbsp;• `bssopenapi` - 费用中心 |
13
+ | `--headers-credential-only` | 否 | bool | `false` | 是否仅使用 HTTP 请求头中的凭证。启用后,凭证必须通过请求头提供,而非环境变量。 |
14
+ | `--env` | 否 | string | `domestic` | API 端点的环境类型。<br>可选值:<br>&nbsp;&nbsp;&nbsp;&nbsp;• `domestic` - 使用国内端点<br>&nbsp;&nbsp;&nbsp;&nbsp;• `international` - 使用国际端点 |
15
+ | `--code-deploy` | 否 | flag | `false` | 启用代码部署模式。启用后,仅加载以下 6 个工具:<br>&nbsp;&nbsp;&nbsp;&nbsp;• `OOS_CodeDeploy`<br>&nbsp;&nbsp;&nbsp;&nbsp;• `OOS_GetDeployStatus`<br>&nbsp;&nbsp;&nbsp;&nbsp;• `OOS_GetLastDeploymentInfo`<br>&nbsp;&nbsp;&nbsp;&nbsp;• `LOCAL_ListDirectory`<br>&nbsp;&nbsp;&nbsp;&nbsp;• `LOCAL_RunShellScript`<br>&nbsp;&nbsp;&nbsp;&nbsp;• `LOCAL_AnalyzeDeployStack` |
16
+ | `--extra-config` | 否 | string | None | 动态添加额外的服务和 API(累加模式,不会替换现有配置)。支持 JSON 格式或 Python 字典格式(单引号)。<br>示例:`"{'sls': ['GetProject', 'ListProject'], 'ecs': ['StartInstance']}"` |
17
+ | `--visible-tools` | 否 | string | None | 工具白名单模式。逗号分隔的工具名称列表,仅注册指定的工具。<br>示例:`OOS_RunCommand,ECS_DescribeInstances,LOCAL_ListDirectory` |
18
+
19
+ ## 使用示例
20
+
21
+ ### 基本用法
22
+ ```bash
23
+ uv run src/alibaba_cloud_ops_mcp_server/server.py --transport sse --port 8080 --host 0.0.0.0 --services ecs,vpc
24
+ ```
25
+
26
+ ### 代码部署模式
27
+ ```bash
28
+ uv run src/alibaba_cloud_ops_mcp_server/server.py --code-deploy
29
+ ```
30
+
31
+ ### 通过 MCP 配置动态添加 API
32
+ 使用 `--extra-config` 动态添加服务和 API:
33
+
34
+ ```bash
35
+ # JSON 格式(内部使用双引号)
36
+ uv run src/alibaba_cloud_ops_mcp_server/server.py --extra-config '{"sls": ["GetProject", "ListProject"], "ecs": ["StartInstance"]}'
37
+
38
+ # Python 字典格式(内部使用单引号)
39
+ uv run src/alibaba_cloud_ops_mcp_server/server.py --extra-config "{'sls': ['GetProject', 'ListProject'], 'ecs': ['StartInstance']}"
40
+ ```
41
+
42
+ ### 白名单模式
43
+ 使用 `--visible-tools` 仅暴露指定的工具:
44
+
45
+ ```bash
46
+ uv run src/alibaba_cloud_ops_mcp_server/server.py --visible-tools "OOS_RunCommand,ECS_DescribeInstances,LOCAL_ListDirectory"
47
+ ```
48
+
49
+ ### 国际环境
50
+ ```bash
51
+ uv run src/alibaba_cloud_ops_mcp_server/server.py --env international --services ecs,vpc
52
+ ```
53
+
54
+ ### MCP JSON 配置示例
55
+
56
+ 您可以在 MCP 客户端的 JSON 配置文件中设置这些参数:
57
+
58
+ ```json
59
+ {
60
+ "mcpServers": {
61
+ "alibaba-cloud-ops-mcp-server": {
62
+ "timeout": 600,
63
+ "command": "uvx",
64
+ "args": [
65
+ "alibaba-cloud-ops-mcp-server@latest"
66
+ ],
67
+ "env": {
68
+ "ALIBABA_CLOUD_ACCESS_KEY_ID": "Your Access Key ID",
69
+ "ALIBABA_CLOUD_ACCESS_KEY_SECRET": "Your Access Key SECRET"
70
+ }
71
+ }
72
+ }
73
+ }
74
+ ```
75
+
76
+ ---
77
+
78
+ 如需更多帮助,请参考项目主文档或联系维护者。
@@ -6,6 +6,17 @@
6
6
 
7
7
  Alibaba Cloud Ops MCP Server是一个[模型上下文协议(MCP)](https://modelcontextprotocol.io/introduction)服务器,提供与阿里云API的无缝集成,使AI助手能够操作阿里云上的资源,支持ECS、云监控、OOS、OSS、VPC、RDS等广泛使用的云产品。同时,它还使AI助手能够分析、构建和部署应用到阿里云ECS实例。
8
8
 
9
+ ## MCP市场集成
10
+
11
+ * [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>
12
+ * [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)
13
+ * [Cline](https://cline.bot/mcp-marketplace)
14
+ * [魔搭](https://www.modelscope.cn/mcp/servers/@aliyun/alibaba-cloud-ops-mcp-server)
15
+ * [通义灵码](https://lingma.aliyun.com/)
16
+ * [Smithery AI](https://smithery.ai/server/@aliyun/alibaba-cloud-ops-mcp-server)
17
+ * [FC-Function AI](https://cap.console.aliyun.com/template-detail?template=237)
18
+ * [阿里云百炼平台](https://bailian.console.aliyun.com/?tab=mcp#/mcp-market/detail/alibaba-cloud-ops)
19
+
9
20
  ## 功能特性
10
21
 
11
22
  - **ECS 管理**:创建、启动、停止、重启、删除实例,运行命令,查看实例、地域、可用区、镜像、安全组等
@@ -51,18 +62,7 @@ curl -LsSf https://astral.sh/uv/install.sh | sh
51
62
  }
52
63
  ```
53
64
 
54
- [详细参数说明见 MCP 启动参数文档](./README_mcp_args.md)
55
-
56
- ## MCP市场集成
57
-
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>
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)
61
- * [魔搭](https://www.modelscope.cn/mcp/servers/@aliyun/alibaba-cloud-ops-mcp-server)
62
- * [通义灵码](https://lingma.aliyun.com/)
63
- * [Smithery AI](https://smithery.ai/server/@aliyun/alibaba-cloud-ops-mcp-server)
64
- * [FC-Function AI](https://cap.console.aliyun.com/template-detail?template=237)
65
- * [阿里云百炼平台](https://bailian.console.aliyun.com/?tab=mcp#/mcp-market/detail/alibaba-cloud-ops)
65
+ [详细参数说明见 MCP 启动参数文档](./README_mcp_args_zh.md)
66
66
 
67
67
  ## 了解更多
68
68
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "alibaba-cloud-ops-mcp-server"
3
- version = "0.9.25"
3
+ version = "0.9.27"
4
4
  description = "A MCP server for Alibaba Cloud"
5
5
  readme = "README.md"
6
6
  authors = [
@@ -14,6 +14,9 @@ dependencies = [
14
14
  "alibabacloud-oos20190601>=3.5.0",
15
15
  "alibabacloud_oss_v2>=1.2.0",
16
16
  "alibabacloud-credentials>=1.0.3",
17
+ "alibabacloud-openapi-util>=0.2.0",
18
+ "alibabacloud-tea-openapi>=0.3.0",
19
+ "alibabacloud-tea-util>=0.3.0",
17
20
  "click>=8.1.8",
18
21
  "fastmcp==2.8.0",
19
22
  "pydantic==2.11.3"
@@ -1,4 +1,7 @@
1
1
  import sys
2
+ import copy
3
+ import json
4
+ import ast
2
5
 
3
6
  from fastmcp import FastMCP
4
7
  import click
@@ -43,6 +46,97 @@ SUPPORTED_SERVICES_MAP = {
43
46
  }
44
47
 
45
48
 
49
+ def _register_tools_with_filter(mcp: FastMCP, visible_tools_set: set, visible_tools_original: dict, services: str, extra_config: str):
50
+ """
51
+ Register tools based on visible_tools whitelist (case-insensitive).
52
+
53
+ Args:
54
+ mcp: FastMCP instance
55
+ visible_tools_set: Set of allowed tool names (lowercase for case-insensitive matching)
56
+ visible_tools_original: Dict mapping lowercase names to original names
57
+ services: Services parameter for common_api_tools
58
+ extra_config: Extra config parameter
59
+ """
60
+ registered_tools = set()
61
+
62
+ # 1. Register common_api_tools if services is specified
63
+ if services:
64
+ service_keys = [s.strip().lower() for s in services.split(",")]
65
+ service_list = [(key, SUPPORTED_SERVICES_MAP.get(key, key)) for key in service_keys]
66
+ set_custom_service_list(service_list)
67
+ for tool in common_api_tools.tools:
68
+ if tool.__name__.lower() in visible_tools_set:
69
+ mcp.tool(tool)
70
+ registered_tools.add(tool.__name__.lower())
71
+
72
+ # 2. Register static tools from all modules
73
+ static_tool_modules = [
74
+ oos_tools,
75
+ application_management_tools,
76
+ cms_tools,
77
+ oss_tools,
78
+ local_tools
79
+ ]
80
+
81
+ for tool_module in static_tool_modules:
82
+ for tool in tool_module.tools:
83
+ if tool.__name__.lower() in visible_tools_set:
84
+ mcp.tool(tool)
85
+ registered_tools.add(tool.__name__.lower())
86
+
87
+ # 3. Handle dynamic API tools
88
+ # Parse tool names in visible_tools that follow SERVICE_API format
89
+ # Use original names to preserve API case (important for Alibaba Cloud APIs)
90
+ dynamic_tools_config = {}
91
+
92
+ for tool_name_lower in visible_tools_set:
93
+ if '_' in tool_name_lower and tool_name_lower not in registered_tools:
94
+ # Get original name to preserve API case
95
+ original_name = visible_tools_original.get(tool_name_lower, tool_name_lower)
96
+ parts = original_name.split('_', 1)
97
+ if len(parts) == 2:
98
+ service_code = parts[0].lower()
99
+ api_name = parts[1] # Preserve original case
100
+ if service_code not in dynamic_tools_config:
101
+ dynamic_tools_config[service_code] = []
102
+ if api_name not in dynamic_tools_config[service_code]:
103
+ dynamic_tools_config[service_code].append(api_name)
104
+
105
+ # 4. Merge with extra_config (only tools in visible_tools whitelist)
106
+ if extra_config:
107
+ try:
108
+ try:
109
+ extra = json.loads(extra_config)
110
+ except json.JSONDecodeError:
111
+ extra = ast.literal_eval(extra_config)
112
+
113
+ for service_code, apis in extra.items():
114
+ for api in apis:
115
+ tool_name_lower = f"{service_code.lower()}_{api.lower()}"
116
+ if tool_name_lower in visible_tools_set:
117
+ if service_code not in dynamic_tools_config:
118
+ dynamic_tools_config[service_code] = []
119
+ if api not in dynamic_tools_config[service_code]:
120
+ dynamic_tools_config[service_code].append(api)
121
+ logger.info(f'Merged extra config with visible tools filter: {dynamic_tools_config}')
122
+ except Exception as e:
123
+ logger.error(f'Failed to parse extra-config: {e}')
124
+
125
+ # 5. Create dynamic API tools
126
+ if dynamic_tools_config:
127
+ api_tools.create_api_tools(mcp, dynamic_tools_config)
128
+ for service_code, apis in dynamic_tools_config.items():
129
+ for api in apis:
130
+ registered_tools.add(f"{service_code.lower()}_{api.lower()}")
131
+
132
+ # 6. Log results
133
+ unregistered_tools = visible_tools_set - registered_tools
134
+ if unregistered_tools:
135
+ logger.warning(f"The following tools were not found and not registered: {unregistered_tools}")
136
+
137
+ logger.info(f"Visible tools mode: registered {len(registered_tools)} tools: {registered_tools}")
138
+
139
+
46
140
  @click.command()
47
141
  @click.option(
48
142
  "--transport",
@@ -86,7 +180,19 @@ SUPPORTED_SERVICES_MAP = {
86
180
  default=False,
87
181
  help="Enable code deploy mode, only load 6 specific tools: OOS_CodeDeploy, OOS_GetDeployStatus, OOS_GetLastDeploymentInfo, LOCAL_ListDirectory, LOCAL_RunShellScript, LOCAL_AnalyzeDeployStack",
88
182
  )
89
- def main(transport: str, port: int, host: str, services: str, headers_credential_only: bool, env: str, code_deploy: bool):
183
+ @click.option(
184
+ "--extra-config",
185
+ type=str,
186
+ default=None,
187
+ help="Add extra services and APIs to config, e.g., \"{'sls': ['GetProject', 'ListProject'], 'ecs': ['StartInstance']}\"",
188
+ )
189
+ @click.option(
190
+ "--visible-tools",
191
+ type=str,
192
+ default=None,
193
+ help="Comma-separated list of tool names to make visible (whitelist mode). Only these tools will be registered when specified, e.g., 'OOS_RunCommand,ECS_DescribeInstances,LOCAL_ListDirectory'",
194
+ )
195
+ def main(transport: str, port: int, host: str, services: str, headers_credential_only: bool, env: str, code_deploy: bool, extra_config: str, visible_tools: str):
90
196
  _setup_logging()
91
197
  # Create an MCP server
92
198
  mcp = FastMCP(
@@ -158,6 +264,12 @@ def main(transport: str, port: int, host: str, services: str, headers_credential
158
264
  settings.headers_credential_only = headers_credential_only
159
265
  if env:
160
266
  settings.env = env
267
+
268
+ # Handle mutual exclusivity between code_deploy and visible_tools
269
+ if code_deploy and visible_tools:
270
+ logger.warning("--code-deploy and --visible-tools are mutually exclusive. Using --code-deploy mode.")
271
+ visible_tools = None
272
+
161
273
  if code_deploy:
162
274
  # Code deploy mode: only load 6 specific tools
163
275
  code_deploy_tools = {
@@ -179,7 +291,21 @@ def main(transport: str, port: int, host: str, services: str, headers_credential
179
291
  for tool in local_tools.tools:
180
292
  if tool.__name__ in code_deploy_tools:
181
293
  mcp.tool(tool)
182
- else:
294
+ elif visible_tools:
295
+ # Visible tools mode: only load tools in whitelist (case-insensitive)
296
+ # Build both lowercase set and original name mapping
297
+ visible_tools_list = [tool.strip() for tool in visible_tools.split(",") if tool.strip()]
298
+ visible_tools_set = set(t.lower() for t in visible_tools_list)
299
+ visible_tools_original = {t.lower(): t for t in visible_tools_list}
300
+ if visible_tools_set:
301
+ logger.info(f"Visible tools mode enabled (case-insensitive). Allowed tools: {visible_tools_set}")
302
+ _register_tools_with_filter(mcp, visible_tools_set, visible_tools_original, services, extra_config)
303
+ else:
304
+ logger.warning("--visible-tools is empty, falling back to normal mode.")
305
+ # Fall through to normal mode by setting a flag
306
+ visible_tools = None
307
+
308
+ if not code_deploy and not visible_tools:
183
309
  # Normal mode: load all tools
184
310
  if services:
185
311
  service_keys = [s.strip().lower() for s in services.split(",")]
@@ -197,7 +323,29 @@ def main(transport: str, port: int, host: str, services: str, headers_credential
197
323
  mcp.tool(tool)
198
324
  for tool in oss_tools.tools:
199
325
  mcp.tool(tool)
200
- api_tools.create_api_tools(mcp, config)
326
+ # Merge extra_config into the existing config
327
+ merged_config = copy.deepcopy(config)
328
+ if extra_config:
329
+ try:
330
+ # Try JSON first, then fallback to ast.literal_eval for single quotes
331
+ try:
332
+ extra = json.loads(extra_config)
333
+ except json.JSONDecodeError:
334
+ extra = ast.literal_eval(extra_config)
335
+ for service_code, apis in extra.items():
336
+ if service_code in merged_config:
337
+ # Add new APIs to existing service (avoid duplicates)
338
+ existing_apis = set(merged_config[service_code])
339
+ for api in apis:
340
+ if api not in existing_apis:
341
+ merged_config[service_code].append(api)
342
+ else:
343
+ # Add new service with its APIs
344
+ merged_config[service_code] = apis
345
+ logger.info(f'Merged extra config: {extra}')
346
+ except Exception as e:
347
+ logger.error(f'Failed to parse extra-config: {e}')
348
+ api_tools.create_api_tools(mcp, merged_config)
201
349
  for tool in local_tools.tools:
202
350
  mcp.tool(tool)
203
351