bunqueue 2.4.6 → 2.5.0

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 (81) hide show
  1. package/README.md +45 -1
  2. package/dist/application/contextFactory.d.ts +1 -0
  3. package/dist/application/contextFactory.d.ts.map +1 -1
  4. package/dist/application/contextFactory.js +2 -0
  5. package/dist/application/contextFactory.js.map +1 -1
  6. package/dist/application/operations/ack.d.ts +1 -0
  7. package/dist/application/operations/ack.d.ts.map +1 -1
  8. package/dist/application/operations/ack.js +1 -0
  9. package/dist/application/operations/ack.js.map +1 -1
  10. package/dist/application/operations/ackHelpers.d.ts +1 -0
  11. package/dist/application/operations/ackHelpers.d.ts.map +1 -1
  12. package/dist/application/operations/ackHelpers.js +2 -1
  13. package/dist/application/operations/ackHelpers.js.map +1 -1
  14. package/dist/application/operations/queryOperations.d.ts +1 -0
  15. package/dist/application/operations/queryOperations.d.ts.map +1 -1
  16. package/dist/application/operations/queryOperations.js +16 -0
  17. package/dist/application/operations/queryOperations.js.map +1 -1
  18. package/dist/application/queueManager.d.ts +1 -0
  19. package/dist/application/queueManager.d.ts.map +1 -1
  20. package/dist/application/queueManager.js +5 -0
  21. package/dist/application/queueManager.js.map +1 -1
  22. package/dist/infrastructure/backup/s3BackupOperations.d.ts.map +1 -1
  23. package/dist/infrastructure/backup/s3BackupOperations.js +3 -1
  24. package/dist/infrastructure/backup/s3BackupOperations.js.map +1 -1
  25. package/dist/infrastructure/scheduler/cronScheduler.d.ts +18 -5
  26. package/dist/infrastructure/scheduler/cronScheduler.d.ts.map +1 -1
  27. package/dist/infrastructure/scheduler/cronScheduler.js +69 -14
  28. package/dist/infrastructure/scheduler/cronScheduler.js.map +1 -1
  29. package/dist/mcp/adapter.d.ts +341 -0
  30. package/dist/mcp/adapter.d.ts.map +1 -0
  31. package/dist/mcp/adapter.js +695 -0
  32. package/dist/mcp/adapter.js.map +1 -0
  33. package/dist/mcp/index.d.ts +26 -4
  34. package/dist/mcp/index.d.ts.map +1 -1
  35. package/dist/mcp/index.js +68 -87
  36. package/dist/mcp/index.js.map +1 -1
  37. package/dist/mcp/resources.d.ts +8 -0
  38. package/dist/mcp/resources.d.ts.map +1 -0
  39. package/dist/mcp/resources.js +77 -0
  40. package/dist/mcp/resources.js.map +1 -0
  41. package/dist/mcp/tools/consumptionTools.d.ts +8 -0
  42. package/dist/mcp/tools/consumptionTools.d.ts.map +1 -0
  43. package/dist/mcp/tools/consumptionTools.js +94 -0
  44. package/dist/mcp/tools/consumptionTools.js.map +1 -0
  45. package/dist/mcp/tools/cronTools.d.ts +7 -0
  46. package/dist/mcp/tools/cronTools.d.ts.map +1 -0
  47. package/dist/mcp/tools/cronTools.js +50 -0
  48. package/dist/mcp/tools/cronTools.js.map +1 -0
  49. package/dist/mcp/tools/dlqTools.d.ts +7 -0
  50. package/dist/mcp/tools/dlqTools.d.ts.map +1 -0
  51. package/dist/mcp/tools/dlqTools.js +57 -0
  52. package/dist/mcp/tools/dlqTools.js.map +1 -0
  53. package/dist/mcp/tools/jobMgmtTools.d.ts +8 -0
  54. package/dist/mcp/tools/jobMgmtTools.d.ts.map +1 -0
  55. package/dist/mcp/tools/jobMgmtTools.js +60 -0
  56. package/dist/mcp/tools/jobMgmtTools.js.map +1 -0
  57. package/dist/mcp/tools/jobTools.d.ts +8 -0
  58. package/dist/mcp/tools/jobTools.d.ts.map +1 -0
  59. package/dist/mcp/tools/jobTools.js +112 -0
  60. package/dist/mcp/tools/jobTools.js.map +1 -0
  61. package/dist/mcp/tools/monitoringTools.d.ts +7 -0
  62. package/dist/mcp/tools/monitoringTools.d.ts.map +1 -0
  63. package/dist/mcp/tools/monitoringTools.js +92 -0
  64. package/dist/mcp/tools/monitoringTools.js.map +1 -0
  65. package/dist/mcp/tools/queueTools.d.ts +8 -0
  66. package/dist/mcp/tools/queueTools.d.ts.map +1 -0
  67. package/dist/mcp/tools/queueTools.js +125 -0
  68. package/dist/mcp/tools/queueTools.js.map +1 -0
  69. package/dist/mcp/tools/rateLimitTools.d.ts +7 -0
  70. package/dist/mcp/tools/rateLimitTools.d.ts.map +1 -0
  71. package/dist/mcp/tools/rateLimitTools.js +62 -0
  72. package/dist/mcp/tools/rateLimitTools.js.map +1 -0
  73. package/dist/mcp/tools/webhookTools.d.ts +7 -0
  74. package/dist/mcp/tools/webhookTools.d.ts.map +1 -0
  75. package/dist/mcp/tools/webhookTools.js +55 -0
  76. package/dist/mcp/tools/webhookTools.js.map +1 -0
  77. package/dist/mcp/tools/workerMgmtTools.d.ts +8 -0
  78. package/dist/mcp/tools/workerMgmtTools.d.ts.map +1 -0
  79. package/dist/mcp/tools/workerMgmtTools.js +32 -0
  80. package/dist/mcp/tools/workerMgmtTools.js.map +1 -0
  81. package/package.json +15 -13
