wolfpack-mcp 1.0.57 → 1.0.59

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.
@@ -91,6 +91,37 @@ export const AGENT_BUILDER_TOOLS = [
91
91
  required: ['agent_id'],
92
92
  },
93
93
  },
94
+ {
95
+ name: 'get_agent_mcp_selections',
96
+ description: "List the template MCP servers this agent has opted out of. Returns { disabled: string[] } where each string is the MCP server key from the agent's template.",
97
+ inputSchema: {
98
+ type: 'object',
99
+ properties: {
100
+ agent_id: { type: 'string', description: 'Agent profile ID' },
101
+ ...ORG_SLUG_PROP,
102
+ },
103
+ required: ['agent_id'],
104
+ },
105
+ },
106
+ {
107
+ name: 'update_agent_mcp_selections',
108
+ description: 'Replace the list of template MCP servers this agent has opted out of. ' +
109
+ 'Pass an empty array to re-enable every template server. Template servers ' +
110
+ 'not in the list stay enabled; those in the list are disabled for this agent.',
111
+ inputSchema: {
112
+ type: 'object',
113
+ properties: {
114
+ agent_id: { type: 'string', description: 'Agent profile ID' },
115
+ disabled: {
116
+ type: 'array',
117
+ items: { type: 'string' },
118
+ description: 'MCP server keys (from the template) to disable for this agent',
119
+ },
120
+ ...ORG_SLUG_PROP,
121
+ },
122
+ required: ['agent_id', 'disabled'],
123
+ },
124
+ },
94
125
  // ─── Group 2: Project Assignment ─────────────────────────────────────────
95
126
  {
96
127
  name: 'list_agent_projects',
@@ -271,6 +302,19 @@ export const AGENT_BUILDER_TOOLS = [
271
302
  type: 'number',
272
303
  description: 'Order within scheduled batch (lower = first)',
273
304
  },
305
+ disabled_tools: {
306
+ type: 'array',
307
+ items: { type: 'string' },
308
+ description: 'Built-in tools to disable for this task to optimise context. ' +
309
+ 'Available: bash, download, edit, fetch, glob, grep, ls, sourcegraph, view, write, agent, diagnostics. ' +
310
+ 'Pass null or empty array to use 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
+ 'Disables all tools from those MCP servers to reduce context usage.',
317
+ },
274
318
  ...ORG_SLUG_PROP,
275
319
  },
276
320
  required: ['agent_id', 'name', 'prompt'],
@@ -278,7 +322,7 @@ export const AGENT_BUILDER_TOOLS = [
278
322
  },
