wolfpack-mcp 1.0.12 → 1.0.14

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.
Files changed (2) hide show
  1. package/dist/index.js +38 -28
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -19,7 +19,7 @@ async function checkForUpdates() {
19
19
  signal: AbortSignal.timeout(5000), // 5 second timeout
20
20
  });
21
21
  if (!response.ok)
22
- return;
22
+ return null;
23
23
  const data = (await response.json());
24
24
  const latestVersion = data.version;
25
25
  if (latestVersion && latestVersion !== CURRENT_VERSION) {
@@ -32,21 +32,14 @@ async function checkForUpdates() {
32
32
  latestMinor === currentMinor &&
33
33
  latestPatch > currentPatch);
34
34
  if (isNewer) {
35
- console.error('');
36
- console.error('╔════════════════════════════════════════════════════════════╗');
37
- console.error('║ UPDATE AVAILABLE ║');
38
- console.error(`║ ${PACKAGE_NAME} ${CURRENT_VERSION} → ${latestVersion}`.padEnd(61) + '║');
39
- console.error('║ ║');
40
- console.error('║ Run: npm install -g wolfpack-mcp@latest ║');
41
- console.error('║ Or update your package.json and run: npm install ║');
42
- console.error('╚════════════════════════════════════════════════════════════╝');
43
- console.error('');
35
+ return latestVersion;
44
36
  }
45
37
  }
46
38
  }
47
39
  catch {
48
40
  // Silently ignore update check failures - don't block startup
49
41
  }
42
+ return null;
50
43
  }
51
44
  // Work Item schemas
52
45
  // Use z.coerce.string() to handle any type coercion issues from MCP args
