wolfpack-mcp 1.0.8 → 1.0.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/dist/client.js +16 -0
- package/dist/index.js +91 -13
- package/package.json +1 -1
package/dist/client.js
CHANGED
|
@@ -90,6 +90,22 @@ export class WolfpackClient {
|
|
|
90
90
|
params.append('status', options.status);
|
|
91
91
|
if (options?.assignedToId)
|
|
92
92
|
params.append('assignedToId', options.assignedToId);
|
|
93
|
+
if (options?.search)
|
|
94
|
+
params.append('search', options.search);
|
|
95
|
+
if (options?.categoryId)
|
|
96
|
+
params.append('categoryId', options.categoryId);
|
|
97
|
+
if (options?.priority)
|
|
98
|
+
params.append('priority', options.priority);
|
|
99
|
+
if (options?.radarItemId)
|
|
100
|
+
params.append('radarItemId', options.radarItemId);
|
|
101
|
+
if (options?.createdById)
|
|
102
|
+
params.append('createdById', options.createdById);
|
|
103
|
+
if (options?.updatedById)
|
|
104
|
+
params.append('updatedById', options.updatedById);
|
|
105
|
+
if (options?.sortBy)
|
|
106
|
+
params.append('sortBy', options.sortBy);
|
|
107
|
+
if (options?.sortOrder)
|
|
108
|
+
params.append('sortOrder', options.sortOrder);
|
|
93
109
|
// If explicit limit/offset provided, use single request (for manual pagination)
|
|
94
110
|
if (options?.limit !== undefined || options?.offset !== undefined) {
|
|
95
111
|
if (options?.limit)
|
package/dist/index.js
CHANGED
|
@@ -49,13 +49,34 @@ async function checkForUpdates() {
|
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
51
|
// Work Item schemas
|
|
52
|
+
// Use z.coerce.string() to handle any type coercion issues from MCP args
|
|
52
53
|
const ListWorkItemsSchema = z.object({
|
|
53
54
|
team_id: z.number().optional().describe('Team ID to filter work items'),
|
|
54
|
-
status: z.
|
|
55
|
-
|
|
55
|
+
status: z.coerce
|
|
56
|
+
.string()
|
|
57
|
+
.optional()
|
|
58
|
+
.describe('Filter by status. Board columns: "new", "doing", "review", "blocked", "completed". Use "pending" or "backlog" for backlog items. Use "all" to include completed/closed. Default excludes completed/closed.'),
|
|
59
|
+
assigned_to_id: z.coerce
|
|
60
|
+
.string()
|
|
61
|
+
.optional()
|
|
62
|
+
.describe('Filter by assignee: "all" (default), "me" (your items), "unassigned", or a specific user ID'),
|
|
63
|
+
search: z.coerce.string().optional().describe('Text search in title and description'),
|
|
64
|
+
category_id: z.coerce
|
|
65
|
+
.string()
|
|
66
|
+
.optional()
|
|
67
|
+
.describe('Filter by category ID, or "none" for uncategorized items'),
|
|
68
|
+
priority: z.coerce
|
|
69
|
+
.string()
|
|
70
|
+
.optional()
|
|
71
|
+
.describe('Filter by priority level (0-4, higher is more important)'),
|
|
72
|
+
radar_item_id: z.coerce.string().optional().describe('Filter by linked radar/initiative item'),
|
|
73
|
+
created_by_id: z.coerce.string().optional().describe('Filter by creator user ID'),
|
|
74
|
+
updated_by_id: z.coerce.string().optional().describe('Filter by last updater user ID'),
|
|
75
|
+
sort_by: z.coerce
|
|
56
76
|
.string()
|
|
57
77
|
.optional()
|
|
58
|
-
.describe('
|
|
78
|
+
.describe('Sort field: "dateUpdated" (default, newest first), "dateCreated", "priority", "title"'),
|
|
79
|
+
sort_order: z.coerce.string().optional().describe('Sort direction: "desc" (default), "asc"'),
|
|
59
80
|
limit: z.number().optional().describe('Maximum number of items to return'),
|
|
60
81
|
offset: z.number().optional().describe('Number of items to skip'),
|
|
61
82
|
});
|
|
@@ -100,7 +121,7 @@ const ListIssuesSchema = z.object({
|
|
|
100
121
|
assigned_to_id: z
|
|
101
122
|
.string()
|
|
102
123
|
.optional()
|
|
103
|
-
.describe('Filter by assignee
|
|
124
|
+
.describe('Filter by assignee: "me" (default), "unassigned", "all", or a specific user ID'),
|
|
104
125
|
limit: z.number().optional().describe('Maximum number of items to return'),
|
|
105
126
|
offset: z.number().optional().describe('Number of items to skip'),
|
|
106
127
|
});
|
|
@@ -112,9 +133,14 @@ const GetIssueSchema = z.object({
|
|
|
112
133
|
const CreateWorkItemSchema = z.object({
|
|
113
134
|
title: z.string().describe('Title of the work item'),
|
|
114
135
|
description: z.string().optional().describe('Description/notes for the work item (markdown)'),
|
|
115
|
-
status: z
|
|
136
|
+
status: z
|
|
137
|
+
.string()
|
|
138
|
+
.optional()
|
|
139
|
+
.describe('Initial status: "pending" (backlog), "new" (to do), "doing", "review", "blocked", "completed". Defaults to "new".'),
|
|
116
140
|
priority: z.number().optional().describe('Priority level (0-4, higher is more important)'),
|
|
117
141
|
leading_user_id: z.string().optional().describe('User ID to assign as leading user'),
|
|
142
|
+
category_id: z.string().optional().describe('Category ID to organize the work item'),
|
|
143
|
+
radar_item_id: z.string().optional().describe('Radar/initiative item ID to link to'),
|
|
118
144
|
});
|
|
119
145
|
const CreateIssueSchema = z.object({
|
|
120
146
|
title: z.string().describe('Title of the issue'),
|
|
@@ -220,7 +246,12 @@ class WolfpackMCPServer {
|
|
|
220
246
|
// Work Item tools
|
|
221
247
|
{
|
|
222
248
|
name: 'list_work_items',
|
|
223
|
-
description: 'List work items (tasks/tickets).
|
|
249
|
+
description: 'List work items (tasks/tickets). By default lists ALL items in the team, sorted by most recently updated. ' +
|
|
250
|
+
'Use assigned_to_id="me" to filter to only your assigned items. ' +
|
|
251
|
+
'TERMINOLOGY: The board has columns: "new" (to do), "doing" (in progress), "review" (pending review), "blocked", "completed" (done). ' +
|
|
252
|
+
'The "backlog" or "pending" status represents items not yet on the board. ' +
|
|
253
|
+
'By default, completed/closed items are excluded - use status="all" to include them. ' +
|
|
254
|
+
'Use when user asks about "the board", "work items", "tasks", "my work" (with assigned_to_id="me"), or "backlog".',
|
|
224
255
|
inputSchema: {
|
|
225
256
|
type: 'object',
|
|
226
257
|
properties: {
|
|
@@ -230,11 +261,37 @@ class WolfpackMCPServer {
|
|
|
230
261
|
},
|
|
231
262
|
status: {
|
|
232
263
|
type: 'string',
|
|
233
|
-
description: 'Filter: "new"
|
|
264
|
+
description: 'Filter by status. Board columns: "new", "doing", "review", "blocked", "completed". ' +
|
|
265
|
+
'Use "pending" or "backlog" for backlog items not on board. ' +
|
|
266
|
+
'Use "all" to include completed/closed items. Default excludes completed/closed.',
|
|
234
267
|
},
|
|
235
268
|
assigned_to_id: {
|
|
236
269
|
type: 'string',
|
|
237
|
-
description: 'Filter by assignee
|
|
270
|
+
description: 'Filter by assignee: "all" (default, shows all team items), "me" (your assigned items), "unassigned", or a specific user ID',
|
|
271
|
+
},
|
|
272
|
+
search: {
|
|
273
|
+
type: 'string',
|
|
274
|
+
description: 'Text search in title and description',
|
|
275
|
+
},
|
|
276
|
+
category_id: {
|
|
277
|
+
type: 'string',
|
|
278
|
+
description: 'Filter by category ID, or "none" for uncategorized items',
|
|
279
|
+
},
|
|
280
|
+
priority: {
|
|
281
|
+
type: 'string',
|
|
282
|
+
description: 'Filter by priority level (0-4, higher is more important)',
|
|
283
|
+
},
|
|
284
|
+
radar_item_id: {
|
|
285
|
+
type: 'string',
|
|
286
|
+
description: 'Filter by linked radar/initiative item ID',
|
|
287
|
+
},
|
|
288
|
+
sort_by: {
|
|
289
|
+
type: 'string',
|
|
290
|
+
description: 'Sort field: "dateUpdated" (default, newest activity first), "dateCreated", "priority", "title"',
|
|
291
|
+
},
|
|
292
|
+
sort_order: {
|
|
293
|
+
type: 'string',
|
|
294
|
+
description: 'Sort direction: "desc" (default), "asc"',
|
|
238
295
|
},
|
|
239
296
|
limit: { type: 'number', description: 'Maximum number of items to return' },
|
|
240
297
|
offset: { type: 'number', description: 'Number of items to skip' },
|
|
@@ -276,7 +333,10 @@ class WolfpackMCPServer {
|
|
|
276
333
|
},
|
|
277
334
|
{
|
|
278
335
|
name: 'update_work_item_status',
|
|
279
|
-
description: 'Change work item status.
|
|
336
|
+
description: 'Change work item status. ' +
|
|
337
|
+
'Board columns: "new" (to do), "doing" (in progress), "review" (pending review), "blocked", "completed" (done). ' +
|
|
338
|
+
'"pending" is for backlog items not yet on the board. ' +
|
|
339
|
+
'WORKFLOW: Move to "doing" when starting work, "review" when ready for review, "completed" when done.',
|
|
280
340
|
inputSchema: {
|
|
281
341
|
type: 'object',
|
|
282
342
|
properties: {
|
|
@@ -286,7 +346,7 @@ class WolfpackMCPServer {
|
|
|
286
346
|
},
|
|
287
347
|
status: {
|
|
288
348
|
type: 'string',
|
|
289
|
-
description: 'New status',
|
|
349
|
+
description: 'New status: "pending" (backlog), "new" (to do), "doing" (in progress), "review", "blocked", "completed" (done)',
|
|
290
350
|
},
|
|
291
351
|
},
|
|
292
352
|
required: ['work_item_id', 'status'],
|
|
@@ -356,7 +416,7 @@ class WolfpackMCPServer {
|
|
|
356
416
|
},
|
|
357
417
|
assigned_to_id: {
|
|
358
418
|
type: 'string',
|
|
359
|
-
description: 'Filter by assignee
|
|
419
|
+
description: 'Filter by assignee: "me" (default), "unassigned", "all", or a specific user ID',
|
|
360
420
|
},
|
|
361
421
|
limit: { type: 'number', description: 'Maximum number of items to return' },
|
|
362
422
|
offset: { type: 'number', description: 'Number of items to skip' },
|
|
@@ -395,7 +455,7 @@ class WolfpackMCPServer {
|
|
|
395
455
|
},
|
|
396
456
|
status: {
|
|
397
457
|
type: 'string',
|
|
398
|
-
description: 'Initial status (
|
|
458
|
+
description: 'Initial status: "pending" (backlog), "new" (to do), "doing", "review", "blocked", "completed". Defaults to "new".',
|
|
399
459
|
},
|
|
400
460
|
priority: {
|
|
401
461
|
type: 'number',
|
|
@@ -405,6 +465,14 @@ class WolfpackMCPServer {
|
|
|
405
465
|
type: 'string',
|
|
406
466
|
description: 'User ID to assign as leading user',
|
|
407
467
|
},
|
|
468
|
+
category_id: {
|
|
469
|
+
type: 'string',
|
|
470
|
+
description: 'Category ID to organize the work item',
|
|
471
|
+
},
|
|
472
|
+
radar_item_id: {
|
|
473
|
+
type: 'string',
|
|
474
|
+
description: 'Radar/initiative item ID to link to',
|
|
475
|
+
},
|
|
408
476
|
},
|
|
409
477
|
required: ['title'],
|
|
410
478
|
},
|
|
@@ -628,12 +696,20 @@ class WolfpackMCPServer {
|
|
|
628
696
|
teamId: parsed.team_id || this.client.getTeamId() || undefined,
|
|
629
697
|
status: parsed.status,
|
|
630
698
|
assignedToId: parsed.assigned_to_id,
|
|
699
|
+
search: parsed.search,
|
|
700
|
+
categoryId: parsed.category_id,
|
|
701
|
+
priority: parsed.priority,
|
|
702
|
+
radarItemId: parsed.radar_item_id,
|
|
703
|
+
createdById: parsed.created_by_id,
|
|
704
|
+
updatedById: parsed.updated_by_id,
|
|
705
|
+
sortBy: parsed.sort_by,
|
|
706
|
+
sortOrder: parsed.sort_order,
|
|
631
707
|
limit: parsed.limit,
|
|
632
708
|
offset: parsed.offset,
|
|
633
709
|
});
|
|
634
710
|
let text = JSON.stringify(result.items, null, 2);
|
|
635
711
|
if (result.truncated) {
|
|
636
|
-
text = `Note: Results truncated. Showing ${result.items.length} of ${result.total} items. Use
|
|
712
|
+
text = `Note: Results truncated. Showing ${result.items.length} of ${result.total} items. Use filters or limit/offset for pagination.\n\n${text}`;
|
|
637
713
|
}
|
|
638
714
|
return {
|
|
639
715
|
content: [{ type: 'text', text }],
|
|
@@ -755,6 +831,8 @@ class WolfpackMCPServer {
|
|
|
755
831
|
status: parsed.status,
|
|
756
832
|
priority: parsed.priority,
|
|
757
833
|
leadingUserId: parsed.leading_user_id,
|
|
834
|
+
categoryId: parsed.category_id,
|
|
835
|
+
radarItemId: parsed.radar_item_id,
|
|
758
836
|
});
|
|
759
837
|
return {
|
|
760
838
|
content: [
|