@achieveai/azuredevops-mcp 1.0.0 → 1.1.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/README.md +36 -0
- package/dist/Interfaces/Common.js +12 -33
- package/dist/Interfaces/Common.js.map +1 -1
- package/dist/Tools/BoardsSprintsTools.js +178 -12
- package/dist/Tools/BoardsSprintsTools.js.map +1 -1
- package/dist/Tools/GitTools.js +109 -63
- package/dist/Tools/GitTools.js.map +1 -1
- package/dist/Tools/ProjectTools.js +150 -10
- package/dist/Tools/ProjectTools.js.map +1 -1
- package/dist/Tools/WorkItemTools.js +105 -143
- package/dist/Tools/WorkItemTools.js.map +1 -1
- package/dist/config.js +8 -0
- package/dist/config.js.map +1 -1
- package/dist/utils/formatHelpers.js +173 -0
- package/dist/utils/formatHelpers.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -128,6 +128,40 @@ The integration is organized into eight main tool categories:
|
|
|
128
128
|
- Predict build failures
|
|
129
129
|
- Optimize test selection
|
|
130
130
|
|
|
131
|
+
## Response Format
|
|
132
|
+
|
|
133
|
+
All tool responses return **human-readable markdown** — tables, summaries, confirmations with actionable hints — instead of raw JSON dumps. This makes responses easy to read in any MCP client.
|
|
134
|
+
|
|
135
|
+
**Example: Sprint list**
|
|
136
|
+
```
|
|
137
|
+
## Sprints (3 results)
|
|
138
|
+
| Sprint | Dates | Status |
|
|
139
|
+
|--------|-------|--------|
|
|
140
|
+
| Sprint 24 | Jan 6 – Jan 20 | past |
|
|
141
|
+
| Sprint 25 | Jan 20 – Feb 3 | current |
|
|
142
|
+
| Sprint 26 | Feb 3 – Feb 17 | future |
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
**Example: Work item created**
|
|
146
|
+
```
|
|
147
|
+
## ✅ User Story #4521 Created
|
|
148
|
+
**Title:** Add export to PDF
|
|
149
|
+
**Assigned To:** john@example.com
|
|
150
|
+
**State:** New
|
|
151
|
+
💡 View: https://dev.azure.com/org/project/_workitems/edit/4521
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
**Example: Error with hint**
|
|
155
|
+
```
|
|
156
|
+
## ❌ Error
|
|
157
|
+
Could not find repository "my-repo" in project "MyProject".
|
|
158
|
+
💡 Hint: Use `listRepositories` to see available repositories.
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### Structured Content for Automation
|
|
162
|
+
|
|
163
|
+
Set `ENABLE_STRUCTURED_CONTENT=true` to include machine-readable JSON in the `structuredContent` field alongside the markdown `content`. This is useful for programmatic consumers that need typed data while still having a human-readable fallback.
|
|
164
|
+
|
|
131
165
|
## Installation
|
|
132
166
|
|
|
133
167
|
### Installing via Smithery
|
|
@@ -294,6 +328,7 @@ The server can be configured using the following environment variables:
|
|
|
294
328
|
| AZURE_DEVOPS_USERNAME | Username for NTLM/Basic auth | No** | - |
|
|
295
329
|
| AZURE_DEVOPS_PASSWORD | Password for NTLM/Basic auth | No** | - |
|
|
296
330
|
| AZURE_DEVOPS_DOMAIN | Domain for NTLM auth | No | - |
|
|
331
|
+
| ENABLE_STRUCTURED_CONTENT | Enable machine-readable JSON in structuredContent field | No | false |
|
|
297
332
|
| ALLOWED_TOOLS | Comma-separated list of tool methods to enable | No | All tools |
|
|
298
333
|
|
|
299
334
|
\* Required if `AZURE_DEVOPS_IS_ON_PREMISES=true`
|
|
@@ -379,6 +414,7 @@ The project is structured as follows:
|
|
|
379
414
|
- `Interfaces/`: Type definitions for parameters and responses
|
|
380
415
|
- `Services/`: Service classes for interacting with Azure DevOps APIs
|
|
381
416
|
- `Tools/`: Tool implementations that expose functionality to clients
|
|
417
|
+
- `utils/`: Shared formatting utilities (date formatting, markdown tables, emoji maps)
|
|
382
418
|
- `index.ts`: Main entry point that registers tools and starts the server
|
|
383
419
|
- `config.ts`: Configuration handling
|
|
384
420
|
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.formatMcpResponse = formatMcpResponse;
|
|
4
4
|
exports.formatErrorResponse = formatErrorResponse;
|
|
5
|
+
const config_1 = require("../config");
|
|
5
6
|
/**
|
|
6
7
|
* Formats a response for MCP compatibility
|
|
7
8
|
* @param data The data to format
|
|
@@ -11,43 +12,21 @@ exports.formatErrorResponse = formatErrorResponse;
|
|
|
11
12
|
* @returns MCP-compatible response
|
|
12
13
|
*/
|
|
13
14
|
function formatMcpResponse(data, message, isError = false, includeStructuredContent = false) {
|
|
14
|
-
//
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
content: [
|
|
18
|
-
{
|
|
19
|
-
type: "text",
|
|
20
|
-
text: message
|
|
21
|
-
}
|
|
22
|
-
],
|
|
23
|
-
rawData: data,
|
|
24
|
-
isError
|
|
25
|
-
};
|
|
26
|
-
// Add structured content if requested
|
|
27
|
-
if (includeStructuredContent && data) {
|
|
28
|
-
response.structuredContent = {
|
|
29
|
-
format: "application/json",
|
|
30
|
-
data: data
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
return response;
|
|
34
|
-
}
|
|
15
|
+
// When a message is provided, use it as the sole content (markdown-formatted tools)
|
|
16
|
+
// Only fall back to JSON dump when no message is provided at all
|
|
17
|
+
const hasMessage = message && message.length > 0;
|
|
35
18
|
const response = {
|
|
36
|
-
content:
|
|
37
|
-
{
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
type: "text",
|
|
43
|
-
text: typeof data === 'string' ? data : JSON.stringify(data, null, 2)
|
|
44
|
-
}
|
|
45
|
-
],
|
|
19
|
+
content: hasMessage
|
|
20
|
+
? [{ type: "text", text: message }]
|
|
21
|
+
: [
|
|
22
|
+
{ type: "text", text: isError ? "Error occurred" : "Request successful" },
|
|
23
|
+
{ type: "text", text: typeof data === 'string' ? data : JSON.stringify(data, null, 2) }
|
|
24
|
+
],
|
|
46
25
|
rawData: data,
|
|
47
26
|
isError
|
|
48
27
|
};
|
|
49
|
-
// Add structured content if requested
|
|
50
|
-
if (includeStructuredContent && data) {
|
|
28
|
+
// Add structured content if requested AND env toggle is enabled
|
|
29
|
+
if (includeStructuredContent && (0, config_1.isStructuredContentEnabled)() && data) {
|
|
51
30
|
response.structuredContent = {
|
|
52
31
|
format: "application/json",
|
|
53
32
|
data: data
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Common.js","sourceRoot":"","sources":["../../src/Interfaces/Common.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"Common.js","sourceRoot":"","sources":["../../src/Interfaces/Common.ts"],"names":[],"mappings":";;AAyBA,8CAyBC;AAOD,kDAGC;AA5DD,sCAAuD;AAiBvD;;;;;;;GAOG;AACH,SAAgB,iBAAiB,CAAC,IAAS,EAAE,OAAgB,EAAE,OAAO,GAAG,KAAK,EAAE,wBAAwB,GAAG,KAAK;IAC9G,oFAAoF;IACpF,iEAAiE;IACjE,MAAM,UAAU,GAAG,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IAEjD,MAAM,QAAQ,GAAgB;QAC5B,OAAO,EAAE,UAAU;YACjB,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;YACnC,CAAC,CAAC;gBACE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,oBAAoB,EAAE;gBACzE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;aACxF;QACL,OAAO,EAAE,IAAI;QACb,OAAO;KACR,CAAC;IAEF,gEAAgE;IAChE,IAAI,wBAAwB,IAAI,IAAA,mCAA0B,GAAE,IAAI,IAAI,EAAE,CAAC;QACrE,QAAQ,CAAC,iBAAiB,GAAG;YAC3B,MAAM,EAAE,kBAAkB;YAC1B,IAAI,EAAE,IAAI;SACX,CAAC;IACJ,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;GAIG;AACH,SAAgB,mBAAmB,CAAC,KAAU;IAC5C,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5E,OAAO,iBAAiB,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,UAAU,YAAY,EAAE,EAAE,IAAI,CAAC,CAAC;AACpF,CAAC"}
|
|
@@ -7,6 +7,7 @@ exports.BoardsSprintsToolMethods = exports.BoardsSprintsTools = void 0;
|
|
|
7
7
|
const BoardsSprintsService_1 = require("../Services/BoardsSprintsService");
|
|
8
8
|
const Common_1 = require("../Interfaces/Common");
|
|
9
9
|
const getClassMethods_1 = __importDefault(require("../utils/getClassMethods"));
|
|
10
|
+
const formatHelpers_1 = require("../utils/formatHelpers");
|
|
10
11
|
class BoardsSprintsTools {
|
|
11
12
|
constructor(config) {
|
|
12
13
|
this.boardsSprintsService = new BoardsSprintsService_1.BoardsSprintsService(config);
|
|
@@ -17,7 +18,14 @@ class BoardsSprintsTools {
|
|
|
17
18
|
async getBoards(params) {
|
|
18
19
|
try {
|
|
19
20
|
const boards = await this.boardsSprintsService.getBoards(params);
|
|
20
|
-
|
|
21
|
+
const items = Array.isArray(boards) ? boards : [];
|
|
22
|
+
if (items.length === 0) {
|
|
23
|
+
return (0, Common_1.formatMcpResponse)(boards, `## Boards\n\nNo boards found.\n\n💡 Check your team settings or use \`getTeams\` to verify the team ID.`);
|
|
24
|
+
}
|
|
25
|
+
let md = `## Boards\n\n**${items.length} board${items.length !== 1 ? 's' : ''}**\n\n`;
|
|
26
|
+
const rows = items.map((b) => [b.name || 'N/A', b.id || 'N/A']);
|
|
27
|
+
md += (0, formatHelpers_1.markdownTable)(['Name', 'ID'], rows);
|
|
28
|
+
return (0, Common_1.formatMcpResponse)(boards, md, false, true);
|
|
21
29
|
}
|
|
22
30
|
catch (error) {
|
|
23
31
|
console.error('Error in getBoards tool:', error);
|
|
@@ -30,7 +38,18 @@ class BoardsSprintsTools {
|
|
|
30
38
|
async getBoardColumns(params) {
|
|
31
39
|
try {
|
|
32
40
|
const columns = await this.boardsSprintsService.getBoardColumns(params);
|
|
33
|
-
|
|
41
|
+
const items = Array.isArray(columns) ? columns : [];
|
|
42
|
+
if (items.length === 0) {
|
|
43
|
+
return (0, Common_1.formatMcpResponse)(columns, `## Board Columns\n\nNo columns found for board \`${params.boardId}\`.\n\n💡 Verify the board ID using \`getBoards\`.`);
|
|
44
|
+
}
|
|
45
|
+
let md = `## Board Columns\n\n**${items.length} columns** for board \`${params.boardId}\`\n\n`;
|
|
46
|
+
const rows = items.map((c) => [
|
|
47
|
+
c.name || 'N/A',
|
|
48
|
+
c.columnType || c.stateMappings ? 'Mapped' : 'N/A',
|
|
49
|
+
c.itemLimit ? String(c.itemLimit) : '-'
|
|
50
|
+
]);
|
|
51
|
+
md += (0, formatHelpers_1.markdownTable)(['Name', 'Type', 'WIP Limit'], rows);
|
|
52
|
+
return (0, Common_1.formatMcpResponse)(columns, md, false, true);
|
|
34
53
|
}
|
|
35
54
|
catch (error) {
|
|
36
55
|
console.error('Error in getBoardColumns tool:', error);
|
|
@@ -43,7 +62,41 @@ class BoardsSprintsTools {
|
|
|
43
62
|
async getBoardItems(params) {
|
|
44
63
|
try {
|
|
45
64
|
const items = await this.boardsSprintsService.getBoardItems(params);
|
|
46
|
-
|
|
65
|
+
const itemList = Array.isArray(items) ? items : (items?.value || []);
|
|
66
|
+
if (itemList.length === 0) {
|
|
67
|
+
return (0, Common_1.formatMcpResponse)(items, `## Board Items\n\nNo items found on board \`${params.boardId}\`.\n\n💡 The board may be empty or items may not be assigned to columns.`);
|
|
68
|
+
}
|
|
69
|
+
let md = `## Board Items\n\n**${itemList.length} item${itemList.length !== 1 ? 's' : ''}** on board \`${params.boardId}\`\n\n`;
|
|
70
|
+
// Group by column if possible
|
|
71
|
+
const byColumn = {};
|
|
72
|
+
itemList.forEach((item) => {
|
|
73
|
+
const col = item.boardColumn || item.column?.name || 'Unknown';
|
|
74
|
+
if (!byColumn[col])
|
|
75
|
+
byColumn[col] = [];
|
|
76
|
+
byColumn[col].push(item);
|
|
77
|
+
});
|
|
78
|
+
if (Object.keys(byColumn).length > 1) {
|
|
79
|
+
for (const [col, colItems] of Object.entries(byColumn)) {
|
|
80
|
+
md += `### ${col} (${colItems.length})\n\n`;
|
|
81
|
+
const rows = colItems.map((i) => [
|
|
82
|
+
`#${i.id || i.workItem?.id || 'N/A'}`,
|
|
83
|
+
(0, formatHelpers_1.truncateText)(i.title || i.workItem?.fields?.['System.Title'] || 'N/A', 60),
|
|
84
|
+
i.state || i.workItem?.fields?.['System.State'] || '-'
|
|
85
|
+
]);
|
|
86
|
+
md += (0, formatHelpers_1.markdownTable)(['ID', 'Title', 'State'], rows);
|
|
87
|
+
md += '\n\n';
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
const rows = itemList.map((i) => [
|
|
92
|
+
`#${i.id || i.workItem?.id || 'N/A'}`,
|
|
93
|
+
(0, formatHelpers_1.truncateText)(i.title || i.workItem?.fields?.['System.Title'] || 'N/A', 60),
|
|
94
|
+
i.state || i.workItem?.fields?.['System.State'] || '-',
|
|
95
|
+
i.boardColumn || i.column?.name || '-'
|
|
96
|
+
]);
|
|
97
|
+
md += (0, formatHelpers_1.markdownTable)(['ID', 'Title', 'State', 'Column'], rows);
|
|
98
|
+
}
|
|
99
|
+
return (0, Common_1.formatMcpResponse)(items, md, false, true);
|
|
47
100
|
}
|
|
48
101
|
catch (error) {
|
|
49
102
|
console.error('Error in getBoardItems tool:', error);
|
|
@@ -56,7 +109,8 @@ class BoardsSprintsTools {
|
|
|
56
109
|
async moveCardOnBoard(params) {
|
|
57
110
|
try {
|
|
58
111
|
const result = await this.boardsSprintsService.moveCardOnBoard(params);
|
|
59
|
-
|
|
112
|
+
const md = `## ✅ Card Moved\n\n**#${params.workItemId}** → Column \`${params.columnId}\`\n\n💡 Use \`getBoardItems\` to see the updated board state.`;
|
|
113
|
+
return (0, Common_1.formatMcpResponse)(result, md, false, true);
|
|
60
114
|
}
|
|
61
115
|
catch (error) {
|
|
62
116
|
console.error('Error in moveCardOnBoard tool:', error);
|
|
@@ -69,7 +123,37 @@ class BoardsSprintsTools {
|
|
|
69
123
|
async getSprints(params) {
|
|
70
124
|
try {
|
|
71
125
|
const sprints = await this.boardsSprintsService.getSprints(params);
|
|
72
|
-
|
|
126
|
+
const items = Array.isArray(sprints) ? sprints : [];
|
|
127
|
+
if (items.length === 0) {
|
|
128
|
+
return (0, Common_1.formatMcpResponse)(sprints, `## Sprints\n\nNo sprints found.\n\n💡 Use \`createIteration\` to create sprint iterations.`);
|
|
129
|
+
}
|
|
130
|
+
const currentCount = items.filter((s) => (0, formatHelpers_1.getSprintTimeframeLabel)(s.attributes?.timeFrame) === 'Current').length;
|
|
131
|
+
const pastCount = items.filter((s) => (0, formatHelpers_1.getSprintTimeframeLabel)(s.attributes?.timeFrame) === 'Past').length;
|
|
132
|
+
const futureCount = items.filter((s) => (0, formatHelpers_1.getSprintTimeframeLabel)(s.attributes?.timeFrame) === 'Future').length;
|
|
133
|
+
let md = `## Sprints\n\n**${items.length} sprints**`;
|
|
134
|
+
const parts = [];
|
|
135
|
+
if (currentCount > 0)
|
|
136
|
+
parts.push(`${currentCount} current`);
|
|
137
|
+
if (pastCount > 0)
|
|
138
|
+
parts.push(`${pastCount} past`);
|
|
139
|
+
if (futureCount > 0)
|
|
140
|
+
parts.push(`${futureCount} future`);
|
|
141
|
+
if (parts.length > 0)
|
|
142
|
+
md += ` | ${parts.join(', ')}`;
|
|
143
|
+
md += '\n\n';
|
|
144
|
+
const rows = items.map((s) => {
|
|
145
|
+
const tf = s.attributes?.timeFrame;
|
|
146
|
+
const emoji = (0, formatHelpers_1.getSprintTimeframeEmoji)(tf);
|
|
147
|
+
const label = (0, formatHelpers_1.getSprintTimeframeLabel)(tf);
|
|
148
|
+
return [
|
|
149
|
+
s.name || 'N/A',
|
|
150
|
+
s.attributes?.startDate ? (0, formatHelpers_1.formatFullDate)(s.attributes.startDate) : '-',
|
|
151
|
+
s.attributes?.finishDate ? (0, formatHelpers_1.formatFullDate)(s.attributes.finishDate) : '-',
|
|
152
|
+
`${emoji} ${label}`
|
|
153
|
+
];
|
|
154
|
+
});
|
|
155
|
+
md += (0, formatHelpers_1.markdownTable)(['Name', 'Start', 'End', 'Status'], rows);
|
|
156
|
+
return (0, Common_1.formatMcpResponse)(sprints, md, false, true);
|
|
73
157
|
}
|
|
74
158
|
catch (error) {
|
|
75
159
|
console.error('Error in getSprints tool:', error);
|
|
@@ -82,7 +166,29 @@ class BoardsSprintsTools {
|
|
|
82
166
|
async getCurrentSprint(params) {
|
|
83
167
|
try {
|
|
84
168
|
const sprint = await this.boardsSprintsService.getCurrentSprint(params);
|
|
85
|
-
|
|
169
|
+
if (!sprint) {
|
|
170
|
+
return (0, Common_1.formatMcpResponse)(sprint, `## Current Sprint\n\nNo current sprint found.\n\n💡 Use \`getSprints\` to see all sprints or \`createIteration\` to create one.`);
|
|
171
|
+
}
|
|
172
|
+
const startDate = sprint.attributes?.startDate;
|
|
173
|
+
const endDate = sprint.attributes?.finishDate;
|
|
174
|
+
let md = `## 🏃 Current Sprint\n\n`;
|
|
175
|
+
md += `**${sprint.name}**\n\n`;
|
|
176
|
+
if (startDate && endDate) {
|
|
177
|
+
const start = new Date(startDate);
|
|
178
|
+
const end = new Date(endDate);
|
|
179
|
+
const now = new Date();
|
|
180
|
+
const totalDays = Math.ceil((end.getTime() - start.getTime()) / (1000 * 60 * 60 * 24));
|
|
181
|
+
const daysRemaining = Math.max(0, Math.ceil((end.getTime() - now.getTime()) / (1000 * 60 * 60 * 24)));
|
|
182
|
+
const daysElapsed = totalDays - daysRemaining;
|
|
183
|
+
const pct = totalDays > 0 ? Math.round((daysElapsed / totalDays) * 100) : 0;
|
|
184
|
+
md += `**Dates:** ${(0, formatHelpers_1.formatFullDate)(startDate)} → ${(0, formatHelpers_1.formatFullDate)(endDate)}\n`;
|
|
185
|
+
md += `**Progress:** ${daysElapsed}/${totalDays} days (${pct}%) | **${daysRemaining} days remaining**\n`;
|
|
186
|
+
}
|
|
187
|
+
if (sprint.id)
|
|
188
|
+
md += `**ID:** ${sprint.id}\n`;
|
|
189
|
+
if (sprint.path)
|
|
190
|
+
md += `**Path:** ${sprint.path}\n`;
|
|
191
|
+
return (0, Common_1.formatMcpResponse)(sprint, md, false, true);
|
|
86
192
|
}
|
|
87
193
|
catch (error) {
|
|
88
194
|
console.error('Error in getCurrentSprint tool:', error);
|
|
@@ -95,7 +201,21 @@ class BoardsSprintsTools {
|
|
|
95
201
|
async getSprintWorkItems(params) {
|
|
96
202
|
try {
|
|
97
203
|
const workItems = await this.boardsSprintsService.getSprintWorkItems(params);
|
|
98
|
-
|
|
204
|
+
const items = workItems?.workItems || workItems?.workItemRelations || [];
|
|
205
|
+
const itemList = Array.isArray(items) ? items : [];
|
|
206
|
+
if (itemList.length === 0) {
|
|
207
|
+
return (0, Common_1.formatMcpResponse)(workItems, `## Sprint Work Items\n\nNo work items found in sprint \`${params.sprintId}\`.\n\n💡 Items may not be assigned to this sprint yet.`);
|
|
208
|
+
}
|
|
209
|
+
let md = `## Sprint Work Items\n\n**${itemList.length} item${itemList.length !== 1 ? 's' : ''}** in sprint \`${params.sprintId}\`\n\n`;
|
|
210
|
+
const rows = itemList.map((item) => {
|
|
211
|
+
const wi = item.target || item;
|
|
212
|
+
const id = wi.id || wi.workItem?.id || 'N/A';
|
|
213
|
+
const url = wi.url || wi.workItem?.url || '-';
|
|
214
|
+
return [`#${id}`, url !== '-' ? `[Link](${url})` : '-'];
|
|
215
|
+
});
|
|
216
|
+
md += (0, formatHelpers_1.markdownTable)(['ID', 'URL'], rows);
|
|
217
|
+
md += `\n\n💡 Use \`getWorkItemById\` with any ID to see full details.`;
|
|
218
|
+
return (0, Common_1.formatMcpResponse)(workItems, md, false, true);
|
|
99
219
|
}
|
|
100
220
|
catch (error) {
|
|
101
221
|
console.error('Error in getSprintWorkItems tool:', error);
|
|
@@ -108,7 +228,30 @@ class BoardsSprintsTools {
|
|
|
108
228
|
async getSprintCapacity(params) {
|
|
109
229
|
try {
|
|
110
230
|
const capacity = await this.boardsSprintsService.getSprintCapacity(params);
|
|
111
|
-
|
|
231
|
+
let md = `## Sprint Capacity\n\n**Sprint:** \`${params.sprintId}\`\n\n`;
|
|
232
|
+
// Handle daysOff and teamSettings if present
|
|
233
|
+
if (capacity?.daysOff) {
|
|
234
|
+
const daysOff = Array.isArray(capacity.daysOff) ? capacity.daysOff : [];
|
|
235
|
+
md += `**Team Days Off:** ${daysOff.length > 0 ? daysOff.length + ' days' : 'None'}\n`;
|
|
236
|
+
}
|
|
237
|
+
if (capacity?.teamMembers || capacity?.value) {
|
|
238
|
+
const members = capacity.teamMembers || capacity.value || [];
|
|
239
|
+
const memberList = Array.isArray(members) ? members : [];
|
|
240
|
+
if (memberList.length > 0) {
|
|
241
|
+
md += `**Team Members with Capacity:** ${memberList.length}\n\n`;
|
|
242
|
+
const rows = memberList.map((m) => {
|
|
243
|
+
const name = m.teamMember?.displayName || m.displayName || 'Unknown';
|
|
244
|
+
const activities = m.activities || [];
|
|
245
|
+
const actStr = activities.map((a) => `${a.name || 'General'}: ${a.capacityPerDay || 0}h/day`).join(', ') || '-';
|
|
246
|
+
return [name, actStr];
|
|
247
|
+
});
|
|
248
|
+
md += (0, formatHelpers_1.markdownTable)(['Member', 'Capacity'], rows);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
md += `*No capacity data available.*`;
|
|
253
|
+
}
|
|
254
|
+
return (0, Common_1.formatMcpResponse)(capacity, md, false, true);
|
|
112
255
|
}
|
|
113
256
|
catch (error) {
|
|
114
257
|
console.error('Error in getSprintCapacity tool:', error);
|
|
@@ -121,9 +264,21 @@ class BoardsSprintsTools {
|
|
|
121
264
|
async getTeamMembers(params) {
|
|
122
265
|
try {
|
|
123
266
|
const response = await this.boardsSprintsService.getTeamMembers(params);
|
|
124
|
-
const members = response.value || response;
|
|
125
|
-
const
|
|
126
|
-
|
|
267
|
+
const members = response.value || response;
|
|
268
|
+
const memberList = Array.isArray(members) ? members : [];
|
|
269
|
+
if (memberList.length === 0) {
|
|
270
|
+
return (0, Common_1.formatMcpResponse)(response, `## Team Members\n\nNo team members found.\n\n💡 Use \`getTeams\` to verify the team ID.`);
|
|
271
|
+
}
|
|
272
|
+
let md = `## Team Members\n\n**${memberList.length} member${memberList.length !== 1 ? 's' : ''}**\n\n`;
|
|
273
|
+
const rows = memberList.map((m) => {
|
|
274
|
+
const identity = m.identity || m;
|
|
275
|
+
const name = identity.displayName || 'Unknown';
|
|
276
|
+
const email = identity.uniqueName || identity.mailAddress || '-';
|
|
277
|
+
const isAdmin = m.isTeamAdmin ? '✅' : '-';
|
|
278
|
+
return [name, email, isAdmin];
|
|
279
|
+
});
|
|
280
|
+
md += (0, formatHelpers_1.markdownTable)(['Name', 'Email', 'Admin'], rows);
|
|
281
|
+
return (0, Common_1.formatMcpResponse)(response, md, false, true);
|
|
127
282
|
}
|
|
128
283
|
catch (error) {
|
|
129
284
|
console.error('Error in getTeamMembers tool:', error);
|
|
@@ -136,7 +291,18 @@ class BoardsSprintsTools {
|
|
|
136
291
|
async getTeams() {
|
|
137
292
|
try {
|
|
138
293
|
const teams = await this.boardsSprintsService.getTeams();
|
|
139
|
-
|
|
294
|
+
const items = Array.isArray(teams) ? teams : [];
|
|
295
|
+
if (items.length === 0) {
|
|
296
|
+
return (0, Common_1.formatMcpResponse)(teams, `## Teams\n\nNo teams found.`);
|
|
297
|
+
}
|
|
298
|
+
let md = `## Teams\n\n**${items.length} team${items.length !== 1 ? 's' : ''}**\n\n`;
|
|
299
|
+
const rows = items.map((t) => [
|
|
300
|
+
t.name || 'N/A',
|
|
301
|
+
t.id || 'N/A',
|
|
302
|
+
(0, formatHelpers_1.truncateText)(t.description || '-', 40)
|
|
303
|
+
]);
|
|
304
|
+
md += (0, formatHelpers_1.markdownTable)(['Name', 'ID', 'Description'], rows);
|
|
305
|
+
return (0, Common_1.formatMcpResponse)(teams, md, false, true);
|
|
140
306
|
}
|
|
141
307
|
catch (error) {
|
|
142
308
|
console.error('Error in getTeams tool:', error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BoardsSprintsTools.js","sourceRoot":"","sources":["../../src/Tools/BoardsSprintsTools.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BoardsSprintsTools.js","sourceRoot":"","sources":["../../src/Tools/BoardsSprintsTools.ts"],"names":[],"mappings":"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"}
|