wolfpack-mcp 1.0.56 → 1.0.58

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/README.md CHANGED
@@ -51,7 +51,7 @@ Restart Claude Desktop. You'll be prompted to sign in with your Wolfpack account
51
51
  "mcpServers": {
52
52
  "wolfpack": {
53
53
  "command": "npx",
54
- "args": ["-y", "wolfpack-mcp"],
54
+ "args": ["-y", "wolfpack-mcp@latest"],
55
55
  "env": {
56
56
  "WOLFPACK_API_KEY": "wfp_sk_your_api_key_here"
57
57
  }
@@ -271,6 +271,19 @@ export const AGENT_BUILDER_TOOLS = [
271
271
  type: 'number',
272
272
  description: 'Order within scheduled batch (lower = first)',
273
273
  },
274
+ disabled_tools: {
275
+ type: 'array',
276
+ items: { type: 'string' },
277
+ description: 'Built-in tools to disable for this task to optimise context. ' +
278
+ 'Available: bash, download, edit, fetch, glob, grep, ls, sourcegraph, view, write, agent, diagnostics. ' +
279
+ 'Pass null or empty array to use all tools.',
280
+ },
281
+ disabled_mcp_servers: {
282
+ type: 'array',
283
+ items: { type: 'string' },
284
+ description: 'MCP servers to disable for this task (e.g. "wolfpack"). ' +
285
+ 'Disables all tools from those MCP servers to reduce context usage.',
286
+ },
274
287
  ...ORG_SLUG_PROP,
275
288
  },
276
289
  required: ['agent_id', 'name', 'prompt'],
@@ -278,7 +291,7 @@ export const AGENT_BUILDER_TOOLS = [
278
291
  },
279
292
  {
280
293
  name: 'update_agent_task',
281
- description: "Update a task's prompt or schedule settings.",
294
+ description: "Update a task's prompt, schedule settings, or disabled tools/MCP servers.",
282
295
  inputSchema: {
283
296
  type: 'object',
284
297
  properties: {
@@ -289,6 +302,19 @@ export const AGENT_BUILDER_TOOLS = [
289
302
  scheduled_enabled: { type: 'boolean', description: 'Include in scheduled runs' },
290
303
  sort_order: { type: 'number', description: 'Order within scheduled batch' },
291
304
  is_active: { type: 'boolean', description: 'Whether this task is active' },
305
+ disabled_tools: {
306
+ type: 'array',
307
+ items: { type: 'string' },
308
+ description: 'Built-in tools to disable for this task. ' +
309
+ 'Available: bash, download, edit, fetch, glob, grep, ls, sourcegraph, view, write, agent, diagnostics. ' +
310
+ 'Pass null or empty array to enable all tools.',
311
+ },
312
+ disabled_mcp_servers: {
313
+ type: 'array',
314
+ items: { type: 'string' },
315
+ description: 'MCP servers to disable for this task (e.g. "wolfpack"). ' +
316
+ 'Pass null or empty array to enable all MCP servers.',
317
+ },
292
318
  ...ORG_SLUG_PROP,
293
319
  },
294
320
  required: ['agent_id', 'task_id'],
@@ -347,6 +373,113 @@ export const AGENT_BUILDER_TOOLS = [
347
373
  required: ['agent_id', 'entry_id'],
348
374
  },
349
375
  },
376
+ // ─── Group 4b: Schedules ─────────────────────────────────────────────────
377
+ {
378
+ name: 'list_agent_schedules',
379
+ description: 'List all schedules for an agent. Each schedule defines when and how often the agent wakes up, ' +
380
+ 'and which tasks to run.',
381
+ inputSchema: {
382
+ type: 'object',
383
+ properties: {
384
+ agent_id: { type: 'string', description: 'Agent profile ID' },
385
+ ...ORG_SLUG_PROP,
386
+ },
387
+ required: ['agent_id'],
388
+ },
389
+ },
390
+ {
391
+ name: 'create_agent_schedule',
392
+ description: 'Create a new schedule for an agent. A schedule defines frequency, working hours, timezone, ' +
393
+ 'and which tasks to run. Schedules are created disabled by default.',
394
+ inputSchema: {
395
+ type: 'object',
396
+ properties: {
397
+ agent_id: { type: 'string', description: 'Agent profile ID' },
398
+ name: { type: 'string', description: 'Schedule name (default "Schedule")' },
399
+ enabled: {
400
+ type: 'boolean',
401
+ description: 'Whether this schedule is active (default false)',
402
+ },
403
+ check_frequency_minutes: {
404
+ type: 'number',
405
+ description: 'How often to wake up in minutes (5-1440, default 60)',
406
+ },
407
+ working_hours_start: {
408
+ type: 'number',
409
+ description: 'Start of working hours (0-23). Null for any time.',
410
+ },
411
+ working_hours_end: {
412
+ type: 'number',
413
+ description: 'End of working hours (0-23). Null for any time.',
414
+ },
415
+ working_days: {
416
+ type: 'array',
417
+ items: { type: 'string' },
418
+ description: 'Days to run: "mon","tue","wed","thu","fri","sat","sun". Empty for any day.',
419
+ },
420
+ timezone: { type: 'string', description: 'Timezone (default "UTC")' },
421
+ dst_aware: {
422
+ type: 'boolean',
423
+ description: 'Adjust for Daylight Saving Time (default true)',
424
+ },
425
+ multi_project: {
426
+ type: 'boolean',
427
+ description: 'When true, tasks run once with access to all assigned projects. ' +
428
+ 'When false, tasks run once per project.',
429
+ },
430
+ task_ids: {
431
+ type: 'array',
432
+ items: { type: 'string' },
433
+ description: 'Task IDs to include in this schedule, in execution order.',
434
+ },
435
+ ...ORG_SLUG_PROP,
436
+ },
437
+ required: ['agent_id'],
438
+ },
439
+ },
440
+ {
441
+ name: 'update_agent_schedule',
442
+ description: "Update a schedule's configuration or task assignments.",
443
+ inputSchema: {
444
+ type: 'object',
445
+ properties: {
446
+ agent_id: { type: 'string', description: 'Agent profile ID' },
447
+ schedule_id: { type: 'string', description: 'Schedule ID' },
448
+ name: { type: 'string', description: 'Schedule name' },
449
+ enabled: { type: 'boolean', description: 'Whether this schedule is active' },
450
+ check_frequency_minutes: {
451
+ type: 'number',
452
+ description: 'How often to wake up in minutes (5-1440)',
453
+ },
454
+ working_hours_start: {
455
+ type: 'number',
456
+ description: 'Start of working hours (0-23). Null to clear.',
457
+ },
458
+ working_hours_end: {
459
+ type: 'number',
460
+ description: 'End of working hours (0-23). Null to clear.',
461
+ },
462
+ working_days: {
463
+ type: 'array',
464
+ items: { type: 'string' },
465
+ description: 'Days to run. Null or empty to allow any day.',
466
+ },
467
+ timezone: { type: 'string', description: 'Timezone' },
468
+ dst_aware: { type: 'boolean', description: 'Adjust for Daylight Saving Time' },
469
+ multi_project: {
470
+ type: 'boolean',
471
+ description: 'Run once across all projects (true) or once per project (false)',
472
+ },
473
+ task_ids: {
474
+ type: 'array',
475
+ items: { type: 'string' },
476
+ description: 'Task IDs to include in this schedule, in execution order.',
477
+ },
478
+ ...ORG_SLUG_PROP,
479
+ },
480
+ required: ['agent_id', 'schedule_id'],
481
+ },
482
+ },
350
483
  // ─── Group 5: Skills (authoring) ─────────────────────────────────────────
351
484
  {
352
485
  name: 'create_skill',
@@ -755,6 +888,8 @@ export async function handleAgentBuilderTool(name, args, client) {
755
888
  prompt: z.string(),
756
889
  scheduled_enabled: z.boolean().optional(),
757
890
  sort_order: z.number().optional(),
891
+ disabled_tools: z.array(z.string()).optional(),
892
+ disabled_mcp_servers: z.array(z.string()).optional(),
758
893
  org_slug: orgSlugField,
759
894
  })
760
895
  .parse(args);
@@ -763,6 +898,8 @@ export async function handleAgentBuilderTool(name, args, client) {
763
898
  prompt: parsed.prompt,
764
899
  scheduledEnabled: parsed.scheduled_enabled,
765
900
  sortOrder: parsed.sort_order,
901
+ disabledTools: parsed.disabled_tools,
902
+ disabledMcpServers: parsed.disabled_mcp_servers,
766
903
  }, resolveOrg(parsed));
767
904
  return { content: [{ type: 'text', text: `Created task "${task.name}"\n\n${text(task)}` }] };
768
905
  }
@@ -776,6 +913,8 @@ export async function handleAgentBuilderTool(name, args, client) {
776
913
  scheduled_enabled: z.boolean().optional(),
777
914
  sort_order: z.number().optional(),
778
915
  is_active: z.boolean().optional(),
916
+ disabled_tools: z.array(z.string()).nullable().optional(),
917
+ disabled_mcp_servers: z.array(z.string()).nullable().optional(),
779
918
  org_slug: orgSlugField,
780
919
  })
