wolfpack-mcp 1.0.39 → 1.0.41
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/client.js +28 -36
- package/dist/index.js +140 -14
- package/package.json +1 -1
package/dist/client.js
CHANGED
|
@@ -164,11 +164,9 @@ export class WolfpackClient {
|
|
|
164
164
|
throw error;
|
|
165
165
|
}
|
|
166
166
|
}
|
|
167
|
-
async updateWorkProgress(workItemId, description) {
|
|
167
|
+
async updateWorkProgress(workItemId, description, teamSlug) {
|
|
168
168
|
try {
|
|
169
|
-
return await this.api.put(this.withTeamSlug(`/work-items/${workItemId}/progress
|
|
170
|
-
description,
|
|
171
|
-
});
|
|
169
|
+
return await this.api.put(this.withTeamSlug(`/work-items/${workItemId}/progress`, teamSlug), { description });
|
|
172
170
|
}
|
|
173
171
|
catch (error) {
|
|
174
172
|
if (error && typeof error === 'object' && 'status' in error && error.status === 404) {
|
|
@@ -177,11 +175,9 @@ export class WolfpackClient {
|
|
|
177
175
|
throw error;
|
|
178
176
|
}
|
|
179
177
|
}
|
|
180
|
-
async updateWorkItemStatus(workItemId, status) {
|
|
178
|
+
async updateWorkItemStatus(workItemId, status, teamSlug) {
|
|
181
179
|
try {
|
|
182
|
-
return await this.api.put(this.withTeamSlug(`/work-items/${workItemId}/status
|
|
183
|
-
status,
|
|
184
|
-
});
|
|
180
|
+
return await this.api.put(this.withTeamSlug(`/work-items/${workItemId}/status`, teamSlug), { status });
|
|
185
181
|
}
|
|
186
182
|
catch (error) {
|
|
187
183
|
if (error && typeof error === 'object' && 'status' in error && error.status === 404) {
|
|
@@ -190,9 +186,9 @@ export class WolfpackClient {
|
|
|
190
186
|
throw error;
|
|
191
187
|
}
|
|
192
188
|
}
|
|
193
|
-
async updateWorkItemAssignee(workItemId, data) {
|
|
189
|
+
async updateWorkItemAssignee(workItemId, data, teamSlug) {
|
|
194
190
|
try {
|
|
195
|
-
return await this.api.put(this.withTeamSlug(`/work-items/${workItemId}/assignee
|
|
191
|
+
return await this.api.put(this.withTeamSlug(`/work-items/${workItemId}/assignee`, teamSlug), data);
|
|
196
192
|
}
|
|
197
193
|
catch (error) {
|
|
198
194
|
if (error && typeof error === 'object' && 'status' in error && error.status === 404) {
|
|
@@ -201,11 +197,9 @@ export class WolfpackClient {
|
|
|
201
197
|
throw error;
|
|
202
198
|
}
|
|
203
199
|
}
|
|
204
|
-
async updateWorkItemTitle(workItemId, title) {
|
|
200
|
+
async updateWorkItemTitle(workItemId, title, teamSlug) {
|
|
205
201
|
try {
|
|
206
|
-
return await this.api.put(this.withTeamSlug(`/work-items/${workItemId}/title
|
|
207
|
-
title,
|
|
208
|
-
});
|
|
202
|
+
return await this.api.put(this.withTeamSlug(`/work-items/${workItemId}/title`, teamSlug), { title });
|
|
209
203
|
}
|
|
210
204
|
catch (error) {
|
|
211
205
|
if (error && typeof error === 'object' && 'status' in error && error.status === 404) {
|
|
@@ -214,9 +208,9 @@ export class WolfpackClient {
|
|
|
214
208
|
throw error;
|
|
215
209
|
}
|
|
216
210
|
}
|
|
217
|
-
async updateWorkItemInitiative(workItemId, radarItemId) {
|
|
211
|
+
async updateWorkItemInitiative(workItemId, radarItemId, teamSlug) {
|
|
218
212
|
try {
|
|
219
|
-
return await this.api.put(this.withTeamSlug(`/work-items/${workItemId}/initiative
|
|
213
|
+
return await this.api.put(this.withTeamSlug(`/work-items/${workItemId}/initiative`, teamSlug), { radarItemId });
|
|
220
214
|
}
|
|
221
215
|
catch (error) {
|
|
222
216
|
if (error && typeof error === 'object' && 'status' in error && error.status === 404) {
|
|
@@ -225,9 +219,9 @@ export class WolfpackClient {
|
|
|
225
219
|
throw error;
|
|
226
220
|
}
|
|
227
221
|
}
|
|
228
|
-
async pullWorkItem(workItemId, data) {
|
|
222
|
+
async pullWorkItem(workItemId, data, teamSlug) {
|
|
229
223
|
try {
|
|
230
|
-
return await this.api.post(this.withTeamSlug(`/work-items/${workItemId}/pull
|
|
224
|
+
return await this.api.post(this.withTeamSlug(`/work-items/${workItemId}/pull`, teamSlug), data || {});
|
|
231
225
|
}
|
|
232
226
|
catch (error) {
|
|
233
227
|
if (error && typeof error === 'object' && 'status' in error && error.status === 404) {
|
|
@@ -236,11 +230,9 @@ export class WolfpackClient {
|
|
|
236
230
|
throw error;
|
|
237
231
|
}
|
|
238
232
|
}
|
|
239
|
-
async submitWorkItemForm(workItemId, formValues) {
|
|
233
|
+
async submitWorkItemForm(workItemId, formValues, teamSlug) {
|
|
240
234
|
try {
|
|
241
|
-
return await this.api.put(this.withTeamSlug(`/work-items/${workItemId}/form
|
|
242
|
-
formValues,
|
|
243
|
-
});
|
|
235
|
+
return await this.api.put(this.withTeamSlug(`/work-items/${workItemId}/form`, teamSlug), { formValues });
|
|
244
236
|
}
|
|
245
237
|
catch (error) {
|
|
246
238
|
if (error && typeof error === 'object' && 'status' in error && error.status === 404) {
|
|
@@ -360,8 +352,8 @@ export class WolfpackClient {
|
|
|
360
352
|
const { teamSlug, ...rest } = data;
|
|
361
353
|
return this.api.post('/issues', { ...rest, teamSlug });
|
|
362
354
|
}
|
|
363
|
-
async updateIssue(issueId, data) {
|
|
364
|
-
return this.api.patch(this.withTeamSlug(`/issues/${issueId}
|
|
355
|
+
async updateIssue(issueId, data, teamSlug) {
|
|
356
|
+
return this.api.patch(this.withTeamSlug(`/issues/${issueId}`, teamSlug), data);
|
|
365
357
|
}
|
|
366
358
|
// Wiki Page methods
|
|
367
359
|
async listWikiPages(options) {
|
|
@@ -409,8 +401,8 @@ export class WolfpackClient {
|
|
|
409
401
|
const { teamSlug, ...rest } = data;
|
|
410
402
|
return this.api.post('/wiki-pages', { ...rest, teamSlug });
|
|
411
403
|
}
|
|
412
|
-
async updateWikiPage(pageId, data) {
|
|
413
|
-
return this.api.patch(this.withTeamSlug(`/wiki-pages/${pageId}
|
|
404
|
+
async updateWikiPage(pageId, data, teamSlug) {
|
|
405
|
+
return this.api.patch(this.withTeamSlug(`/wiki-pages/${pageId}`, teamSlug), data);
|
|
414
406
|
}
|
|
415
407
|
// Journal Entry methods
|
|
416
408
|
async listJournalEntries(options) {
|
|
@@ -458,21 +450,21 @@ export class WolfpackClient {
|
|
|
458
450
|
const { teamSlug, ...rest } = data;
|
|
459
451
|
return this.api.post('/journal-entries', { ...rest, teamSlug });
|
|
460
452
|
}
|
|
461
|
-
async updateJournalEntry(entryId, data) {
|
|
462
|
-
return this.api.patch(this.withTeamSlug(`/journal-entries/${entryId}
|
|
453
|
+
async updateJournalEntry(entryId, data, teamSlug) {
|
|
454
|
+
return this.api.patch(this.withTeamSlug(`/journal-entries/${entryId}`, teamSlug), data);
|
|
463
455
|
}
|
|
464
456
|
// Comment methods
|
|
465
|
-
async listWorkItemComments(workItemId) {
|
|
466
|
-
return this.api.get(this.withTeamSlug(`/work-items/${workItemId}/comments
|
|
457
|
+
async listWorkItemComments(workItemId, teamSlug) {
|
|
458
|
+
return this.api.get(this.withTeamSlug(`/work-items/${workItemId}/comments`, teamSlug));
|
|
467
459
|
}
|
|
468
|
-
async listIssueComments(issueId) {
|
|
469
|
-
return this.api.get(this.withTeamSlug(`/issues/${issueId}/comments
|
|
460
|
+
async listIssueComments(issueId, teamSlug) {
|
|
461
|
+
return this.api.get(this.withTeamSlug(`/issues/${issueId}/comments`, teamSlug));
|
|
470
462
|
}
|
|
471
|
-
async createWorkItemComment(workItemId, data) {
|
|
472
|
-
return this.api.post(this.withTeamSlug(`/work-items/${workItemId}/comments
|
|
463
|
+
async createWorkItemComment(workItemId, data, teamSlug) {
|
|
464
|
+
return this.api.post(this.withTeamSlug(`/work-items/${workItemId}/comments`, teamSlug), data);
|
|
473
465
|
}
|
|
474
|
-
async createIssueComment(issueId, data) {
|
|
475
|
-
return this.api.post(this.withTeamSlug(`/issues/${issueId}/comments
|
|
466
|
+
async createIssueComment(issueId, data, teamSlug) {
|
|
467
|
+
return this.api.post(this.withTeamSlug(`/issues/${issueId}/comments`, teamSlug), data);
|
|
476
468
|
}
|
|
477
469
|
/**
|
|
478
470
|
* Upload an image and get back a URL that can be used in markdown content.
|
package/dist/index.js
CHANGED
|
@@ -96,6 +96,10 @@ const GetWorkItemSchema = z.object({
|
|
|
96
96
|
const UpdateWorkProgressSchema = z.object({
|
|
97
97
|
work_item_id: z.string().describe('The ID of the work item'),
|
|
98
98
|
description: z.string().describe('Updated description/notes for the work item'),
|
|
99
|
+
project_slug: z
|
|
100
|
+
.string()
|
|
101
|
+
.optional()
|
|
102
|
+
.describe('Project slug (required for multi-project users, use list_projects to get slugs)'),
|
|
99
103
|
});
|
|
100
104
|
const VALID_STATUSES = [
|
|
101
105
|
'pending',
|
|
@@ -111,6 +115,10 @@ const VALID_STATUSES = [
|
|
|
111
115
|
const UpdateWorkItemStatusSchema = z.object({
|
|
112
116
|
work_item_id: z.string().describe('The ID of the work item'),
|
|
113
117
|
status: z.enum(VALID_STATUSES).describe('New status'),
|
|
118
|
+
project_slug: z
|
|
119
|
+
.string()
|
|
120
|
+
.optional()
|
|
121
|
+
.describe('Project slug (required for multi-project users, use list_projects to get slugs)'),
|
|
114
122
|
});
|
|
115
123
|
const UpdateWorkItemAssigneeSchema = z.object({
|
|
116
124
|
work_item_id: z.string().describe('The ID of the work item'),
|
|
@@ -118,10 +126,18 @@ const UpdateWorkItemAssigneeSchema = z.object({
|
|
|
118
126
|
.string()
|
|
119
127
|
.nullable()
|
|
120
128
|
.describe('User ID to assign as leading user, or null to unassign'),
|
|
129
|
+
project_slug: z
|
|
130
|
+
.string()
|
|
131
|
+
.optional()
|
|
132
|
+
.describe('Project slug (required for multi-project users, use list_projects to get slugs)'),
|
|
121
133
|
});
|
|
122
134
|
const UpdateWorkItemTitleSchema = z.object({
|
|
123
135
|
work_item_id: z.string().describe('The ID of the work item'),
|
|
124
136
|
title: z.string().describe('New title for the work item'),
|
|
137
|
+
project_slug: z
|
|
138
|
+
.string()
|
|
139
|
+
.optional()
|
|
140
|
+
.describe('Project slug (required for multi-project users, use list_projects to get slugs)'),
|
|
125
141
|
});
|
|
126
142
|
const UpdateWorkItemInitiativeSchema = z.object({
|
|
127
143
|
work_item_id: z.string().describe('The ID of the work item'),
|
|
@@ -129,6 +145,10 @@ const UpdateWorkItemInitiativeSchema = z.object({
|
|
|
129
145
|
.string()
|
|
130
146
|
.nullable()
|
|
131
147
|
.describe('Radar/initiative item ID to link to, or null to unlink'),
|
|
148
|
+
project_slug: z
|
|
149
|
+
.string()
|
|
150
|
+
.optional()
|
|
151
|
+
.describe('Project slug (required for multi-project users, use list_projects to get slugs)'),
|
|
132
152
|
});
|
|
133
153
|
const PullWorkItemSchema = z.object({
|
|
134
154
|
work_item_id: z.string().describe('The ID of the work item to pull from backlog'),
|
|
@@ -136,10 +156,18 @@ const PullWorkItemSchema = z.object({
|
|
|
136
156
|
.string()
|
|
137
157
|
.optional()
|
|
138
158
|
.describe('User ID to assign as leading user (defaults to API key owner)'),
|
|
159
|
+
project_slug: z
|
|
160
|
+
.string()
|
|
161
|
+
.optional()
|
|
162
|
+
.describe('Project slug (required for multi-project users, use list_projects to get slugs)'),
|
|
139
163
|
});
|
|
140
164
|
const SubmitWorkItemFormSchema = z.object({
|
|
141
165
|
work_item_id: z.string().describe('The ID of the work item'),
|
|
142
166
|
form_values: z.record(z.any()).describe('Key-value pairs matching formDefinition field names'),
|
|
167
|
+
project_slug: z
|
|
168
|
+
.string()
|
|
169
|
+
.optional()
|
|
170
|
+
.describe('Project slug (required for multi-project users, use list_projects to get slugs)'),
|
|
143
171
|
});
|
|
144
172
|
// Radar Item (Initiative/Roadmap) schemas
|
|
145
173
|
const ListRadarItemsSchema = z.object({
|
|
@@ -245,6 +273,10 @@ const UpdateIssueSchema = z.object({
|
|
|
245
273
|
severity: z.enum(['low', 'medium', 'high', 'critical']).optional().describe('Updated severity'),
|
|
246
274
|
assigned_to_id: z.string().optional().describe('Updated assignee'),
|
|
247
275
|
closing_note: z.string().optional().describe('Closing note (when closing the issue)'),
|
|
276
|
+
project_slug: z
|
|
277
|
+
.string()
|
|
278
|
+
.optional()
|
|
279
|
+
.describe('Project slug (required for multi-project users, use list_projects to get slugs)'),
|
|
248
280
|
});
|
|
249
281
|
// Wiki Page schemas
|
|
250
282
|
const ListWikiPagesSchema = z.object({
|
|
@@ -284,6 +316,10 @@ const UpdateWikiPageSchema = z.object({
|
|
|
284
316
|
page_id: z.string().describe('The page slug'),
|
|
285
317
|
title: z.string().optional().describe('Updated title'),
|
|
286
318
|
content: z.string().optional().describe('Updated content (markdown)'),
|
|
319
|
+
project_slug: z
|
|
320
|
+
.string()
|
|
321
|
+
.optional()
|
|
322
|
+
.describe('Project slug (required for multi-project users, use list_projects to get slugs)'),
|
|
287
323
|
});
|
|
288
324
|
// Journal Entry schemas
|
|
289
325
|
const ListJournalEntriesSchema = z.object({
|
|
@@ -316,21 +352,41 @@ const UpdateJournalEntrySchema = z.object({
|
|
|
316
352
|
entry_id: z.string().describe('The entry refId (number)'),
|
|
317
353
|
title: z.string().optional().describe('Updated title'),
|
|
318
354
|
content: z.string().optional().describe('Updated content (markdown)'),
|
|
355
|
+
project_slug: z
|
|
356
|
+
.string()
|
|
357
|
+
.optional()
|
|
358
|
+
.describe('Project slug (required for multi-project users, use list_projects to get slugs)'),
|
|
319
359
|
});
|
|
320
360
|
// Comment schemas
|
|
321
361
|
const ListWorkItemCommentsSchema = z.object({
|
|
322
362
|
work_item_id: z.string().describe('The work item refId (number)'),
|
|
363
|
+
project_slug: z
|
|
364
|
+
.string()
|
|
365
|
+
.optional()
|
|
366
|
+
.describe('Project slug (required for multi-project users, use list_projects to get slugs)'),
|
|
323
367
|
});
|
|
324
368
|
const ListIssueCommentsSchema = z.object({
|
|
325
369
|
issue_id: z.string().describe('The issue refId (number)'),
|
|
370
|
+
project_slug: z
|
|
371
|
+
.string()
|
|
372
|
+
.optional()
|
|
373
|
+
.describe('Project slug (required for multi-project users, use list_projects to get slugs)'),
|
|
326
374
|
});
|
|
327
375
|
const CreateWorkItemCommentSchema = z.object({
|
|
328
376
|
work_item_id: z.string().describe('The work item refId (number)'),
|
|
329
377
|
content: z.string().describe('Comment content (markdown)'),
|
|
378
|
+
project_slug: z
|
|
379
|
+
.string()
|
|
380
|
+
.optional()
|
|
381
|
+
.describe('Project slug (required for multi-project users, use list_projects to get slugs)'),
|
|
330
382
|
});
|
|
331
383
|
const CreateIssueCommentSchema = z.object({
|
|
332
384
|
issue_id: z.string().describe('The issue refId (number)'),
|
|
333
385
|
content: z.string().describe('Comment content (markdown)'),
|
|
386
|
+
project_slug: z
|
|
387
|
+
.string()
|
|
388
|
+
.optional()
|
|
389
|
+
.describe('Project slug (required for multi-project users, use list_projects to get slugs)'),
|
|
334
390
|
});
|
|
335
391
|
// Image upload schema
|
|
336
392
|
const UploadImageSchema = z.object({
|
|
@@ -547,6 +603,10 @@ class WolfpackMCPServer {
|
|
|
547
603
|
type: 'string',
|
|
548
604
|
description: 'Updated description/notes for the work item',
|
|
549
605
|
},
|
|
606
|
+
project_slug: {
|
|
607
|
+
type: 'string',
|
|
608
|
+
description: 'Project slug (required for multi-project users, use list_projects to get slugs)',
|
|
609
|
+
},
|
|
550
610
|
},
|
|
551
611
|
required: ['work_item_id', 'description'],
|
|
552
612
|
},
|
|
@@ -584,6 +644,10 @@ class WolfpackMCPServer {
|
|
|
584
644
|
],
|
|
585
645
|
description: 'New status: "pending" (backlog), "new" (to do), "doing" (in progress), "review" (work done), "ready" (awaiting deployment), "blocked", "completed" (deployed), "closed", "archived"',
|
|
586
646
|
},
|
|
647
|
+
project_slug: {
|
|
648
|
+
type: 'string',
|
|
649
|
+
description: 'Project slug (required for multi-project users, use list_projects to get slugs)',
|
|
650
|
+
},
|
|
587
651
|
},
|
|
588
652
|
required: ['work_item_id', 'status'],
|
|
589
653
|
},
|
|
@@ -604,6 +668,10 @@ class WolfpackMCPServer {
|
|
|
604
668
|
type: ['string', 'null'],
|
|
605
669
|
description: 'User ID to assign as leading user, or null to unassign',
|
|
606
670
|
},
|
|
671
|
+
project_slug: {
|
|
672
|
+
type: 'string',
|
|
673
|
+
description: 'Project slug (required for multi-project users, use list_projects to get slugs)',
|
|
674
|
+
},
|
|
607
675
|
},
|
|
608
676
|
required: ['work_item_id', 'leading_user_id'],
|
|
609
677
|
},
|
|
@@ -623,6 +691,10 @@ class WolfpackMCPServer {
|
|
|
623
691
|
type: 'string',
|
|
624
692
|
description: 'New title for the work item',
|
|
625
693
|
},
|
|
694
|
+
project_slug: {
|
|
695
|
+
type: 'string',
|
|
696
|
+
description: 'Project slug (required for multi-project users, use list_projects to get slugs)',
|
|
697
|
+
},
|
|
626
698
|
},
|
|
627
699
|
required: ['work_item_id', 'title'],
|
|
628
700
|
},
|
|
@@ -642,6 +714,10 @@ class WolfpackMCPServer {
|
|
|
642
714
|
type: ['string', 'null'],
|
|
643
715
|
description: 'Radar/initiative item ID to link to, or null to unlink',
|
|
644
716
|
},
|
|
717
|
+
project_slug: {
|
|
718
|
+
type: 'string',
|
|
719
|
+
description: 'Project slug (required for multi-project users, use list_projects to get slugs)',
|
|
720
|
+
},
|
|
645
721
|
},
|
|
646
722
|
required: ['work_item_id', 'radar_item_id'],
|
|
647
723
|
},
|
|
@@ -665,6 +741,10 @@ class WolfpackMCPServer {
|
|
|
665
741
|
type: 'string',
|
|
666
742
|
description: 'User ID to assign as leading user (optional, defaults to API key owner)',
|
|
667
743
|
},
|
|
744
|
+
project_slug: {
|
|
745
|
+
type: 'string',
|
|
746
|
+
description: 'Project slug (required for multi-project users, use list_projects to get slugs)',
|
|
747
|
+
},
|
|
668
748
|
},
|
|
669
749
|
required: ['work_item_id'],
|
|
670
750
|
},
|
|
@@ -685,6 +765,10 @@ class WolfpackMCPServer {
|
|
|
685
765
|
type: 'object',
|
|
686
766
|
description: 'Key-value pairs matching formDefinition field names',
|
|
687
767
|
},
|
|
768
|
+
project_slug: {
|
|
769
|
+
type: 'string',
|
|
770
|
+
description: 'Project slug (required for multi-project users, use list_projects to get slugs)',
|
|
771
|
+
},
|
|
688
772
|
},
|
|
689
773
|
required: ['work_item_id', 'form_values'],
|
|
690
774
|
},
|
|
@@ -930,6 +1014,10 @@ class WolfpackMCPServer {
|
|
|
930
1014
|
type: 'string',
|
|
931
1015
|
description: 'Closing note (when closing the issue)',
|
|
932
1016
|
},
|
|
1017
|
+
project_slug: {
|
|
1018
|
+
type: 'string',
|
|
1019
|
+
description: 'Project slug (required for multi-project users, use list_projects to get slugs)',
|
|
1020
|
+
},
|
|
933
1021
|
},
|
|
934
1022
|
required: ['issue_id'],
|
|
935
1023
|
},
|
|
@@ -1014,6 +1102,10 @@ class WolfpackMCPServer {
|
|
|
1014
1102
|
type: 'string',
|
|
1015
1103
|
description: 'Updated content (markdown)',
|
|
1016
1104
|
},
|
|
1105
|
+
project_slug: {
|
|
1106
|
+
type: 'string',
|
|
1107
|
+
description: 'Project slug (required for multi-project users, use list_projects to get slugs)',
|
|
1108
|
+
},
|
|
1017
1109
|
},
|
|
1018
1110
|
required: ['page_id'],
|
|
1019
1111
|
},
|
|
@@ -1095,6 +1187,10 @@ class WolfpackMCPServer {
|
|
|
1095
1187
|
type: 'string',
|
|
1096
1188
|
description: 'Updated content (markdown)',
|
|
1097
1189
|
},
|
|
1190
|
+
project_slug: {
|
|
1191
|
+
type: 'string',
|
|
1192
|
+
description: 'Project slug (required for multi-project users, use list_projects to get slugs)',
|
|
1193
|
+
},
|
|
1098
1194
|
},
|
|
1099
1195
|
required: ['entry_id'],
|
|
1100
1196
|
},
|
|
@@ -1108,6 +1204,10 @@ class WolfpackMCPServer {
|
|
|
1108
1204
|
type: 'object',
|
|
1109
1205
|
properties: {
|
|
1110
1206
|
work_item_id: { type: 'string', description: 'The work item refId (number)' },
|
|
1207
|
+
project_slug: {
|
|
1208
|
+
type: 'string',
|
|
1209
|
+
description: 'Project slug (required for multi-project users, use list_projects to get slugs)',
|
|
1210
|
+
},
|
|
1111
1211
|
},
|
|
1112
1212
|
required: ['work_item_id'],
|
|
1113
1213
|
},
|
|
@@ -1120,6 +1220,10 @@ class WolfpackMCPServer {
|
|
|
1120
1220
|
type: 'object',
|
|
1121
1221
|
properties: {
|
|
1122
1222
|
issue_id: { type: 'string', description: 'The issue refId (number)' },
|
|
1223
|
+
project_slug: {
|
|
1224
|
+
type: 'string',
|
|
1225
|
+
description: 'Project slug (required for multi-project users, use list_projects to get slugs)',
|
|
1226
|
+
},
|
|
1123
1227
|
},
|
|
1124
1228
|
required: ['issue_id'],
|
|
1125
1229
|
},
|
|
@@ -1141,6 +1245,10 @@ class WolfpackMCPServer {
|
|
|
1141
1245
|
type: 'string',
|
|
1142
1246
|
description: 'Comment content (markdown)',
|
|
1143
1247
|
},
|
|
1248
|
+
project_slug: {
|
|
1249
|
+
type: 'string',
|
|
1250
|
+
description: 'Project slug (required for multi-project users, use list_projects to get slugs)',
|
|
1251
|
+
},
|
|
1144
1252
|
},
|
|
1145
1253
|
required: ['work_item_id', 'content'],
|
|
1146
1254
|
},
|
|
@@ -1157,6 +1265,10 @@ class WolfpackMCPServer {
|
|
|
1157
1265
|
type: 'string',
|
|
1158
1266
|
description: 'Comment content (markdown)',
|
|
1159
1267
|
},
|
|
1268
|
+
project_slug: {
|
|
1269
|
+
type: 'string',
|
|
1270
|
+
description: 'Project slug (required for multi-project users, use list_projects to get slugs)',
|
|
1271
|
+
},
|
|
1160
1272
|
},
|
|
1161
1273
|
required: ['issue_id', 'content'],
|
|
1162
1274
|
},
|
|
@@ -1322,7 +1434,8 @@ class WolfpackMCPServer {
|
|
|
1322
1434
|
}
|
|
1323
1435
|
case 'update_work_progress': {
|
|
1324
1436
|
const parsed = UpdateWorkProgressSchema.parse(args);
|
|
1325
|
-
const
|
|
1437
|
+
const teamSlug = parsed.project_slug || this.client.getProjectSlug() || undefined;
|
|
1438
|
+
const workItem = await this.client.updateWorkProgress(parsed.work_item_id, parsed.description, teamSlug);
|
|
1326
1439
|
if (workItem) {
|
|
1327
1440
|
return {
|
|
1328
1441
|
content: [
|
|
@@ -1339,7 +1452,8 @@ class WolfpackMCPServer {
|
|
|
1339
1452
|
}
|
|
1340
1453
|
case 'update_work_item_status': {
|
|
1341
1454
|
const parsed = UpdateWorkItemStatusSchema.parse(args);
|
|
1342
|
-
const
|
|
1455
|
+
const teamSlug = parsed.project_slug || this.client.getProjectSlug() || undefined;
|
|
1456
|
+
const workItem = await this.client.updateWorkItemStatus(parsed.work_item_id, parsed.status, teamSlug);
|
|
1343
1457
|
if (workItem) {
|
|
1344
1458
|
return {
|
|
1345
1459
|
content: [
|
|
@@ -1356,9 +1470,10 @@ class WolfpackMCPServer {
|
|
|
1356
1470
|
}
|
|
1357
1471
|
case 'update_work_item_assignee': {
|
|
1358
1472
|
const parsed = UpdateWorkItemAssigneeSchema.parse(args);
|
|
1473
|
+
const teamSlug = parsed.project_slug || this.client.getProjectSlug() || undefined;
|
|
1359
1474
|
const workItem = await this.client.updateWorkItemAssignee(parsed.work_item_id, {
|
|
1360
1475
|
leadingUserId: parsed.leading_user_id,
|
|
1361
|
-
});
|
|
1476
|
+
}, teamSlug);
|
|
1362
1477
|
if (workItem) {
|
|
1363
1478
|
const assigneeText = parsed.leading_user_id
|
|
1364
1479
|
? `assigned to ${parsed.leading_user_id}`
|
|
@@ -1378,7 +1493,8 @@ class WolfpackMCPServer {
|
|
|
1378
1493
|
}
|
|
1379
1494
|
case 'update_work_item_title': {
|
|
1380
1495
|
const parsed = UpdateWorkItemTitleSchema.parse(args);
|
|
1381
|
-
const
|
|
1496
|
+
const teamSlug = parsed.project_slug || this.client.getProjectSlug() || undefined;
|
|
1497
|
+
const workItem = await this.client.updateWorkItemTitle(parsed.work_item_id, parsed.title, teamSlug);
|
|
1382
1498
|
if (workItem) {
|
|
1383
1499
|
return {
|
|
1384
1500
|
content: [
|
|
@@ -1395,7 +1511,8 @@ class WolfpackMCPServer {
|
|
|
1395
1511
|
}
|
|
1396
1512
|
case 'update_work_item_initiative': {
|
|
1397
1513
|
const parsed = UpdateWorkItemInitiativeSchema.parse(args);
|
|
1398
|
-
const
|
|
1514
|
+
const teamSlug = parsed.project_slug || this.client.getProjectSlug() || undefined;
|
|
1515
|
+
const workItem = await this.client.updateWorkItemInitiative(parsed.work_item_id, parsed.radar_item_id, teamSlug);
|
|
1399
1516
|
if (workItem) {
|
|
1400
1517
|
const initiativeText = parsed.radar_item_id
|
|
1401
1518
|
? `linked to initiative ${parsed.radar_item_id}`
|
|
@@ -1415,9 +1532,10 @@ class WolfpackMCPServer {
|
|
|
1415
1532
|
}
|
|
1416
1533
|
case 'pull_work_item': {
|
|
1417
1534
|
const parsed = PullWorkItemSchema.parse(args);
|
|
1535
|
+
const teamSlug = parsed.project_slug || this.client.getProjectSlug() || undefined;
|
|
1418
1536
|
const workItem = await this.client.pullWorkItem(parsed.work_item_id, {
|
|
1419
1537
|
leadingUserId: parsed.leading_user_id,
|
|
1420
|
-
});
|
|
1538
|
+
}, teamSlug);
|
|
1421
1539
|
if (workItem) {
|
|
1422
1540
|
return {
|
|
1423
1541
|
content: [
|
|
@@ -1434,7 +1552,8 @@ class WolfpackMCPServer {
|
|
|
1434
1552
|
}
|
|
1435
1553
|
case 'submit_work_item_form': {
|
|
1436
1554
|
const parsed = SubmitWorkItemFormSchema.parse(args);
|
|
1437
|
-
const
|
|
1555
|
+
const teamSlug = parsed.project_slug || this.client.getProjectSlug() || undefined;
|
|
1556
|
+
const workItem = await this.client.submitWorkItemForm(parsed.work_item_id, parsed.form_values, teamSlug);
|
|
1438
1557
|
if (workItem) {
|
|
1439
1558
|
return {
|
|
1440
1559
|
content: [
|
|
@@ -1566,6 +1685,7 @@ class WolfpackMCPServer {
|
|
|
1566
1685
|
}
|
|
1567
1686
|
case 'update_issue': {
|
|
1568
1687
|
const parsed = UpdateIssueSchema.parse(args);
|
|
1688
|
+
const teamSlug = parsed.project_slug || this.client.getProjectSlug() || undefined;
|
|
1569
1689
|
const issue = await this.client.updateIssue(parsed.issue_id, {
|
|
1570
1690
|
title: parsed.title,
|
|
1571
1691
|
description: parsed.description,
|
|
@@ -1573,7 +1693,7 @@ class WolfpackMCPServer {
|
|
|
1573
1693
|
severity: parsed.severity,
|
|
1574
1694
|
assignedToId: parsed.assigned_to_id,
|
|
1575
1695
|
closingNote: parsed.closing_note,
|
|
1576
|
-
});
|
|
1696
|
+
}, teamSlug);
|
|
1577
1697
|
return {
|
|
1578
1698
|
content: [
|
|
1579
1699
|
{
|
|
@@ -1633,10 +1753,11 @@ class WolfpackMCPServer {
|
|
|
1633
1753
|
}
|
|
1634
1754
|
case 'update_wiki_page': {
|
|
1635
1755
|
const parsed = UpdateWikiPageSchema.parse(args);
|
|
1756
|
+
const teamSlug = parsed.project_slug || this.client.getProjectSlug() || undefined;
|
|
1636
1757
|
const page = await this.client.updateWikiPage(parsed.page_id, {
|
|
1637
1758
|
title: parsed.title,
|
|
1638
1759
|
content: parsed.content,
|
|
1639
|
-
});
|
|
1760
|
+
}, teamSlug);
|
|
1640
1761
|
return {
|
|
1641
1762
|
content: [
|
|
1642
1763
|
{
|
|
@@ -1695,10 +1816,11 @@ class WolfpackMCPServer {
|
|
|
1695
1816
|
}
|
|
1696
1817
|
case 'update_journal_entry': {
|
|
1697
1818
|
const parsed = UpdateJournalEntrySchema.parse(args);
|
|
1819
|
+
const teamSlug = parsed.project_slug || this.client.getProjectSlug() || undefined;
|
|
1698
1820
|
const entry = await this.client.updateJournalEntry(parsed.entry_id, {
|
|
1699
1821
|
title: parsed.title,
|
|
1700
1822
|
content: parsed.content,
|
|
1701
|
-
});
|
|
1823
|
+
}, teamSlug);
|
|
1702
1824
|
return {
|
|
1703
1825
|
content: [
|
|
1704
1826
|
{
|
|
@@ -1711,23 +1833,26 @@ class WolfpackMCPServer {
|
|
|
1711
1833
|
// Comment handlers
|
|
1712
1834
|
case 'list_work_item_comments': {
|
|
1713
1835
|
const parsed = ListWorkItemCommentsSchema.parse(args);
|
|
1714
|
-
const
|
|
1836
|
+
const teamSlug = parsed.project_slug || this.client.getProjectSlug() || undefined;
|
|
1837
|
+
const comments = await this.client.listWorkItemComments(parsed.work_item_id, teamSlug);
|
|
1715
1838
|
return {
|
|
1716
1839
|
content: [{ type: 'text', text: JSON.stringify(stripUuids(comments), null, 2) }],
|
|
1717
1840
|
};
|
|
1718
1841
|
}
|
|
1719
1842
|
case 'list_issue_comments': {
|
|
1720
1843
|
const parsed = ListIssueCommentsSchema.parse(args);
|
|
1721
|
-
const
|
|
1844
|
+
const teamSlug = parsed.project_slug || this.client.getProjectSlug() || undefined;
|
|
1845
|
+
const comments = await this.client.listIssueComments(parsed.issue_id, teamSlug);
|
|
1722
1846
|
return {
|
|
1723
1847
|
content: [{ type: 'text', text: JSON.stringify(stripUuids(comments), null, 2) }],
|
|
1724
1848
|
};
|
|
1725
1849
|
}
|
|
1726
1850
|
case 'create_work_item_comment': {
|
|
1727
1851
|
const parsed = CreateWorkItemCommentSchema.parse(args);
|
|
1852
|
+
const teamSlug = parsed.project_slug || this.client.getProjectSlug() || undefined;
|
|
1728
1853
|
const comment = await this.client.createWorkItemComment(parsed.work_item_id, {
|
|
1729
1854
|
content: parsed.content,
|
|
1730
|
-
});
|
|
1855
|
+
}, teamSlug);
|
|
1731
1856
|
return {
|
|
1732
1857
|
content: [
|
|
1733
1858
|
{
|
|
@@ -1739,9 +1864,10 @@ class WolfpackMCPServer {
|
|
|
1739
1864
|
}
|
|
1740
1865
|
case 'create_issue_comment': {
|
|
1741
1866
|
const parsed = CreateIssueCommentSchema.parse(args);
|
|
1867
|
+
const teamSlug = parsed.project_slug || this.client.getProjectSlug() || undefined;
|
|
1742
1868
|
const comment = await this.client.createIssueComment(parsed.issue_id, {
|
|
1743
1869
|
content: parsed.content,
|
|
1744
|
-
});
|
|
1870
|
+
}, teamSlug);
|
|
1745
1871
|
return {
|
|
1746
1872
|
content: [
|
|
1747
1873
|
{
|