279
323
  {
280
324
  name: 'update_agent_task',
281
- description: "Update a task's prompt or schedule settings.",
325
+ description: "Update a task's prompt, schedule settings, or disabled tools/MCP servers.",
282
326
  inputSchema: {
283
327
  type: 'object',
284
328
  properties: {
@@ -289,6 +333,19 @@ export const AGENT_BUILDER_TOOLS = [
289
333
  scheduled_enabled: { type: 'boolean', description: 'Include in scheduled runs' },
290
334
  sort_order: { type: 'number', description: 'Order within scheduled batch' },
291
335
  is_active: { type: 'boolean', description: 'Whether this task is active' },
336
+ disabled_tools: {
337
+ type: 'array',
338
+ items: { type: 'string' },
339
+ description: 'Built-in tools to disable for this task. ' +
340
+ 'Available: bash, download, edit, fetch, glob, grep, ls, sourcegraph, view, write, agent, diagnostics. ' +
341
+ 'Pass null or empty array to enable all tools.',
342
+ },
343
+ disabled_mcp_servers: {
344
+ type: 'array',
345
+ items: { type: 'string' },
346
+ description: 'MCP servers to disable for this task (e.g. "wolfpack"). ' +
347
+ 'Pass null or empty array to enable all MCP servers.',
348
+ },
292
349
  ...ORG_SLUG_PROP,
293
350
  },
294
351
  required: ['agent_id', 'task_id'],
@@ -347,6 +404,113 @@ export const AGENT_BUILDER_TOOLS = [
347
404
  required: ['agent_id', 'entry_id'],
348
405
  },
349
406
  },
407
+ // ─── Group 4b: Schedules ─────────────────────────────────────────────────
408
+ {
409
+ name: 'list_agent_schedules',
410
+ description: 'List all schedules for an agent. Each schedule defines when and how often the agent wakes up, ' +
411
+ 'and which tasks to run.',
412
+ inputSchema: {
413
+ type: 'object',
414
+ properties: {
415
+ agent_id: { type: 'string', description: 'Agent profile ID' },
416
+ ...ORG_SLUG_PROP,
417
+ },
418
+ required: ['agent_id'],
419
+ },
420
+ },
421
+ {
422
+ name: 'create_agent_schedule',
423
+ description: 'Create a new schedule for an agent. A schedule defines frequency, working hours, timezone, ' +
424
+ 'and which tasks to run. Schedules are created disabled by default.',
425
+ inputSchema: {
426
+ type: 'object',
427
+ properties: {
428
+ agent_id: { type: 'string', description: 'Agent profile ID' },
429
+ name: { type: 'string', description: 'Schedule name (default "Schedule")' },
430
+ enabled: {
431
+ type: 'boolean',
432
+ description: 'Whether this schedule is active (default false)',
433
+ },
434
+ check_frequency_minutes: {
435
+ type: 'number',
436
+ description: 'How often to wake up in minutes (5-1440, default 60)',
437
+ },
438
+ working_hours_start: {
439
+ type: 'number',
440
+ description: 'Start of working hours (0-23). Null for any time.',
441
+ },
442
+ working_hours_end: {
443
+ type: 'number',
444
+ description: 'End of working hours (0-23). Null for any time.',
445
+ },
446
+ working_days: {
447
+ type: 'array',
448
+ items: { type: 'string' },
449
+ description: 'Days to run: "mon","tue","wed","thu","fri","sat","sun". Empty for any day.',
450
+ },
451
+ timezone: { type: 'string', description: 'Timezone (default "UTC")' },
452
+ dst_aware: {
453
+ type: 'boolean',
454
+ description: 'Adjust for Daylight Saving Time (default true)',
455
+ },
456
+ multi_project: {
457
+ type: 'boolean',
458
+ description: 'When true, tasks run once with access to all assigned projects. ' +
459
+ 'When false, tasks run once per project.',
460
+ },
461
+ task_ids: {
462
+ type: 'array',
463
+ items: { type: 'string' },
464
+ description: 'Task IDs to include in this schedule, in execution order.',
465
+ },
466
+ ...ORG_SLUG_PROP,
467
+ },
468
+ required: ['agent_id'],
469
+ },
470
+ },
471
+ {
472
+ name: 'update_agent_schedule',
473
+ description: "Update a schedule's configuration or task assignments.",
474
+ inputSchema: {
475
+ type: 'object',
476
+ properties: {
477
+ agent_id: { type: 'string', description: 'Agent profile ID' },
478
+ schedule_id: { type: 'string', description: 'Schedule ID' },
479
+ name: { type: 'string', description: 'Schedule name' },
480
+ enabled: { type: 'boolean', description: 'Whether this schedule is active' },
481
+ check_frequency_minutes: {
482
+ type: 'number',
483
+ description: 'How often to wake up in minutes (5-1440)',
484
+ },
485
+ working_hours_start: {
486
+ type: 'number',
487
+ description: 'Start of working hours (0-23). Null to clear.',
488
+ },
489
+ working_hours_end: {
490
+ type: 'number',
491
+ description: 'End of working hours (0-23). Null to clear.',
492
+ },
493
+ working_days: {
494
+ type: 'array',
495
+ items: { type: 'string' },
496
+ description: 'Days to run. Null or empty to allow any day.',
497
+ },
498
+ timezone: { type: 'string', description: 'Timezone' },
499
+ dst_aware: { type: 'boolean', description: 'Adjust for Daylight Saving Time' },
500
+ multi_project: {
501
+ type: 'boolean',
502
+ description: 'Run once across all projects (true) or once per project (false)',
503
+ },
504
+ task_ids: {
505
+ type: 'array',
506
+ items: { type: 'string' },
507
+ description: 'Task IDs to include in this schedule, in execution order.',
508
+ },
509
+ ...ORG_SLUG_PROP,
510
+ },
511
+ required: ['agent_id', 'schedule_id'],
512
+ },
513
+ },
350
514
  // ─── Group 5: Skills (authoring) ─────────────────────────────────────────
351
515
  {
352
516
  name: 'create_skill',
@@ -630,6 +794,24 @@ export async function handleAgentBuilderTool(name, args, client) {
630
794
  const agent = await client.updateAgent(agent_id, fields, resolveOrg(parsed));
631
795
  return { content: [{ type: 'text', text: `Updated agent\n\n${text(agent)}` }] };
632
796
  }
797
+ case 'get_agent_mcp_selections': {
798
+ const parsed = AgentIdSchema.parse(args);
799
+ const selections = await client.getAgentMcpSelections(parsed.agent_id, resolveOrg(parsed));
800
+ return { content: [{ type: 'text', text: text(selections) }] };
801
+ }
802
+ case 'update_agent_mcp_selections': {
803
+ const parsed = z
804
+ .object({
805
+ agent_id: z.string(),
806
+ disabled: z.array(z.string()),
807
+ org_slug: orgSlugField,
808
+ })
809
+ .parse(args);
810
+ const selections = await client.updateAgentMcpSelections(parsed.agent_id, parsed.disabled, resolveOrg(parsed));
811
+ return {
812
+ content: [{ type: 'text', text: `Updated MCP selections\n\n${text(selections)}` }],
813
+ };
814
+ }
633
815
  // ─── Project Assignment ─────────────────────────────────────────────────
634
816
  case 'list_agent_projects': {
635
817
  const parsed = AgentIdSchema.parse(args);
@@ -755,6 +937,8 @@ export async function handleAgentBuilderTool(name, args, client) {
755
937
  prompt: z.string(),
756
938
  scheduled_enabled: z.boolean().optional(),
757
939
  sort_order: z.number().optional(),
940
+ disabled_tools: z.array(z.string()).optional(),
941
+ disabled_mcp_servers: z.array(z.string()).optional(),
758
942
  org_slug: orgSlugField,
759
943
  })
760
944
  .parse(args);
@@ -763,6 +947,8 @@ export async function handleAgentBuilderTool(name, args, client) {
763
947
  prompt: parsed.prompt,
764
948
  scheduledEnabled: parsed.scheduled_enabled,
765
949
  sortOrder: parsed.sort_order,
950
+ disabledTools: parsed.disabled_tools,
951
+ disabledMcpServers: parsed.disabled_mcp_servers,
766
952
  }, resolveOrg(parsed));
767
953
  return { content: [{ type: 'text', text: `Created task "${task.name}"\n\n${text(task)}` }] };
768
954
  }
@@ -776,6 +962,8 @@ export async function handleAgentBuilderTool(name, args, client) {
776
962
  scheduled_enabled: z.boolean().optional(),
777
963
  sort_order: z.number().optional(),
778
964
  is_active: z.boolean().optional(),
965
+ disabled_tools: z.array(z.string()).nullable().optional(),
966
+ disabled_mcp_servers: z.array(z.string()).nullable().optional(),
779
967
  org_slug: orgSlugField,
780
968
  })