781
920
  .parse(args);
@@ -790,6 +929,10 @@ export async function handleAgentBuilderTool(name, args, client) {
790
929
  fields.sortOrder = parsed.sort_order;
791
930
  if (parsed.is_active !== undefined)
792
931
  fields.isActive = parsed.is_active;
932
+ if (parsed.disabled_tools !== undefined)
933
+ fields.disabledTools = parsed.disabled_tools;
934
+ if (parsed.disabled_mcp_servers !== undefined)
935
+ fields.disabledMcpServers = parsed.disabled_mcp_servers;
793
936
  const task = await client.updateAgentTask(parsed.agent_id, parsed.task_id, fields, resolveOrg(parsed));
794
937
  return { content: [{ type: 'text', text: `Updated task\n\n${text(task)}` }] };
795
938
  }
@@ -828,6 +971,101 @@ export async function handleAgentBuilderTool(name, args, client) {
828
971
  await client.cancelQueueEntry(parsed.agent_id, parsed.entry_id, resolveOrg(parsed));
829
972
  return { content: [{ type: 'text', text: `Cancelled queue entry ${parsed.entry_id}` }] };
830
973
  }
974
+ // ─── Schedules ──────────────────────────────────────────────────────────
975
+ case 'list_agent_schedules': {
976
+ const parsed = AgentIdSchema.parse(args);
977
+ const schedules = await client.listAgentSchedules(parsed.agent_id, resolveOrg(parsed));
978
+ return { content: [{ type: 'text', text: text(schedules) }] };
979
+ }
980
+ case 'create_agent_schedule': {
981
+ const parsed = z
982
+ .object({
983
+ agent_id: z.string(),
984
+ name: z.string().optional(),
985
+ enabled: z.boolean().optional(),
986
+ check_frequency_minutes: z.number().optional(),
987
+ working_hours_start: z.number().nullable().optional(),
988
+ working_hours_end: z.number().nullable().optional(),
989
+ working_days: z.array(z.string()).nullable().optional(),
990
+ timezone: z.string().optional(),
991
+ dst_aware: z.boolean().optional(),
992
+ multi_project: z.boolean().optional(),
993
+ task_ids: z.array(z.string()).optional(),
994
+ org_slug: orgSlugField,
995
+ })
996
+ .parse(args);
997
+ const { agent_id, org_slug, ...rest } = parsed;
998
+ const body = {};
999
+ if (rest.name !== undefined)
1000
+ body.name = rest.name;
1001
+ if (rest.enabled !== undefined)
1002
+ body.enabled = rest.enabled;
1003
+ if (rest.check_frequency_minutes !== undefined)
1004
+ body.checkFrequencyMinutes = rest.check_frequency_minutes;
1005
+ if (rest.working_hours_start !== undefined)
1006
+ body.workingHoursStart = rest.working_hours_start;
1007
+ if (rest.working_hours_end !== undefined)
1008
+ body.workingHoursEnd = rest.working_hours_end;
1009
+ if (rest.working_days !== undefined)
1010
+ body.workingDays = rest.working_days;
1011
+ if (rest.timezone !== undefined)
1012
+ body.timezone = rest.timezone;
1013
+ if (rest.dst_aware !== undefined)
1014
+ body.dstAware = rest.dst_aware;
1015
+ if (rest.multi_project !== undefined)
1016
+ body.multiProject = rest.multi_project;
1017
+ if (rest.task_ids !== undefined)
1018
+ body.taskIds = rest.task_ids;
1019
+ const schedule = await client.createAgentSchedule(agent_id, body, resolveOrg(parsed));
1020
+ return {
1021
+ content: [
1022
+ { type: 'text', text: `Created schedule "${schedule.name}"\n\n${text(schedule)}` },
1023
+ ],
1024
+ };
1025
+ }
1026
+ case 'update_agent_schedule': {
1027
+ const parsed = z
1028
+ .object({
1029
+ agent_id: z.string(),
1030
+ schedule_id: z.string(),
1031
+ name: z.string().optional(),
1032
+ enabled: z.boolean().optional(),
1033
+ check_frequency_minutes: z.number().optional(),
1034
+ working_hours_start: z.number().nullable().optional(),
1035
+ working_hours_end: z.number().nullable().optional(),
1036
+ working_days: z.array(z.string()).nullable().optional(),
1037
+ timezone: z.string().optional(),
1038
+ dst_aware: z.boolean().optional(),
1039
+ multi_project: z.boolean().optional(),
1040
+ task_ids: z.array(z.string()).optional(),
1041
+ org_slug: orgSlugField,
1042
+ })
1043
+ .parse(args);
1044
+ const { agent_id, schedule_id, org_slug, ...rest } = parsed;
1045
+ const body = {};
1046
+ if (rest.name !== undefined)
1047
+ body.name = rest.name;
1048
+ if (rest.enabled !== undefined)
1049
+ body.enabled = rest.enabled;
1050
+ if (rest.check_frequency_minutes !== undefined)
1051
+ body.checkFrequencyMinutes = rest.check_frequency_minutes;
1052
+ if (rest.working_hours_start !== undefined)
1053
+ body.workingHoursStart = rest.working_hours_start;
1054
+ if (rest.working_hours_end !== undefined)
1055
+ body.workingHoursEnd = rest.working_hours_end;
1056
+ if (rest.working_days !== undefined)
1057
+ body.workingDays = rest.working_days;
1058
+ if (rest.timezone !== undefined)
1059
+ body.timezone = rest.timezone;
1060
+ if (rest.dst_aware !== undefined)
1061
+ body.dstAware = rest.dst_aware;
1062
+ if (rest.multi_project !== undefined)
1063
+ body.multiProject = rest.multi_project;
1064
+ if (rest.task_ids !== undefined)
1065
+ body.taskIds = rest.task_ids;
1066
+ const schedule = await client.updateAgentSchedule(agent_id, schedule_id, body, resolveOrg(parsed));
1067
+ return { content: [{ type: 'text', text: `Updated schedule\n\n${text(schedule)}` }] };
1068
+ }
831
1069
  // ─── Skills ─────────────────────────────────────────────────────────────
