@mcp-consultant-tools/azure-devops-admin 27.0.0 → 28.0.0-beta.5
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/build/AzureDevOpsAdminService.d.ts +16 -0
- package/build/AzureDevOpsAdminService.d.ts.map +1 -1
- package/build/AzureDevOpsAdminService.js +117 -8
- package/build/AzureDevOpsAdminService.js.map +1 -1
- package/build/index.d.ts +7 -11
- package/build/index.d.ts.map +1 -1
- package/build/index.js +58 -1110
- package/build/index.js.map +1 -1
- package/build/services/admin-client.d.ts +19 -0
- package/build/services/admin-client.d.ts.map +1 -0
- package/build/services/admin-client.js +97 -0
- package/build/services/admin-client.js.map +1 -0
- package/build/services/agent-pool-service.d.ts +21 -0
- package/build/services/agent-pool-service.d.ts.map +1 -0
- package/build/services/agent-pool-service.js +118 -0
- package/build/services/agent-pool-service.js.map +1 -0
- package/build/services/artifact-feed-service.d.ts +21 -0
- package/build/services/artifact-feed-service.d.ts.map +1 -0
- package/build/services/artifact-feed-service.js +83 -0
- package/build/services/artifact-feed-service.js.map +1 -0
- package/build/services/classification-service.d.ts +23 -0
- package/build/services/classification-service.d.ts.map +1 -0
- package/build/services/classification-service.js +163 -0
- package/build/services/classification-service.js.map +1 -0
- package/build/services/environment-service.d.ts +25 -0
- package/build/services/environment-service.d.ts.map +1 -0
- package/build/services/environment-service.js +160 -0
- package/build/services/environment-service.js.map +1 -0
- package/build/services/index.d.ts +12 -0
- package/build/services/index.d.ts.map +1 -0
- package/build/services/index.js +12 -0
- package/build/services/index.js.map +1 -0
- package/build/services/pipeline-service.d.ts +37 -0
- package/build/services/pipeline-service.d.ts.map +1 -0
- package/build/services/pipeline-service.js +500 -0
- package/build/services/pipeline-service.js.map +1 -0
- package/build/services/service-connection-service.d.ts +29 -0
- package/build/services/service-connection-service.d.ts.map +1 -0
- package/build/services/service-connection-service.js +147 -0
- package/build/services/service-connection-service.js.map +1 -0
- package/build/services/variable-group-service.d.ts +22 -0
- package/build/services/variable-group-service.d.ts.map +1 -0
- package/build/services/variable-group-service.js +136 -0
- package/build/services/variable-group-service.js.map +1 -0
- package/build/tools/agent-pool-tools.d.ts +7 -0
- package/build/tools/agent-pool-tools.d.ts.map +1 -0
- package/build/tools/agent-pool-tools.js +132 -0
- package/build/tools/agent-pool-tools.js.map +1 -0
- package/build/tools/artifact-feed-tools.d.ts +7 -0
- package/build/tools/artifact-feed-tools.d.ts.map +1 -0
- package/build/tools/artifact-feed-tools.js +46 -0
- package/build/tools/artifact-feed-tools.js.map +1 -0
- package/build/tools/classification-tools.d.ts +7 -0
- package/build/tools/classification-tools.d.ts.map +1 -0
- package/build/tools/classification-tools.js +202 -0
- package/build/tools/classification-tools.js.map +1 -0
- package/build/tools/environment-tools.d.ts +7 -0
- package/build/tools/environment-tools.d.ts.map +1 -0
- package/build/tools/environment-tools.js +193 -0
- package/build/tools/environment-tools.js.map +1 -0
- package/build/tools/index.d.ts +13 -0
- package/build/tools/index.d.ts.map +1 -0
- package/build/tools/index.js +36 -0
- package/build/tools/index.js.map +1 -0
- package/build/tools/pipeline-tools.d.ts +7 -0
- package/build/tools/pipeline-tools.d.ts.map +1 -0
- package/build/tools/pipeline-tools.js +291 -0
- package/build/tools/pipeline-tools.js.map +1 -0
- package/build/tools/service-connection-tools.d.ts +7 -0
- package/build/tools/service-connection-tools.d.ts.map +1 -0
- package/build/tools/service-connection-tools.js +139 -0
- package/build/tools/service-connection-tools.js.map +1 -0
- package/build/tools/variable-group-tools.d.ts +7 -0
- package/build/tools/variable-group-tools.d.ts.map +1 -0
- package/build/tools/variable-group-tools.js +137 -0
- package/build/tools/variable-group-tools.js.map +1 -0
- package/build/types.d.ts +62 -0
- package/build/types.d.ts.map +1 -0
- package/build/types.js +2 -0
- package/build/types.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pipeline tools - read-only, upsert (Tier 2), and delete (Tier 3).
|
|
3
|
+
* Includes build troubleshooting tools.
|
|
4
|
+
*/
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
export function registerPipelineTools(server, ctx) {
|
|
7
|
+
let readonlyCount = 0;
|
|
8
|
+
let upsertCount = 0;
|
|
9
|
+
let deleteCount = 0;
|
|
10
|
+
// ========================================
|
|
11
|
+
// PIPELINE READ-ONLY TOOLS (always available)
|
|
12
|
+
// ========================================
|
|
13
|
+
server.tool("list-pipelines", "List all YAML pipeline definitions in an Azure DevOps project. Returns pipeline ID, name, path, repository, and YAML file path.", {
|
|
14
|
+
project: z.string().describe("The project name"),
|
|
15
|
+
}, async ({ project }) => {
|
|
16
|
+
try {
|
|
17
|
+
const result = await ctx.pipelines.listPipelineDefinitions(project);
|
|
18
|
+
return { content: [{ type: "text", text: `Pipeline definitions in project '${project}':\n\n${JSON.stringify(result, null, 2)}` }] };
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
console.error("Error listing pipelines:", error);
|
|
22
|
+
return { content: [{ type: "text", text: `Failed to list pipelines: ${error.message}` }] };
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
readonlyCount++;
|
|
26
|
+
server.tool("get-pipeline-definition", "Get detailed YAML pipeline definition including triggers, variables (secrets masked), queue settings, and repository configuration.", {
|
|
27
|
+
project: z.string().describe("The project name"),
|
|
28
|
+
definitionId: z.number().describe("The pipeline definition ID"),
|
|
29
|
+
}, async ({ project, definitionId }) => {
|
|
30
|
+
try {
|
|
31
|
+
const result = await ctx.pipelines.getPipelineDefinition(project, definitionId);
|
|
32
|
+
return { content: [{ type: "text", text: `Pipeline definition ${definitionId}:\n\n${JSON.stringify(result, null, 2)}` }] };
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
console.error("Error getting pipeline definition:", error);
|
|
36
|
+
return { content: [{ type: "text", text: `Failed to get pipeline definition: ${error.message}` }] };
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
readonlyCount++;
|
|
40
|
+
server.tool("get-pipeline-yaml", "Get the YAML content for a pipeline definition. Returns the raw azure-pipelines.yml content.", {
|
|
41
|
+
project: z.string().describe("The project name"),
|
|
42
|
+
definitionId: z.number().describe("The pipeline definition ID"),
|
|
43
|
+
}, async ({ project, definitionId }) => {
|
|
44
|
+
try {
|
|
45
|
+
const result = await ctx.pipelines.getPipelineYaml(project, definitionId);
|
|
46
|
+
return { content: [{ type: "text", text: `Pipeline YAML for definition ${definitionId}:\n\n${JSON.stringify(result, null, 2)}` }] };
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
console.error("Error getting pipeline YAML:", error);
|
|
50
|
+
return { content: [{ type: "text", text: `Failed to get pipeline YAML: ${error.message}` }] };
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
readonlyCount++;
|
|
54
|
+
server.tool("list-pipeline-runs", "List recent pipeline runs for a definition. Returns build ID, status, result, branch, timestamps, and who triggered it.", {
|
|
55
|
+
project: z.string().describe("The project name"),
|
|
56
|
+
definitionId: z.number().describe("The pipeline definition ID"),
|
|
57
|
+
top: z.number().optional().describe("Maximum number of results (default: 10)"),
|
|
58
|
+
}, async ({ project, definitionId, top }) => {
|
|
59
|
+
try {
|
|
60
|
+
const result = await ctx.pipelines.listPipelineRuns(project, definitionId, top || 10);
|
|
61
|
+
return { content: [{ type: "text", text: `Recent runs for pipeline ${definitionId}:\n\n${JSON.stringify(result, null, 2)}` }] };
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
console.error("Error listing pipeline runs:", error);
|
|
65
|
+
return { content: [{ type: "text", text: `Failed to list pipeline runs: ${error.message}` }] };
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
readonlyCount++;
|
|
69
|
+
// ========================================
|
|
70
|
+
// BUILD TROUBLESHOOTING TOOLS (Read-only)
|
|
71
|
+
// ========================================
|
|
72
|
+
server.tool("get-build-status", "Get build status and details. Use detail='summary' for basic status, 'timeline' for step breakdown (default scope='problems' shows only failed/warning items), or 'full' for logs. The timelineScope controls what records are included: 'problems' (default, only errors/warnings), 'stages' (minimal), 'jobs' (moderate), 'all' (everything).", {
|
|
73
|
+
project: z.string().describe("The project name"),
|
|
74
|
+
buildId: z.number().describe("The build ID"),
|
|
75
|
+
detail: z.enum(["summary", "timeline", "full"]).optional().describe("Level of detail: 'summary' (default), 'timeline' (include steps), or 'full' (include logs)"),
|
|
76
|
+
timelineScope: z.enum(["stages", "jobs", "all", "problems"]).optional().describe("Timeline scope: 'problems' (default, only errors/warnings/failures), 'stages' (minimal), 'jobs' (moderate), 'all' (everything - may be large)"),
|
|
77
|
+
maxIssues: z.number().optional().describe("Maximum issues per record (default: 5, prioritizes errors over warnings)"),
|
|
78
|
+
}, async ({ project, buildId, detail, timelineScope, maxIssues }) => {
|
|
79
|
+
try {
|
|
80
|
+
const result = await ctx.pipelines.getBuildStatus(project, buildId, detail || 'summary', timelineScope || 'problems', maxIssues || 5);
|
|
81
|
+
return { content: [{ type: "text", text: `Build ${buildId} status:\n\n${JSON.stringify(result, null, 2)}` }] };
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
console.error("Error getting build status:", error);
|
|
85
|
+
return { content: [{ type: "text", text: `Failed to get build status: ${error.message}` }] };
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
readonlyCount++;
|
|
89
|
+
server.tool("get-build-timeline", "Get step-by-step breakdown of a build. Shows stages, jobs, and tasks with timing, status, and error/warning counts. Use scope to control output size: 'problems' (default, only errors/warnings), 'stages' (minimal), 'jobs' (moderate), 'all' (everything). Always includes summary stats regardless of scope.", {
|
|
90
|
+
project: z.string().describe("The project name"),
|
|
91
|
+
buildId: z.number().describe("The build ID"),
|
|
92
|
+
scope: z.enum(["stages", "jobs", "all", "problems"]).optional().describe("Filter scope: 'problems' (default, only errors/warnings/failures), 'stages' (minimal), 'jobs' (moderate), 'all' (everything - may be large)"),
|
|
93
|
+
maxIssues: z.number().optional().describe("Maximum issues per record (default: 5, prioritizes errors over warnings)"),
|
|
94
|
+
}, async ({ project, buildId, scope, maxIssues }) => {
|
|
95
|
+
try {
|
|
96
|
+
const result = await ctx.pipelines.getBuildTimeline(project, buildId, scope || 'problems', maxIssues || 5);
|
|
97
|
+
return { content: [{ type: "text", text: `Build ${buildId} timeline:\n\n${JSON.stringify(result, null, 2)}` }] };
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
console.error("Error getting build timeline:", error);
|
|
101
|
+
return { content: [{ type: "text", text: `Failed to get build timeline: ${error.message}` }] };
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
readonlyCount++;
|
|
105
|
+
server.tool("get-build-logs", "Get build logs. Without logId, returns list of available logs with line counts. With logId, returns that log's content filtered by mode to reduce noise from progress indicators.", {
|
|
106
|
+
project: z.string().describe("The project name"),
|
|
107
|
+
buildId: z.number().describe("The build ID"),
|
|
108
|
+
logId: z.number().optional().describe("Optional specific log ID to retrieve content"),
|
|
109
|
+
mode: z.enum(['summary', 'full', 'errors']).optional().describe("Filter mode: 'summary' (default) removes progress indicators like 'Receiving objects: 1%', 'full' returns everything, 'errors' shows only errors/warnings"),
|
|
110
|
+
}, async ({ project, buildId, logId, mode }) => {
|
|
111
|
+
try {
|
|
112
|
+
const result = await ctx.pipelines.getBuildLogs(project, buildId, logId, mode || 'summary');
|
|
113
|
+
return { content: [{ type: "text", text: `Build ${buildId} logs:\n\n${JSON.stringify(result, null, 2)}` }] };
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
console.error("Error getting build logs:", error);
|
|
117
|
+
return { content: [{ type: "text", text: `Failed to get build logs: ${error.message}` }] };
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
readonlyCount++;
|
|
121
|
+
server.tool("list-pending-approvals", "List pending pipeline approvals for a build. Reads the build timeline to find approval checkpoints, then queries approval details including assigned approvers, status, and instructions.", {
|
|
122
|
+
project: z.string().describe("The project name"),
|
|
123
|
+
buildId: z.number().describe("The build ID to check for pending approvals"),
|
|
124
|
+
}, async ({ project, buildId }) => {
|
|
125
|
+
try {
|
|
126
|
+
const result = await ctx.pipelines.listPendingApprovals(project, buildId);
|
|
127
|
+
return { content: [{ type: "text", text: `Pending approvals for build ${buildId}:\n\n${JSON.stringify(result, null, 2)}` }] };
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
console.error("Error listing pending approvals:", error);
|
|
131
|
+
return { content: [{ type: "text", text: `Failed to list pending approvals: ${error.message}` }] };
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
readonlyCount++;
|
|
135
|
+
// ========================================
|
|
136
|
+
// PIPELINE UPSERT TOOLS (Tier 2)
|
|
137
|
+
// ========================================
|
|
138
|
+
if (ctx.tierFlags.enablePipelineUpsert) {
|
|
139
|
+
server.tool("create-pipeline", "Create a new YAML pipeline definition. Supports Azure Repos (default), GitHub, and GitHub Enterprise repositories. (requires AZUREDEVOPS_ENABLE_PIPELINE_UPSERT=true)", {
|
|
140
|
+
project: z.string().describe("The project name"),
|
|
141
|
+
name: z.string().describe("Pipeline name"),
|
|
142
|
+
yamlPath: z.string().describe("Path to YAML file in repository (e.g., 'azure-pipelines.yml' or 'pipelines/build.yml')"),
|
|
143
|
+
folder: z.string().optional().describe("Optional folder path (default: root)"),
|
|
144
|
+
repositoryId: z.string().describe("Repository identifier. For Azure Repos: GUID. For GitHub: 'org/repo' format (e.g., 'myorg/my-repo')"),
|
|
145
|
+
repositoryType: z.enum(["TfsGit", "GitHub", "GitHubEnterprise"])
|
|
146
|
+
.optional()
|
|
147
|
+
.describe("Repository type. Default: 'TfsGit' (Azure Repos). Use 'GitHub' for github.com or 'GitHubEnterprise' for self-hosted GitHub."),
|
|
148
|
+
repositoryUrl: z.string().optional().describe("Repository URL. Required for GitHub/GitHubEnterprise (e.g., 'https://github.com/org/repo.git' or 'https://ghe.company.com/org/repo.git')"),
|
|
149
|
+
defaultBranch: z.string().optional().describe("Default branch for the pipeline. Required for GitHub/GitHubEnterprise (e.g., 'refs/heads/main' or 'main')"),
|
|
150
|
+
serviceConnectionId: z.string().optional().describe("Service connection ID (GUID) for GitHub authentication. Required for GitHub/GitHubEnterprise. Get from list-service-connections tool."),
|
|
151
|
+
}, async ({ project, name, repositoryId, yamlPath, folder, repositoryType, repositoryUrl, defaultBranch, serviceConnectionId }) => {
|
|
152
|
+
try {
|
|
153
|
+
const result = await ctx.pipelines.createPipelineDefinition(project, name, repositoryId, yamlPath, folder, repositoryType, repositoryUrl, defaultBranch, serviceConnectionId);
|
|
154
|
+
return { content: [{ type: "text", text: `Created pipeline '${name}':\n\n${JSON.stringify(result, null, 2)}` }] };
|
|
155
|
+
}
|
|
156
|
+
catch (error) {
|
|
157
|
+
console.error("Error creating pipeline:", error);
|
|
158
|
+
return { content: [{ type: "text", text: `Failed to create pipeline: ${error.message}` }] };
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
upsertCount++;
|
|
162
|
+
server.tool("update-pipeline", "Update a pipeline definition (name, path, queue status, triggers, or variables). (requires AZUREDEVOPS_ENABLE_PIPELINE_UPSERT=true)", {
|
|
163
|
+
project: z.string().describe("The project name"),
|
|
164
|
+
definitionId: z.number().describe("The pipeline definition ID"),
|
|
165
|
+
name: z.string().optional().describe("New pipeline name"),
|
|
166
|
+
path: z.string().optional().describe("New folder path"),
|
|
167
|
+
queueStatus: z.enum(["enabled", "disabled", "paused"]).optional().describe("Queue status"),
|
|
168
|
+
variables: z.record(z.object({
|
|
169
|
+
value: z.string(),
|
|
170
|
+
isSecret: z.boolean().optional(),
|
|
171
|
+
allowOverride: z.boolean().optional()
|
|
172
|
+
})).optional().describe("Pipeline variables to set"),
|
|
173
|
+
}, async ({ project, definitionId, name, path, queueStatus, variables }) => {
|
|
174
|
+
try {
|
|
175
|
+
const updates = {};
|
|
176
|
+
if (name)
|
|
177
|
+
updates.name = name;
|
|
178
|
+
if (path)
|
|
179
|
+
updates.path = path;
|
|
180
|
+
if (queueStatus)
|
|
181
|
+
updates.queueStatus = queueStatus;
|
|
182
|
+
if (variables)
|
|
183
|
+
updates.variables = variables;
|
|
184
|
+
const result = await ctx.pipelines.updatePipelineDefinition(project, definitionId, updates);
|
|
185
|
+
return { content: [{ type: "text", text: `Updated pipeline ${definitionId}:\n\n${JSON.stringify(result, null, 2)}` }] };
|
|
186
|
+
}
|
|
187
|
+
catch (error) {
|
|
188
|
+
console.error("Error updating pipeline:", error);
|
|
189
|
+
return { content: [{ type: "text", text: `Failed to update pipeline: ${error.message}` }] };
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
upsertCount++;
|
|
193
|
+
server.tool("rename-pipeline", "Rename a pipeline definition. (requires AZUREDEVOPS_ENABLE_PIPELINE_UPSERT=true)", {
|
|
194
|
+
project: z.string().describe("The project name"),
|
|
195
|
+
definitionId: z.number().describe("The pipeline definition ID"),
|
|
196
|
+
newName: z.string().describe("The new pipeline name"),
|
|
197
|
+
}, async ({ project, definitionId, newName }) => {
|
|
198
|
+
try {
|
|
199
|
+
const result = await ctx.pipelines.renamePipelineDefinition(project, definitionId, newName);
|
|
200
|
+
return { content: [{ type: "text", text: `Renamed pipeline ${definitionId} to '${newName}':\n\n${JSON.stringify(result, null, 2)}` }] };
|
|
201
|
+
}
|
|
202
|
+
catch (error) {
|
|
203
|
+
console.error("Error renaming pipeline:", error);
|
|
204
|
+
return { content: [{ type: "text", text: `Failed to rename pipeline: ${error.message}` }] };
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
upsertCount++;
|
|
208
|
+
server.tool("queue-build", "Queue a new pipeline build/run. Optionally specify branch, variables, or template parameters. (requires AZUREDEVOPS_ENABLE_PIPELINE_UPSERT=true)", {
|
|
209
|
+
project: z.string().describe("The project name"),
|
|
210
|
+
definitionId: z.number().describe("The pipeline definition ID"),
|
|
211
|
+
branch: z.string().optional().describe("Source branch (e.g., 'refs/heads/main')"),
|
|
212
|
+
variables: z.record(z.string()).optional().describe("Runtime variables to pass"),
|
|
213
|
+
parameters: z.record(z.any()).optional().describe("Template parameters for YAML pipelines"),
|
|
214
|
+
}, async ({ project, definitionId, branch, variables, parameters }) => {
|
|
215
|
+
try {
|
|
216
|
+
const result = await ctx.pipelines.queueBuild(project, definitionId, branch, variables, parameters);
|
|
217
|
+
return { content: [{ type: "text", text: `Queued build for pipeline ${definitionId}:\n\n${JSON.stringify(result, null, 2)}` }] };
|
|
218
|
+
}
|
|
219
|
+
catch (error) {
|
|
220
|
+
console.error("Error queuing build:", error);
|
|
221
|
+
return { content: [{ type: "text", text: `Failed to queue build: ${error.message}` }] };
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
upsertCount++;
|
|
225
|
+
server.tool("cancel-build", "Cancel a running build. The build will finish its current task before stopping. (requires AZUREDEVOPS_ENABLE_PIPELINE_UPSERT=true)", {
|
|
226
|
+
project: z.string().describe("The project name"),
|
|
227
|
+
buildId: z.number().describe("The build ID to cancel"),
|
|
228
|
+
}, async ({ project, buildId }) => {
|
|
229
|
+
try {
|
|
230
|
+
const result = await ctx.pipelines.cancelBuild(project, buildId);
|
|
231
|
+
return { content: [{ type: "text", text: `Cancelled build ${buildId}:\n\n${JSON.stringify(result, null, 2)}` }] };
|
|
232
|
+
}
|
|
233
|
+
catch (error) {
|
|
234
|
+
console.error("Error cancelling build:", error);
|
|
235
|
+
return { content: [{ type: "text", text: `Failed to cancel build: ${error.message}` }] };
|
|
236
|
+
}
|
|
237
|
+
});
|
|
238
|
+
upsertCount++;
|
|
239
|
+
server.tool("retry-build", "Retry a failed build with the same configuration. Creates a new build with same definition, branch, and parameters. (requires AZUREDEVOPS_ENABLE_PIPELINE_UPSERT=true)", {
|
|
240
|
+
project: z.string().describe("The project name"),
|
|
241
|
+
buildId: z.number().describe("The failed build ID to retry"),
|
|
242
|
+
}, async ({ project, buildId }) => {
|
|
243
|
+
try {
|
|
244
|
+
const result = await ctx.pipelines.retryBuild(project, buildId);
|
|
245
|
+
return { content: [{ type: "text", text: `Retried build ${buildId}, new build:\n\n${JSON.stringify(result, null, 2)}` }] };
|
|
246
|
+
}
|
|
247
|
+
catch (error) {
|
|
248
|
+
console.error("Error retrying build:", error);
|
|
249
|
+
return { content: [{ type: "text", text: `Failed to retry build: ${error.message}` }] };
|
|
250
|
+
}
|
|
251
|
+
});
|
|
252
|
+
upsertCount++;
|
|
253
|
+
server.tool("approve-stage", "Approve or reject a pipeline stage gate. Use list-pending-approvals to find approval IDs. (requires AZUREDEVOPS_ENABLE_PIPELINE_UPSERT=true)", {
|
|
254
|
+
project: z.string().describe("The project name"),
|
|
255
|
+
approvalId: z.string().describe("The approval ID (from list-pending-approvals)"),
|
|
256
|
+
status: z.enum(["approved", "rejected"]).describe("Whether to approve or reject"),
|
|
257
|
+
comment: z.string().optional().describe("Optional comment for the approval/rejection"),
|
|
258
|
+
}, async ({ project, approvalId, status, comment }) => {
|
|
259
|
+
try {
|
|
260
|
+
const result = await ctx.pipelines.approveStage(project, approvalId, status, comment);
|
|
261
|
+
return { content: [{ type: "text", text: `Stage ${status}:\n\n${JSON.stringify(result, null, 2)}` }] };
|
|
262
|
+
}
|
|
263
|
+
catch (error) {
|
|
264
|
+
console.error("Error approving stage:", error);
|
|
265
|
+
return { content: [{ type: "text", text: `Failed to ${status} stage: ${error.message}` }] };
|
|
266
|
+
}
|
|
267
|
+
});
|
|
268
|
+
upsertCount++;
|
|
269
|
+
}
|
|
270
|
+
// ========================================
|
|
271
|
+
// PIPELINE DELETE TOOLS (Tier 3)
|
|
272
|
+
// ========================================
|
|
273
|
+
if (ctx.tierFlags.enablePipelineDelete) {
|
|
274
|
+
server.tool("delete-pipeline", "DESTRUCTIVE: Delete a pipeline definition. This cannot be undone. (requires AZUREDEVOPS_ENABLE_PIPELINE_DELETE=true)", {
|
|
275
|
+
project: z.string().describe("The project name"),
|
|
276
|
+
definitionId: z.number().describe("The pipeline definition ID to delete"),
|
|
277
|
+
}, async ({ project, definitionId }) => {
|
|
278
|
+
try {
|
|
279
|
+
const result = await ctx.pipelines.deletePipelineDefinition(project, definitionId);
|
|
280
|
+
return { content: [{ type: "text", text: `Deleted pipeline ${definitionId}:\n\n${JSON.stringify(result, null, 2)}` }] };
|
|
281
|
+
}
|
|
282
|
+
catch (error) {
|
|
283
|
+
console.error("Error deleting pipeline:", error);
|
|
284
|
+
return { content: [{ type: "text", text: `Failed to delete pipeline: ${error.message}` }] };
|
|
285
|
+
}
|
|
286
|
+
});
|
|
287
|
+
deleteCount++;
|
|
288
|
+
}
|
|
289
|
+
return { readonly: readonlyCount, upsert: upsertCount, delete: deleteCount };
|
|
290
|
+
}
|
|
291
|
+
//# sourceMappingURL=pipeline-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline-tools.js","sourceRoot":"","sources":["../../src/tools/pipeline-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-connection-tools.d.ts","sourceRoot":"","sources":["../../src/tools/service-connection-tools.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,cAAc,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAqKrI"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Service connection tools - read-only, upsert (Tier 2), and delete (Tier 3).
|
|
3
|
+
*/
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
export function registerServiceConnectionTools(server, ctx) {
|
|
6
|
+
let readonlyCount = 0;
|
|
7
|
+
let upsertCount = 0;
|
|
8
|
+
let deleteCount = 0;
|
|
9
|
+
// ========================================
|
|
10
|
+
// SERVICE CONNECTION READ-ONLY TOOLS
|
|
11
|
+
// ========================================
|
|
12
|
+
server.tool("list-svc-conns", "List all service connections in a project. Shows connection type, URL, authorization scheme, and sharing status. Credentials are masked.", {
|
|
13
|
+
project: z.string().describe("The project name"),
|
|
14
|
+
}, async ({ project }) => {
|
|
15
|
+
try {
|
|
16
|
+
const result = await ctx.serviceConnections.listServiceConnections(project);
|
|
17
|
+
return { content: [{ type: "text", text: `Service connections in project '${project}':\n\n${JSON.stringify(result, null, 2)}` }] };
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
console.error("Error listing service connections:", error);
|
|
21
|
+
return { content: [{ type: "text", text: `Failed to list service connections: ${error.message}` }] };
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
readonlyCount++;
|
|
25
|
+
server.tool("get-svc-conn", "Get detailed service connection configuration. Returns type, URL, authorization scheme, data fields, and project references. Secrets are masked.", {
|
|
26
|
+
project: z.string().describe("The project name"),
|
|
27
|
+
connectionId: z.string().describe("The service connection ID (GUID)"),
|
|
28
|
+
}, async ({ project, connectionId }) => {
|
|
29
|
+
try {
|
|
30
|
+
const result = await ctx.serviceConnections.getServiceConnection(project, connectionId);
|
|
31
|
+
return { content: [{ type: "text", text: `Service connection ${connectionId}:\n\n${JSON.stringify(result, null, 2)}` }] };
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
console.error("Error getting service connection:", error);
|
|
35
|
+
return { content: [{ type: "text", text: `Failed to get service connection: ${error.message}` }] };
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
readonlyCount++;
|
|
39
|
+
server.tool("get-svc-conn-types", "Get all available service connection types (Azure, AWS, Docker, GitHub, etc.) with their authentication schemes and configuration options.", {}, async () => {
|
|
40
|
+
try {
|
|
41
|
+
const result = await ctx.serviceConnections.getServiceConnectionTypes();
|
|
42
|
+
return { content: [{ type: "text", text: `Available service connection types:\n\n${JSON.stringify(result, null, 2)}` }] };
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
console.error("Error getting service connection types:", error);
|
|
46
|
+
return { content: [{ type: "text", text: `Failed to get service connection types: ${error.message}` }] };
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
readonlyCount++;
|
|
50
|
+
// ========================================
|
|
51
|
+
// SERVICE CONNECTION UPSERT TOOLS (Tier 2)
|
|
52
|
+
// ========================================
|
|
53
|
+
if (ctx.tierFlags.enableServiceConnUpsert) {
|
|
54
|
+
server.tool("create-svc-conn", "Create a new service connection. Use get-svc-conn-types to see available types and auth schemes. (requires AZUREDEVOPS_ENABLE_SERVICE_CONN_UPSERT=true)", {
|
|
55
|
+
project: z.string().describe("The project name"),
|
|
56
|
+
name: z.string().describe("Connection name"),
|
|
57
|
+
type: z.string().describe("Connection type (e.g., 'azurerm', 'github', 'docker', 'aws')"),
|
|
58
|
+
url: z.string().optional().describe("Service URL (required for some types)"),
|
|
59
|
+
description: z.string().optional().describe("Connection description"),
|
|
60
|
+
authorization: z.object({
|
|
61
|
+
scheme: z.string().describe("Auth scheme (e.g., 'ServicePrincipal', 'PersonalAccessToken')"),
|
|
62
|
+
parameters: z.record(z.string()).optional().describe("Auth parameters (credentials)")
|
|
63
|
+
}).optional().describe("Authorization configuration"),
|
|
64
|
+
data: z.record(z.string()).optional().describe("Type-specific configuration data"),
|
|
65
|
+
}, async ({ project, name, type, url, description, authorization, data }) => {
|
|
66
|
+
try {
|
|
67
|
+
const result = await ctx.serviceConnections.createServiceConnection(project, name, type, { url, description, authorization, data });
|
|
68
|
+
return { content: [{ type: "text", text: `Created service connection '${name}':\n\n${JSON.stringify(result, null, 2)}` }] };
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
console.error("Error creating service connection:", error);
|
|
72
|
+
return { content: [{ type: "text", text: `Failed to create service connection: ${error.message}` }] };
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
upsertCount++;
|
|
76
|
+
server.tool("update-svc-conn", "Update a service connection's metadata (name, description, URL, data). Cannot update credentials for security. (requires AZUREDEVOPS_ENABLE_SERVICE_CONN_UPSERT=true)", {
|
|
77
|
+
project: z.string().describe("The project name"),
|
|
78
|
+
connectionId: z.string().describe("The service connection ID (GUID)"),
|
|
79
|
+
name: z.string().optional().describe("New connection name"),
|
|
80
|
+
description: z.string().optional().describe("New description"),
|
|
81
|
+
url: z.string().optional().describe("New service URL"),
|
|
82
|
+
data: z.record(z.string()).optional().describe("Updated data fields"),
|
|
83
|
+
}, async ({ project, connectionId, name, description, url, data }) => {
|
|
84
|
+
try {
|
|
85
|
+
const updates = {};
|
|
86
|
+
if (name)
|
|
87
|
+
updates.name = name;
|
|
88
|
+
if (description)
|
|
89
|
+
updates.description = description;
|
|
90
|
+
if (url)
|
|
91
|
+
updates.url = url;
|
|
92
|
+
if (data)
|
|
93
|
+
updates.data = data;
|
|
94
|
+
const result = await ctx.serviceConnections.updateServiceConnection(project, connectionId, updates);
|
|
95
|
+
return { content: [{ type: "text", text: `Updated service connection ${connectionId}:\n\n${JSON.stringify(result, null, 2)}` }] };
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
console.error("Error updating service connection:", error);
|
|
99
|
+
return { content: [{ type: "text", text: `Failed to update service connection: ${error.message}` }] };
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
upsertCount++;
|
|
103
|
+
server.tool("share-svc-conn", "Share a service connection with other projects. (requires AZUREDEVOPS_ENABLE_SERVICE_CONN_UPSERT=true)", {
|
|
104
|
+
connectionId: z.string().describe("The service connection ID (GUID)"),
|
|
105
|
+
projectIds: z.array(z.string()).describe("Array of project IDs to share with"),
|
|
106
|
+
}, async ({ connectionId, projectIds }) => {
|
|
107
|
+
try {
|
|
108
|
+
const result = await ctx.serviceConnections.shareServiceConnection(connectionId, projectIds);
|
|
109
|
+
return { content: [{ type: "text", text: `Shared service connection ${connectionId}:\n\n${JSON.stringify(result, null, 2)}` }] };
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
console.error("Error sharing service connection:", error);
|
|
113
|
+
return { content: [{ type: "text", text: `Failed to share service connection: ${error.message}` }] };
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
upsertCount++;
|
|
117
|
+
}
|
|
118
|
+
// ========================================
|
|
119
|
+
// SERVICE CONNECTION DELETE TOOLS (Tier 3)
|
|
120
|
+
// ========================================
|
|
121
|
+
if (ctx.tierFlags.enableServiceConnDelete) {
|
|
122
|
+
server.tool("delete-svc-conn", "DESTRUCTIVE: Delete a service connection. Pipelines using this connection will fail. (requires AZUREDEVOPS_ENABLE_SERVICE_CONN_DELETE=true)", {
|
|
123
|
+
project: z.string().describe("The project name"),
|
|
124
|
+
connectionId: z.string().describe("The service connection ID (GUID) to delete"),
|
|
125
|
+
}, async ({ project, connectionId }) => {
|
|
126
|
+
try {
|
|
127
|
+
const result = await ctx.serviceConnections.deleteServiceConnection(project, connectionId);
|
|
128
|
+
return { content: [{ type: "text", text: `Deleted service connection ${connectionId}:\n\n${JSON.stringify(result, null, 2)}` }] };
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
console.error("Error deleting service connection:", error);
|
|
132
|
+
return { content: [{ type: "text", text: `Failed to delete service connection: ${error.message}` }] };
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
deleteCount++;
|
|
136
|
+
}
|
|
137
|
+
return { readonly: readonlyCount, upsert: upsertCount, delete: deleteCount };
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=service-connection-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-connection-tools.js","sourceRoot":"","sources":["../../src/tools/service-connection-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"variable-group-tools.d.ts","sourceRoot":"","sources":["../../src/tools/variable-group-tools.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,cAAc,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAqKjI"}
|