wolfpack-mcp 1.0.10 → 1.0.12

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
@@ -166,6 +166,28 @@ export class WolfpackClient {
166
166
  throw error;
167
167
  }
168
168
  }
169
+ async updateWorkItemAssignee(workItemId, data) {
170
+ try {
171
+ return await this.api.put(`/work-items/${workItemId}/assignee`, data);
172
+ }
173
+ catch (error) {
174
+ if (error && typeof error === 'object' && 'status' in error && error.status === 404) {
175
+ return null;
176
+ }
177
+ throw error;
178
+ }
179
+ }
180
+ async pullWorkItem(workItemId, data) {
181
+ try {
182
+ return await this.api.post(`/work-items/${workItemId}/pull`, data || {});
183
+ }
184
+ catch (error) {
185
+ if (error && typeof error === 'object' && 'status' in error && error.status === 404) {
186
+ return null;
187
+ }
188
+ throw error;
189
+ }
190
+ }
169
191
  // Radar Item (Initiative/Roadmap) methods
170
192
  async listRadarItems(options) {
171
193
  const params = new URLSearchParams();
package/dist/index.js CHANGED
@@ -92,6 +92,20 @@ const UpdateWorkItemStatusSchema = z.object({
92
92
  work_item_id: z.string().describe('The ID of the work item'),
93
93
  status: z.string().describe('New status'),
94
94
  });
95
+ const UpdateWorkItemAssigneeSchema = z.object({
96
+ work_item_id: z.string().describe('The ID of the work item'),
97
+ leading_user_id: z
98
+ .string()
99
+ .nullable()
100
+ .describe('User ID to assign as leading user, or null to unassign'),
101
+ });
102
+ const PullWorkItemSchema = z.object({
103
+ work_item_id: z.string().describe('The ID of the work item to pull from backlog'),
104
+ leading_user_id: z
105
+ .string()
106
+ .optional()
107
+ .describe('User ID to assign as leading user (defaults to API key owner)'),
108
+ });
95
109
  // Radar Item (Initiative/Roadmap) schemas
96
110
  const ListRadarItemsSchema = z.object({
97
111
  team_id: z.number().optional().describe('Team ID to filter radar items'),
@@ -352,6 +366,48 @@ class WolfpackMCPServer {
352
366
  required: ['work_item_id', 'status'],
353
367
  },
354
368
  },
369
+ {
370
+ name: 'update_work_item_assignee',
371
+ description: 'Change the assignee (leading user) on a work item. ' +
372
+ 'Use this to assign work to yourself or another team member, or to unassign by passing null.',
373
+ inputSchema: {
374
+ type: 'object',
375
+ properties: {
376
+ work_item_id: {
377
+ type: 'string',
378
+ description: 'The ID of the work item',
379
+ },
380
+ leading_user_id: {
381
+ type: ['string', 'null'],
382
+ description: 'User ID to assign as leading user, or null to unassign',
383
+ },
384
+ },
385
+ required: ['work_item_id', 'leading_user_id'],
386
+ },
387
+ },
388
+ {
389
+ name: 'pull_work_item',
390
+ description: 'Pull a specific work item from the backlog to the board. ' +
391
+ 'WORKFLOW: 1) Use list_work_items with status="pending" to browse backlog items, ' +
392
+ '2) Evaluate and select an item, ' +
393
+ '3) Use this tool to pull it onto the board. ' +
394
+ 'This changes the status from "pending" to "new" and assigns the item. ' +
395
+ 'If no assignee is specified, assigns to the API key owner.',
396
+ inputSchema: {
397
+ type: 'object',
398
+ properties: {
399
+ work_item_id: {
400
+ type: 'string',
401
+ description: 'The ID of the work item to pull from backlog',
402
+ },
403
+ leading_user_id: {
404
+ type: 'string',
405
+ description: 'User ID to assign as leading user (optional, defaults to API key owner)',
406
+ },
407
+ },
408
+ required: ['work_item_id'],
409
+ },
410
+ },
355
411
  // Radar Item (Initiative/Roadmap) tools
356
412
  {
357
413
  name: 'list_radar_items',
@@ -761,6 +817,47 @@ class WolfpackMCPServer {
761
817
  content: [{ type: 'text', text: 'Work item not found or not assigned to you' }],
762
818
  };
763
819
  }
820
+ case 'update_work_item_assignee': {
821
+ const parsed = UpdateWorkItemAssigneeSchema.parse(args);
822
+ const workItem = await this.client.updateWorkItemAssignee(parsed.work_item_id, {
823
+ leadingUserId: parsed.leading_user_id,
824
+ });
825
+ if (workItem) {
826
+ const assigneeText = parsed.leading_user_id
827
+ ? `assigned to ${parsed.leading_user_id}`
828
+ : 'unassigned';
829
+ return {
830
+ content: [
831
+ {
832
+ type: 'text',
833
+ text: `Updated "${workItem.title}" - now ${assigneeText}\n\n${JSON.stringify(workItem, null, 2)}`,
834
+ },
835
+ ],
836
+ };
837
+ }
838
+ return {
839
+ content: [{ type: 'text', text: 'Work item not found' }],
840
+ };
841
+ }
842
+ case 'pull_work_item': {
843
+ const parsed = PullWorkItemSchema.parse(args);
844
+ const workItem = await this.client.pullWorkItem(parsed.work_item_id, {
845
+ leadingUserId: parsed.leading_user_id,
846
+ });
847
+ if (workItem) {
848
+ return {
849
+ content: [
850
+ {
851
+ type: 'text',
852
+ text: `Pulled "${workItem.title}" from backlog to board (status: new)\n\n${JSON.stringify(workItem, null, 2)}`,
853
+ },
854
+ ],
855
+ };
856
+ }
857
+ return {
858
+ content: [{ type: 'text', text: 'Work item not found' }],
859
+ };
860
+ }
764
861
  // Radar Item handlers
765
862
  case 'list_radar_items': {
766
863
  const parsed = ListRadarItemsSchema.parse(args);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wolfpack-mcp",
3
- "version": "1.0.10",
3
+ "version": "1.0.12",
4
4
  "description": "MCP server for Wolfpack AI-enhanced software delivery tools",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",