832
1070
  case 'create_skill': {
833
1071
  const parsed = z
package/dist/client.js CHANGED
@@ -703,6 +703,16 @@ export class WolfpackClient {
703
703
  .delete(this.withOrgSlug(`/agents/${agentId}/queue/${entryId}`, orgSlug))
704
704
  .then(() => ({ success: true }));
705
705
  }
706
+ // ─── Agent Builder: Schedules ──────────────────────────────────────────────
707
+ async listAgentSchedules(agentId, orgSlug) {
708
+ return this.api.get(this.withOrgSlug(`/agents/${agentId}/schedules`, orgSlug));
709
+ }
710
+ async createAgentSchedule(agentId, body, orgSlug) {
711
+ return this.api.post(this.withOrgSlug(`/agents/${agentId}/schedules`, orgSlug), body);
712
+ }
713
+ async updateAgentSchedule(agentId, scheduleId, body, orgSlug) {
714
+ return this.api.post(this.withOrgSlug(`/agents/${agentId}/schedules/${scheduleId}`, orgSlug), body);
715
+ }
706
716
  // ─── Agent Builder: Secrets ────────────────────────────────────────────────
707
717
  async listAgentSecrets(agentId, orgSlug) {
708
718
  return this.api.get(this.withOrgSlug(`/agents/${agentId}/secrets`, orgSlug));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wolfpack-mcp",
3
- "version": "1.0.56",
3
+ "version": "1.0.58",
4
4
  "description": "MCP server for Wolfpack AI-enhanced software delivery tools",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",