781
969
  .parse(args);
@@ -790,6 +978,10 @@ export async function handleAgentBuilderTool(name, args, client) {
790
978
  fields.sortOrder = parsed.sort_order;
791
979
  if (parsed.is_active !== undefined)
792
980
  fields.isActive = parsed.is_active;
981
+ if (parsed.disabled_tools !== undefined)
982
+ fields.disabledTools = parsed.disabled_tools;
983
+ if (parsed.disabled_mcp_servers !== undefined)
984
+ fields.disabledMcpServers = parsed.disabled_mcp_servers;
793
985
  const task = await client.updateAgentTask(parsed.agent_id, parsed.task_id, fields, resolveOrg(parsed));
794
986
  return { content: [{ type: 'text', text: `Updated task\n\n${text(task)}` }] };
795
987
  }
@@ -828,6 +1020,101 @@ export async function handleAgentBuilderTool(name, args, client) {
828
1020
  await client.cancelQueueEntry(parsed.agent_id, parsed.entry_id, resolveOrg(parsed));
829
1021
  return { content: [{ type: 'text', text: `Cancelled queue entry ${parsed.entry_id}` }] };
830
1022
  }
1023
+ // ─── Schedules ──────────────────────────────────────────────────────────
1024
+ case 'list_agent_schedules': {
1025
+ const parsed = AgentIdSchema.parse(args);
1026
+ const schedules = await client.listAgentSchedules(parsed.agent_id, resolveOrg(parsed));
1027
+ return { content: [{ type: 'text', text: text(schedules) }] };
1028
+ }
1029
+ case 'create_agent_schedule': {
1030
+ const parsed = z
1031
+ .object({
1032
+ agent_id: z.string(),
1033
+ name: z.string().optional(),
1034
+ enabled: z.boolean().optional(),
1035
+ check_frequency_minutes: z.number().optional(),
1036
+ working_hours_start: z.number().nullable().optional(),
1037
+ working_hours_end: z.number().nullable().optional(),
1038
+ working_days: z.array(z.string()).nullable().optional(),
1039
+ timezone: z.string().optional(),
1040
+ dst_aware: z.boolean().optional(),
1041
+ multi_project: z.boolean().optional(),
1042
+ task_ids: z.array(z.string()).optional(),
1043
+ org_slug: orgSlugField,
1044
+ })
1045
+ .parse(args);
1046
+ const { agent_id, org_slug, ...rest } = parsed;
1047
+ const body = {};
1048
+ if (rest.name !== undefined)
1049
+ body.name = rest.name;
1050
+ if (rest.enabled !== undefined)
1051
+ body.enabled = rest.enabled;
1052
+ if (rest.check_frequency_minutes !== undefined)
1053
+ body.checkFrequencyMinutes = rest.check_frequency_minutes;
1054
+ if (rest.working_hours_start !== undefined)
1055
+ body.workingHoursStart = rest.working_hours_start;
1056
+ if (rest.working_hours_end !== undefined)
1057
+ body.workingHoursEnd = rest.working_hours_end;
1058
+ if (rest.working_days !== undefined)
1059
+ body.workingDays = rest.working_days;
1060
+ if (rest.timezone !== undefined)
1061
+ body.timezone = rest.timezone;
1062
+ if (rest.dst_aware !== undefined)
1063
+ body.dstAware = rest.dst_aware;
1064
+ if (rest.multi_project !== undefined)
1065
+ body.multiProject = rest.multi_project;
1066
+ if (rest.task_ids !== undefined)
1067
+ body.taskIds = rest.task_ids;
1068
+ const schedule = await client.createAgentSchedule(agent_id, body, resolveOrg(parsed));
1069
+ return {
1070
+ content: [
1071
+ { type: 'text', text: `Created schedule "${schedule.name}"\n\n${text(schedule)}` },
1072
+ ],
1073
+ };
1074
+ }
1075
+ case 'update_agent_schedule': {
1076
+ const parsed = z
1077
+ .object({
1078
+ agent_id: z.string(),
1079
+ schedule_id: z.string(),
1080
+ name: z.string().optional(),
1081
+ enabled: z.boolean().optional(),
1082
+ check_frequency_minutes: z.number().optional(),
1083
+ working_hours_start: z.number().nullable().optional(),
1084
+ working_hours_end: z.number().nullable().optional(),
1085
+ working_days: z.array(z.string()).nullable().optional(),
1086
+ timezone: z.string().optional(),
1087
+ dst_aware: z.boolean().optional(),
1088
+ multi_project: z.boolean().optional(),
1089
+ task_ids: z.array(z.string()).optional(),
1090
+ org_slug: orgSlugField,
1091
+ })
1092
+ .parse(args);
1093
+ const { agent_id, schedule_id, org_slug, ...rest } = parsed;
1094
+ const body = {};
1095
+ if (rest.name !== undefined)
1096
+ body.name = rest.name;
1097
+ if (rest.enabled !== undefined)
1098
+ body.enabled = rest.enabled;
1099
+ if (rest.check_frequency_minutes !== undefined)
1100
+ body.checkFrequencyMinutes = rest.check_frequency_minutes;
1101
+ if (rest.working_hours_start !== undefined)
1102
+ body.workingHoursStart = rest.working_hours_start;
1103
+ if (rest.working_hours_end !== undefined)
1104
+ body.workingHoursEnd = rest.working_hours_end;
1105
+ if (rest.working_days !== undefined)
1106
+ body.workingDays = rest.working_days;
1107
+ if (rest.timezone !== undefined)
1108
+ body.timezone = rest.timezone;
1109
+ if (rest.dst_aware !== undefined)
1110
+ body.dstAware = rest.dst_aware;
1111
+ if (rest.multi_project !== undefined)
1112
+ body.multiProject = rest.multi_project;
1113
+ if (rest.task_ids !== undefined)
1114
+ body.taskIds = rest.task_ids;
1115
+ const schedule = await client.updateAgentSchedule(agent_id, schedule_id, body, resolveOrg(parsed));
1116
+ return { content: [{ type: 'text', text: `Updated schedule\n\n${text(schedule)}` }] };
1117
+ }
831
1118
  // ─── Skills ─────────────────────────────────────────────────────────────