@@ -55,7 +48,7 @@ const ListWorkItemsSchema = z.object({
55
48
  status: z.coerce
56
49
  .string()
57
50
  .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.'),
51
+ .describe('Filter by status. Board columns: "new", "doing", "review", "ready", "blocked", "completed". Use "pending" or "backlog" for backlog items. Use "all" to include completed/closed. Default excludes completed/closed.'),
59
52
  assigned_to_id: z.coerce
60
53
  .string()
61
54
  .optional()
@@ -150,7 +143,7 @@ const CreateWorkItemSchema = z.object({
150
143
  status: z
151
144
  .string()
152
145
  .optional()
153
- .describe('Initial status: "pending" (backlog), "new" (to do), "doing", "review", "blocked", "completed". Defaults to "new".'),
146
+ .describe('Initial status: "pending" (backlog), "new" (to do), "doing", "review", "ready", "blocked", "completed". Defaults to "new".'),
154
147
  priority: z.number().optional().describe('Priority level (0-4, higher is more important)'),
155
148
  leading_user_id: z.string().optional().describe('User ID to assign as leading user'),
156
149
  category_id: z.string().optional().describe('Category ID to organize the work item'),
@@ -237,10 +230,11 @@ class WolfpackMCPServer {
237
230
  this.client = new WolfpackClient();
238
231
  this.server = new Server({
239
232
  name: 'wolfpack',
240
- version: '1.0.0',
233
+ version: CURRENT_VERSION,
241
234
  }, {
242
235
  capabilities: {
243
236
  tools: {},
237
+ logging: {},
244
238
  },
245
239
  });
246
240
  this.setupHandlers();
@@ -262,7 +256,7 @@ class WolfpackMCPServer {
262
256
  name: 'list_work_items',
263
257
  description: 'List work items (tasks/tickets). By default lists ALL items in the team, sorted by most recently updated. ' +
264
258
  'Use assigned_to_id="me" to filter to only your assigned items. ' +
265
- 'TERMINOLOGY: The board has columns: "new" (to do), "doing" (in progress), "review" (pending review), "blocked", "completed" (done). ' +
259
+ 'TERMINOLOGY: The board has columns: "new" (to do), "doing" (in progress), "review" (pending review), "ready" (code done, awaiting deployment), "blocked", "completed" (deployed). ' +
266
260
  'The "backlog" or "pending" status represents items not yet on the board. ' +
267
261
  'By default, completed/closed items are excluded - use status="all" to include them. ' +
268
262
  'Use when user asks about "the board", "work items", "tasks", "my work" (with assigned_to_id="me"), or "backlog".',
@@ -275,7 +269,7 @@ class WolfpackMCPServer {
275
269
  },
276
270
  status: {
277
271
  type: 'string',
278
- description: 'Filter by status. Board columns: "new", "doing", "review", "blocked", "completed". ' +
272
+ description: 'Filter by status. Board columns: "new", "doing", "review", "ready", "blocked", "completed". ' +
279
273
  'Use "pending" or "backlog" for backlog items not on board. ' +
280
274
  'Use "all" to include completed/closed items. Default excludes completed/closed.',
281
275
  },
@@ -314,7 +308,10 @@ class WolfpackMCPServer {
314
308
  },
315
309
  {
316
310
  name: 'get_work_item',
317
- description: 'Get a specific work item/task by ID or reference number. Returns full details including description (markdown notes). Call this before updating to see current content.',
311
+ description: 'Get a specific work item/task by ID or reference number. Returns full details including description (markdown notes). ' +
312
+ 'Call this before updating to see current content. ' +
313
+ 'WORKFLOW: When asked to work on an item, check its status and follow the required state transitions ' +
314
+ '(pending→pull first, new→doing, blocked/ready/completed/closed→new→doing, then review when done).',
318
315
  inputSchema: {
319
316
  type: 'object',
320
317
  properties: {
@@ -348,9 +345,14 @@ class WolfpackMCPServer {
348
345
  {
349
346
  name: 'update_work_item_status',
350
347
  description: 'Change work item status. ' +
351
- 'Board columns: "new" (to do), "doing" (in progress), "review" (pending review), "blocked", "completed" (done). ' +
352
- '"pending" is for backlog items not yet on the board. ' +
353
- 'WORKFLOW: Move to "doing" when starting work, "review" when ready for review, "completed" when done.',
348
+ 'REQUIRED WORKFLOW when working on items: ' +
349
+ '1) For "new" items: move to "doing" when starting work. ' +
350
+ '2) For "pending" (backlog) items: use pull_work_item first (claims and sets to "new"), then move to "doing". ' +
351
+ '3) For items in "blocked", "ready", "completed", or "closed": move to "new" first, then to "doing". ' +
352
+ '4) When work is complete: move to "review" (NOT "completed" - that is only for deployed work). ' +
353
+ '5) If work cannot be done: move to "blocked" and add a comment explaining why. ' +
354
+ 'Statuses: "pending" (backlog), "new" (to do), "doing" (in progress), "review" (work done, pending review), ' +
355
+ '"ready" (reviewed, awaiting deployment), "blocked", "completed" (deployed).',
354
356
  inputSchema: {
355
357
  type: 'object',
356
358
  properties: {
@@ -360,7 +362,7 @@ class WolfpackMCPServer {
360
362
  },
361
363
  status: {
362
364
  type: 'string',
363
- description: 'New status: "pending" (backlog), "new" (to do), "doing" (in progress), "review", "blocked", "completed" (done)',
365
+ description: 'New status: "pending" (backlog), "new" (to do), "doing" (in progress), "review" (work done), "ready" (awaiting deployment), "blocked", "completed" (deployed)',
364
366
  },
365
367
  },
366
368
  required: ['work_item_id', 'status'],
@@ -388,10 +390,9 @@ class WolfpackMCPServer {
388
390
  {
389
391
  name: 'pull_work_item',
390
392
  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. ' +
393
+ 'REQUIRED: Use this when starting work on a "pending" (backlog) item. ' +
394
+ 'This claims the item (assigns to you) and sets status to "new". ' +
395
+ 'After pulling, move to "doing" to indicate active work, then "review" when done. ' +
395
396
  'If no assignee is specified, assigns to the API key owner.',
396
397
  inputSchema: {
397
398
  type: 'object',
@@ -511,7 +512,7 @@ class WolfpackMCPServer {
511
512
  },
512
513
  status: {
513
514
  type: 'string',
514
- description: 'Initial status: "pending" (backlog), "new" (to do), "doing", "review", "blocked", "completed". Defaults to "new".',
515
+ description: 'Initial status: "pending" (backlog), "new" (to do), "doing", "review", "ready", "blocked", "completed". Defaults to "new".',
515
516
  },
516
517
  priority: {
517
518
  type: 'number',
@@ -698,7 +699,8 @@ class WolfpackMCPServer {
698
699
  // Comment tools
699
700
  {
700
701
  name: 'create_work_item_comment',
701
- description: 'Add a comment to a work item. Requires mcp:comments:create permission.',
702
+ description: 'Add a comment to a work item. Requires mcp:comments:create permission. ' +
703
+ 'REQUIRED: When moving an item to "blocked" status, add a comment explaining why the work cannot be done.',
702
704
  inputSchema: {
703
705
  type: 'object',
704
706
  properties: {
@@ -1142,8 +1144,8 @@ class WolfpackMCPServer {
1142
1144
  });
1143
1145
  }
1144
1146
  async start() {
1145
- // Check for updates (non-blocking)
1146
- checkForUpdates();
1147
+ // Start version check early (non-blocking)
1148
+ const updateCheckPromise = checkForUpdates();
1147
1149
  // Resolve team on startup
1148
1150
  if (config.teamSlug) {
1149
1151
  // Explicit team slug configured - use it
@@ -1180,6 +1182,14 @@ class WolfpackMCPServer {
1180
1182
  const transport = new StdioServerTransport();
1181
1183
  await this.server.connect(transport);
1182
1184
  console.error(`Wolfpack MCP Server v${CURRENT_VERSION} started`);
1185
+ // Send update notification via MCP logging after server is connected
1186
+ const latestVersion = await updateCheckPromise;
1187
+ if (latestVersion) {
1188
+ await this.server.sendLoggingMessage({
1189
+ level: 'warning',
1190
+ data: `Update available: ${PACKAGE_NAME} ${CURRENT_VERSION} → ${latestVersion}. Run: npm install -g wolfpack-mcp@latest`,
1191
+ });
1192
+ }
1183
1193
  }
1184
1194
  }
1185
1195
  // Validate configuration before starting
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wolfpack-mcp",
3
- "version": "1.0.12",
3
+ "version": "1.0.14",
4
4
  "description": "MCP server for Wolfpack AI-enhanced software delivery tools",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",