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 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.string().optional().describe('Filter by status'),
55
- assigned_to_id: z
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('Filter by assignee ID (use "unassigned" for unassigned, "me" for self)'),
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 ID (use "unassigned" for unassigned, "me" for self)'),
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.string().optional().describe('Initial status'),
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). Use when user asks about "my work", "my tasks", "what am I working on", "assigned to me", or "backlog". By default lists items assigned to you. Status mapping: "new" = backlog/todo, "doing" = in progress/active, "review" = pending review, "completed" = done/finished.',
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" (backlog/todo), "doing" (in progress), "review", "completed" (done), "blocked"',
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 ID (use "unassigned" for unassigned, "me" for self)',
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. WORKFLOW: Move to "doing" when you start work, or "review" when ready for review. Can also set to "completed", "blocked", etc.',
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 ID (use "unassigned" for unassigned, "me" for self)',
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 (e.g., new, doing, review, completed - defaults to new)',
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 status filter or limit/offset for pagination.\n\n${text}`;
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: [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wolfpack-mcp",
3
- "version": "1.0.8",
3
+ "version": "1.0.10",
4
4
  "description": "MCP server for Wolfpack AI-enhanced software delivery tools",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",