devops-mcp-server-extension 1.0.0
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.
- package/LICENSE +218 -0
- package/README.md +527 -0
- package/README.zh-cn.md +503 -0
- package/dist/common/errors.js +77 -0
- package/dist/common/modularTemplates.js +483 -0
- package/dist/common/pipelineTemplates.js +19 -0
- package/dist/common/toolsetManager.js +123 -0
- package/dist/common/toolsets.js +23 -0
- package/dist/common/types.js +60 -0
- package/dist/common/utils.js +381 -0
- package/dist/common/version.js +1 -0
- package/dist/index.js +225 -0
- package/dist/operations/appstack/appOrchestrations.js +260 -0
- package/dist/operations/appstack/appTags.js +168 -0
- package/dist/operations/appstack/appTemplates.js +72 -0
- package/dist/operations/appstack/applications.js +171 -0
- package/dist/operations/appstack/changeOrders.js +320 -0
- package/dist/operations/appstack/changeRequests.js +288 -0
- package/dist/operations/appstack/deploymentResources.js +286 -0
- package/dist/operations/appstack/globalVars.js +221 -0
- package/dist/operations/appstack/releaseWorkflows.js +695 -0
- package/dist/operations/appstack/variableGroups.js +245 -0
- package/dist/operations/codeup/branches.js +157 -0
- package/dist/operations/codeup/changeRequestComments.js +140 -0
- package/dist/operations/codeup/changeRequests.js +230 -0
- package/dist/operations/codeup/commits.js +121 -0
- package/dist/operations/codeup/compare.js +30 -0
- package/dist/operations/codeup/files.js +249 -0
- package/dist/operations/codeup/repositories.js +71 -0
- package/dist/operations/codeup/types.js +414 -0
- package/dist/operations/flow/hostGroup.js +52 -0
- package/dist/operations/flow/pipeline.js +609 -0
- package/dist/operations/flow/pipelineJob.js +126 -0
- package/dist/operations/flow/resourceMember.js +137 -0
- package/dist/operations/flow/serviceConnection.js +27 -0
- package/dist/operations/flow/tag.js +191 -0
- package/dist/operations/flow/types.js +523 -0
- package/dist/operations/flow/vmDeployOrder.js +171 -0
- package/dist/operations/organization/members.js +106 -0
- package/dist/operations/organization/organization.js +110 -0
- package/dist/operations/organization/types.js +111 -0
- package/dist/operations/packages/artifacts.js +71 -0
- package/dist/operations/packages/repositories.js +39 -0
- package/dist/operations/packages/types.js +56 -0
- package/dist/operations/projex/effort.js +122 -0
- package/dist/operations/projex/project.js +243 -0
- package/dist/operations/projex/sprint.js +103 -0
- package/dist/operations/projex/types.js +618 -0
- package/dist/operations/projex/workitem.js +826 -0
- package/dist/operations/testhub/testcases.js +240 -0
- package/dist/operations/testhub/testplans.js +128 -0
- package/dist/tool-handlers/appstack-app-release-workflows.js +103 -0
- package/dist/tool-handlers/appstack-change-orders.js +55 -0
- package/dist/tool-handlers/appstack-change-requests.js +49 -0
- package/dist/tool-handlers/appstack-deployment-resources.js +31 -0
- package/dist/tool-handlers/appstack-global-vars.js +37 -0
- package/dist/tool-handlers/appstack-orchestrations.js +49 -0
- package/dist/tool-handlers/appstack-release-workflows.js +37 -0
- package/dist/tool-handlers/appstack-tags.js +37 -0
- package/dist/tool-handlers/appstack-templates.js +19 -0
- package/dist/tool-handlers/appstack-variable-groups.js +55 -0
- package/dist/tool-handlers/appstack.js +37 -0
- package/dist/tool-handlers/base.js +25 -0
- package/dist/tool-handlers/code-management.js +150 -0
- package/dist/tool-handlers/commit.js +31 -0
- package/dist/tool-handlers/effort.js +103 -0
- package/dist/tool-handlers/index.js +119 -0
- package/dist/tool-handlers/organization.js +72 -0
- package/dist/tool-handlers/packages.js +32 -0
- package/dist/tool-handlers/pipeline.js +289 -0
- package/dist/tool-handlers/project-management.js +201 -0
- package/dist/tool-handlers/resourceMember.js +43 -0
- package/dist/tool-handlers/service-connections.js +16 -0
- package/dist/tool-handlers/tag.js +64 -0
- package/dist/tool-handlers/test-management.js +74 -0
- package/dist/tool-handlers/vmDeployOrder.js +50 -0
- package/dist/tool-registry/appstack-app-release-workflows.js +80 -0
- package/dist/tool-registry/appstack-change-orders.js +40 -0
- package/dist/tool-registry/appstack-change-requests.js +35 -0
- package/dist/tool-registry/appstack-deployment-resources.js +20 -0
- package/dist/tool-registry/appstack-global-vars.js +25 -0
- package/dist/tool-registry/appstack-orchestrations.js +35 -0
- package/dist/tool-registry/appstack-release-workflows.js +25 -0
- package/dist/tool-registry/appstack-tags.js +25 -0
- package/dist/tool-registry/appstack-templates.js +10 -0
- package/dist/tool-registry/appstack-variable-groups.js +40 -0
- package/dist/tool-registry/appstack.js +25 -0
- package/dist/tool-registry/base.js +19 -0
- package/dist/tool-registry/code-management.js +109 -0
- package/dist/tool-registry/commit.js +20 -0
- package/dist/tool-registry/effort.js +39 -0
- package/dist/tool-registry/index.js +7 -0
- package/dist/tool-registry/organization.js +65 -0
- package/dist/tool-registry/packages.js +21 -0
- package/dist/tool-registry/pipeline.js +190 -0
- package/dist/tool-registry/project-management.js +143 -0
- package/dist/tool-registry/resourceMember.js +29 -0
- package/dist/tool-registry/service-connections.js +10 -0
- package/dist/tool-registry/tag.js +44 -0
- package/dist/tool-registry/test-management.js +59 -0
- package/dist/tool-registry/vmDeployOrder.js +34 -0
- package/package.json +52 -0
package/README.zh-cn.md
ADDED
|
@@ -0,0 +1,503 @@
|
|
|
1
|
+
<p align="center"><a href="README.md">English</a> | 中文<br></p>
|
|
2
|
+
|
|
3
|
+
# devops-mcp-server-extension
|
|
4
|
+
|
|
5
|
+
> **基于 [alibabacloud-devops-mcp-server](https://github.com/aliyun/alibabacloud-devops-mcp-server) 二次开发** - 增强版 MCP Server,提供更多工具和功能。
|
|
6
|
+
|
|
7
|
+
[云效](https://www.aliyun.com/product/yunxiao) MCP Server 扩展版为 AI 助手提供了与云效平台交互的能力,能够与项目协作、代码管理、流水线、制品仓库、应用交付等模块等交互。企业研发团队可以使用它协助代码审查、优化任务管理、完成构建、部署等任务,从而专注于更重要的创新和产品交付。
|
|
8
|
+
|
|
9
|
+
## 新增功能 🆕
|
|
10
|
+
|
|
11
|
+
本扩展版包含原版没有的额外工具:
|
|
12
|
+
- `list_project_members`: 获取项目成员列表
|
|
13
|
+
- `list_workitem_activities`: 获取工作项动态列表
|
|
14
|
+
- `list_workitem_attachments`: 获取工作项附件列表
|
|
15
|
+
- `get_workitem_file`: 获取工作项文件信息
|
|
16
|
+
- `list_workitem_relation_records`: 获取工作项关联项列表
|
|
17
|
+
- `create_workitem_relation_record`: 创建工作项关联项
|
|
18
|
+
- `delete_workitem_relation_record`: 删除工作项关联项
|
|
19
|
+
|
|
20
|
+
## 功能特性
|
|
21
|
+
|
|
22
|
+
devops-mcp-server-extension 提供了以下功能,让AI助手能够:
|
|
23
|
+
|
|
24
|
+
* **组织管理**:组织列表、组织信息、部门信息、组织角色、成员信息等
|
|
25
|
+
* **代码管理**:代码仓库管理、分支管理、合并请求管理、操作文件树等
|
|
26
|
+
* **项目管理**:项目管理、工作项管理、工作项字段、工作项评论、工时管理等
|
|
27
|
+
* **流水线管理**:流水线列表、流水线管理、资源管理、标签管理、部署管理等
|
|
28
|
+
* **制品仓库管理**:制品仓库、制品列表等
|
|
29
|
+
* **应用交付**:部署单管理、应用管理、应用标签、变量组管理等
|
|
30
|
+
* **测试管理**:测试用例管理、测试用例目录、测试计划、测试结果等
|
|
31
|
+
|
|
32
|
+
## 工具列表
|
|
33
|
+
|
|
34
|
+
devops-mcp-server-extension 集成了多种工具,包括:
|
|
35
|
+
|
|
36
|
+
### 组织管理
|
|
37
|
+
- `get_current_organization_Info`: 获取当前用户所在组织信息
|
|
38
|
+
- `get_user_organizations`: 获取当前用户加入的组织列表
|
|
39
|
+
- `get_organization_role`: 获取组织角色信息
|
|
40
|
+
- `get_organization_departments`: 获取组织中的部门列表
|
|
41
|
+
- `get_organization_department_info`: 获取组织中某个部门的信息
|
|
42
|
+
- `get_organization_department_ancestors`: 获取组织中部门的上级部门
|
|
43
|
+
- `get_organization_members`: 获取组织成员列表
|
|
44
|
+
- `get_organization_member_info`: 获取组织成员信息
|
|
45
|
+
- `get_organization_member_info_by_user_id`: 通过用户ID获取组织成员信息
|
|
46
|
+
- `search_organization_members`: 搜索组织成员
|
|
47
|
+
- `list_organization_roles`: 列出组织角色
|
|
48
|
+
- `get_organization_role`: 获取组织角色信息
|
|
49
|
+
|
|
50
|
+
### 代码管理工具
|
|
51
|
+
|
|
52
|
+
- `create_branch`: 创建分支
|
|
53
|
+
- `delete_branch`: 删除分支
|
|
54
|
+
- `get_branch`: 获取分支信息
|
|
55
|
+
- `list_branches`: 获取分支列表
|
|
56
|
+
- `create_file`: 创建文件
|
|
57
|
+
- `delete_file`: 删除文件
|
|
58
|
+
- `get_file_blobs`: 获取文件内容
|
|
59
|
+
- `list_files`: 查询文件树
|
|
60
|
+
- `update_file`: 更新文件内容
|
|
61
|
+
- `create_change_request`: 创建合并请求
|
|
62
|
+
- `create_change_request_comment`: 创建合并请求评论
|
|
63
|
+
- `get_change_request`: 查询合并请求
|
|
64
|
+
- `list_change_request_patch_sets`: 查询合并请求版本列表
|
|
65
|
+
- `list_change_request`: 查询合并请求列表
|
|
66
|
+
- `list_change_request_comments`: 查询合并请求评论列表
|
|
67
|
+
- `get_compare`: 代码比较
|
|
68
|
+
- `get_repository`: 获取仓库详情
|
|
69
|
+
- `list_repositories`: 获取仓库列表
|
|
70
|
+
|
|
71
|
+
### 项目管理工具
|
|
72
|
+
|
|
73
|
+
- `get_project`: 获取项目详情
|
|
74
|
+
- `search_projects`: 搜索项目
|
|
75
|
+
- `list_project_members`: 🆕 获取项目成员列表
|
|
76
|
+
- `get_sprint`: 获取迭代详情
|
|
77
|
+
- `list_sprints`: 获取项目中的迭代列表
|
|
78
|
+
- `get_work_item`: 获取工作项详情
|
|
79
|
+
- `search_workitems`: 搜索工作项
|
|
80
|
+
- `get_work_item_types`: 获取工作项类型
|
|
81
|
+
- `create_work_item`: 创建工作项
|
|
82
|
+
- `list_all_work_item_types`: 列出组织中所有工作项类型
|
|
83
|
+
- `list_work_item_types`: 列出项目空间中工作项类型
|
|
84
|
+
- `get_work_item_type`: 获取特定工作项类型的详细信息
|
|
85
|
+
- `list_work_item_relation_work_item_types`: 列出可关联到特定工作项的工作项类型
|
|
86
|
+
- `get_work_item_type_field_config`: 获取工作项类型的字段配置
|
|
87
|
+
- `get_work_item_workflow`: 获取工作项类型的工作流信息
|
|
88
|
+
- `list_work_item_comments`: 列出特定工作项的评论
|
|
89
|
+
- `create_work_item_comment`: 为特定工作项创建评论
|
|
90
|
+
- `list_workitem_activities`: 🆕 获取工作项动态列表
|
|
91
|
+
- `list_workitem_attachments`: 🆕 获取工作项附件列表
|
|
92
|
+
- `get_workitem_file`: 🆕 获取工作项文件信息
|
|
93
|
+
- `list_workitem_relation_records`: 🆕 获取工作项关联项列表
|
|
94
|
+
- `create_workitem_relation_record`: 🆕 创建工作项关联项
|
|
95
|
+
- `delete_workitem_relation_record`: 🆕 删除工作项关联项
|
|
96
|
+
- `list_current_user_effort_records`: [项目管理] 获取用户的实际工时明细,结束时间和开始时间的间隔不能大于6个月
|
|
97
|
+
- `list_effort_records`: [项目管理] 获取实际工时明细
|
|
98
|
+
- `create_effort_record`: [项目管理] 登记实际工时
|
|
99
|
+
- `list_estimated_efforts`: [项目管理] 获取预计工时明细
|
|
100
|
+
- `create_estimated_effort`: [项目管理] 登记预计工时
|
|
101
|
+
- `update_effort_record`: [项目管理] 更新登记实际工时
|
|
102
|
+
- `update_estimated_effort`: [项目管理] 更新登记预计工时
|
|
103
|
+
|
|
104
|
+
### 流水线工具
|
|
105
|
+
- `get_pipeline` - 获取流水线详情
|
|
106
|
+
- `list_pipelines` - 获取流水线列表
|
|
107
|
+
- `smart_list_pipelines` - 智能查询流水线(支持自然语言时间)
|
|
108
|
+
- `create_pipeline_run` - 运行流水线
|
|
109
|
+
- `get_latest_pipeline_run` - 获取最新运行信息
|
|
110
|
+
- `get_pipeline_run` - 获取运行详情
|
|
111
|
+
- `list_pipeline_runs` - 获取运行历史
|
|
112
|
+
- `list_pipeline_jobs_by_category` - 获取流水线任务
|
|
113
|
+
- `list_pipeline_job_historys` - 获取任务历史
|
|
114
|
+
- `execute_pipeline_job_run` - 手动运行任务
|
|
115
|
+
- `get_pipeline_job_run_log` - 获取任务日志
|
|
116
|
+
- `list_service_connections` - 获取服务连接列表
|
|
117
|
+
- `create_pipeline_from_description`: 根据自然语言描述生成流水线 YAML 并创建流水线
|
|
118
|
+
- `update_pipeline`: 更新流水线YAML内容
|
|
119
|
+
- `create_resource_member`: 创建资源成员
|
|
120
|
+
- `delete_resource_member`: 删除资源成员
|
|
121
|
+
- `list_resource_members`: 获取资源成员列表
|
|
122
|
+
- `update_resource_member`: 更新资源成员
|
|
123
|
+
- `update_resource_owner`: 移交资源对象拥有者
|
|
124
|
+
- `create_tag`: 创建标签
|
|
125
|
+
- `create_tag_group`: 创建标签分类
|
|
126
|
+
- `list_tag_groups`: 获取流水线分类列表
|
|
127
|
+
- `delete_tag_group`: 删除标签分类
|
|
128
|
+
- `update_tag_group`: 更新标签分类
|
|
129
|
+
- `get_tag_group`: 获取标签分类
|
|
130
|
+
- `delete_tag`: 删除标签
|
|
131
|
+
- `update_tag`: 更新标签
|
|
132
|
+
- `stop_vm_deploy_order`: 终止机器部署
|
|
133
|
+
- `skip_vm_deploy_machine`: 跳过机器部署
|
|
134
|
+
- `retry_vm_deploy_machine`: 重试机器部署
|
|
135
|
+
- `resume_vm_deploy_order`: 继续部署单运行
|
|
136
|
+
- `get_vm_deploy_order`: 获取部署单详情
|
|
137
|
+
- `get_vm_deploy_machine_log`: 查询机器部署日志
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
### 应用交付工具
|
|
141
|
+
|
|
142
|
+
- `create_change_order`: [应用交付] 创建部署单
|
|
143
|
+
- `list_change_order_versions`: [应用交付] 查看部署单版本列表
|
|
144
|
+
- `get_change_order`: [应用交付] 读取部署单使用的物料和工单状态
|
|
145
|
+
- `list_change_order_job_logs`: [应用交付] 查询环境部署单日志
|
|
146
|
+
- `find_task_operation_log`: [应用交付] 查询部署任务执行日志,其中通常包含下游部署引擎的调度细节信息
|
|
147
|
+
- `execute_job_action`: [应用交付] 操作环境部署单
|
|
148
|
+
- `list_change_orders_by_origin`: [应用交付] 根据创建来源查询部署单
|
|
149
|
+
- `create_appstack_change_request`: [应用交付] 创建变更请求
|
|
150
|
+
- `get_appstack_change_request_audit_items`: [应用交付] 获取变更请求的审批项
|
|
151
|
+
- `list_appstack_change_request_executions`: [应用交付] 列出变更请求的执行记录
|
|
152
|
+
- `list_appstack_change_request_work_items`: [应用交付] 列出变更请求的工作项
|
|
153
|
+
- `cancel_appstack_change_request`: [应用交付] 取消变更请求
|
|
154
|
+
- `close_appstack_change_request`: [应用交付] 关闭变更请求
|
|
155
|
+
- `list_applications`: [应用交付] 分页获取组织中的应用列表
|
|
156
|
+
- `get_application`: [应用交付] 根据应用名获取应用详情
|
|
157
|
+
- `create_application`: [应用交付] 创建应用
|
|
158
|
+
- `update_application`: [应用交付] 更新应用
|
|
159
|
+
- `get_latest_orchestration`: [应用交付] 获取环境的最新编排
|
|
160
|
+
- `list_app_orchestration`: [应用交付] 列出应用编排
|
|
161
|
+
- `create_app_orchestration`: [应用交付] 创建应用编排
|
|
162
|
+
- `delete_app_orchestration`: [应用交付] 删除应用编排
|
|
163
|
+
- `get_app_orchestration`: [应用交付] 获取应用编排
|
|
164
|
+
- `update_app_orchestration`: [应用交付] 更新应用编排
|
|
165
|
+
- `get_env_variable_groups`: [应用交付] 获取环境的变量组
|
|
166
|
+
- `create_variable_group`: [应用交付] 创建变量组
|
|
167
|
+
- `delete_variable_group`: [应用交付] 删除变量组
|
|
168
|
+
- `get_variable_group`: [应用交付] 获取变量组
|
|
169
|
+
- `update_variable_group`: [应用交付] 更新变量组
|
|
170
|
+
- `get_app_variable_groups`: [应用交付] 获取应用的变量组
|
|
171
|
+
- `get_app_variable_groups_revision`: [应用交付] 获取应用变量组的版本
|
|
172
|
+
- `search_app_templates`: [应用交付] 搜索应用模板
|
|
173
|
+
- `create_app_tag`: [应用交付] 创建应用标签
|
|
174
|
+
- `update_app_tag`: [应用交付] 更新应用标签
|
|
175
|
+
- `search_app_tags`: [应用交付] 搜索应用标签
|
|
176
|
+
- `update_app_tag_bind`: [应用交付] 更新应用标签绑定
|
|
177
|
+
- `create_global_var`: [应用交付] 创建全局变量组
|
|
178
|
+
- `get_global_var`: [应用交付] 获取全局变量组
|
|
179
|
+
- `update_global_var`: [应用交付] 更新全局变量组
|
|
180
|
+
- `list_global_vars`: [应用交付] 列出全局变量组
|
|
181
|
+
- `get_machine_deploy_log`: [应用交付] 获取机器部署日志
|
|
182
|
+
- `add_host_list_to_host_group`: [应用交付] 添加主机列表到主机组
|
|
183
|
+
- `add_host_list_to_deploy_group`: [应用交付] 添加主机列表到部署组
|
|
184
|
+
- `list_app_release_workflows`: [应用交付] 查询应用下所有发布流程
|
|
185
|
+
- `list_app_release_workflow_briefs`: [应用交付] 查询应用下所有发布流程摘要
|
|
186
|
+
- `get_app_release_workflow_stage`: [应用交付] 获取发布流程阶段详情
|
|
187
|
+
- `list_app_release_stage_briefs`: [应用交付] 查询发布流程阶段摘要列表
|
|
188
|
+
- `update_app_release_stage`: [应用交付] 更新应用发布流程阶段
|
|
189
|
+
- `list_app_release_stage_runs`: [应用交付] 查询发布流程阶段执行记录列表
|
|
190
|
+
- `execute_app_release_stage`: [应用交付] 执行变更请求的发布流程阶段
|
|
191
|
+
- `cancel_app_release_stage_execution`: [应用交付] 取消发布流程阶段执行
|
|
192
|
+
- `retry_app_release_stage_pipeline`: [应用交付] 重试变更请求的发布流程阶段流水线
|
|
193
|
+
- `skip_app_release_stage_pipeline`: [应用交付] 跳过变更请求的发布流程阶段流水线
|
|
194
|
+
- `list_app_release_stage_metadata`: [应用交付] 查询研发阶段执行记录集成变更信息
|
|
195
|
+
- `get_app_release_stage_pipeline_run`: [应用交付] 获取研发阶段流水线运行实例
|
|
196
|
+
- `pass_app_release_stage_validate`: [应用交付] 通过发布流程阶段验证
|
|
197
|
+
- `get_app_release_stage_job_log`: [应用交付] 查询研发阶段流水线任务运行日志
|
|
198
|
+
- `refuse_app_release_stage_validate`: [应用交付] 拒绝发布流程阶段验证
|
|
199
|
+
|
|
200
|
+
### 制品仓库工具
|
|
201
|
+
|
|
202
|
+
- `list_package_repositories`: 查看制品仓库信息
|
|
203
|
+
- `list_artifacts`: 查询制品信息
|
|
204
|
+
- `get_artifact`: 查看单个制品信息
|
|
205
|
+
|
|
206
|
+
### 测试管理工具
|
|
207
|
+
|
|
208
|
+
- `list_testcase_directories`: [测试管理] 获取测试用例目录列表
|
|
209
|
+
- `create_testcase_directory`: [测试管理] 创建测试用例目录
|
|
210
|
+
- `get_testcase_field_config`: [测试管理] 获取测试用例字段配置
|
|
211
|
+
- `create_testcase`: [测试管理] 创建测试用例
|
|
212
|
+
- `search_testcases`: [测试管理] 搜索测试用例
|
|
213
|
+
- `get_testcase`: [测试管理] 获取测试用例信息
|
|
214
|
+
- `delete_testcase`: [测试管理] 删除测试用例
|
|
215
|
+
- `list_test_plans`: [测试管理] 获取测试计划列表
|
|
216
|
+
- `get_test_result_list`: [测试管理] 获取测试计划中测试用例列表
|
|
217
|
+
- `update_test_result`: [测试管理] 更新测试结果
|
|
218
|
+
|
|
219
|
+
## 用法
|
|
220
|
+
|
|
221
|
+
### Region 站点支持
|
|
222
|
+
|
|
223
|
+
本工具支持云效中心站和 Region 站两种部署模式:
|
|
224
|
+
|
|
225
|
+
- **中心站**:使用 `https://openapi-rdc.aliyuncs.com` 作为 API 域名
|
|
226
|
+
- **Region 站**:使用组织专属域名,如 `https://your-org.devops.aliyuncs.com`
|
|
227
|
+
|
|
228
|
+
#### 自动判定机制
|
|
229
|
+
|
|
230
|
+
工具会根据配置的 API 基础 URL 自动判断部署模式:
|
|
231
|
+
|
|
232
|
+
- 如果 URL 包含 `openapi-rdc.aliyuncs.com`,则为中心站模式
|
|
233
|
+
- 否则为 Region 站模式
|
|
234
|
+
|
|
235
|
+
#### 配置 Region 站点
|
|
236
|
+
|
|
237
|
+
使用 Region 站点时,需要设置环境变量 `YUNXIAO_API_BASE_URL`:
|
|
238
|
+
|
|
239
|
+
```json
|
|
240
|
+
{
|
|
241
|
+
"mcpServers": {
|
|
242
|
+
"yunxiao": {
|
|
243
|
+
"command": "npx",
|
|
244
|
+
"args": ["-y", "devops-mcp-server-extension"],
|
|
245
|
+
"env": {
|
|
246
|
+
"YUNXIAO_ACCESS_TOKEN": "<YOUR_TOKEN>",
|
|
247
|
+
"YUNXIAO_API_BASE_URL": "https://your-org.devops.aliyuncs.com"
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
### 先决条件
|
|
255
|
+
* node 版本 >= 18.0.0
|
|
256
|
+
* 阿里云[云效](https://www.aliyun.com/product/yunxiao)个人访问令牌,[点击前往](https://help.aliyun.com/zh/yunxiao/developer-reference/obtain-personal-access-token),授予组织管理、项目协作、代码管理、流水线、制品仓库、应用交付、测试管理下所有api的读写权限。令牌的到期时间注意选择一个长期有效的时间。
|
|
257
|
+
|
|
258
|
+

|
|
259
|
+
|
|
260
|
+
## 快速开始(推荐:使用 Stdio 模式)
|
|
261
|
+
|
|
262
|
+
**Stdio 模式**是最简单、最常用的方式,适合大多数 MCP 客户端(如 Cursor、Claude Desktop、iFlow 等)。无需安装 Docker,直接通过 npx 运行即可。
|
|
263
|
+
|
|
264
|
+
### 方式一:通过 npx 直接使用(最简单)
|
|
265
|
+
|
|
266
|
+
在 MCP 客户端配置文件中添加以下配置:
|
|
267
|
+
|
|
268
|
+
```json
|
|
269
|
+
{
|
|
270
|
+
"mcpServers": {
|
|
271
|
+
"yunxiao": {
|
|
272
|
+
"command": "npx",
|
|
273
|
+
"args": [
|
|
274
|
+
"-y",
|
|
275
|
+
"devops-mcp-server-extension"
|
|
276
|
+
],
|
|
277
|
+
"env": {
|
|
278
|
+
"YUNXIAO_ACCESS_TOKEN": "<YOUR_TOKEN>",
|
|
279
|
+
"YUNXIAO_API_BASE_URL": "https://openapi-rdc.aliyuncs.com" //中心站可以不用配置,region站点则配置你的云效实例地址,比如https://your-org.devops.aliyuncs.com
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
> **说明**:
|
|
287
|
+
> - 将 `<YOUR_TOKEN>` 替换为您的云效访问令牌
|
|
288
|
+
> - `-y` 参数会自动确认安装,无需手动确认
|
|
289
|
+
> - YUNXIAO_API_BASE_URL为云效mcp tool背后调用的云效open api的站点地址,如果你使用的是云效中心站,则无需配置,如果你使用的是region站点,请配置你的云效实例地址,如https://your-org.devops.aliyuncs.com
|
|
290
|
+
> - 这种方式使用 **stdio 模式**,通过标准输入输出与 MCP 客户端通信
|
|
291
|
+
|
|
292
|
+
### 方式二:通过 MCP 市场安装
|
|
293
|
+
|
|
294
|
+
通义灵码内置的 MCP 市场中已经提供了云效的 MCP 服务,在通义灵码中进入 MCP 市场并且找到「云效DevOps」,直接安装即可。
|
|
295
|
+
|
|
296
|
+
---
|
|
297
|
+
|
|
298
|
+
## 使用 Docker(可选)
|
|
299
|
+
|
|
300
|
+
如果您需要使用 Docker 运行 MCP 服务器,可以选择 **stdio 模式** 或 **SSE 模式**。
|
|
301
|
+
|
|
302
|
+
### Docker 使用 Stdio 模式
|
|
303
|
+
|
|
304
|
+
这种方式与直接使用 npx 类似,但通过 Docker 容器运行。
|
|
305
|
+
|
|
306
|
+
#### 1. 获取 Docker 镜像
|
|
307
|
+
|
|
308
|
+
**方式一:使用官方镜像(推荐)**
|
|
309
|
+
|
|
310
|
+
```shell
|
|
311
|
+
docker pull build-steps-public-registry.cn-beijing.cr.aliyuncs.com/build-steps/alibabacloud-devops-mcp-server:v0.2.0
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
**方式二:自行构建镜像**
|
|
315
|
+
|
|
316
|
+
```shell
|
|
317
|
+
docker build -t hakunova/devops-mcp-server-extension .
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
#### 2. 配置 MCP 客户端
|
|
321
|
+
|
|
322
|
+
在 MCP 客户端配置文件中添加:
|
|
323
|
+
|
|
324
|
+
```json
|
|
325
|
+
{
|
|
326
|
+
"mcpServers": {
|
|
327
|
+
"yunxiao": {
|
|
328
|
+
"command": "docker",
|
|
329
|
+
"args": [
|
|
330
|
+
"run",
|
|
331
|
+
"-i",
|
|
332
|
+
"--rm",
|
|
333
|
+
"-e",
|
|
334
|
+
"YUNXIAO_ACCESS_TOKEN",
|
|
335
|
+
"hakunova/devops-mcp-server-extension"
|
|
336
|
+
],
|
|
337
|
+
"env": {
|
|
338
|
+
"YUNXIAO_ACCESS_TOKEN": "<YOUR_TOKEN>",
|
|
339
|
+
"YUNXIAO_API_BASE_URL": "https://openapi-rdc.aliyuncs.com"
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
> **注意**:
|
|
347
|
+
> - 这种方式使用 **stdio 模式**,容器通过标准输入输出与 MCP 客户端通信
|
|
348
|
+
|
|
349
|
+
### Docker 使用 SSE 模式
|
|
350
|
+
|
|
351
|
+
SSE 模式通过 HTTP 提供服务,适合需要独立运行服务或支持多用户的场景。
|
|
352
|
+
|
|
353
|
+
#### 1. 启动 SSE 服务
|
|
354
|
+
|
|
355
|
+
```shell
|
|
356
|
+
docker run -d --name yunxiao-mcp \
|
|
357
|
+
-p 3000:3000 \
|
|
358
|
+
-e YUNXIAO_ACCESS_TOKEN="your_token_here" \
|
|
359
|
+
-e PORT=3000 \
|
|
360
|
+
-e MCP_TRANSPORT=sse \
|
|
361
|
+
hakunova/devops-mcp-server-extension \
|
|
362
|
+
node dist/index.js --sse
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
#### 2. 配置 MCP 客户端
|
|
366
|
+
|
|
367
|
+
在 MCP 客户端配置文件中添加:
|
|
368
|
+
|
|
369
|
+
```json
|
|
370
|
+
{
|
|
371
|
+
"mcpServers": {
|
|
372
|
+
"yunxiao": {
|
|
373
|
+
"url": "http://localhost:3000/sse"
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
如果需要在连接时传递自己的令牌(而不是使用服务启动时的默认令牌):
|
|
380
|
+
|
|
381
|
+
```json
|
|
382
|
+
{
|
|
383
|
+
"mcpServers": {
|
|
384
|
+
"yunxiao": {
|
|
385
|
+
"url": "http://localhost:3000/sse?yunxiao_access_token=YOUR_TOKEN_HERE"
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
#### 3. 管理 SSE 服务
|
|
392
|
+
|
|
393
|
+
查看日志:
|
|
394
|
+
```shell
|
|
395
|
+
docker logs -f yunxiao-mcp
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
停止服务:
|
|
399
|
+
```shell
|
|
400
|
+
docker stop yunxiao-mcp
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
### 使用 Docker Compose 运行 SSE 模式
|
|
404
|
+
|
|
405
|
+
1. **环境设置**
|
|
406
|
+
```shell
|
|
407
|
+
cd devops-mcp-server-extension
|
|
408
|
+
cp .env.example .env
|
|
409
|
+
# 编辑 .env 文件,设置 YUNXIAO_ACCESS_TOKEN
|
|
410
|
+
```
|
|
411
|
+
|
|
412
|
+
2. **启动服务**
|
|
413
|
+
```shell
|
|
414
|
+
docker compose up -d
|
|
415
|
+
```
|
|
416
|
+
|
|
417
|
+
3. **配置 MCP 客户端**
|
|
418
|
+
```json
|
|
419
|
+
{
|
|
420
|
+
"mcpServers": {
|
|
421
|
+
"yunxiao": {
|
|
422
|
+
"url": "http://localhost:3000/sse"
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
```
|
|
427
|
+
|
|
428
|
+
---
|
|
429
|
+
|
|
430
|
+
## SSE 模式高级配置
|
|
431
|
+
|
|
432
|
+
### 使用独立令牌
|
|
433
|
+
|
|
434
|
+
在 SSE 模式下,每个用户可以通过以下方式传递自己的令牌:
|
|
435
|
+
|
|
436
|
+
1. **通过查询参数**(推荐):
|
|
437
|
+
```
|
|
438
|
+
http://localhost:3000/sse?yunxiao_access_token=USER_SPECIFIC_TOKEN
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
2. **通过请求头**:
|
|
442
|
+
```
|
|
443
|
+
x-yunxiao-token: USER_SPECIFIC_TOKEN
|
|
444
|
+
```
|
|
445
|
+
|
|
446
|
+
这允许多个用户共享同一个 SSE 服务,同时使用各自独立的令牌进行身份验证。
|
|
447
|
+
|
|
448
|
+
### 在 Codex 中配置 SSE 模式
|
|
449
|
+
|
|
450
|
+
如果您的云效 MCP 服务器已经以 SSE 模式启动在 `http://localhost:3000`,可以在 Codex 中按以下方式配置:
|
|
451
|
+
|
|
452
|
+
**使用默认令牌(服务启动时已配置):**
|
|
453
|
+
```json
|
|
454
|
+
{
|
|
455
|
+
"mcpServers": {
|
|
456
|
+
"yunxiao": {
|
|
457
|
+
"url": "http://localhost:3000/sse"
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
```
|
|
462
|
+
|
|
463
|
+
**在 URL 中传递令牌:**
|
|
464
|
+
```json
|
|
465
|
+
{
|
|
466
|
+
"mcpServers": {
|
|
467
|
+
"yunxiao": {
|
|
468
|
+
"url": "http://localhost:3000/sse?yunxiao_access_token=YOUR_TOKEN_HERE"
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
### 工具集(Toolsets)
|
|
475
|
+
服务器现在支持工具集功能,允许您只启用需要的工具。这可以减少提供给AI助手的工具数量,提高性能。
|
|
476
|
+
|
|
477
|
+
可用的工具集:
|
|
478
|
+
- `organization-management`: 组织管理工具(组织列表、组织信息、部门信息、组织角色、成员信息等)
|
|
479
|
+
- `code-management`: 代码仓库管理工具(代码仓库管理、分支管理、合并请求管理、文件树等)
|
|
480
|
+
- `project-management`: 项目管理工具(项目管理、工作项管理、工作项字段、工作项评论、工时管理等)
|
|
481
|
+
- `pipeline-management`: 流水线管理工具(流水线列表、流水线管理、资源管理、标签管理、部署管理等)
|
|
482
|
+
- `packages-management`: 制品仓库管理工具(制品仓库、制品列表等)
|
|
483
|
+
- `application-delivery`: 应用交付工具(部署单管理、应用管理、应用标签、变量组管理等)
|
|
484
|
+
- `test-management`: 测试管理工具(测试用例管理、测试用例目录、测试计划、测试结果等)
|
|
485
|
+
|
|
486
|
+
要使用工具集,您可以通过命令行参数或环境变量来指定:
|
|
487
|
+
|
|
488
|
+
1. 通过命令行参数,示例:
|
|
489
|
+
```bash
|
|
490
|
+
npx -y devops-mcp-server-extension --toolsets=code-management,project-management
|
|
491
|
+
```
|
|
492
|
+
|
|
493
|
+
2. 通过环境变量,示例:
|
|
494
|
+
```bash
|
|
495
|
+
DEVOPS_TOOLSETS=code-management,project-management npx -y devops-mcp-server-extension
|
|
496
|
+
```
|
|
497
|
+
|
|
498
|
+
如果没有指定工具集,将默认启用所有工具。
|
|
499
|
+
|
|
500
|
+
## 相关链接
|
|
501
|
+
- [阿里云云效](https://www.aliyun.com/product/yunxiao)
|
|
502
|
+
- [原项目 alibabacloud-devops-mcp-server](https://github.com/aliyun/alibabacloud-devops-mcp-server)
|
|
503
|
+
- [MCP 市场](https://modelscope.cn/mcp/servers/@aliyun/alibabacloud-devops-mcp-server)
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
export class YunxiaoError extends Error {
|
|
2
|
+
status;
|
|
3
|
+
response;
|
|
4
|
+
url;
|
|
5
|
+
method;
|
|
6
|
+
requestHeaders;
|
|
7
|
+
requestBody;
|
|
8
|
+
constructor(message, status, response, url, method, requestHeaders, requestBody) {
|
|
9
|
+
super(message);
|
|
10
|
+
this.status = status;
|
|
11
|
+
this.response = response;
|
|
12
|
+
this.url = url;
|
|
13
|
+
this.method = method;
|
|
14
|
+
this.requestHeaders = requestHeaders;
|
|
15
|
+
this.requestBody = requestBody;
|
|
16
|
+
this.name = "YunxiaoError";
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export class YunxiaoValidationError extends YunxiaoError {
|
|
20
|
+
constructor(message, status, response) {
|
|
21
|
+
super(message, status, response);
|
|
22
|
+
this.name = "YunxiaoValidationError";
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export class YunxiaoResourceNotFoundError extends YunxiaoError {
|
|
26
|
+
constructor(resource) {
|
|
27
|
+
super(`Resource not found: ${resource}`, 404, { message: `${resource} not found` });
|
|
28
|
+
this.name = "YunxiaoResourceNotFoundError";
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export class YunxiaoAuthenticationError extends YunxiaoError {
|
|
32
|
+
constructor(message = "Authentication failed") {
|
|
33
|
+
super(message, 401, { message });
|
|
34
|
+
this.name = "YunxiaoAuthenticationError";
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
export class YunxiaoPermissionError extends YunxiaoError {
|
|
38
|
+
constructor(message = "Insufficient permissions") {
|
|
39
|
+
super(message, 403, { message });
|
|
40
|
+
this.name = "YunxiaoPermissionError";
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
export class YunxiaoRateLimitError extends YunxiaoError {
|
|
44
|
+
resetAt;
|
|
45
|
+
constructor(message = "Rate limit exceeded", resetAt) {
|
|
46
|
+
super(message, 429, { message, reset_at: resetAt.toISOString() });
|
|
47
|
+
this.resetAt = resetAt;
|
|
48
|
+
this.name = "YunxiaoRateLimitError";
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
export class YunxiaoConflictError extends YunxiaoError {
|
|
52
|
+
constructor(message) {
|
|
53
|
+
super(message, 409, { message });
|
|
54
|
+
this.name = "YunxiaoConflictError";
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
export function isYunxiaoError(error) {
|
|
58
|
+
return error instanceof YunxiaoError;
|
|
59
|
+
}
|
|
60
|
+
export function createYunxiaoError(status, response, url, method, requestHeaders, requestBody) {
|
|
61
|
+
switch (status) {
|
|
62
|
+
case 401:
|
|
63
|
+
return new YunxiaoAuthenticationError(response?.message);
|
|
64
|
+
case 403:
|
|
65
|
+
return new YunxiaoPermissionError(response?.message);
|
|
66
|
+
case 404:
|
|
67
|
+
return new YunxiaoResourceNotFoundError(response?.message || "Resource");
|
|
68
|
+
case 409:
|
|
69
|
+
return new YunxiaoConflictError(response?.message || "Conflict occurred");
|
|
70
|
+
case 422:
|
|
71
|
+
return new YunxiaoValidationError(response?.message || "Validation failed", status, response);
|
|
72
|
+
case 429:
|
|
73
|
+
return new YunxiaoRateLimitError(response?.message, new Date(response?.reset_at || Date.now() + 60000));
|
|
74
|
+
default:
|
|
75
|
+
return new YunxiaoError(response?.message || "Yunxiao API error", status, response, url, method, requestHeaders, requestBody);
|
|
76
|
+
}
|
|
77
|
+
}
|