@azure-devops/mcp 2.9.0-nightly.20260809 → 2.9.0-nightly.20260810

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.
@@ -342,11 +342,24 @@ function configureWorkItemTools(server, tokenProvider, connectionProvider, userA
342
342
  });
343
343
  // --- wit_backlog ------------------------------------------------------------
344
344
  server.tool(WORKITEM_TOOLS.wit_backlog, "Retrieve backlog data for a project and team. Use the action parameter to specify the operation.", {
345
- action: z.enum(["list", "list_work_items"]).describe("The action to perform. Options: list (list backlog levels for a team), list_work_items (list work items in a specific backlog level)."),
345
+ action: z
346
+ .enum(["list", "list_work_items", "reorder"])
347
+ .describe("The action to perform. Options: list (list backlog levels for a team), list_work_items (list work items in a specific backlog level), reorder (move work items to a new position in a backlog or iteration)."),
346
348
  project: z.string().optional().describe("The name or ID of the Azure DevOps project. Reuse from prior context if already known. If not provided, a project selection prompt will be shown."),
347
349
  team: z.string().optional().describe("The name or ID of the Azure DevOps team. Reuse from prior context if already known. If not provided, a team selection prompt will be shown."),
348
350
  backlogId: z.string().optional().describe("The ID of the backlog category to retrieve work items from. Required for: list_work_items."),
349
- }, async ({ action, project, team, backlogId }) => {
351
+ ids: z.array(z.coerce.number().int().min(1)).min(1).optional().describe("The IDs of the work items to reorder. Required for: reorder."),
352
+ previousId: z.coerce
353
+ .number()
354
+ .int()
355
+ .min(0)
356
+ .optional()
357
+ .describe("The ID of the work item that should be before the reordered items. Use 0 to specify the beginning of the list. Optional for: reorder."),
358
+ nextId: z.coerce.number().int().min(0).optional().describe("The ID of the work item that should be after the reordered items. Use 0 to specify the end of the list. Optional for: reorder."),
359
+ parentId: z.coerce.number().int().min(0).optional().describe("The parent ID for all work items involved in the operation. Use 0 to indicate the items have no parent. Optional for: reorder."),
360
+ iterationPath: z.string().optional().describe("The iteration path for the reorder operation. Used when reordering items in an iteration backlog. Optional for: reorder."),
361
+ iterationId: z.string().optional().describe("The iteration ID. When provided, reorder items in that iteration instead of the team backlog. Used for: reorder."),
362
+ }, async ({ action, project, team, backlogId, ids, previousId, nextId, parentId, iterationPath, iterationId }) => {
350
363
  try {
351
364
  const connection = await connectionProvider();
352
365
  let resolvedProject = project;
@@ -377,6 +390,13 @@ function configureWorkItemTools(server, tokenProvider, connectionProvider, userA
377
390
  const workItems = await workApi.getBacklogLevelWorkItems(teamContext, backlogId);
378
391
  return { content: [{ type: "text", text: JSON.stringify(workItems, null, 2) }] };
379
392
  }
393
+ if (action === "reorder") {
394
+ if (!ids?.length)
395
+ return { content: [{ type: "text", text: "ids is required for reorder" }], isError: true };
396
+ const operation = { ids, previousId, nextId, parentId, iterationPath };
397
+ const reorderedItems = iterationId ? await workApi.reorderIterationWorkItems(operation, teamContext, iterationId) : await workApi.reorderBacklogWorkItems(operation, teamContext);
398
+ return { content: [{ type: "text", text: JSON.stringify(reorderedItems, null, 2) }] };
399
+ }
380
400
  return { content: [{ type: "text", text: `Unknown action: ${action}` }], isError: true };
381
401
  }
382
402
  catch (error) {
@@ -384,6 +404,7 @@ function configureWorkItemTools(server, tokenProvider, connectionProvider, userA
384
404
  const msgs = {
385
405
  list: `Error listing backlogs: ${errorMessage}`,
386
406
  list_work_items: `Error listing backlog work items: ${errorMessage}`,
407
+ reorder: `Error reordering backlog work items: ${errorMessage}`,
387
408
  };
388
409
  return { content: [{ type: "text", text: msgs[action] ?? `Error: ${errorMessage}` }], isError: true };
389
410
  }
package/dist/version.js CHANGED
@@ -1 +1 @@
1
- export const packageVersion = "2.9.0-nightly.20260809";
1
+ export const packageVersion = "2.9.0-nightly.20260810";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@azure-devops/mcp",
3
- "version": "2.9.0-nightly.20260809",
3
+ "version": "2.9.0-nightly.20260810",
4
4
  "mcpName": "microsoft.com/azure-devops",
5
5
  "description": "MCP server for interacting with Azure DevOps",
6
6
  "license": "MIT",