@@ -0,0 +1,57 @@
1
+ /* eslint-disable @typescript-eslint/no-deprecated */
2
+ /**
3
+ * MCP Tools - Dead Letter Queue Operations
4
+ */
5
+ import { z } from 'zod';
6
+ export function registerDlqTools(server, backend) {
7
+ server.tool('bunqueue_get_dlq', 'Get Dead Letter Queue entries for a queue. Shows jobs that permanently failed.', {
8
+ queue: z.string().describe('Queue name'),
9
+ limit: z.number().optional().describe('Max entries to return (default: 20)'),
10
+ }, async ({ queue, limit }) => {
11
+ const jobs = await backend.getDlq(queue, limit ?? 20);
12
+ return {
13
+ content: [
14
+ {
15
+ type: 'text',
16
+ text: JSON.stringify({ queue, count: jobs.length, jobs }, null, 2),
17
+ },
18
+ ],
19
+ };
20
+ });
21
+ server.tool('bunqueue_retry_dlq', 'Retry jobs from the Dead Letter Queue. Moves them back to waiting state.', {
22
+ queue: z.string().describe('Queue name'),
23
+ jobId: z.string().optional().describe('Specific job ID to retry (omit to retry all)'),
24
+ }, async ({ queue, jobId }) => {
25
+ const retried = await backend.retryDlq(queue, jobId);
26
+ return {
27
+ content: [
28
+ { type: 'text', text: JSON.stringify({ success: true, queue, retried }) },
29
+ ],
30
+ };
31
+ });
32
+ server.tool('bunqueue_purge_dlq', 'Remove all entries from the Dead Letter Queue permanently.', {
33
+ queue: z.string().describe('Queue name'),
34
+ }, async ({ queue }) => {
35
+ const purged = await backend.purgeDlq(queue);
36
+ return {
37
+ content: [
38
+ { type: 'text', text: JSON.stringify({ success: true, queue, purged }) },
39
+ ],
40
+ };
41
+ });
42
+ server.tool('bunqueue_retry_completed', 'Retry completed jobs - move them back to waiting state for reprocessing.', {
43
+ queue: z.string().describe('Queue name'),
44
+ jobId: z
45
+ .string()
46
+ .optional()
47
+ .describe('Specific job ID to retry (omit to retry all completed)'),
48
+ }, async ({ queue, jobId }) => {
49
+ const retried = await backend.retryCompleted(queue, jobId);
50
+ return {
51
+ content: [
52
+ { type: 'text', text: JSON.stringify({ success: true, queue, retried }) },
53
+ ],
54
+ };
55
+ });
56
+ }
57
+ //# sourceMappingURL=dlqTools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dlqTools.js","sourceRoot":"","sources":["../../../src/mcp/tools/dlqTools.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,UAAU,gBAAgB,CAAC,MAAiB,EAAE,OAAmB;IACrE,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,gFAAgF,EAChF;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;QACxC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;KAC7E,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;QACzB,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;QACtD,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;iBACnE;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,0EAA0E,EAC1E;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;QACxC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;KACtF,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;QACzB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACrD,OAAO;YACL,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE;aACnF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,4DAA4D,EAC5D;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;KACzC,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QAClB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC7C,OAAO;YACL,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE;aAClF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,0BAA0B,EAC1B,0EAA0E,EAC1E;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;QACxC,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,wDAAwD,CAAC;KACtE,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;QACzB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC3D,OAAO;YACL,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE;aACnF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * MCP Tools - Job Management
3
+ * Update data, change priority, delay, discard
4
+ */
5
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
6
+ import type { McpBackend } from '../adapter';
7
+ export declare function registerJobMgmtTools(server: McpServer, backend: McpBackend): void;
8
+ //# sourceMappingURL=jobMgmtTools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jobMgmtTools.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/jobMgmtTools.ts"],"names":[],"mappings":"AACA;;;GAGG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,QAuF1E"}
@@ -0,0 +1,60 @@
1
+ /* eslint-disable @typescript-eslint/no-deprecated */
2
+ /**
3
+ * MCP Tools - Job Management
4
+ * Update data, change priority, delay, discard
5
+ */
6
+ import { z } from 'zod';
7
+ export function registerJobMgmtTools(server, backend) {
8
+ server.tool('bunqueue_update_job_data', 'Update the payload data of a job.', {
9
+ jobId: z.string().describe('Job ID'),
10
+ data: z.record(z.string(), z.unknown()).describe('New job payload data'),
11
+ }, async ({ jobId, data }) => {
12
+ const success = await backend.updateJobData(jobId, data);
13
+ return { content: [{ type: 'text', text: JSON.stringify({ success, jobId }) }] };
14
+ });
15
+ server.tool('bunqueue_change_job_priority', 'Change the priority of a waiting job. Higher priority = processed first.', {
16
+ jobId: z.string().describe('Job ID'),
17
+ priority: z.number().describe('New priority value'),
18
+ }, async ({ jobId, priority }) => {
19
+ const success = await backend.changeJobPriority(jobId, priority);
20
+ return {
21
+ content: [{ type: 'text', text: JSON.stringify({ success, jobId, priority }) }],
22
+ };
23
+ });
24
+ server.tool('bunqueue_move_to_delayed', 'Move a job to delayed state with a specific delay in milliseconds.', {
25
+ jobId: z.string().describe('Job ID'),
26
+ delay: z.number().min(0).describe('Delay in milliseconds'),
27
+ }, async ({ jobId, delay }) => {
28
+ const success = await backend.moveToDelayed(jobId, delay);
29
+ return {
30
+ content: [{ type: 'text', text: JSON.stringify({ success, jobId, delay }) }],
31
+ };
32
+ });
33
+ server.tool('bunqueue_discard_job', 'Discard a job permanently, removing it from the queue.', {
34
+ jobId: z.string().describe('Job ID to discard'),
35
+ }, async ({ jobId }) => {
36
+ const success = await backend.discardJob(jobId);
37
+ return { content: [{ type: 'text', text: JSON.stringify({ success, jobId }) }] };
38
+ });
39
+ server.tool('bunqueue_get_progress', 'Get the progress and progress message of a job.', {
40
+ jobId: z.string().describe('Job ID'),
41
+ }, async ({ jobId }) => {
42
+ const result = await backend.getProgress(jobId);
43
+ if (!result) {
44
+ return {
45
+ content: [{ type: 'text', text: JSON.stringify({ error: 'Job not found' }) }],
46
+ };
47
+ }
48
+ return { content: [{ type: 'text', text: JSON.stringify({ jobId, ...result }) }] };
49
+ });
50
+ server.tool('bunqueue_change_delay', 'Change the delay of a delayed job.', {
51
+ jobId: z.string().describe('Job ID'),
52
+ delay: z.number().min(0).describe('New delay in milliseconds'),
53
+ }, async ({ jobId, delay }) => {
54
+ const success = await backend.changeDelay(jobId, delay);
55
+ return {
56
+ content: [{ type: 'text', text: JSON.stringify({ success, jobId, delay }) }],
57
+ };
58
+ });
59
+ }
60
+ //# sourceMappingURL=jobMgmtTools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jobMgmtTools.js","sourceRoot":"","sources":["../../../src/mcp/tools/jobMgmtTools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * MCP Tools - Job Operations
3
+ * Add, get, cancel, promote jobs
4
+ */
5
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
6
+ import type { McpBackend } from '../adapter';
7
+ export declare function registerJobTools(server: McpServer, backend: McpBackend): void;
8
+ //# sourceMappingURL=jobTools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jobTools.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/jobTools.ts"],"names":[],"mappings":"AACA;;;GAGG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,QA2KtE"}
@@ -0,0 +1,112 @@
1
+ /* eslint-disable @typescript-eslint/no-deprecated */
2
+ /**
3
+ * MCP Tools - Job Operations
4
+ * Add, get, cancel, promote jobs
5
+ */
6
+ import { z } from 'zod';
7
+ export function registerJobTools(server, backend) {
8
+ server.tool('bunqueue_add_job', 'Add a job to a queue. Returns the job ID.', {
9
+ queue: z.string().describe('Queue name'),
10
+ name: z.string().describe('Job name/type'),
11
+ data: z.record(z.string(), z.unknown()).describe('Job payload data'),
12
+ priority: z.number().optional().describe('Priority (higher = processed first)'),
13
+ delay: z.number().optional().describe('Delay in milliseconds before processing'),
14
+ attempts: z.number().optional().describe('Max retry attempts (default: 3)'),
15
+ }, async ({ queue, name, data, priority, delay, attempts }) => {
16
+ const result = await backend.addJob(queue, name, data, { priority, delay, attempts });
17
+ return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
18
+ });
19
+ server.tool('bunqueue_add_jobs_bulk', 'Add multiple jobs to a queue in a single operation.', {
20
+ queue: z.string().describe('Queue name'),
21
+ jobs: z
22
+ .array(z.object({
23
+ name: z.string(),
24
+ data: z.record(z.string(), z.unknown()),
25
+ priority: z.number().optional(),
26
+ delay: z.number().optional(),
27
+ }))
28
+ .describe('Array of jobs to add'),
29
+ }, async ({ queue, jobs }) => {
30
+ const result = await backend.addJobsBulk(queue, jobs);
31
+ return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
32
+ });
33
+ server.tool('bunqueue_get_job', 'Get a job by ID. Returns job details including state, progress, and data.', {
34
+ jobId: z.string().describe('Job ID'),
35
+ }, async ({ jobId }) => {
36
+ const job = await backend.getJob(jobId);
37
+ if (!job) {
38
+ return {
39
+ content: [{ type: 'text', text: JSON.stringify({ error: 'Job not found' }) }],
40
+ };
41
+ }
42
+ return { content: [{ type: 'text', text: JSON.stringify(job, null, 2) }] };
43
+ });
44
+ server.tool('bunqueue_get_job_state', 'Get the current state of a job (waiting, delayed, active, completed, failed).', {
45
+ jobId: z.string().describe('Job ID'),
46
+ }, async ({ jobId }) => {
47
+ const state = await backend.getJobState(jobId);
48
+ return { content: [{ type: 'text', text: JSON.stringify({ jobId, state }) }] };
49
+ });
50
+ server.tool('bunqueue_get_job_result', 'Get the result of a completed job.', {
51
+ jobId: z.string().describe('Job ID'),
52
+ }, async ({ jobId }) => {
53
+ const result = await backend.getJobResult(jobId);
54
+ return {
55
+ content: [{ type: 'text', text: JSON.stringify({ jobId, result }, null, 2) }],
56
+ };
57
+ });
58
+ server.tool('bunqueue_cancel_job', 'Cancel a waiting or delayed job.', {
59
+ jobId: z.string().describe('Job ID to cancel'),
60
+ }, async ({ jobId }) => {
61
+ const success = await backend.cancelJob(jobId);
62
+ return { content: [{ type: 'text', text: JSON.stringify({ success, jobId }) }] };
63
+ });
64
+ server.tool('bunqueue_promote_job', 'Promote a delayed job to waiting state for immediate processing.', {
65
+ jobId: z.string().describe('Job ID to promote'),
66
+ }, async ({ jobId }) => {
67
+ const success = await backend.promoteJob(jobId);
68
+ return { content: [{ type: 'text', text: JSON.stringify({ success, jobId }) }] };
69
+ });
70
+ server.tool('bunqueue_update_progress', 'Update job progress (0-100).', {
71
+ jobId: z.string().describe('Job ID'),
72
+ progress: z.number().min(0).max(100).describe('Progress value (0-100)'),
73
+ message: z.string().optional().describe('Optional progress message'),
74
+ }, async ({ jobId, progress, message }) => {
75
+ const success = await backend.updateProgress(jobId, progress, message);
76
+ return {
77
+ content: [{ type: 'text', text: JSON.stringify({ success, jobId, progress }) }],
78
+ };
79
+ });
80
+ server.tool('bunqueue_get_children_values', 'Get return values from all child jobs of a parent job. Used with FlowProducer workflows.', {
81
+ parentJobId: z.string().describe('Parent job ID'),
82
+ }, async ({ parentJobId }) => {
83
+ const values = await backend.getChildrenValues(parentJobId);
84
+ return {
85
+ content: [
86
+ {
87
+ type: 'text',
88
+ text: JSON.stringify({ parentJobId, children: values }, null, 2),
89
+ },
90
+ ],
91
+ };
92
+ });
93
+ server.tool('bunqueue_get_job_by_custom_id', 'Look up a job by its custom ID (set via jobId option during creation).', {
94
+ customId: z.string().describe('Custom job ID'),
95
+ }, async ({ customId }) => {
96
+ const job = await backend.getJobByCustomId(customId);
97
+ if (!job) {
98
+ return {
99
+ content: [{ type: 'text', text: JSON.stringify({ error: 'Job not found' }) }],
100
+ };
101
+ }
102
+ return { content: [{ type: 'text', text: JSON.stringify(job, null, 2) }] };
103
+ });
104
+ server.tool('bunqueue_wait_for_job', 'Wait for a job to complete within a timeout. Returns true if completed, false if timed out.', {
105
+ jobId: z.string().describe('Job ID to wait for'),
106
+ timeoutMs: z.number().min(100).max(30000).describe('Maximum wait time in milliseconds'),
107
+ }, async ({ jobId, timeoutMs }) => {
108
+ const completed = await backend.waitForJobCompletion(jobId, timeoutMs);
109
+ return { content: [{ type: 'text', text: JSON.stringify({ jobId, completed }) }] };
110
+ });
111
+ }
112
+ //# sourceMappingURL=jobTools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jobTools.js","sourceRoot":"","sources":["../../../src/mcp/tools/jobTools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * MCP Tools - Monitoring, Stats, Workers, Logs
3
+ */
4
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
5
+ import type { McpBackend } from '../adapter';
6
+ export declare function registerMonitoringTools(server: McpServer, backend: McpBackend): void;
7
+ //# sourceMappingURL=monitoringTools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitoringTools.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/monitoringTools.ts"],"names":[],"mappings":"AACA;;GAEG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,QAsJ7E"}
@@ -0,0 +1,92 @@
1
+ /* eslint-disable @typescript-eslint/no-deprecated */
2
+ /**
3
+ * MCP Tools - Monitoring, Stats, Workers, Logs
4
+ */
5
+ import { z } from 'zod';
6
+ export function registerMonitoringTools(server, backend) {
7
+ server.tool('bunqueue_get_stats', 'Get overall queue server statistics including throughput, memory usage, and uptime.', {}, async () => {
8
+ const stats = await backend.getStats();
9
+ return { content: [{ type: 'text', text: JSON.stringify(stats, null, 2) }] };
10
+ });
11
+ server.tool('bunqueue_get_queue_stats', 'Get detailed statistics for a specific queue including job counts per state.', {
12
+ queue: z.string().describe('Queue name'),
13
+ }, async ({ queue }) => {
14
+ const counts = await backend.getJobCounts(queue);
15
+ return {
16
+ content: [{ type: 'text', text: JSON.stringify({ queue, ...counts }, null, 2) }],
17
+ };
18
+ });
19
+ server.tool('bunqueue_list_workers', 'List all registered workers with their status, queues, and processing stats.', {}, async () => {
20
+ const workers = await backend.listWorkers();
21
+ return {
22
+ content: [
23
+ {
24
+ type: 'text',
25
+ text: JSON.stringify({ count: workers.length, workers }, null, 2),
26
+ },
27
+ ],
28
+ };
29
+ });
30
+ server.tool('bunqueue_get_job_logs', 'Get log entries for a specific job.', {
31
+ jobId: z.string().describe('Job ID'),
32
+ }, async ({ jobId }) => {
33
+ const logs = await backend.getJobLogs(jobId);
34
+ return {
35
+ content: [
36
+ {
37
+ type: 'text',
38
+ text: JSON.stringify({ jobId, count: logs.length, logs }, null, 2),
39
+ },
40
+ ],
41
+ };
42
+ });
43
+ server.tool('bunqueue_add_job_log', 'Add a log entry to a job.', {
44
+ jobId: z.string().describe('Job ID'),
45
+ message: z.string().describe('Log message'),
46
+ level: z.enum(['info', 'warn', 'error']).optional().describe('Log level (default: info)'),
47
+ }, async ({ jobId, message, level }) => {
48
+ const success = await backend.addJobLog(jobId, message, level);
49
+ return { content: [{ type: 'text', text: JSON.stringify({ success, jobId }) }] };
50
+ });
51
+ server.tool('bunqueue_get_storage_status', 'Get storage health status. Reports if disk is full or has errors.', {}, async () => {
52
+ const status = await backend.getStorageStatus();
53
+ return { content: [{ type: 'text', text: JSON.stringify(status, null, 2) }] };
54
+ });
55
+ server.tool('bunqueue_get_per_queue_stats', 'Get detailed statistics broken down per queue (throughput, latency, etc.).', {}, async () => {
56
+ const stats = await backend.getPerQueueStats();
57
+ return { content: [{ type: 'text', text: JSON.stringify(stats, null, 2) }] };
58
+ });
59
+ server.tool('bunqueue_get_memory_stats', 'Get memory usage statistics (jobIndex, completedJobs, cache sizes, etc.).', {}, async () => {
60
+ const stats = await backend.getMemoryStats();
61
+ return { content: [{ type: 'text', text: JSON.stringify(stats, null, 2) }] };
62
+ });
63
+ server.tool('bunqueue_get_prometheus_metrics', 'Get metrics in Prometheus exposition format for monitoring.', {}, async () => {
64
+ const metrics = await backend.getPrometheusMetrics();
65
+ return { content: [{ type: 'text', text: metrics }] };
66
+ });
67
+ server.tool('bunqueue_clear_job_logs', 'Clear log entries for a specific job, optionally keeping the last N entries.', {
68
+ jobId: z.string().describe('Job ID'),
69
+ keepLogs: z
70
+ .number()
71
+ .min(0)
72
+ .optional()
73
+ .describe('Number of recent log entries to keep (default: 0 = clear all)'),
74
+ }, async ({ jobId, keepLogs }) => {
75
+ await backend.clearJobLogs(jobId, keepLogs);
76
+ return {
77
+ content: [{ type: 'text', text: JSON.stringify({ success: true, jobId }) }],
78
+ };
79
+ });
80
+ server.tool('bunqueue_compact_memory', 'Force memory compaction to free unused memory.', {}, async () => {
81
+ await backend.compactMemory();
82
+ return {
83
+ content: [
84
+ {
85
+ type: 'text',
86
+ text: JSON.stringify({ success: true, message: 'Memory compaction triggered' }),
87
+ },
88
+ ],
89
+ };
90
+ });
91
+ }
92
+ //# sourceMappingURL=monitoringTools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitoringTools.js","sourceRoot":"","sources":["../../../src/mcp/tools/monitoringTools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * MCP Tools - Queue Control
3
+ * List, count, pause, resume, drain, obliterate, clean, get jobs
4
+ */
5
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
6
+ import type { McpBackend } from '../adapter';
7
+ export declare function registerQueueTools(server: McpServer, backend: McpBackend): void;
8
+ //# sourceMappingURL=queueTools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queueTools.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/queueTools.ts"],"names":[],"mappings":"AACA;;;GAGG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,QAiLxE"}
@@ -0,0 +1,125 @@
1
+ /* eslint-disable @typescript-eslint/no-deprecated */
2
+ /**
3
+ * MCP Tools - Queue Control
4
+ * List, count, pause, resume, drain, obliterate, clean, get jobs
5
+ */
6
+ import { z } from 'zod';
7
+ export function registerQueueTools(server, backend) {
8
+ server.tool('bunqueue_list_queues', 'List all queues.', {}, async () => {
9
+ const queues = await backend.listQueues();
10
+ return { content: [{ type: 'text', text: JSON.stringify({ queues }) }] };
11
+ });
12
+ server.tool('bunqueue_count_jobs', 'Count total jobs in a queue (all states).', {
13
+ queue: z.string().describe('Queue name'),
14
+ }, async ({ queue }) => {
15
+ const count = await backend.countJobs(queue);
16
+ return { content: [{ type: 'text', text: JSON.stringify({ queue, count }) }] };
17
+ });
18
+ server.tool('bunqueue_get_jobs', 'List jobs in a queue with optional state filter and pagination.', {
19
+ queue: z.string().describe('Queue name'),
20
+ state: z
21
+ .enum(['waiting', 'delayed', 'active', 'completed', 'failed'])
22
+ .optional()
23
+ .describe('Filter by job state'),
24
+ start: z.number().optional().describe('Start index for pagination (default: 0)'),
25
+ end: z.number().optional().describe('End index for pagination (default: 20)'),
26
+ }, async ({ queue, state, start, end }) => {
27
+ const jobs = await backend.getJobs(queue, { state, start: start ?? 0, end: end ?? 20 });
28
+ return {
29
+ content: [
30
+ {
31
+ type: 'text',
32
+ text: JSON.stringify({ queue, count: jobs.length, jobs }, null, 2),
33
+ },
34
+ ],
35
+ };
36
+ });
37
+ server.tool('bunqueue_get_job_counts', 'Get job counts per state for a queue (waiting, delayed, active, completed, failed).', {
38
+ queue: z.string().describe('Queue name'),
39
+ }, async ({ queue }) => {
40
+ const counts = await backend.getJobCounts(queue);
41
+ return { content: [{ type: 'text', text: JSON.stringify({ queue, ...counts }) }] };
42
+ });
43
+ server.tool('bunqueue_pause_queue', 'Pause job processing on a queue. No new jobs will be processed until resumed.', {
44
+ queue: z.string().describe('Queue name'),
45
+ }, async ({ queue }) => {
46
+ await backend.pauseQueue(queue);
47
+ return {
48
+ content: [
49
+ {
50
+ type: 'text',
51
+ text: JSON.stringify({ success: true, queue, message: 'Queue paused' }),
52
+ },
53
+ ],
54
+ };
55
+ });
56
+ server.tool('bunqueue_resume_queue', 'Resume job processing on a paused queue.', {
57
+ queue: z.string().describe('Queue name'),
58
+ }, async ({ queue }) => {
59
+ await backend.resumeQueue(queue);
60
+ return {
61
+ content: [
62
+ {
63
+ type: 'text',
64
+ text: JSON.stringify({ success: true, queue, message: 'Queue resumed' }),
65
+ },
66
+ ],
67
+ };
68
+ });
69
+ server.tool('bunqueue_drain_queue', 'Remove all waiting jobs from a queue. Active jobs continue processing.', {
70
+ queue: z.string().describe('Queue name'),
71
+ }, async ({ queue }) => {
72
+ const removed = await backend.drainQueue(queue);
73
+ return {
74
+ content: [
75
+ { type: 'text', text: JSON.stringify({ success: true, queue, removed }) },
76
+ ],
77
+ };
78
+ });
79
+ server.tool('bunqueue_obliterate_queue', 'Remove ALL data from a queue (waiting, active, completed, failed). Destructive operation.', {
80
+ queue: z.string().describe('Queue name'),
81
+ }, async ({ queue }) => {
82
+ await backend.obliterateQueue(queue);
83
+ return {
84
+ content: [
85
+ {
86
+ type: 'text',
87
+ text: JSON.stringify({ success: true, queue, message: 'Queue obliterated' }),
88
+ },
89
+ ],
90
+ };
91
+ });
92
+ server.tool('bunqueue_clean_queue', 'Remove old jobs from a queue based on grace period and state.', {
93
+ queue: z.string().describe('Queue name'),
94
+ graceMs: z.number().min(0).describe('Grace period in ms - only remove jobs older than this'),
95
+ state: z
96
+ .enum(['completed', 'failed'])
97
+ .optional()
98
+ .describe('State to clean (default: both completed and failed)'),
99
+ limit: z.number().optional().describe('Maximum number of jobs to remove'),
100
+ }, async ({ queue, graceMs, state, limit }) => {
101
+ const removed = await backend.cleanQueue(queue, graceMs, state, limit);
102
+ return {
103
+ content: [
104
+ { type: 'text', text: JSON.stringify({ success: true, queue, removed }) },
105
+ ],
106
+ };
107
+ });
108
+ server.tool('bunqueue_is_paused', 'Check if a queue is currently paused.', {
109
+ queue: z.string().describe('Queue name'),
110
+ }, async ({ queue }) => {
111
+ const paused = await backend.isPaused(queue);
112
+ return { content: [{ type: 'text', text: JSON.stringify({ queue, paused }) }] };
113
+ });
114
+ server.tool('bunqueue_get_counts_per_priority', 'Get job count breakdown by priority level for a queue.', {
115
+ queue: z.string().describe('Queue name'),
116
+ }, async ({ queue }) => {
117
+ const counts = await backend.getCountsPerPriority(queue);
118
+ return {
119
+ content: [
120
+ { type: 'text', text: JSON.stringify({ queue, priorities: counts }, null, 2) },
121
+ ],
122
+ };
123
+ });
124
+ }
125
+ //# sourceMappingURL=queueTools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queueTools.js","sourceRoot":"","sources":["../../../src/mcp/tools/queueTools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * MCP Tools - Rate Limiting & Concurrency Control
3
+ */
4
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
5
+ import type { McpBackend } from '../adapter';
6
+ export declare function registerRateLimitTools(server: McpServer, backend: McpBackend): void;
7
+ //# sourceMappingURL=rateLimitTools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rateLimitTools.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/rateLimitTools.ts"],"names":[],"mappings":"AACA;;GAEG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,QA8E5E"}
@@ -0,0 +1,62 @@
1
+ /* eslint-disable @typescript-eslint/no-deprecated */
2
+ /**
3
+ * MCP Tools - Rate Limiting & Concurrency Control
4
+ */
5
+ import { z } from 'zod';
6
+ export function registerRateLimitTools(server, backend) {
7
+ server.tool('bunqueue_set_rate_limit', 'Set rate limit for a queue (max jobs processed per second).', {
8
+ queue: z.string().describe('Queue name'),
9
+ limit: z.number().min(1).describe('Max jobs per second'),
10
+ }, async ({ queue, limit }) => {
11
+ await backend.setRateLimit(queue, limit);
12
+ return {
13
+ content: [
14
+ {
15
+ type: 'text',
16
+ text: JSON.stringify({ success: true, queue, rateLimit: limit }),
17
+ },
18
+ ],
19
+ };
20
+ });
21
+ server.tool('bunqueue_clear_rate_limit', 'Remove rate limit from a queue, allowing unlimited throughput.', {
22
+ queue: z.string().describe('Queue name'),
23
+ }, async ({ queue }) => {
24
+ await backend.clearRateLimit(queue);
25
+ return {
26
+ content: [
27
+ {
28
+ type: 'text',
29
+ text: JSON.stringify({ success: true, queue, message: 'Rate limit cleared' }),
30
+ },
31
+ ],
32
+ };
33
+ });
34
+ server.tool('bunqueue_set_concurrency', 'Set concurrency limit for a queue (max simultaneous active jobs).', {
35
+ queue: z.string().describe('Queue name'),
36
+ limit: z.number().min(1).describe('Max concurrent jobs'),
37
+ }, async ({ queue, limit }) => {
38
+ await backend.setConcurrency(queue, limit);
39
+ return {
40
+ content: [
41
+ {
42
+ type: 'text',
43
+ text: JSON.stringify({ success: true, queue, concurrency: limit }),
44
+ },
45
+ ],
46
+ };
47
+ });
48
+ server.tool('bunqueue_clear_concurrency', 'Remove concurrency limit from a queue.', {
49
+ queue: z.string().describe('Queue name'),
50
+ }, async ({ queue }) => {
51
+ await backend.clearConcurrency(queue);
52
+ return {
53
+ content: [
54
+ {
55
+ type: 'text',
56
+ text: JSON.stringify({ success: true, queue, message: 'Concurrency limit cleared' }),
57
+ },
58
+ ],
59
+ };
60
+ });
61
+ }
62
+ //# sourceMappingURL=rateLimitTools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rateLimitTools.js","sourceRoot":"","sources":["../../../src/mcp/tools/rateLimitTools.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,UAAU,sBAAsB,CAAC,MAAiB,EAAE,OAAmB;IAC3E,MAAM,CAAC,IAAI,CACT,yBAAyB,EACzB,6DAA6D,EAC7D;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;QACxC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC;KACzD,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;QACzB,MAAM,OAAO,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACzC,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;iBACjE;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,2BAA2B,EAC3B,gEAAgE,EAChE;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;KACzC,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QAClB,MAAM,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACpC,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC;iBAC9E;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,0BAA0B,EAC1B,mEAAmE,EACnE;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;QACxC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC;KACzD,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;QACzB,MAAM,OAAO,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC3C,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;iBACnE;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,4BAA4B,EAC5B,wCAAwC,EACxC;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;KACzC,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QAClB,MAAM,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACtC,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,2BAA2B,EAAE,CAAC;iBACrF;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}