832
1119
  case 'create_skill': {
833
1120
  const parsed = z
package/dist/client.js CHANGED
@@ -604,6 +604,12 @@ export class WolfpackClient {
604
604
  async updateAgent(agentId, body, orgSlug) {
605
605
  return this.api.patch(this.withOrgSlug(`/agents/${agentId}`, orgSlug), body);
606
606
  }
607
+ async getAgentMcpSelections(agentId, orgSlug) {
608
+ return this.api.get(this.withOrgSlug(`/agents/${agentId}/mcp-selections`, orgSlug));
609
+ }
610
+ async updateAgentMcpSelections(agentId, disabled, orgSlug) {
611
+ return this.api.patch(this.withOrgSlug(`/agents/${agentId}/mcp-selections`, orgSlug), { disabled });
612
+ }
607
613
  // ─── Agent Builder: Project Assignment ────────────────────────────────────
608
614
  async listAgentProjects(agentId, orgSlug) {
609
615
  return this.api.get(this.withOrgSlug(`/agents/${agentId}/projects`, orgSlug));
@@ -703,6 +709,16 @@ export class WolfpackClient {
703
709
  .delete(this.withOrgSlug(`/agents/${agentId}/queue/${entryId}`, orgSlug))
704
710
  .then(() => ({ success: true }));
705
711
  }
712
+ // ─── Agent Builder: Schedules ──────────────────────────────────────────────
713
+ async listAgentSchedules(agentId, orgSlug) {
714
+ return this.api.get(this.withOrgSlug(`/agents/${agentId}/schedules`, orgSlug));
715
+ }
716
+ async createAgentSchedule(agentId, body, orgSlug) {
717
+ return this.api.post(this.withOrgSlug(`/agents/${agentId}/schedules`, orgSlug), body);
718
+ }
719
+ async updateAgentSchedule(agentId, scheduleId, body, orgSlug) {
720
+ return this.api.post(this.withOrgSlug(`/agents/${agentId}/schedules/${scheduleId}`, orgSlug), body);
721
+ }
706
722
  // ─── Agent Builder: Secrets ────────────────────────────────────────────────
707
723
  async listAgentSecrets(agentId, orgSlug) {
708
724
  return this.api.get(this.withOrgSlug(`/agents/${agentId}/secrets`, orgSlug));
package/dist/index.js CHANGED
@@ -374,6 +374,10 @@ const UpdateWikiPageSchema = z.object({
374
374
  page_id: z.string().describe('The page slug'),
375
375
  title: z.string().optional().describe('Updated title'),
376
376
  content: z.string().optional().describe('Updated content (markdown)'),
377
+ tag_ids: z
378
+ .array(z.string())
379
+ .optional()
380
+ .describe('Tag IDs to apply to the page (replaces existing tags)'),
377
381
  project_slug: z
378
382
  .string()
379
383
  .optional()
@@ -410,6 +414,7 @@ const UpdateJournalEntrySchema = z.object({
410
414
  entry_id: z.string().describe('The entry refId (number)'),
411
415
  title: z.string().optional().describe('Updated title'),
412
416
  content: z.string().optional().describe('Updated content (markdown)'),
417
+ tag_ids: z.array(z.string()).optional().describe('Tag IDs to apply (replaces existing tags)'),
413
418
  project_slug: z
414
419
  .string()
415
420
  .optional()
@@ -1307,6 +1312,11 @@ class WolfpackMCPServer {
1307
1312
  type: 'string',
1308
1313
  description: 'Updated content (markdown)',
1309
1314
  },
1315
+ tag_ids: {
1316
+ type: 'array',
1317
+ items: { type: 'string' },
1318
+ description: 'Tag IDs to apply to the page (replaces existing tags). Use list tags endpoint to get available tag IDs.',
1319
+ },
1310
1320
  project_slug: {
1311
1321
  type: 'string',
1312
1322
  description: 'Project slug (required for multi-project users, use list_projects to get slugs)',
@@ -1392,6 +1402,11 @@ class WolfpackMCPServer {
1392
1402
  type: 'string',
1393
1403
  description: 'Updated content (markdown)',
1394
1404
  },
1405
+ tag_ids: {
1406
+ type: 'array',
1407
+ items: { type: 'string' },
1408
+ description: 'Tag IDs to apply (replaces existing tags)',
1409
+ },
1395
1410
  project_slug: {
1396
1411
  type: 'string',
1397
1412
  description: 'Project slug (required for multi-project users, use list_projects to get slugs)',
@@ -2333,6 +2348,7 @@ class WolfpackMCPServer {
2333
2348
  const page = await this.client.updateWikiPage(parsed.page_id, {
2334
2349
  title: parsed.title,
2335
2350
  content: parsed.content,
2351
+ tagIds: parsed.tag_ids,
2336
2352
  }, teamSlug);
2337
2353
  return {
2338
2354
  content: [
@@ -2396,6 +2412,7 @@ class WolfpackMCPServer {
2396
2412
  const entry = await this.client.updateJournalEntry(parsed.entry_id, {
2397
2413
  title: parsed.title,
2398
2414
  content: parsed.content,
2415
+ tagIds: parsed.tag_ids,
2399
2416
  }, teamSlug);
2400
2417
  return {
2401
2418
  content: [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wolfpack-mcp",
3
- "version": "1.0.57",
3
+ "version": "1.0.59",
4
4
  "description": "MCP server for Wolfpack AI-enhanced software delivery tools",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",