@slorenzot/mcp-azure 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/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +836 -0
- package/dist/index.js.map +1 -0
- package/package.json +34 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,836 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
|
|
38
|
+
const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
|
|
39
|
+
const zod_1 = require("zod");
|
|
40
|
+
const azdev = __importStar(require("azure-devops-node-api"));
|
|
41
|
+
const witInterfaces = __importStar(require("azure-devops-node-api/interfaces/WorkItemTrackingInterfaces"));
|
|
42
|
+
const VSSInterfaces = __importStar(require("azure-devops-node-api/interfaces/common/VSSInterfaces"));
|
|
43
|
+
const identity_1 = require("@azure/identity");
|
|
44
|
+
const child_process_1 = require("child_process");
|
|
45
|
+
// Helper para abrir URL en el navegador (cross-platform)
|
|
46
|
+
function openBrowser(url) {
|
|
47
|
+
const platform = process.platform;
|
|
48
|
+
let command;
|
|
49
|
+
switch (platform) {
|
|
50
|
+
case "darwin":
|
|
51
|
+
command = `open "${url}"`;
|
|
52
|
+
break;
|
|
53
|
+
case "win32":
|
|
54
|
+
command = `start "" "${url}"`;
|
|
55
|
+
break;
|
|
56
|
+
default:
|
|
57
|
+
command = `xdg-open "${url}"`;
|
|
58
|
+
}
|
|
59
|
+
(0, child_process_1.exec)(command, (error) => {
|
|
60
|
+
if (error) {
|
|
61
|
+
console.error(`No se pudo abrir el navegador: ${error.message}`);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
// Crear el servidor MCP
|
|
66
|
+
const server = new mcp_js_1.McpServer({
|
|
67
|
+
name: "mcp-azure",
|
|
68
|
+
version: "1.0.0",
|
|
69
|
+
});
|
|
70
|
+
// Configuración de conexión
|
|
71
|
+
let connection = null;
|
|
72
|
+
let workItemTrackingApi = null;
|
|
73
|
+
let coreApiClient = null;
|
|
74
|
+
let currentProject = "";
|
|
75
|
+
// Helper para obtener la conexión
|
|
76
|
+
async function getConnection() {
|
|
77
|
+
if (!connection) {
|
|
78
|
+
throw new Error("No hay conexión configurada. Usa ado_configure primero para establecer la conexión.");
|
|
79
|
+
}
|
|
80
|
+
return connection;
|
|
81
|
+
}
|
|
82
|
+
// Helper para obtener Work Item Tracking API
|
|
83
|
+
async function getWitApi() {
|
|
84
|
+
if (!workItemTrackingApi) {
|
|
85
|
+
const conn = await getConnection();
|
|
86
|
+
workItemTrackingApi = await conn.getWorkItemTrackingApi();
|
|
87
|
+
}
|
|
88
|
+
return workItemTrackingApi;
|
|
89
|
+
}
|
|
90
|
+
// Helper para obtener Core API
|
|
91
|
+
async function getCoreApi() {
|
|
92
|
+
if (!coreApiClient) {
|
|
93
|
+
const conn = await getConnection();
|
|
94
|
+
coreApiClient = await conn.getCoreApi();
|
|
95
|
+
}
|
|
96
|
+
return coreApiClient;
|
|
97
|
+
}
|
|
98
|
+
// Helper para formatear Work Item
|
|
99
|
+
function formatWorkItem(workItem) {
|
|
100
|
+
const fields = workItem.fields || {};
|
|
101
|
+
return JSON.stringify({
|
|
102
|
+
id: workItem.id,
|
|
103
|
+
rev: workItem.rev,
|
|
104
|
+
url: workItem.url,
|
|
105
|
+
fields: {
|
|
106
|
+
title: fields["System.Title"],
|
|
107
|
+
state: fields["System.State"],
|
|
108
|
+
workItemType: fields["System.WorkItemType"],
|
|
109
|
+
assignedTo: fields["System.AssignedTo"]?.displayName,
|
|
110
|
+
areaPath: fields["System.AreaPath"],
|
|
111
|
+
iterationPath: fields["System.IterationPath"],
|
|
112
|
+
description: fields["System.Description"],
|
|
113
|
+
tags: fields["System.Tags"],
|
|
114
|
+
createdDate: fields["System.CreatedDate"],
|
|
115
|
+
changedDate: fields["System.ChangedDate"],
|
|
116
|
+
},
|
|
117
|
+
}, null, 2);
|
|
118
|
+
}
|
|
119
|
+
// Helper para formatear lista de Work Items
|
|
120
|
+
function formatWorkItemList(workItems) {
|
|
121
|
+
return workItems
|
|
122
|
+
.map((wi) => `ID: ${wi.id} - URL: ${wi.url}`)
|
|
123
|
+
.join("\n");
|
|
124
|
+
}
|
|
125
|
+
// ============================================
|
|
126
|
+
// HERRAMIENTAS DE AZURE DEVOPS - AUTENTICACIÓN
|
|
127
|
+
// ============================================
|
|
128
|
+
// Scope de Azure DevOps para Azure AD
|
|
129
|
+
const AZURE_DEVOPS_SCOPE = "499b84ac-1321-427f-aa17-267ca6975798/.default";
|
|
130
|
+
// Login con flujo de navegador (Azure AD)
|
|
131
|
+
server.tool("ado_login", "Inicia sesión en Azure DevOps usando el navegador (Azure AD). No requiere PAT.", {
|
|
132
|
+
organization: zod_1.z
|
|
133
|
+
.string()
|
|
134
|
+
.describe("URL de la organización (ej: https://dev.azure.com/mi-org)"),
|
|
135
|
+
project: zod_1.z.string().describe("Nombre del proyecto"),
|
|
136
|
+
method: zod_1.z
|
|
137
|
+
.enum(["browser", "device_code", "azure_cli"])
|
|
138
|
+
.optional()
|
|
139
|
+
.describe("Método de autenticación: 'browser' (abre navegador), 'device_code' (código de dispositivo), 'azure_cli' (usa sesión de az cli)"),
|
|
140
|
+
tenantId: zod_1.z
|
|
141
|
+
.string()
|
|
142
|
+
.optional()
|
|
143
|
+
.describe("ID del tenant de Azure AD (opcional, usa 'common' por defecto)"),
|
|
144
|
+
}, async ({ organization, project, method = "device_code", tenantId }) => {
|
|
145
|
+
workItemTrackingApi = null;
|
|
146
|
+
coreApiClient = null;
|
|
147
|
+
currentProject = project;
|
|
148
|
+
const tenant = tenantId || "common";
|
|
149
|
+
let credential;
|
|
150
|
+
let authMessage = "";
|
|
151
|
+
try {
|
|
152
|
+
switch (method) {
|
|
153
|
+
case "browser":
|
|
154
|
+
// Abre el navegador automáticamente
|
|
155
|
+
credential = new identity_1.InteractiveBrowserCredential({
|
|
156
|
+
tenantId: tenant,
|
|
157
|
+
redirectUri: "http://localhost:8400",
|
|
158
|
+
});
|
|
159
|
+
authMessage = "Abriendo navegador para autenticación...";
|
|
160
|
+
break;
|
|
161
|
+
case "device_code":
|
|
162
|
+
// Muestra código para ingresar en el navegador
|
|
163
|
+
credential = new identity_1.DeviceCodeCredential({
|
|
164
|
+
tenantId: tenant,
|
|
165
|
+
userPromptCallback: (info) => {
|
|
166
|
+
// Abrir el navegador con la URL de verificación
|
|
167
|
+
openBrowser(info.verificationUri);
|
|
168
|
+
console.error(`\n${info.message}\n`);
|
|
169
|
+
},
|
|
170
|
+
});
|
|
171
|
+
authMessage =
|
|
172
|
+
"Se abrirá el navegador. Ingresa el código que aparece en la consola.";
|
|
173
|
+
break;
|
|
174
|
+
case "azure_cli":
|
|
175
|
+
// Usa la sesión de Azure CLI existente
|
|
176
|
+
credential = new identity_1.AzureCliCredential();
|
|
177
|
+
authMessage = "Usando sesión de Azure CLI...";
|
|
178
|
+
break;
|
|
179
|
+
}
|
|
180
|
+
// Obtener el token de acceso
|
|
181
|
+
const tokenResponse = await credential.getToken(AZURE_DEVOPS_SCOPE);
|
|
182
|
+
if (!tokenResponse?.token) {
|
|
183
|
+
throw new Error("No se pudo obtener el token de acceso");
|
|
184
|
+
}
|
|
185
|
+
// Crear conexión con el token de Bearer
|
|
186
|
+
const authHandler = azdev.getBearerHandler(tokenResponse.token);
|
|
187
|
+
connection = new azdev.WebApi(organization, authHandler);
|
|
188
|
+
// Verificar conexión
|
|
189
|
+
const connData = await connection.connect();
|
|
190
|
+
return {
|
|
191
|
+
content: [
|
|
192
|
+
{
|
|
193
|
+
type: "text",
|
|
194
|
+
text: `✓ Autenticación exitosa con Azure AD\n- Método: ${method}\n- Organización: ${organization}\n- Proyecto: ${project}\n- Usuario: ${connData.authenticatedUser?.providerDisplayName || "N/A"}\n- Token expira: ${tokenResponse.expiresOnTimestamp ? new Date(tokenResponse.expiresOnTimestamp).toLocaleString() : "N/A"}`,
|
|
195
|
+
},
|
|
196
|
+
],
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
catch (error) {
|
|
200
|
+
connection = null;
|
|
201
|
+
throw new Error(`Error de autenticación: ${error.message}`);
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
// Configurar Azure DevOps con PAT (método alternativo)
|
|
205
|
+
server.tool("ado_configure", "Configura la conexión a Azure DevOps con token de acceso personal (PAT). Alternativa a ado_login.", {
|
|
206
|
+
organization: zod_1.z
|
|
207
|
+
.string()
|
|
208
|
+
.describe("URL de la organización (ej: https://dev.azure.com/mi-org)"),
|
|
209
|
+
project: zod_1.z.string().describe("Nombre del proyecto"),
|
|
210
|
+
pat: zod_1.z
|
|
211
|
+
.string()
|
|
212
|
+
.describe("Token de acceso personal (PAT) de Azure DevOps"),
|
|
213
|
+
}, async ({ organization, project, pat }) => {
|
|
214
|
+
const authHandler = azdev.getPersonalAccessTokenHandler(pat);
|
|
215
|
+
connection = new azdev.WebApi(organization, authHandler);
|
|
216
|
+
workItemTrackingApi = null;
|
|
217
|
+
coreApiClient = null;
|
|
218
|
+
currentProject = project;
|
|
219
|
+
// Verificar conexión
|
|
220
|
+
try {
|
|
221
|
+
const connData = await connection.connect();
|
|
222
|
+
return {
|
|
223
|
+
content: [
|
|
224
|
+
{
|
|
225
|
+
type: "text",
|
|
226
|
+
text: `Conexión establecida exitosamente.\n- Organización: ${organization}\n- Proyecto: ${project}\n- Usuario autenticado: ${connData.authenticatedUser?.providerDisplayName || "N/A"}`,
|
|
227
|
+
},
|
|
228
|
+
],
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
catch (error) {
|
|
232
|
+
connection = null;
|
|
233
|
+
throw new Error(`Error al conectar: ${error.message}`);
|
|
234
|
+
}
|
|
235
|
+
});
|
|
236
|
+
// ============================================
|
|
237
|
+
// HERRAMIENTAS DE AZURE DEVOPS WORK ITEMS
|
|
238
|
+
// ============================================
|
|
239
|
+
// Obtener un Work Item por ID
|
|
240
|
+
server.tool("ado_get_work_item", "Obtiene un Work Item de Azure DevOps por su ID", {
|
|
241
|
+
id: zod_1.z.number().describe("El ID del Work Item"),
|
|
242
|
+
full: zod_1.z
|
|
243
|
+
.boolean()
|
|
244
|
+
.optional()
|
|
245
|
+
.describe("Si es true, devuelve todos los campos"),
|
|
246
|
+
}, async ({ id, full }) => {
|
|
247
|
+
const api = await getWitApi();
|
|
248
|
+
const expand = full
|
|
249
|
+
? witInterfaces.WorkItemExpand.All
|
|
250
|
+
: witInterfaces.WorkItemExpand.Fields;
|
|
251
|
+
const workItem = await api.getWorkItem(id, undefined, undefined, expand);
|
|
252
|
+
if (!workItem) {
|
|
253
|
+
throw new Error(`Work Item con ID ${id} no encontrado`);
|
|
254
|
+
}
|
|
255
|
+
const result = full
|
|
256
|
+
? JSON.stringify(workItem, null, 2)
|
|
257
|
+
: formatWorkItem(workItem);
|
|
258
|
+
return {
|
|
259
|
+
content: [{ type: "text", text: result }],
|
|
260
|
+
};
|
|
261
|
+
});
|
|
262
|
+
// Consultar Work Items por Sprint
|
|
263
|
+
server.tool("ado_query_sprint", "Consulta User Stories de un sprint específico en Azure DevOps", {
|
|
264
|
+
iterationPath: zod_1.z
|
|
265
|
+
.string()
|
|
266
|
+
.describe("Ruta del sprint (ej: 'Proyecto\\Sprint1')"),
|
|
267
|
+
state: zod_1.z
|
|
268
|
+
.string()
|
|
269
|
+
.optional()
|
|
270
|
+
.describe("Filtrar por estado (Active, New, Closed, etc.)"),
|
|
271
|
+
}, async ({ iterationPath, state }) => {
|
|
272
|
+
const api = await getWitApi();
|
|
273
|
+
const stateFilter = state ? ` AND [System.State] = '${state}'` : "";
|
|
274
|
+
const wiql = {
|
|
275
|
+
query: `SELECT [System.Id], [System.Title], [System.State], [System.Tags] FROM WorkItems WHERE [System.WorkItemType] = 'User Story'${stateFilter} AND [System.IterationPath] UNDER '${iterationPath}' ORDER BY [System.Id]`,
|
|
276
|
+
};
|
|
277
|
+
const teamContext = { project: currentProject };
|
|
278
|
+
const queryResult = await api.queryByWiql(wiql, teamContext);
|
|
279
|
+
const workItemRefs = queryResult.workItems || [];
|
|
280
|
+
if (workItemRefs.length === 0) {
|
|
281
|
+
return {
|
|
282
|
+
content: [
|
|
283
|
+
{ type: "text", text: "No se encontraron Work Items en este sprint" },
|
|
284
|
+
],
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
// Obtener detalles de los Work Items
|
|
288
|
+
const ids = workItemRefs.map((wi) => wi.id).filter((id) => id !== undefined);
|
|
289
|
+
const workItems = await api.getWorkItems(ids, ["System.Id", "System.Title", "System.State", "System.Tags"], undefined, witInterfaces.WorkItemExpand.Fields);
|
|
290
|
+
const result = workItems
|
|
291
|
+
.map((wi) => {
|
|
292
|
+
const fields = wi.fields || {};
|
|
293
|
+
return `ID: ${wi.id} | ${fields["System.Title"]} | Estado: ${fields["System.State"]} | Tags: ${fields["System.Tags"] || "N/A"}`;
|
|
294
|
+
})
|
|
295
|
+
.join("\n");
|
|
296
|
+
return {
|
|
297
|
+
content: [{ type: "text", text: result || "Sin resultados" }],
|
|
298
|
+
};
|
|
299
|
+
});
|
|
300
|
+
// Consultar Work Items por Área
|
|
301
|
+
server.tool("ado_query_area", "Consulta User Stories de un área específica en Azure DevOps", {
|
|
302
|
+
areaPath: zod_1.z.string().describe("Ruta del área (ej: 'Proyecto\\Equipo')"),
|
|
303
|
+
workItemType: zod_1.z
|
|
304
|
+
.string()
|
|
305
|
+
.optional()
|
|
306
|
+
.describe("Tipo de Work Item (User Story, Bug, Task, etc.)"),
|
|
307
|
+
}, async ({ areaPath, workItemType }) => {
|
|
308
|
+
const api = await getWitApi();
|
|
309
|
+
const type = workItemType || "User Story";
|
|
310
|
+
const wiql = {
|
|
311
|
+
query: `SELECT [System.Id], [System.Title], [System.State], [System.Tags] FROM WorkItems WHERE [System.WorkItemType] = '${type}' AND [System.AreaPath] UNDER '${areaPath}' ORDER BY [System.Id] DESC`,
|
|
312
|
+
};
|
|
313
|
+
const teamContext = { project: currentProject };
|
|
314
|
+
const queryResult = await api.queryByWiql(wiql, teamContext);
|
|
315
|
+
const workItemRefs = queryResult.workItems || [];
|
|
316
|
+
if (workItemRefs.length === 0) {
|
|
317
|
+
return {
|
|
318
|
+
content: [
|
|
319
|
+
{ type: "text", text: "No se encontraron Work Items en esta área" },
|
|
320
|
+
],
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
const ids = workItemRefs.map((wi) => wi.id).filter((id) => id !== undefined);
|
|
324
|
+
const workItems = await api.getWorkItems(ids, ["System.Id", "System.Title", "System.State", "System.Tags"], undefined, witInterfaces.WorkItemExpand.Fields);
|
|
325
|
+
const result = workItems
|
|
326
|
+
.map((wi) => {
|
|
327
|
+
const fields = wi.fields || {};
|
|
328
|
+
return `ID: ${wi.id} | ${fields["System.Title"]} | Estado: ${fields["System.State"]} | Tags: ${fields["System.Tags"] || "N/A"}`;
|
|
329
|
+
})
|
|
330
|
+
.join("\n");
|
|
331
|
+
return {
|
|
332
|
+
content: [{ type: "text", text: result || "Sin resultados" }],
|
|
333
|
+
};
|
|
334
|
+
});
|
|
335
|
+
// Ejecutar query WIQL personalizado
|
|
336
|
+
server.tool("ado_query_wiql", "Ejecuta una consulta WIQL personalizada en Azure DevOps", {
|
|
337
|
+
wiql: zod_1.z.string().describe("Query WIQL completa"),
|
|
338
|
+
getDetails: zod_1.z
|
|
339
|
+
.boolean()
|
|
340
|
+
.optional()
|
|
341
|
+
.describe("Si es true, obtiene los detalles completos de cada Work Item"),
|
|
342
|
+
}, async ({ wiql, getDetails }) => {
|
|
343
|
+
const api = await getWitApi();
|
|
344
|
+
const wiqlQuery = { query: wiql };
|
|
345
|
+
const teamContext = { project: currentProject };
|
|
346
|
+
const queryResult = await api.queryByWiql(wiqlQuery, teamContext);
|
|
347
|
+
const workItemRefs = queryResult.workItems || [];
|
|
348
|
+
if (workItemRefs.length === 0) {
|
|
349
|
+
return {
|
|
350
|
+
content: [{ type: "text", text: "No se encontraron resultados" }],
|
|
351
|
+
};
|
|
352
|
+
}
|
|
353
|
+
if (!getDetails) {
|
|
354
|
+
return {
|
|
355
|
+
content: [{ type: "text", text: formatWorkItemList(workItemRefs) }],
|
|
356
|
+
};
|
|
357
|
+
}
|
|
358
|
+
const ids = workItemRefs.map((wi) => wi.id).filter((id) => id !== undefined);
|
|
359
|
+
const workItems = await api.getWorkItems(ids);
|
|
360
|
+
const result = workItems.map((wi) => formatWorkItem(wi)).join("\n---\n");
|
|
361
|
+
return {
|
|
362
|
+
content: [{ type: "text", text: result }],
|
|
363
|
+
};
|
|
364
|
+
});
|
|
365
|
+
// Crear un Work Item
|
|
366
|
+
server.tool("ado_create_work_item", "Crea un nuevo Work Item en Azure DevOps", {
|
|
367
|
+
title: zod_1.z.string().describe("Título del Work Item"),
|
|
368
|
+
type: zod_1.z
|
|
369
|
+
.string()
|
|
370
|
+
.describe("Tipo de Work Item (User Story, Bug, Task, etc.)"),
|
|
371
|
+
description: zod_1.z.string().optional().describe("Descripción del Work Item"),
|
|
372
|
+
areaPath: zod_1.z.string().optional().describe("Ruta del área"),
|
|
373
|
+
iterationPath: zod_1.z.string().optional().describe("Ruta del sprint/iteración"),
|
|
374
|
+
assignedTo: zod_1.z.string().optional().describe("Usuario asignado"),
|
|
375
|
+
}, async ({ title, type, description, areaPath, iterationPath, assignedTo }) => {
|
|
376
|
+
const api = await getWitApi();
|
|
377
|
+
const patchDocument = [
|
|
378
|
+
{
|
|
379
|
+
op: VSSInterfaces.Operation.Add,
|
|
380
|
+
path: "/fields/System.Title",
|
|
381
|
+
value: title,
|
|
382
|
+
},
|
|
383
|
+
];
|
|
384
|
+
if (description) {
|
|
385
|
+
patchDocument.push({
|
|
386
|
+
op: VSSInterfaces.Operation.Add,
|
|
387
|
+
path: "/fields/System.Description",
|
|
388
|
+
value: description,
|
|
389
|
+
});
|
|
390
|
+
}
|
|
391
|
+
if (areaPath) {
|
|
392
|
+
patchDocument.push({
|
|
393
|
+
op: VSSInterfaces.Operation.Add,
|
|
394
|
+
path: "/fields/System.AreaPath",
|
|
395
|
+
value: areaPath,
|
|
396
|
+
});
|
|
397
|
+
}
|
|
398
|
+
if (iterationPath) {
|
|
399
|
+
patchDocument.push({
|
|
400
|
+
op: VSSInterfaces.Operation.Add,
|
|
401
|
+
path: "/fields/System.IterationPath",
|
|
402
|
+
value: iterationPath,
|
|
403
|
+
});
|
|
404
|
+
}
|
|
405
|
+
if (assignedTo) {
|
|
406
|
+
patchDocument.push({
|
|
407
|
+
op: VSSInterfaces.Operation.Add,
|
|
408
|
+
path: "/fields/System.AssignedTo",
|
|
409
|
+
value: assignedTo,
|
|
410
|
+
});
|
|
411
|
+
}
|
|
412
|
+
const workItem = await api.createWorkItem(null, patchDocument, currentProject, type);
|
|
413
|
+
return {
|
|
414
|
+
content: [
|
|
415
|
+
{
|
|
416
|
+
type: "text",
|
|
417
|
+
text: `Work Item creado exitosamente:\n${formatWorkItem(workItem)}`,
|
|
418
|
+
},
|
|
419
|
+
],
|
|
420
|
+
};
|
|
421
|
+
});
|
|
422
|
+
// Actualizar un Work Item
|
|
423
|
+
server.tool("ado_update_work_item", "Actualiza un Work Item existente en Azure DevOps", {
|
|
424
|
+
id: zod_1.z.number().describe("ID del Work Item a actualizar"),
|
|
425
|
+
title: zod_1.z.string().optional().describe("Nuevo título"),
|
|
426
|
+
state: zod_1.z
|
|
427
|
+
.string()
|
|
428
|
+
.optional()
|
|
429
|
+
.describe("Nuevo estado (New, Active, Closed, etc.)"),
|
|
430
|
+
assignedTo: zod_1.z.string().optional().describe("Usuario asignado"),
|
|
431
|
+
description: zod_1.z.string().optional().describe("Nueva descripción"),
|
|
432
|
+
fields: zod_1.z
|
|
433
|
+
.record(zod_1.z.string(), zod_1.z.string())
|
|
434
|
+
.optional()
|
|
435
|
+
.describe("Campos adicionales como objeto {campo: valor}"),
|
|
436
|
+
}, async ({ id, title, state, assignedTo, description, fields }) => {
|
|
437
|
+
const api = await getWitApi();
|
|
438
|
+
const patchDocument = [];
|
|
439
|
+
if (title) {
|
|
440
|
+
patchDocument.push({
|
|
441
|
+
op: VSSInterfaces.Operation.Add,
|
|
442
|
+
path: "/fields/System.Title",
|
|
443
|
+
value: title,
|
|
444
|
+
});
|
|
445
|
+
}
|
|
446
|
+
if (state) {
|
|
447
|
+
patchDocument.push({
|
|
448
|
+
op: VSSInterfaces.Operation.Add,
|
|
449
|
+
path: "/fields/System.State",
|
|
450
|
+
value: state,
|
|
451
|
+
});
|
|
452
|
+
}
|
|
453
|
+
if (assignedTo) {
|
|
454
|
+
patchDocument.push({
|
|
455
|
+
op: VSSInterfaces.Operation.Add,
|
|
456
|
+
path: "/fields/System.AssignedTo",
|
|
457
|
+
value: assignedTo,
|
|
458
|
+
});
|
|
459
|
+
}
|
|
460
|
+
if (description) {
|
|
461
|
+
patchDocument.push({
|
|
462
|
+
op: VSSInterfaces.Operation.Add,
|
|
463
|
+
path: "/fields/System.Description",
|
|
464
|
+
value: description,
|
|
465
|
+
});
|
|
466
|
+
}
|
|
467
|
+
if (fields) {
|
|
468
|
+
for (const [field, value] of Object.entries(fields)) {
|
|
469
|
+
patchDocument.push({
|
|
470
|
+
op: VSSInterfaces.Operation.Add,
|
|
471
|
+
path: `/fields/${field}`,
|
|
472
|
+
value: value,
|
|
473
|
+
});
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
if (patchDocument.length === 0) {
|
|
477
|
+
throw new Error("Debe proporcionar al menos un campo para actualizar");
|
|
478
|
+
}
|
|
479
|
+
const workItem = await api.updateWorkItem(null, patchDocument, id);
|
|
480
|
+
return {
|
|
481
|
+
content: [
|
|
482
|
+
{
|
|
483
|
+
type: "text",
|
|
484
|
+
text: `Work Item actualizado exitosamente:\n${formatWorkItem(workItem)}`,
|
|
485
|
+
},
|
|
486
|
+
],
|
|
487
|
+
};
|
|
488
|
+
});
|
|
489
|
+
// Listar iteraciones/sprints
|
|
490
|
+
server.tool("ado_list_iterations", "Lista las iteraciones/sprints disponibles en el proyecto", {}, async () => {
|
|
491
|
+
const api = await getWitApi();
|
|
492
|
+
const iterations = await api.getClassificationNode(currentProject, witInterfaces.TreeStructureGroup.Iterations, undefined, 10);
|
|
493
|
+
function formatIterations(node, indent = "") {
|
|
494
|
+
let result = `${indent}${node.name}`;
|
|
495
|
+
if (node.attributes) {
|
|
496
|
+
const startDate = node.attributes["startDate"];
|
|
497
|
+
const finishDate = node.attributes["finishDate"];
|
|
498
|
+
if (startDate || finishDate) {
|
|
499
|
+
result += ` (${startDate ? new Date(startDate).toLocaleDateString() : "?"} - ${finishDate ? new Date(finishDate).toLocaleDateString() : "?"})`;
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
result += "\n";
|
|
503
|
+
if (node.children) {
|
|
504
|
+
for (const child of node.children) {
|
|
505
|
+
result += formatIterations(child, indent + " ");
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
return result;
|
|
509
|
+
}
|
|
510
|
+
const result = formatIterations(iterations);
|
|
511
|
+
return {
|
|
512
|
+
content: [{ type: "text", text: result }],
|
|
513
|
+
};
|
|
514
|
+
});
|
|
515
|
+
// Listar áreas del proyecto
|
|
516
|
+
server.tool("ado_list_areas", "Lista las áreas disponibles en el proyecto", {}, async () => {
|
|
517
|
+
const api = await getWitApi();
|
|
518
|
+
const areas = await api.getClassificationNode(currentProject, witInterfaces.TreeStructureGroup.Areas, undefined, 10);
|
|
519
|
+
function formatAreas(node, indent = "") {
|
|
520
|
+
let result = `${indent}${node.name}\n`;
|
|
521
|
+
if (node.children) {
|
|
522
|
+
for (const child of node.children) {
|
|
523
|
+
result += formatAreas(child, indent + " ");
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
return result;
|
|
527
|
+
}
|
|
528
|
+
const result = formatAreas(areas);
|
|
529
|
+
return {
|
|
530
|
+
content: [{ type: "text", text: result }],
|
|
531
|
+
};
|
|
532
|
+
});
|
|
533
|
+
// ============================================
|
|
534
|
+
// PROMPTS DE MCP PARA IA
|
|
535
|
+
// ============================================
|
|
536
|
+
// Prompt para iniciar sesión en Azure DevOps
|
|
537
|
+
server.prompt("connect", "Inicia sesión en Azure DevOps usando un Personal Access Token (PAT).", {
|
|
538
|
+
organization: zod_1.z
|
|
539
|
+
.string()
|
|
540
|
+
.describe("URL de la organización (ej: https://dev.azure.com/mi-org)"),
|
|
541
|
+
project: zod_1.z.string().optional().describe("Nombre del proyecto"),
|
|
542
|
+
pat: zod_1.z.string().describe("Personal Access Token (PAT)"),
|
|
543
|
+
}, async ({ organization, project, pat }) => {
|
|
544
|
+
let instructions = `Conectando a Azure DevOps...
|
|
545
|
+
|
|
546
|
+
**Datos de conexión:**
|
|
547
|
+
- Organización: ${organization}
|
|
548
|
+
- Proyecto: ${project || "(no especificado)"}
|
|
549
|
+
- PAT: ****${pat.slice(-4)}
|
|
550
|
+
|
|
551
|
+
`;
|
|
552
|
+
if (!project) {
|
|
553
|
+
instructions += `Por favor proporciona el nombre del proyecto para continuar.
|
|
554
|
+
|
|
555
|
+
Una vez tengas el proyecto, ejecuta:
|
|
556
|
+
\`ado_configure(organization="${organization}", project="TU_PROYECTO", pat="${pat}")\``;
|
|
557
|
+
}
|
|
558
|
+
else {
|
|
559
|
+
instructions += `Ejecuta la herramienta ado_configure para establecer la conexión:
|
|
560
|
+
\`ado_configure(organization="${organization}", project="${project}", pat="${pat}")\``;
|
|
561
|
+
}
|
|
562
|
+
return {
|
|
563
|
+
messages: [
|
|
564
|
+
{
|
|
565
|
+
role: "user",
|
|
566
|
+
content: {
|
|
567
|
+
type: "text",
|
|
568
|
+
text: instructions,
|
|
569
|
+
},
|
|
570
|
+
},
|
|
571
|
+
],
|
|
572
|
+
};
|
|
573
|
+
});
|
|
574
|
+
// Prompt para analizar un sprint
|
|
575
|
+
server.prompt("analyze_sprint", "Analiza el estado actual de un sprint y proporciona un resumen", {
|
|
576
|
+
iterationPath: zod_1.z.string().describe("Ruta del sprint a analizar"),
|
|
577
|
+
}, async ({ iterationPath }) => {
|
|
578
|
+
return {
|
|
579
|
+
messages: [
|
|
580
|
+
{
|
|
581
|
+
role: "user",
|
|
582
|
+
content: {
|
|
583
|
+
type: "text",
|
|
584
|
+
text: `Por favor analiza el sprint "${iterationPath}" en Azure DevOps:
|
|
585
|
+
|
|
586
|
+
1. Primero, usa la herramienta ado_query_sprint para obtener todas las User Stories del sprint
|
|
587
|
+
2. Cuenta cuántas están en cada estado (New, Active, Closed, etc.)
|
|
588
|
+
3. Identifica si hay User Stories bloqueadas o en riesgo
|
|
589
|
+
4. Proporciona un resumen ejecutivo del progreso del sprint
|
|
590
|
+
5. Sugiere acciones si hay problemas
|
|
591
|
+
|
|
592
|
+
Usa las herramientas de Azure DevOps disponibles para obtener la información necesaria.`,
|
|
593
|
+
},
|
|
594
|
+
},
|
|
595
|
+
],
|
|
596
|
+
};
|
|
597
|
+
});
|
|
598
|
+
// Prompt para crear User Story desde descripción
|
|
599
|
+
server.prompt("create_user_story", "Crea una User Story bien estructurada a partir de una descripción", {
|
|
600
|
+
description: zod_1.z.string().describe("Descripción de la funcionalidad deseada"),
|
|
601
|
+
areaPath: zod_1.z.string().optional().describe("Área del proyecto"),
|
|
602
|
+
iterationPath: zod_1.z.string().optional().describe("Sprint destino"),
|
|
603
|
+
}, async ({ description, areaPath, iterationPath }) => {
|
|
604
|
+
return {
|
|
605
|
+
messages: [
|
|
606
|
+
{
|
|
607
|
+
role: "user",
|
|
608
|
+
content: {
|
|
609
|
+
type: "text",
|
|
610
|
+
text: `Crea una User Story en Azure DevOps basada en esta descripción:
|
|
611
|
+
|
|
612
|
+
"${description}"
|
|
613
|
+
|
|
614
|
+
Requisitos:
|
|
615
|
+
1. Genera un título conciso y descriptivo
|
|
616
|
+
2. Escribe la descripción en formato: "Como [rol], quiero [acción] para [beneficio]"
|
|
617
|
+
3. Incluye criterios de aceptación claros
|
|
618
|
+
${areaPath ? `4. Asigna al área: ${areaPath}` : ""}
|
|
619
|
+
${iterationPath ? `5. Asigna al sprint: ${iterationPath}` : ""}
|
|
620
|
+
|
|
621
|
+
Usa la herramienta ado_create_work_item para crear la User Story con el contenido generado.`,
|
|
622
|
+
},
|
|
623
|
+
},
|
|
624
|
+
],
|
|
625
|
+
};
|
|
626
|
+
});
|
|
627
|
+
// Prompt para reporte diario de trabajo
|
|
628
|
+
server.prompt("daily_standup", "Genera un reporte de standup diario basado en los work items", {
|
|
629
|
+
assignedTo: zod_1.z.string().describe("Usuario para el reporte"),
|
|
630
|
+
}, async ({ assignedTo }) => {
|
|
631
|
+
return {
|
|
632
|
+
messages: [
|
|
633
|
+
{
|
|
634
|
+
role: "user",
|
|
635
|
+
content: {
|
|
636
|
+
type: "text",
|
|
637
|
+
text: `Genera un reporte de standup diario para ${assignedTo}:
|
|
638
|
+
|
|
639
|
+
1. Usa ado_query_wiql para buscar:
|
|
640
|
+
- Work Items activos asignados a "${assignedTo}"
|
|
641
|
+
- Work Items completados recientemente por "${assignedTo}"
|
|
642
|
+
|
|
643
|
+
2. Organiza el reporte en formato standup:
|
|
644
|
+
- ¿Qué se completó ayer?
|
|
645
|
+
- ¿En qué se está trabajando hoy?
|
|
646
|
+
- ¿Hay algún impedimento?
|
|
647
|
+
|
|
648
|
+
Consulta WIQL sugerida:
|
|
649
|
+
SELECT [System.Id], [System.Title], [System.State], [System.ChangedDate]
|
|
650
|
+
FROM WorkItems
|
|
651
|
+
WHERE [System.AssignedTo] = '${assignedTo}'
|
|
652
|
+
AND [System.State] IN ('Active', 'Closed', 'Resolved')
|
|
653
|
+
ORDER BY [System.ChangedDate] DESC`,
|
|
654
|
+
},
|
|
655
|
+
},
|
|
656
|
+
],
|
|
657
|
+
};
|
|
658
|
+
});
|
|
659
|
+
// Prompt para planificación de sprint
|
|
660
|
+
server.prompt("plan_sprint", "Ayuda a planificar un nuevo sprint", {
|
|
661
|
+
iterationPath: zod_1.z.string().describe("Ruta del sprint a planificar"),
|
|
662
|
+
backlogArea: zod_1.z.string().describe("Área del backlog a revisar"),
|
|
663
|
+
}, async ({ iterationPath, backlogArea }) => {
|
|
664
|
+
return {
|
|
665
|
+
messages: [
|
|
666
|
+
{
|
|
667
|
+
role: "user",
|
|
668
|
+
content: {
|
|
669
|
+
type: "text",
|
|
670
|
+
text: `Ayúdame a planificar el sprint "${iterationPath}":
|
|
671
|
+
|
|
672
|
+
1. Primero, lista las iteraciones disponibles con ado_list_iterations
|
|
673
|
+
2. Busca User Stories en el backlog (estado New) del área "${backlogArea}" usando ado_query_area
|
|
674
|
+
3. Para cada User Story candidata, muestra:
|
|
675
|
+
- ID y Título
|
|
676
|
+
- Estado actual
|
|
677
|
+
- Tags relevantes
|
|
678
|
+
|
|
679
|
+
4. Sugiere cuáles User Stories priorizar basándote en:
|
|
680
|
+
- Dependencias
|
|
681
|
+
- Complejidad aparente
|
|
682
|
+
- Valor de negocio (si hay tags indicativos)
|
|
683
|
+
|
|
684
|
+
5. Para las User Stories seleccionadas, puedo moverlas al sprint usando ado_update_work_item`,
|
|
685
|
+
},
|
|
686
|
+
},
|
|
687
|
+
],
|
|
688
|
+
};
|
|
689
|
+
});
|
|
690
|
+
// Prompt para buscar y actualizar work items
|
|
691
|
+
server.prompt("bulk_update", "Actualiza múltiples work items basado en criterios", {
|
|
692
|
+
searchCriteria: zod_1.z.string().describe("Criterios de búsqueda en lenguaje natural"),
|
|
693
|
+
updateAction: zod_1.z.string().describe("Acción a realizar (ej: cambiar estado, asignar, mover a sprint)"),
|
|
694
|
+
}, async ({ searchCriteria, updateAction }) => {
|
|
695
|
+
return {
|
|
696
|
+
messages: [
|
|
697
|
+
{
|
|
698
|
+
role: "user",
|
|
699
|
+
content: {
|
|
700
|
+
type: "text",
|
|
701
|
+
text: `Necesito actualizar work items en Azure DevOps:
|
|
702
|
+
|
|
703
|
+
**Criterios de búsqueda:** ${searchCriteria}
|
|
704
|
+
**Acción a realizar:** ${updateAction}
|
|
705
|
+
|
|
706
|
+
Por favor:
|
|
707
|
+
1. Genera una consulta WIQL apropiada para encontrar los work items
|
|
708
|
+
2. Ejecuta ado_query_wiql para obtener los IDs
|
|
709
|
+
3. Muéstrame la lista de work items que coinciden
|
|
710
|
+
4. Pide confirmación antes de actualizar
|
|
711
|
+
5. Si confirmo, usa ado_update_work_item para cada uno
|
|
712
|
+
|
|
713
|
+
IMPORTANTE: Siempre muestra lo que vas a cambiar ANTES de hacerlo y espera mi confirmación.`,
|
|
714
|
+
},
|
|
715
|
+
},
|
|
716
|
+
],
|
|
717
|
+
};
|
|
718
|
+
});
|
|
719
|
+
// Prompt para generar reporte de proyecto
|
|
720
|
+
server.prompt("project_report", "Genera un reporte del estado del proyecto", {}, async () => {
|
|
721
|
+
return {
|
|
722
|
+
messages: [
|
|
723
|
+
{
|
|
724
|
+
role: "user",
|
|
725
|
+
content: {
|
|
726
|
+
type: "text",
|
|
727
|
+
text: `Genera un reporte completo del estado del proyecto en Azure DevOps:
|
|
728
|
+
|
|
729
|
+
1. **Estructura del proyecto:**
|
|
730
|
+
- Usa ado_list_areas para mostrar las áreas
|
|
731
|
+
- Usa ado_list_iterations para mostrar los sprints
|
|
732
|
+
|
|
733
|
+
2. **Estado por Sprint:**
|
|
734
|
+
- Para cada sprint activo, cuenta work items por estado
|
|
735
|
+
|
|
736
|
+
3. **Métricas generales:**
|
|
737
|
+
- Total de work items abiertos vs cerrados
|
|
738
|
+
- Work items sin asignar
|
|
739
|
+
- Work items antiguos (más de 30 días sin cambios)
|
|
740
|
+
|
|
741
|
+
4. **Recomendaciones:**
|
|
742
|
+
- Identifica cuellos de botella
|
|
743
|
+
- Sugiere acciones de mejora
|
|
744
|
+
|
|
745
|
+
Usa las herramientas disponibles para recopilar esta información.`,
|
|
746
|
+
},
|
|
747
|
+
},
|
|
748
|
+
],
|
|
749
|
+
};
|
|
750
|
+
});
|
|
751
|
+
// Prompt para crear bug desde descripción
|
|
752
|
+
server.prompt("report_bug", "Crea un bug report estructurado a partir de una descripción", {
|
|
753
|
+
bugDescription: zod_1.z.string().describe("Descripción del bug encontrado"),
|
|
754
|
+
severity: zod_1.z.enum(["1 - Critical", "2 - High", "3 - Medium", "4 - Low"]).optional().describe("Severidad del bug"),
|
|
755
|
+
}, async ({ bugDescription, severity }) => {
|
|
756
|
+
return {
|
|
757
|
+
messages: [
|
|
758
|
+
{
|
|
759
|
+
role: "user",
|
|
760
|
+
content: {
|
|
761
|
+
type: "text",
|
|
762
|
+
text: `Crea un Bug en Azure DevOps basado en esta descripción:
|
|
763
|
+
|
|
764
|
+
"${bugDescription}"
|
|
765
|
+
|
|
766
|
+
Por favor:
|
|
767
|
+
1. Genera un título claro y conciso
|
|
768
|
+
2. Estructura la descripción con:
|
|
769
|
+
- **Pasos para reproducir**
|
|
770
|
+
- **Comportamiento esperado**
|
|
771
|
+
- **Comportamiento actual**
|
|
772
|
+
- **Ambiente/Contexto**
|
|
773
|
+
${severity ? `3. Severidad: ${severity}` : ""}
|
|
774
|
+
|
|
775
|
+
Usa la herramienta ado_create_work_item con type="Bug" para crear el bug.`,
|
|
776
|
+
},
|
|
777
|
+
},
|
|
778
|
+
],
|
|
779
|
+
};
|
|
780
|
+
});
|
|
781
|
+
// ============================================
|
|
782
|
+
// RECURSOS DE MCP
|
|
783
|
+
// ============================================
|
|
784
|
+
// Recurso para información de conexión
|
|
785
|
+
server.resource("connection-status", "ado://connection/status", async () => {
|
|
786
|
+
if (!connection) {
|
|
787
|
+
return {
|
|
788
|
+
contents: [
|
|
789
|
+
{
|
|
790
|
+
uri: "ado://connection/status",
|
|
791
|
+
mimeType: "application/json",
|
|
792
|
+
text: JSON.stringify({ connected: false, message: "No conectado. Usa ado_login o ado_configure." }),
|
|
793
|
+
},
|
|
794
|
+
],
|
|
795
|
+
};
|
|
796
|
+
}
|
|
797
|
+
try {
|
|
798
|
+
const connData = await connection.connect();
|
|
799
|
+
return {
|
|
800
|
+
contents: [
|
|
801
|
+
{
|
|
802
|
+
uri: "ado://connection/status",
|
|
803
|
+
mimeType: "application/json",
|
|
804
|
+
text: JSON.stringify({
|
|
805
|
+
connected: true,
|
|
806
|
+
project: currentProject,
|
|
807
|
+
user: connData.authenticatedUser?.providerDisplayName || "N/A",
|
|
808
|
+
userId: connData.authenticatedUser?.id,
|
|
809
|
+
}),
|
|
810
|
+
},
|
|
811
|
+
],
|
|
812
|
+
};
|
|
813
|
+
}
|
|
814
|
+
catch {
|
|
815
|
+
return {
|
|
816
|
+
contents: [
|
|
817
|
+
{
|
|
818
|
+
uri: "ado://connection/status",
|
|
819
|
+
mimeType: "application/json",
|
|
820
|
+
text: JSON.stringify({ connected: false, message: "Error al verificar conexión" }),
|
|
821
|
+
},
|
|
822
|
+
],
|
|
823
|
+
};
|
|
824
|
+
}
|
|
825
|
+
});
|
|
826
|
+
// Función principal para iniciar el servidor
|
|
827
|
+
async function main() {
|
|
828
|
+
const transport = new stdio_js_1.StdioServerTransport();
|
|
829
|
+
await server.connect(transport);
|
|
830
|
+
console.error("Servidor MCP Azure DevOps iniciado (usando SDK)");
|
|
831
|
+
}
|
|
832
|
+
main().catch((error) => {
|
|
833
|
+
console.error("Error al iniciar el servidor:", error);
|
|
834
|
+
process.exit(1);
|
|
835
|
+
});
|
|
836
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@slorenzot/mcp-azure",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Servidor MCP para Azure DevOps",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"mcp",
|
|
7
|
+
"azure",
|
|
8
|
+
"model-context-protocol"
|
|
9
|
+
],
|
|
10
|
+
"license": "MIT",
|
|
11
|
+
"author": "Soulberto Lorenzo",
|
|
12
|
+
"type": "commonjs",
|
|
13
|
+
"main": "dist/index.js",
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
15
|
+
"bin": {
|
|
16
|
+
"mcp-azure": "dist/index.js"
|
|
17
|
+
},
|
|
18
|
+
"scripts": {
|
|
19
|
+
"build": "tsc",
|
|
20
|
+
"start": "node dist/index.js",
|
|
21
|
+
"dev": "tsc --watch",
|
|
22
|
+
"prepare": "npm run build"
|
|
23
|
+
},
|
|
24
|
+
"dependencies": {
|
|
25
|
+
"@azure/identity": "^4.5.0",
|
|
26
|
+
"@modelcontextprotocol/sdk": "^1.25.1",
|
|
27
|
+
"azure-devops-node-api": "^14.1.0",
|
|
28
|
+
"zod": "^4.2.1"
|
|
29
|
+
},
|
|
30
|
+
"devDependencies": {
|
|
31
|
+
"@types/node": "^25.0.3",
|
|
32
|
+
"typescript": "^5.9.3"
|
|
33
|
+
}
|
|
34
|
+
}
|