@mcp-consultant-tools/azure-devops 27.0.0 → 28.0.0-beta.10
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/azure-devops-client.d.ts +42 -0
- package/build/azure-devops-client.d.ts.map +1 -0
- package/build/azure-devops-client.js +144 -0
- package/build/azure-devops-client.js.map +1 -0
- package/build/cli/commands/build-commands.d.ts +7 -0
- package/build/cli/commands/build-commands.d.ts.map +1 -0
- package/build/cli/commands/build-commands.js +59 -0
- package/build/cli/commands/build-commands.js.map +1 -0
- package/build/cli/commands/configuration-commands.d.ts +7 -0
- package/build/cli/commands/configuration-commands.d.ts.map +1 -0
- package/build/cli/commands/configuration-commands.js +24 -0
- package/build/cli/commands/configuration-commands.js.map +1 -0
- package/build/cli/commands/index.d.ts +14 -0
- package/build/cli/commands/index.d.ts.map +1 -0
- package/build/cli/commands/index.js +27 -0
- package/build/cli/commands/index.js.map +1 -0
- package/build/cli/commands/pull-request-commands.d.ts +7 -0
- package/build/cli/commands/pull-request-commands.d.ts.map +1 -0
- package/build/cli/commands/pull-request-commands.js +234 -0
- package/build/cli/commands/pull-request-commands.js.map +1 -0
- package/build/cli/commands/sync-commands.d.ts +7 -0
- package/build/cli/commands/sync-commands.d.ts.map +1 -0
- package/build/cli/commands/sync-commands.js +148 -0
- package/build/cli/commands/sync-commands.js.map +1 -0
- package/build/cli/commands/variable-group-commands.d.ts +7 -0
- package/build/cli/commands/variable-group-commands.d.ts.map +1 -0
- package/build/cli/commands/variable-group-commands.js +36 -0
- package/build/cli/commands/variable-group-commands.js.map +1 -0
- package/build/cli/commands/wiki-commands.d.ts +7 -0
- package/build/cli/commands/wiki-commands.d.ts.map +1 -0
- package/build/cli/commands/wiki-commands.js +152 -0
- package/build/cli/commands/wiki-commands.js.map +1 -0
- package/build/cli/commands/work-item-commands.d.ts +7 -0
- package/build/cli/commands/work-item-commands.d.ts.map +1 -0
- package/build/cli/commands/work-item-commands.js +169 -0
- package/build/cli/commands/work-item-commands.js.map +1 -0
- package/build/cli/output.d.ts +11 -0
- package/build/cli/output.d.ts.map +1 -0
- package/build/cli/output.js +10 -0
- package/build/cli/output.js.map +1 -0
- package/build/cli.d.ts +9 -0
- package/build/cli.d.ts.map +1 -0
- package/build/cli.js +27 -0
- package/build/cli.js.map +1 -0
- package/build/context-factory.d.ts +10 -0
- package/build/context-factory.d.ts.map +1 -0
- package/build/context-factory.js +61 -0
- package/build/context-factory.js.map +1 -0
- package/build/index.d.ts +9 -11
- package/build/index.d.ts.map +1 -1
- package/build/index.js +14 -1906
- package/build/index.js.map +1 -1
- package/build/models/api-types.d.ts +159 -0
- package/build/models/api-types.d.ts.map +1 -0
- package/build/models/api-types.js +5 -0
- package/build/models/api-types.js.map +1 -0
- package/build/models/index.d.ts +5 -0
- package/build/models/index.d.ts.map +1 -0
- package/build/models/index.js +5 -0
- package/build/models/index.js.map +1 -0
- package/build/prompts/index.d.ts +3 -0
- package/build/prompts/index.d.ts.map +1 -0
- package/build/prompts/index.js +83 -0
- package/build/prompts/index.js.map +1 -0
- package/build/prompts/templates.d.ts +8 -0
- package/build/prompts/templates.d.ts.map +1 -0
- package/build/prompts/templates.js +126 -0
- package/build/prompts/templates.js.map +1 -0
- package/build/services/build-service.d.ts +16 -0
- package/build/services/build-service.d.ts.map +1 -0
- package/build/services/build-service.js +195 -0
- package/build/services/build-service.js.map +1 -0
- package/build/services/configuration-service.d.ts +7 -0
- package/build/services/configuration-service.d.ts.map +1 -0
- package/build/services/configuration-service.js +24 -0
- package/build/services/configuration-service.js.map +1 -0
- package/build/services/index.d.ts +11 -0
- package/build/services/index.d.ts.map +1 -0
- package/build/services/index.js +11 -0
- package/build/services/index.js.map +1 -0
- package/build/services/pull-request-service.d.ts +29 -0
- package/build/services/pull-request-service.d.ts.map +1 -0
- package/build/services/pull-request-service.js +390 -0
- package/build/services/pull-request-service.js.map +1 -0
- package/build/services/sync-service.d.ts +19 -0
- package/build/services/sync-service.d.ts.map +1 -0
- package/build/services/sync-service.js +463 -0
- package/build/services/sync-service.js.map +1 -0
- package/build/services/variable-group-service.d.ts +11 -0
- package/build/services/variable-group-service.d.ts.map +1 -0
- package/build/services/variable-group-service.js +62 -0
- package/build/services/variable-group-service.js.map +1 -0
- package/build/services/wiki-service.d.ts +41 -0
- package/build/services/wiki-service.d.ts.map +1 -0
- package/build/services/wiki-service.js +346 -0
- package/build/services/wiki-service.js.map +1 -0
- package/build/services/work-item-service.d.ts +22 -0
- package/build/services/work-item-service.d.ts.map +1 -0
- package/build/services/work-item-service.js +285 -0
- package/build/services/work-item-service.js.map +1 -0
- package/build/sync/file-utils.d.ts +7 -5
- package/build/sync/file-utils.d.ts.map +1 -1
- package/build/sync/file-utils.js +17 -8
- package/build/sync/file-utils.js.map +1 -1
- package/build/sync/markdown-serializer.d.ts +19 -4
- package/build/sync/markdown-serializer.d.ts.map +1 -1
- package/build/sync/markdown-serializer.js +48 -31
- package/build/sync/markdown-serializer.js.map +1 -1
- package/build/tool-examples.d.ts +9 -8
- package/build/tool-examples.d.ts.map +1 -1
- package/build/tool-examples.js +29 -12
- package/build/tool-examples.js.map +1 -1
- package/build/tools/build-tools.d.ts +3 -0
- package/build/tools/build-tools.d.ts.map +1 -0
- package/build/tools/build-tools.js +56 -0
- package/build/tools/build-tools.js.map +1 -0
- package/build/tools/configuration-tools.d.ts +6 -0
- package/build/tools/configuration-tools.d.ts.map +1 -0
- package/build/tools/configuration-tools.js +30 -0
- package/build/tools/configuration-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 +30 -0
- package/build/tools/index.js.map +1 -0
- package/build/tools/pull-request-tools.d.ts +5 -0
- package/build/tools/pull-request-tools.d.ts.map +1 -0
- package/build/tools/pull-request-tools.js +227 -0
- package/build/tools/pull-request-tools.js.map +1 -0
- package/build/tools/sync-tools.d.ts +3 -0
- package/build/tools/sync-tools.d.ts.map +1 -0
- package/build/tools/sync-tools.js +146 -0
- package/build/tools/sync-tools.js.map +1 -0
- package/build/tools/variable-group-tools.d.ts +3 -0
- package/build/tools/variable-group-tools.d.ts.map +1 -0
- package/build/tools/variable-group-tools.js +32 -0
- package/build/tools/variable-group-tools.js.map +1 -0
- package/build/tools/wiki-tools.d.ts +3 -0
- package/build/tools/wiki-tools.d.ts.map +1 -0
- package/build/tools/wiki-tools.js +151 -0
- package/build/tools/wiki-tools.js.map +1 -0
- package/build/tools/work-item-tools.d.ts +3 -0
- package/build/tools/work-item-tools.d.ts.map +1 -0
- package/build/tools/work-item-tools.js +188 -0
- package/build/tools/work-item-tools.js.map +1 -0
- package/build/types.d.ts +23 -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 +5 -3
- package/build/AzureDevOpsService.d.ts +0 -489
- package/build/AzureDevOpsService.d.ts.map +0 -1
- package/build/AzureDevOpsService.js +0 -1558
- package/build/AzureDevOpsService.js.map +0 -1
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wiki Tools - 9 tools for wiki operations
|
|
3
|
+
*/
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
import { descWithExamples, ATTACHMENT_PATH_EXAMPLES } from '../tool-examples.js';
|
|
6
|
+
export function registerWikiTools(server, ctx) {
|
|
7
|
+
server.tool("get-wikis", "Get all wikis in an Azure DevOps project", {
|
|
8
|
+
project: z.string().describe("The project name"),
|
|
9
|
+
}, async ({ project }) => {
|
|
10
|
+
try {
|
|
11
|
+
const result = await ctx.wiki.getWikis(project);
|
|
12
|
+
return { content: [{ type: "text", text: `Wikis in project '${project}':\n\n${JSON.stringify(result, null, 2)}` }] };
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
console.error("Error getting wikis:", error);
|
|
16
|
+
return { content: [{ type: "text", text: `Failed to get wikis: ${error.message}` }] };
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
server.tool("search-wiki-pages", "Search wiki pages across Azure DevOps projects", {
|
|
20
|
+
searchText: z.string().describe("The text to search for"),
|
|
21
|
+
project: z.string().optional().describe("Optional project filter"),
|
|
22
|
+
maxResults: z.number().optional().describe("Maximum number of results (default: 25)"),
|
|
23
|
+
}, async ({ searchText, project, maxResults }) => {
|
|
24
|
+
try {
|
|
25
|
+
const result = await ctx.wiki.searchWikiPages(searchText, project, maxResults);
|
|
26
|
+
return { content: [{ type: "text", text: `Wiki search results for '${searchText}':\n\n${JSON.stringify(result, null, 2)}` }] };
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
console.error("Error searching wiki pages:", error);
|
|
30
|
+
return { content: [{ type: "text", text: `Failed to search wiki pages: ${error.message}` }] };
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
server.tool("get-wiki-page", "Get a specific wiki page with content from Azure DevOps", {
|
|
34
|
+
project: z.string().describe("The project name"),
|
|
35
|
+
wikiId: z.string().describe("The wiki identifier (ID or name)"),
|
|
36
|
+
pagePath: z.string().describe("The path to the page (e.g., '/Setup/Authentication')"),
|
|
37
|
+
includeContent: z.boolean().optional().describe("Include page content (default: true)"),
|
|
38
|
+
}, async ({ project, wikiId, pagePath, includeContent }) => {
|
|
39
|
+
try {
|
|
40
|
+
const result = await ctx.wiki.getWikiPage(project, wikiId, pagePath, includeContent ?? true);
|
|
41
|
+
return { content: [{ type: "text", text: `Wiki page '${pagePath}':\n\n${JSON.stringify(result, null, 2)}` }] };
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
console.error("Error getting wiki page:", error);
|
|
45
|
+
return { content: [{ type: "text", text: `Failed to get wiki page: ${error.message}` }] };
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
server.tool("create-wiki-page", "Create a new wiki page in Azure DevOps (requires AZUREDEVOPS_ENABLE_WIKI_WRITE=true)", {
|
|
49
|
+
project: z.string().describe("The project name"),
|
|
50
|
+
wikiId: z.string().describe("The wiki identifier"),
|
|
51
|
+
pagePath: z.string().describe("The path for the new page (e.g., '/Setup/NewGuide')"),
|
|
52
|
+
content: z.string().describe("The markdown content for the page"),
|
|
53
|
+
}, async ({ project, wikiId, pagePath, content }) => {
|
|
54
|
+
try {
|
|
55
|
+
const result = await ctx.wiki.createWikiPage(project, wikiId, pagePath, content);
|
|
56
|
+
return { content: [{ type: "text", text: `Created wiki page '${pagePath}':\n\n${JSON.stringify(result, null, 2)}` }] };
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
console.error("Error creating wiki page:", error);
|
|
60
|
+
return { content: [{ type: "text", text: `Failed to create wiki page: ${error.message}` }] };
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
server.tool("update-wiki-page", "Update an existing wiki page in Azure DevOps. Version is auto-fetched if not provided, so you can update pages without first calling get-wiki-page. (requires AZUREDEVOPS_ENABLE_WIKI_WRITE=true)", {
|
|
64
|
+
project: z.string().describe("The project name"),
|
|
65
|
+
wikiId: z.string().describe("The wiki identifier"),
|
|
66
|
+
pagePath: z.string().describe("The path to the page"),
|
|
67
|
+
content: z.string().describe("The updated markdown content"),
|
|
68
|
+
version: z.string().optional().describe("The ETag/version for optimistic concurrency. If not provided, will be auto-fetched from the current page."),
|
|
69
|
+
}, async ({ project, wikiId, pagePath, content, version }) => {
|
|
70
|
+
try {
|
|
71
|
+
const result = await ctx.wiki.updateWikiPage(project, wikiId, pagePath, content, version);
|
|
72
|
+
return { content: [{ type: "text", text: `Updated wiki page '${pagePath}':\n\n${JSON.stringify(result, null, 2)}` }] };
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
console.error("Error updating wiki page:", error);
|
|
76
|
+
return { content: [{ type: "text", text: `Failed to update wiki page: ${error.message}` }], isError: true };
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
server.tool("ado-str-replace-wiki", "Replace a specific string in an Azure DevOps wiki page without rewriting entire content. More efficient than update-wiki-page for small changes. (requires AZUREDEVOPS_ENABLE_WIKI_WRITE=true)", {
|
|
80
|
+
project: z.string().describe("The project name"),
|
|
81
|
+
wikiId: z.string().describe("The wiki identifier (ID or name)"),
|
|
82
|
+
pagePath: z.string().describe("The path to the wiki page (e.g., '/SharePoint-Online/04-DEV-Configuration')"),
|
|
83
|
+
old_str: z.string().describe("The exact string to replace (must be unique unless replace_all is true)"),
|
|
84
|
+
new_str: z.string().describe("The replacement string"),
|
|
85
|
+
replace_all: z.boolean().optional().describe("If true, replace all occurrences. If false (default), old_str must be unique in the page."),
|
|
86
|
+
description: z.string().optional().describe("Optional description of the change (for audit logging)")
|
|
87
|
+
}, async ({ project, wikiId, pagePath, old_str, new_str, replace_all, description }) => {
|
|
88
|
+
try {
|
|
89
|
+
const result = await ctx.wiki.strReplaceWikiPage(project, wikiId, pagePath, old_str, new_str, replace_all ?? false, description);
|
|
90
|
+
return {
|
|
91
|
+
content: [{ type: "text", text: `Successfully replaced "${old_str}" with "${new_str}" in wiki page '${pagePath}' (${result.occurrences} occurrence(s)):\n\n${JSON.stringify(result, null, 2)}\n\nDiff:\n${result.diff}` }],
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
console.error("Error replacing text in wiki page:", error);
|
|
96
|
+
return { content: [{ type: "text", text: `Failed to replace text in wiki page: ${error.message}` }], isError: true };
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
server.tool("delete-wiki-page", "Delete a wiki page permanently (requires AZUREDEVOPS_ENABLE_WIKI_DELETE=true). WARNING: This permanently deletes the page and all sub-pages.", {
|
|
100
|
+
project: z.string().describe("The project name"),
|
|
101
|
+
wikiId: z.string().describe("The wiki identifier"),
|
|
102
|
+
pagePath: z.string().describe("Page path (e.g., '/Setup/Old-Page')"),
|
|
103
|
+
}, async ({ project, wikiId, pagePath }) => {
|
|
104
|
+
try {
|
|
105
|
+
const result = await ctx.wiki.deleteWikiPage(project, wikiId, pagePath);
|
|
106
|
+
return { content: [{ type: "text", text: `Deleted wiki page:\n\n${JSON.stringify(result, null, 2)}` }] };
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
console.error("Error deleting wiki page:", error);
|
|
110
|
+
return { content: [{ type: "text", text: `Failed to delete wiki page: ${error.message}` }] };
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
server.tool("download-wiki-attachment", "Download a single wiki attachment/image from Azure DevOps wiki to disk. Uses the wiki's backing git repository to retrieve binary files. Claude can then Read the downloaded image for multimodal analysis.", {
|
|
114
|
+
project: z.string().describe("The project name"),
|
|
115
|
+
wikiId: z.string().describe("The wiki identifier (ID or name)"),
|
|
116
|
+
attachmentPath: z.string().describe(descWithExamples("The attachment path as it appears in wiki markdown (e.g., from /.attachments/ references)", ATTACHMENT_PATH_EXAMPLES)),
|
|
117
|
+
outputDir: z.string().optional().describe("Directory to save the file. Default: OS temp dir"),
|
|
118
|
+
}, async ({ project, wikiId, attachmentPath, outputDir }) => {
|
|
119
|
+
try {
|
|
120
|
+
const result = await ctx.wiki.downloadWikiAttachment(project, wikiId, attachmentPath, outputDir);
|
|
121
|
+
return {
|
|
122
|
+
content: [{ type: "text", text: `Downloaded wiki attachment:\n\n${JSON.stringify(result, null, 2)}\n\nUse the Read tool on '${result.filePath}' to view the image.` }],
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
console.error("Error downloading wiki attachment:", error);
|
|
127
|
+
return { content: [{ type: "text", text: `Failed to download wiki attachment: ${error.message}` }] };
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
server.tool("download-wiki-page-attachments", "Download all image/file attachments referenced in a wiki page. Extracts  references from page content and downloads each file to disk. Returns file paths for Claude to Read and interpret images.", {
|
|
131
|
+
project: z.string().describe("The project name"),
|
|
132
|
+
wikiId: z.string().describe("The wiki identifier (ID or name)"),
|
|
133
|
+
pagePath: z.string().describe("The wiki page path (e.g., '/Setup/Authentication')"),
|
|
134
|
+
outputDir: z.string().optional().describe("Directory to save files. Default: OS temp dir"),
|
|
135
|
+
}, async ({ project, wikiId, pagePath, outputDir }) => {
|
|
136
|
+
try {
|
|
137
|
+
const result = await ctx.wiki.downloadWikiPageAttachments(project, wikiId, pagePath, outputDir);
|
|
138
|
+
if (result.totalFound === 0) {
|
|
139
|
+
return { content: [{ type: "text", text: `No attachments found in wiki page '${pagePath}'.` }] };
|
|
140
|
+
}
|
|
141
|
+
return {
|
|
142
|
+
content: [{ type: "text", text: `Downloaded ${result.downloaded}/${result.totalFound} attachments from '${pagePath}':\n\n${JSON.stringify(result, null, 2)}\n\nUse the Read tool on each filePath to view the images.` }],
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
console.error("Error downloading wiki page attachments:", error);
|
|
147
|
+
return { content: [{ type: "text", text: `Failed to download wiki page attachments: ${error.message}` }] };
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=wiki-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wiki-tools.js","sourceRoot":"","sources":["../../src/tools/wiki-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"work-item-tools.d.ts","sourceRoot":"","sources":["../../src/tools/work-item-tools.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI,CA6Q5E"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Work Item Tools - 10 tools for work item operations
|
|
3
|
+
*/
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
import { descWithExamples, WIQL_EXAMPLES, PATCH_OP_EXAMPLES, WORK_ITEM_FIELD_EXAMPLES } from '../tool-examples.js';
|
|
6
|
+
import { getAllLargeTextFields } from '../sync/html-detection.js';
|
|
7
|
+
export function registerWorkItemTools(server, ctx) {
|
|
8
|
+
server.tool("get-work-item", "Get a work item by ID with full details from Azure DevOps", {
|
|
9
|
+
project: z.string().describe("The project name"),
|
|
10
|
+
workItemId: z.number().describe("The work item ID"),
|
|
11
|
+
}, async ({ project, workItemId }) => {
|
|
12
|
+
try {
|
|
13
|
+
const result = await ctx.workItem.getWorkItem(project, workItemId);
|
|
14
|
+
return { content: [{ type: "text", text: `Work item ${workItemId}:\n\n${JSON.stringify(result, null, 2)}` }] };
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
console.error("Error getting work item:", error);
|
|
18
|
+
return { content: [{ type: "text", text: `Failed to get work item: ${error.message}` }] };
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
server.tool("query-work-items", "Query work items using WIQL (Work Item Query Language) in Azure DevOps", {
|
|
22
|
+
project: z.string().describe("The project name"),
|
|
23
|
+
wiql: z.string().describe(descWithExamples("The WIQL query string. SQL-like syntax with field names in brackets. Common fields: [System.Id], [System.Title], [System.State], [System.WorkItemType], [System.AssignedTo], [System.Parent]. Use @Me for current user.", WIQL_EXAMPLES)),
|
|
24
|
+
maxResults: z.number().optional().describe("Maximum number of results (default: 200)"),
|
|
25
|
+
}, async ({ project, wiql, maxResults }) => {
|
|
26
|
+
try {
|
|
27
|
+
const result = await ctx.workItem.queryWorkItems(project, wiql, maxResults);
|
|
28
|
+
return { content: [{ type: "text", text: `Work items query results:\n\n${JSON.stringify(result, null, 2)}` }] };
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
console.error("Error querying work items:", error);
|
|
32
|
+
return { content: [{ type: "text", text: `Failed to query work items: ${error.message}` }] };
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
server.tool("run-saved-query", "Execute a saved Azure DevOps query by its query ID (GUID). Returns a compact summary by default (ID, Title, Assigned To, State, Severity, Priority, Tags, Story Points, Resolved Reason). Use detail='full' for all fields.", {
|
|
36
|
+
project: z.string().describe("The project name"),
|
|
37
|
+
queryId: z.string().describe(descWithExamples("The saved query GUID. Found in ADO query URLs: https://dev.azure.com/{org}/{project}/_queries/query/{queryId}/", [{ label: "From URL", value: "f8c22439-f72d-4018-b863-a52396b26c4b" }])),
|
|
38
|
+
maxResults: z.number().optional().describe("Maximum number of results (default: 50)"),
|
|
39
|
+
detail: z.enum(['summary', 'full']).optional().describe("Level of detail: 'summary' (default) returns key fields only, 'full' returns all fields expanded"),
|
|
40
|
+
fields: z.array(z.string()).optional().describe(descWithExamples("Custom list of ADO field reference names to return. Overrides the default summary fields.", [{ label: "Effort and state", value: '["System.Title", "System.State", "Microsoft.VSTS.Scheduling.Effort"]' }])),
|
|
41
|
+
groupBy: z.string().optional().describe(descWithExamples("Group results by a summary field name and return counts per group.", [
|
|
42
|
+
{ label: "By state", value: "state" },
|
|
43
|
+
{ label: "By assigned to", value: "assignedTo" },
|
|
44
|
+
{ label: "By priority", value: "priority" },
|
|
45
|
+
])),
|
|
46
|
+
}, async ({ project, queryId, maxResults, detail, fields, groupBy }) => {
|
|
47
|
+
try {
|
|
48
|
+
const result = await ctx.workItem.runSavedQuery(project, queryId, maxResults, detail, fields, groupBy);
|
|
49
|
+
return { content: [{ type: "text", text: `Saved query results:\n\n${JSON.stringify(result, null, 2)}` }] };
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
console.error("Error running saved query:", error);
|
|
53
|
+
return { content: [{ type: "text", text: `Failed to run saved query: ${error.message}` }] };
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
server.tool("get-saved-query", "Get a saved Azure DevOps query's metadata and WIQL text without executing it. Useful for inspecting or modifying a query before running it.", {
|
|
57
|
+
project: z.string().describe("The project name"),
|
|
58
|
+
queryId: z.string().describe("The saved query GUID"),
|
|
59
|
+
}, async ({ project, queryId }) => {
|
|
60
|
+
try {
|
|
61
|
+
const result = await ctx.workItem.getSavedQuery(project, queryId);
|
|
62
|
+
return { content: [{ type: "text", text: `Saved query details:\n\n${JSON.stringify(result, null, 2)}` }] };
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
console.error("Error getting saved query:", error);
|
|
66
|
+
return { content: [{ type: "text", text: `Failed to get saved query: ${error.message}` }] };
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
server.tool("get-work-item-comments", "Get comments/discussion for a work item in Azure DevOps", {
|
|
70
|
+
project: z.string().describe("The project name"),
|
|
71
|
+
workItemId: z.number().describe("The work item ID"),
|
|
72
|
+
}, async ({ project, workItemId }) => {
|
|
73
|
+
try {
|
|
74
|
+
const result = await ctx.workItem.getWorkItemComments(project, workItemId);
|
|
75
|
+
return { content: [{ type: "text", text: `Comments for work item ${workItemId}:\n\n${JSON.stringify(result, null, 2)}` }] };
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
console.error("Error getting work item comments:", error);
|
|
79
|
+
return { content: [{ type: "text", text: `Failed to get work item comments: ${error.message}` }] };
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
server.tool("add-work-item-comment", "Add a comment to a work item in Azure DevOps (requires AZUREDEVOPS_ENABLE_WORK_ITEM_WRITE=true). By default, comments are sent as Markdown. For orgs without Markdown preview, set AZUREDEVOPS_COMMENT_FORMAT=html to auto-convert Markdown to HTML.", {
|
|
83
|
+
project: z.string().describe("The project name"),
|
|
84
|
+
workItemId: z.number().describe("The work item ID"),
|
|
85
|
+
commentText: z.string().describe("The comment text in Markdown format. Use standard Markdown syntax: **bold**, *italic*, `code`, - lists, [links](url), etc. Will be auto-converted to HTML if AZUREDEVOPS_COMMENT_FORMAT=html is set."),
|
|
86
|
+
}, async ({ project, workItemId, commentText }) => {
|
|
87
|
+
try {
|
|
88
|
+
const result = await ctx.workItem.addWorkItemComment(project, workItemId, commentText);
|
|
89
|
+
return { content: [{ type: "text", text: `Added comment to work item ${workItemId}:\n\n${JSON.stringify(result, null, 2)}` }] };
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
console.error("Error adding work item comment:", error);
|
|
93
|
+
return { content: [{ type: "text", text: `Failed to add work item comment: ${error.message}` }] };
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
server.tool("update-work-item-comment", "Update an existing comment on a work item in Azure DevOps (requires AZUREDEVOPS_ENABLE_WORK_ITEM_WRITE=true). By default, comments are sent as Markdown. For orgs without Markdown preview, set AZUREDEVOPS_COMMENT_FORMAT=html to auto-convert Markdown to HTML.", {
|
|
97
|
+
project: z.string().describe("The project name"),
|
|
98
|
+
workItemId: z.number().describe("The work item ID"),
|
|
99
|
+
commentId: z.number().describe("The comment ID to update. Get comment IDs from get-work-item-comments."),
|
|
100
|
+
commentText: z.string().describe("The updated comment text in Markdown format. Use standard Markdown syntax: **bold**, *italic*, `code`, - lists, [links](url), etc. Will be auto-converted to HTML if AZUREDEVOPS_COMMENT_FORMAT=html is set."),
|
|
101
|
+
}, async ({ project, workItemId, commentId, commentText }) => {
|
|
102
|
+
try {
|
|
103
|
+
const result = await ctx.workItem.updateWorkItemComment(project, workItemId, commentId, commentText);
|
|
104
|
+
return { content: [{ type: "text", text: `Updated comment ${commentId} on work item ${workItemId}:\n\n${JSON.stringify(result, null, 2)}` }] };
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
console.error("Error updating work item comment:", error);
|
|
108
|
+
return { content: [{ type: "text", text: `Failed to update work item comment: ${error.message}` }] };
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
server.tool("update-work-item", "Update a work item in Azure DevOps using JSON Patch operations (requires AZUREDEVOPS_ENABLE_WORK_ITEM_WRITE=true). Auto-injects markdown format operations for large text fields.", {
|
|
112
|
+
project: z.string().describe("The project name"),
|
|
113
|
+
workItemId: z.number().describe("The work item ID"),
|
|
114
|
+
patchOperations: z.array(z.object({
|
|
115
|
+
op: z.string().describe("The operation type: 'add' (set value), 'replace' (update existing), or 'remove' (clear field)"),
|
|
116
|
+
path: z.string().describe("The field path starting with '/fields/' (e.g., '/fields/System.State', '/fields/System.Title')"),
|
|
117
|
+
value: z.any().optional().describe("The value to set (not required for 'remove' operation)")
|
|
118
|
+
})).describe(descWithExamples("Array of JSON Patch operations. Each operation specifies what to change.", PATCH_OP_EXAMPLES)),
|
|
119
|
+
skipAutoConvert: z.boolean().optional().describe("Skip automatic markdown format injection for large text fields. Only use when explicitly requested. Default: false"),
|
|
120
|
+
}, async ({ project, workItemId, patchOperations, skipAutoConvert }) => {
|
|
121
|
+
try {
|
|
122
|
+
let finalOperations = [...patchOperations];
|
|
123
|
+
const formatOpsAdded = [];
|
|
124
|
+
if (!skipAutoConvert) {
|
|
125
|
+
const allLargeTextFields = getAllLargeTextFields();
|
|
126
|
+
const largeTextFieldsBeingUpdated = patchOperations
|
|
127
|
+
.filter((op) => op.path?.startsWith('/fields/'))
|
|
128
|
+
.map((op) => op.path.replace('/fields/', ''))
|
|
129
|
+
.filter((field) => allLargeTextFields.includes(field));
|
|
130
|
+
for (const field of largeTextFieldsBeingUpdated) {
|
|
131
|
+
const hasFormatOp = finalOperations.some((op) => op.path === `/multilineFieldsFormat/${field}`);
|
|
132
|
+
if (!hasFormatOp) {
|
|
133
|
+
finalOperations.push({
|
|
134
|
+
op: 'add',
|
|
135
|
+
path: `/multilineFieldsFormat/${field}`,
|
|
136
|
+
value: 'Markdown'
|
|
137
|
+
});
|
|
138
|
+
formatOpsAdded.push(field);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
const result = await ctx.workItem.updateWorkItem(project, workItemId, finalOperations);
|
|
143
|
+
let message = `Updated work item ${workItemId}`;
|
|
144
|
+
if (formatOpsAdded.length > 0) {
|
|
145
|
+
message += ` (auto-set markdown format for: ${formatOpsAdded.join(', ')})`;
|
|
146
|
+
}
|
|
147
|
+
return { content: [{ type: "text", text: `${message}:\n\n${JSON.stringify(result, null, 2)}` }] };
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
console.error("Error updating work item:", error);
|
|
151
|
+
return { content: [{ type: "text", text: `Failed to update work item: ${error.message}` }] };
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
server.tool("create-work-item", "Create a new work item in Azure DevOps with optional parent relationship (requires AZUREDEVOPS_ENABLE_WORK_ITEM_WRITE=true)", {
|
|
155
|
+
project: z.string().describe("The project name"),
|
|
156
|
+
workItemType: z.string().describe("The work item type: 'Bug', 'Task', 'User Story', 'Feature', 'Epic', or custom types"),
|
|
157
|
+
fields: z.record(z.any()).describe(descWithExamples("Object with field values. Required: System.Title. Common fields: System.Description, System.State, System.AssignedTo, Microsoft.VSTS.Common.AcceptanceCriteria, Microsoft.VSTS.TCM.ReproSteps (bugs).", WORK_ITEM_FIELD_EXAMPLES)),
|
|
158
|
+
parentId: z.number().optional().describe("Optional parent work item ID (for creating child items). Simplified alternative to relations parameter."),
|
|
159
|
+
relations: z.array(z.object({
|
|
160
|
+
rel: z.string().describe("Relation type (e.g., 'System.LinkTypes.Hierarchy-Reverse' for parent)"),
|
|
161
|
+
url: z.string().describe("URL to related work item (e.g., 'https://dev.azure.com/org/project/_apis/wit/workItems/123')"),
|
|
162
|
+
attributes: z.record(z.any()).optional().describe("Optional relation attributes")
|
|
163
|
+
})).optional().describe("Optional array of work item relationships. Use parentId for simple parent-child relationships.")
|
|
164
|
+
}, async ({ project, workItemType, fields, parentId, relations }) => {
|
|
165
|
+
try {
|
|
166
|
+
const result = await ctx.workItem.createWorkItem(project, workItemType, fields, parentId, relations);
|
|
167
|
+
return { content: [{ type: "text", text: `Created work item:\n\n${JSON.stringify(result, null, 2)}` }] };
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
console.error("Error creating work item:", error);
|
|
171
|
+
return { content: [{ type: "text", text: `Failed to create work item: ${error.message}` }] };
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
server.tool("delete-work-item", "Delete a work item in Azure DevOps (requires AZUREDEVOPS_ENABLE_WORK_ITEM_DELETE=true)", {
|
|
175
|
+
project: z.string().describe("The project name"),
|
|
176
|
+
workItemId: z.number().describe("The work item ID"),
|
|
177
|
+
}, async ({ project, workItemId }) => {
|
|
178
|
+
try {
|
|
179
|
+
const result = await ctx.workItem.deleteWorkItem(project, workItemId);
|
|
180
|
+
return { content: [{ type: "text", text: `Deleted work item ${workItemId}:\n\n${JSON.stringify(result, null, 2)}` }] };
|
|
181
|
+
}
|
|
182
|
+
catch (error) {
|
|
183
|
+
console.error("Error deleting work item:", error);
|
|
184
|
+
return { content: [{ type: "text", text: `Failed to delete work item: ${error.message}` }] };
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=work-item-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"work-item-tools.js","sourceRoot":"","sources":["../../src/tools/work-item-tools.ts"],"names":[],"mappings":"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"}
|
package/build/types.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Service context shared between MCP server and CLI entry points.
|
|
3
|
+
* Uses lazy getters to initialize services on-demand.
|
|
4
|
+
*/
|
|
5
|
+
import type { AzureDevOpsClient } from './azure-devops-client.js';
|
|
6
|
+
import type { WikiService } from './services/wiki-service.js';
|
|
7
|
+
import type { WorkItemService } from './services/work-item-service.js';
|
|
8
|
+
import type { PullRequestService } from './services/pull-request-service.js';
|
|
9
|
+
import type { BuildService } from './services/build-service.js';
|
|
10
|
+
import type { VariableGroupService } from './services/variable-group-service.js';
|
|
11
|
+
import type { SyncService } from './services/sync-service.js';
|
|
12
|
+
import type { ConfigurationService } from './services/configuration-service.js';
|
|
13
|
+
export interface ServiceContext {
|
|
14
|
+
readonly client: AzureDevOpsClient;
|
|
15
|
+
readonly wiki: WikiService;
|
|
16
|
+
readonly workItem: WorkItemService;
|
|
17
|
+
readonly pullRequest: PullRequestService;
|
|
18
|
+
readonly build: BuildService;
|
|
19
|
+
readonly variableGroup: VariableGroupService;
|
|
20
|
+
readonly sync: SyncService;
|
|
21
|
+
readonly configuration: ConfigurationService;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAEhF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,oBAAoB,CAAC;IAC7C,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,oBAAoB,CAAC;CAC9C"}
|
package/build/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mcp-consultant-tools/azure-devops",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "28.0.0-beta.10",
|
|
4
4
|
"description": "MCP server for Azure DevOps integration - wikis, work items, pull requests, and variable group read access",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./build/index.js",
|
|
@@ -41,9 +41,10 @@
|
|
|
41
41
|
"node": ">=16.0.0"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@mcp-consultant-tools/core": "
|
|
44
|
+
"@mcp-consultant-tools/core": "28.0.0-beta.10",
|
|
45
45
|
"@modelcontextprotocol/sdk": "^1.0.4",
|
|
46
46
|
"axios": "^1.8.3",
|
|
47
|
+
"commander": "^14.0.3",
|
|
47
48
|
"marked": "^17.0.1",
|
|
48
49
|
"turndown": "^7.2.2",
|
|
49
50
|
"zod": "^3.24.1"
|
|
@@ -54,6 +55,7 @@
|
|
|
54
55
|
"typescript": "^5.8.2"
|
|
55
56
|
},
|
|
56
57
|
"bin": {
|
|
57
|
-
"mcp-ado": "build/index.js"
|
|
58
|
+
"mcp-ado": "build/index.js",
|
|
59
|
+
"mcp-ado-cli": "build/cli.js"
|
|
58
60
|
}
|
|
59
61
|
}
|