wolfpack-mcp 1.0.7 → 1.0.9

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 CHANGED
@@ -88,6 +88,24 @@ export class WolfpackClient {
88
88
  params.append('teamId', options.teamId.toString());
89
89
  if (options?.status)
90
90
  params.append('status', options.status);
91
+ if (options?.assignedToId)
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);
91
109
  // If explicit limit/offset provided, use single request (for manual pagination)
92
110
  if (options?.limit !== undefined || options?.offset !== undefined) {
93
111
  if (options?.limit)
package/dist/index.js CHANGED
@@ -51,7 +51,31 @@ async function checkForUpdates() {
51
51
  // Work Item schemas
52
52
  const ListWorkItemsSchema = z.object({
53
53
  team_id: z.number().optional().describe('Team ID to filter work items'),
54
- status: z.string().optional().describe('Filter by status'),
54
+ status: z
55
+ .string()
56
+ .optional()
57
+ .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.'),
58
+ assigned_to_id: z
59
+ .string()
60
+ .optional()
61
+ .describe('Filter by assignee: "me" (default), "unassigned", "all", or a specific user ID'),
62
+ search: z.string().optional().describe('Text search in title and description'),
63
+ category_id: z
64
+ .string()
65
+ .optional()
66
+ .describe('Filter by category ID, or "none" for uncategorized items'),
67
+ priority: z
68
+ .string()
69
+ .optional()
70
+ .describe('Filter by priority level (0-4, higher is more important)'),
71
+ radar_item_id: z.string().optional().describe('Filter by linked radar/initiative item'),
72
+ created_by_id: z.string().optional().describe('Filter by creator user ID'),
73
+ updated_by_id: z.string().optional().describe('Filter by last updater user ID'),
74
+ sort_by: z
75
+ .string()
76
+ .optional()
77
+ .describe('Sort field: "dateUpdated" (default, newest first), "dateCreated", "priority", "title"'),
78
+ sort_order: z.string().optional().describe('Sort direction: "desc" (default), "asc"'),
55
79
  limit: z.number().optional().describe('Maximum number of items to return'),
56
80
  offset: z.number().optional().describe('Number of items to skip'),
57
81
  });
@@ -96,7 +120,7 @@ const ListIssuesSchema = z.object({
96
120
  assigned_to_id: z
97
121
  .string()
98
122
  .optional()
99
- .describe('Filter by assignee ID (use "unassigned" for unassigned, "me" for self)'),
123
+ .describe('Filter by assignee: "me" (default), "unassigned", "all", or a specific user ID'),
100
124
  limit: z.number().optional().describe('Maximum number of items to return'),
101
125
  offset: z.number().optional().describe('Number of items to skip'),
102
126
  });
@@ -108,9 +132,14 @@ const GetIssueSchema = z.object({
108
132
  const CreateWorkItemSchema = z.object({
109
133
  title: z.string().describe('Title of the work item'),
110
134
  description: z.string().optional().describe('Description/notes for the work item (markdown)'),
111
- status: z.string().optional().describe('Initial status'),
135
+ status: z
136
+ .string()
137
+ .optional()
138
+ .describe('Initial status: "pending" (backlog), "new" (to do), "doing", "review", "blocked", "completed". Defaults to "new".'),
112
139
  priority: z.number().optional().describe('Priority level (0-4, higher is more important)'),
113
140
  leading_user_id: z.string().optional().describe('User ID to assign as leading user'),
141
+ category_id: z.string().optional().describe('Category ID to organize the work item'),
142
+ radar_item_id: z.string().optional().describe('Radar/initiative item ID to link to'),
114
143
  });
115
144
  const CreateIssueSchema = z.object({
116
145
  title: z.string().describe('Title of the issue'),
@@ -216,7 +245,11 @@ class WolfpackMCPServer {
216
245
  // Work Item tools
217
246
  {
218
247
  name: 'list_work_items',
219
- description: 'List work items (tasks/tickets) assigned to you. Use when user asks about "my work", "my tasks", "what am I working on", "assigned to me", or "backlog". Status mapping: "new" = backlog/todo, "doing" = in progress/active, "review" = pending review, "completed" = done/finished.',
248
+ description: 'List work items (tasks/tickets). By default lists items assigned to you, sorted by most recently updated. ' +
249
+ 'TERMINOLOGY: The board has columns: "new" (to do), "doing" (in progress), "review" (pending review), "blocked", "completed" (done). ' +
250
+ 'The "backlog" or "pending" status represents items not yet on the board. ' +
251
+ 'By default, completed/closed items are excluded - use status="all" to include them. ' +
252
+ 'Use when user asks about "my work", "my tasks", "what am I working on", "assigned to me", or "backlog".',
220
253
  inputSchema: {
221
254
  type: 'object',
222
255
  properties: {
@@ -226,7 +259,37 @@ class WolfpackMCPServer {
226
259
  },
227
260
  status: {
228
261
  type: 'string',
229
- description: 'Filter: "new" (backlog/todo), "doing" (in progress), "review", "completed" (done), "blocked"',
262
+ description: 'Filter by status. Board columns: "new", "doing", "review", "blocked", "completed". ' +
263
+ 'Use "pending" or "backlog" for backlog items not on board. ' +
264
+ 'Use "all" to include completed/closed items. Default excludes completed/closed.',
265
+ },
266
+ assigned_to_id: {
267
+ type: 'string',
268
+ description: 'Filter by assignee: "me" (default), "unassigned", "all", or a specific user ID',
269
+ },
270
+ search: {
271
+ type: 'string',
272
+ description: 'Text search in title and description',
273
+ },
274
+ category_id: {
275
+ type: 'string',
276
+ description: 'Filter by category ID, or "none" for uncategorized items',
277
+ },
278
+ priority: {
279
+ type: 'string',
280
+ description: 'Filter by priority level (0-4, higher is more important)',
281
+ },
282
+ radar_item_id: {
283
+ type: 'string',
284
+ description: 'Filter by linked radar/initiative item ID',
285
+ },
286
+ sort_by: {
287
+ type: 'string',
288
+ description: 'Sort field: "dateUpdated" (default, newest activity first), "dateCreated", "priority", "title"',
289
+ },
290
+ sort_order: {
291
+ type: 'string',
292
+ description: 'Sort direction: "desc" (default), "asc"',
230
293
  },
231
294
  limit: { type: 'number', description: 'Maximum number of items to return' },
232
295
  offset: { type: 'number', description: 'Number of items to skip' },
@@ -268,7 +331,10 @@ class WolfpackMCPServer {
268
331
  },
269
332
  {
270
333
  name: 'update_work_item_status',
271
- description: 'Change work item status. WORKFLOW: Move to "doing" when you start work, or "review" when ready for review. Can also set to "completed", "blocked", etc.',
334
+ description: 'Change work item status. ' +
335
+ 'Board columns: "new" (to do), "doing" (in progress), "review" (pending review), "blocked", "completed" (done). ' +
336
+ '"pending" is for backlog items not yet on the board. ' +
337
+ 'WORKFLOW: Move to "doing" when starting work, "review" when ready for review, "completed" when done.',
272
338
  inputSchema: {
273
339
  type: 'object',
274
340
  properties: {
@@ -278,7 +344,7 @@ class WolfpackMCPServer {
278
344
  },
279
345
  status: {
280
346
  type: 'string',
281
- description: 'New status',
347
+ description: 'New status: "pending" (backlog), "new" (to do), "doing" (in progress), "review", "blocked", "completed" (done)',
282
348
  },
283
349
  },
284
350
  required: ['work_item_id', 'status'],
@@ -348,7 +414,7 @@ class WolfpackMCPServer {
348
414
  },
349
415
  assigned_to_id: {
350
416
  type: 'string',
351
- description: 'Filter by assignee ID (use "unassigned" for unassigned, "me" for self)',
417
+ description: 'Filter by assignee: "me" (default), "unassigned", "all", or a specific user ID',
352
418
  },
353
419
  limit: { type: 'number', description: 'Maximum number of items to return' },
354
420
  offset: { type: 'number', description: 'Number of items to skip' },
@@ -387,7 +453,7 @@ class WolfpackMCPServer {
387
453
  },
388
454
  status: {
389
455
  type: 'string',
390
- description: 'Initial status (e.g., new, doing, review, completed - defaults to new)',
456
+ description: 'Initial status: "pending" (backlog), "new" (to do), "doing", "review", "blocked", "completed". Defaults to "new".',
391
457
  },
392
458
  priority: {
393
459
  type: 'number',
@@ -397,6 +463,14 @@ class WolfpackMCPServer {
397
463
  type: 'string',
398
464
  description: 'User ID to assign as leading user',
399
465
  },
466
+ category_id: {
467
+ type: 'string',
468
+ description: 'Category ID to organize the work item',
469
+ },
470
+ radar_item_id: {
471
+ type: 'string',
472
+ description: 'Radar/initiative item ID to link to',
473
+ },
400
474
  },
401
475
  required: ['title'],
402
476
  },
@@ -619,12 +693,21 @@ class WolfpackMCPServer {
619
693
  const result = await this.client.listWorkItems({
620
694
  teamId: parsed.team_id || this.client.getTeamId() || undefined,
621
695
  status: parsed.status,
696
+ assignedToId: parsed.assigned_to_id,
697
+ search: parsed.search,
698
+ categoryId: parsed.category_id,
699
+ priority: parsed.priority,
700
+ radarItemId: parsed.radar_item_id,
701
+ createdById: parsed.created_by_id,
702
+ updatedById: parsed.updated_by_id,
703
+ sortBy: parsed.sort_by,
704
+ sortOrder: parsed.sort_order,
622
705
  limit: parsed.limit,
623
706
  offset: parsed.offset,
624
707
  });
625
708
  let text = JSON.stringify(result.items, null, 2);
626
709
  if (result.truncated) {
627
- text = `Note: Results truncated. Showing ${result.items.length} of ${result.total} items. Use status filter or limit/offset for pagination.\n\n${text}`;
710
+ text = `Note: Results truncated. Showing ${result.items.length} of ${result.total} items. Use filters or limit/offset for pagination.\n\n${text}`;
628
711
  }
629
712
  return {
630
713
  content: [{ type: 'text', text }],
@@ -746,6 +829,8 @@ class WolfpackMCPServer {
746
829
  status: parsed.status,
747
830
  priority: parsed.priority,
748
831
  leadingUserId: parsed.leading_user_id,
832
+ categoryId: parsed.category_id,
833
+ radarItemId: parsed.radar_item_id,
749
834
  });
750
835
  return {
751
836
  content: [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wolfpack-mcp",
3
- "version": "1.0.7",
3
+ "version": "1.0.9",
4
4
  "description": "MCP server for Wolfpack AI-enhanced software delivery tools",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",