bunqueue 1.6.3 → 1.6.4

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 (33) hide show
  1. package/README.md +70 -0
  2. package/dist/application/dlqManager.d.ts +2 -0
  3. package/dist/application/dlqManager.d.ts.map +1 -1
  4. package/dist/application/dlqManager.js +21 -3
  5. package/dist/application/dlqManager.js.map +1 -1
  6. package/dist/application/operations/ack.js +2 -2
  7. package/dist/application/operations/ack.js.map +1 -1
  8. package/dist/application/operations/jobManagement.d.ts.map +1 -1
  9. package/dist/application/operations/jobManagement.js +5 -3
  10. package/dist/application/operations/jobManagement.js.map +1 -1
  11. package/dist/application/queueManager.d.ts.map +1 -1
  12. package/dist/application/queueManager.js +31 -6
  13. package/dist/application/queueManager.js.map +1 -1
  14. package/dist/client/manager.d.ts.map +1 -1
  15. package/dist/client/manager.js +8 -1
  16. package/dist/client/manager.js.map +1 -1
  17. package/dist/infrastructure/persistence/schema.d.ts +2 -2
  18. package/dist/infrastructure/persistence/schema.d.ts.map +1 -1
  19. package/dist/infrastructure/persistence/schema.js +4 -6
  20. package/dist/infrastructure/persistence/schema.js.map +1 -1
  21. package/dist/infrastructure/persistence/sqlite.d.ts +9 -0
  22. package/dist/infrastructure/persistence/sqlite.d.ts.map +1 -1
  23. package/dist/infrastructure/persistence/sqlite.js +43 -1
  24. package/dist/infrastructure/persistence/sqlite.js.map +1 -1
  25. package/dist/infrastructure/persistence/statements.d.ts +1 -1
  26. package/dist/infrastructure/persistence/statements.d.ts.map +1 -1
  27. package/dist/infrastructure/persistence/statements.js +4 -1
  28. package/dist/infrastructure/persistence/statements.js.map +1 -1
  29. package/dist/mcp/index.d.ts +22 -0
  30. package/dist/mcp/index.d.ts.map +1 -0
  31. package/dist/mcp/index.js +574 -0
  32. package/dist/mcp/index.js.map +1 -0
  33. package/package.json +7 -2
@@ -0,0 +1,574 @@
1
+ #!/usr/bin/env bun
2
+ /**
3
+ * bunqueue MCP Server
4
+ *
5
+ * Model Context Protocol server for bunqueue job queue management.
6
+ * Allows AI assistants to manage queues, jobs, DLQ, and cron schedules.
7
+ *
8
+ * @example
9
+ * Add to Claude Desktop config:
10
+ * ```json
11
+ * {
12
+ * "mcpServers": {
13
+ * "bunqueue": {
14
+ * "command": "bunx",
15
+ * "args": ["bunqueue-mcp"]
16
+ * }
17
+ * }
18
+ * }
19
+ * ```
20
+ */
21
+ import { getSharedManager, shutdownManager } from '../client/manager';
22
+ import { jobId } from '../domain/types/job';
23
+ const TOOLS = [
24
+ // Job Operations
25
+ {
26
+ name: 'bunqueue_add_job',
27
+ description: 'Add a job to a queue. Returns the job ID.',
28
+ inputSchema: {
29
+ type: 'object',
30
+ properties: {
31
+ queue: { type: 'string', description: 'Queue name' },
32
+ name: { type: 'string', description: 'Job name/type' },
33
+ data: { type: 'object', description: 'Job payload data' },
34
+ priority: { type: 'number', description: 'Priority (higher = processed first)' },
35
+ delay: { type: 'number', description: 'Delay in milliseconds before processing' },
36
+ attempts: { type: 'number', description: 'Max retry attempts (default: 3)' },
37
+ },
38
+ required: ['queue', 'name', 'data'],
39
+ },
40
+ },
41
+ {
42
+ name: 'bunqueue_add_jobs_bulk',
43
+ description: 'Add multiple jobs to a queue in a single operation.',
44
+ inputSchema: {
45
+ type: 'object',
46
+ properties: {
47
+ queue: { type: 'string', description: 'Queue name' },
48
+ jobs: {
49
+ type: 'array',
50
+ description: 'Array of jobs to add',
51
+ items: {
52
+ type: 'object',
53
+ properties: {
54
+ name: { type: 'string' },
55
+ data: { type: 'object' },
56
+ priority: { type: 'number' },
57
+ delay: { type: 'number' },
58
+ },
59
+ },
60
+ },
61
+ },
62
+ required: ['queue', 'jobs'],
63
+ },
64
+ },
65
+ {
66
+ name: 'bunqueue_get_job',
67
+ description: 'Get a job by ID.',
68
+ inputSchema: {
69
+ type: 'object',
70
+ properties: {
71
+ jobId: { type: 'string', description: 'Job ID' },
72
+ },
73
+ required: ['jobId'],
74
+ },
75
+ },
76
+ {
77
+ name: 'bunqueue_cancel_job',
78
+ description: 'Cancel a waiting or delayed job.',
79
+ inputSchema: {
80
+ type: 'object',
81
+ properties: {
82
+ jobId: { type: 'string', description: 'Job ID to cancel' },
83
+ },
84
+ required: ['jobId'],
85
+ },
86
+ },
87
+ {
88
+ name: 'bunqueue_update_progress',
89
+ description: 'Update job progress (0-100).',
90
+ inputSchema: {
91
+ type: 'object',
92
+ properties: {
93
+ jobId: { type: 'string', description: 'Job ID' },
94
+ progress: { type: 'number', description: 'Progress value (0-100)' },
95
+ message: { type: 'string', description: 'Optional progress message' },
96
+ },
97
+ required: ['jobId', 'progress'],
98
+ },
99
+ },
100
+ // Queue Control
101
+ {
102
+ name: 'bunqueue_pause_queue',
103
+ description: 'Pause job processing on a queue.',
104
+ inputSchema: {
105
+ type: 'object',
106
+ properties: {
107
+ queue: { type: 'string', description: 'Queue name' },
108
+ },
109
+ required: ['queue'],
110
+ },
111
+ },
112
+ {
113
+ name: 'bunqueue_resume_queue',
114
+ description: 'Resume job processing on a paused queue.',
115
+ inputSchema: {
116
+ type: 'object',
117
+ properties: {
118
+ queue: { type: 'string', description: 'Queue name' },
119
+ },
120
+ required: ['queue'],
121
+ },
122
+ },
123
+ {
124
+ name: 'bunqueue_drain_queue',
125
+ description: 'Remove all waiting jobs from a queue.',
126
+ inputSchema: {
127
+ type: 'object',
128
+ properties: {
129
+ queue: { type: 'string', description: 'Queue name' },
130
+ },
131
+ required: ['queue'],
132
+ },
133
+ },
134
+ {
135
+ name: 'bunqueue_obliterate_queue',
136
+ description: 'Remove ALL data from a queue (waiting, active, completed, failed).',
137
+ inputSchema: {
138
+ type: 'object',
139
+ properties: {
140
+ queue: { type: 'string', description: 'Queue name' },
141
+ },
142
+ required: ['queue'],
143
+ },
144
+ },
145
+ {
146
+ name: 'bunqueue_list_queues',
147
+ description: 'List all queues.',
148
+ inputSchema: {
149
+ type: 'object',
150
+ properties: {},
151
+ },
152
+ },
153
+ {
154
+ name: 'bunqueue_count_jobs',
155
+ description: 'Count jobs in a queue.',
156
+ inputSchema: {
157
+ type: 'object',
158
+ properties: {
159
+ queue: { type: 'string', description: 'Queue name' },
160
+ },
161
+ required: ['queue'],
162
+ },
163
+ },
164
+ // Rate Limiting
165
+ {
166
+ name: 'bunqueue_set_rate_limit',
167
+ description: 'Set rate limit for a queue (jobs per second).',
168
+ inputSchema: {
169
+ type: 'object',
170
+ properties: {
171
+ queue: { type: 'string', description: 'Queue name' },
172
+ limit: { type: 'number', description: 'Max jobs per second' },
173
+ },
174
+ required: ['queue', 'limit'],
175
+ },
176
+ },
177
+ {
178
+ name: 'bunqueue_set_concurrency',
179
+ description: 'Set concurrency limit for a queue.',
180
+ inputSchema: {
181
+ type: 'object',
182
+ properties: {
183
+ queue: { type: 'string', description: 'Queue name' },
184
+ limit: { type: 'number', description: 'Max concurrent jobs' },
185
+ },
186
+ required: ['queue', 'limit'],
187
+ },
188
+ },
189
+ // DLQ Operations
190
+ {
191
+ name: 'bunqueue_get_dlq',
192
+ description: 'Get Dead Letter Queue entries for a queue.',
193
+ inputSchema: {
194
+ type: 'object',
195
+ properties: {
196
+ queue: { type: 'string', description: 'Queue name' },
197
+ limit: { type: 'number', description: 'Max entries to return (default: 20)' },
198
+ },
199
+ required: ['queue'],
200
+ },
201
+ },
202
+ {
203
+ name: 'bunqueue_retry_dlq',
204
+ description: 'Retry jobs from the Dead Letter Queue.',
205
+ inputSchema: {
206
+ type: 'object',
207
+ properties: {
208
+ queue: { type: 'string', description: 'Queue name' },
209
+ jobId: { type: 'string', description: 'Specific job ID to retry (optional)' },
210
+ },
211
+ required: ['queue'],
212
+ },
213
+ },
214
+ {
215
+ name: 'bunqueue_purge_dlq',
216
+ description: 'Remove all entries from the Dead Letter Queue.',
217
+ inputSchema: {
218
+ type: 'object',
219
+ properties: {
220
+ queue: { type: 'string', description: 'Queue name' },
221
+ },
222
+ required: ['queue'],
223
+ },
224
+ },
225
+ // Cron Jobs
226
+ {
227
+ name: 'bunqueue_add_cron',
228
+ description: 'Add a recurring cron job.',
229
+ inputSchema: {
230
+ type: 'object',
231
+ properties: {
232
+ name: { type: 'string', description: 'Unique cron job name' },
233
+ queue: { type: 'string', description: 'Target queue name' },
234
+ data: { type: 'object', description: 'Job payload data' },
235
+ schedule: { type: 'string', description: 'Cron pattern (e.g., "0 * * * *" for hourly)' },
236
+ repeatEvery: { type: 'number', description: 'Alternative: repeat every N milliseconds' },
237
+ priority: { type: 'number', description: 'Job priority' },
238
+ },
239
+ required: ['name', 'queue', 'data'],
240
+ },
241
+ },
242
+ {
243
+ name: 'bunqueue_list_crons',
244
+ description: 'List all scheduled cron jobs.',
245
+ inputSchema: {
246
+ type: 'object',
247
+ properties: {},
248
+ },
249
+ },
250
+ {
251
+ name: 'bunqueue_delete_cron',
252
+ description: 'Delete a cron job by name.',
253
+ inputSchema: {
254
+ type: 'object',
255
+ properties: {
256
+ name: { type: 'string', description: 'Cron job name to delete' },
257
+ },
258
+ required: ['name'],
259
+ },
260
+ },
261
+ // Stats & Logs
262
+ {
263
+ name: 'bunqueue_get_stats',
264
+ description: 'Get overall queue statistics.',
265
+ inputSchema: {
266
+ type: 'object',
267
+ properties: {},
268
+ },
269
+ },
270
+ {
271
+ name: 'bunqueue_get_job_logs',
272
+ description: 'Get logs for a specific job.',
273
+ inputSchema: {
274
+ type: 'object',
275
+ properties: {
276
+ jobId: { type: 'string', description: 'Job ID' },
277
+ },
278
+ required: ['jobId'],
279
+ },
280
+ },
281
+ {
282
+ name: 'bunqueue_add_job_log',
283
+ description: 'Add a log entry to a job.',
284
+ inputSchema: {
285
+ type: 'object',
286
+ properties: {
287
+ jobId: { type: 'string', description: 'Job ID' },
288
+ message: { type: 'string', description: 'Log message' },
289
+ level: { type: 'string', enum: ['info', 'warn', 'error'], description: 'Log level' },
290
+ },
291
+ required: ['jobId', 'message'],
292
+ },
293
+ },
294
+ ];
295
+ async function handleAddJob(args) {
296
+ const manager = getSharedManager();
297
+ const job = await manager.push(args.queue, {
298
+ data: { name: args.name, ...args.data },
299
+ priority: args.priority,
300
+ delay: args.delay,
301
+ maxAttempts: args.attempts,
302
+ });
303
+ return { jobId: String(job.id), queue: args.queue, message: 'Job added successfully' };
304
+ }
305
+ async function handleAddJobsBulk(args) {
306
+ const manager = getSharedManager();
307
+ const jobs = args.jobs;
308
+ const inputs = jobs.map((j) => ({
309
+ data: { name: j.name, ...j.data },
310
+ priority: j.priority,
311
+ delay: j.delay,
312
+ }));
313
+ const jobIds = await manager.pushBatch(args.queue, inputs);
314
+ return { count: jobIds.length, jobIds: jobIds.map(String), queue: args.queue };
315
+ }
316
+ async function handleGetJob(args) {
317
+ const manager = getSharedManager();
318
+ const job = await manager.getJob(jobId(args.jobId));
319
+ if (!job)
320
+ return { error: 'Job not found' };
321
+ const data = job.data;
322
+ return {
323
+ id: String(job.id),
324
+ name: data?.name ?? 'default',
325
+ data: job.data,
326
+ queue: job.queue,
327
+ progress: job.progress,
328
+ attempts: job.attempts,
329
+ maxAttempts: job.maxAttempts,
330
+ createdAt: new Date(job.createdAt).toISOString(),
331
+ };
332
+ }
333
+ async function handleCancelJob(args) {
334
+ const manager = getSharedManager();
335
+ const cancelled = await manager.cancel(jobId(args.jobId));
336
+ return { success: cancelled, jobId: args.jobId };
337
+ }
338
+ async function handleUpdateProgress(args) {
339
+ const manager = getSharedManager();
340
+ const updated = await manager.updateProgress(jobId(args.jobId), args.progress, args.message);
341
+ return { success: updated, jobId: args.jobId, progress: args.progress };
342
+ }
343
+ function handlePauseQueue(args) {
344
+ const manager = getSharedManager();
345
+ manager.pause(args.queue);
346
+ return { success: true, queue: args.queue, message: 'Queue paused' };
347
+ }
348
+ function handleResumeQueue(args) {
349
+ const manager = getSharedManager();
350
+ manager.resume(args.queue);
351
+ return { success: true, queue: args.queue, message: 'Queue resumed' };
352
+ }
353
+ function handleDrainQueue(args) {
354
+ const manager = getSharedManager();
355
+ const removed = manager.drain(args.queue);
356
+ return { success: true, queue: args.queue, removed, message: `Removed ${removed} waiting jobs` };
357
+ }
358
+ function handleObliterateQueue(args) {
359
+ const manager = getSharedManager();
360
+ manager.obliterate(args.queue);
361
+ return { success: true, queue: args.queue, message: 'Queue obliterated' };
362
+ }
363
+ function handleListQueues() {
364
+ const manager = getSharedManager();
365
+ return { queues: manager.listQueues() };
366
+ }
367
+ function handleCountJobs(args) {
368
+ const manager = getSharedManager();
369
+ return { queue: args.queue, count: manager.count(args.queue) };
370
+ }
371
+ function handleSetRateLimit(args) {
372
+ const manager = getSharedManager();
373
+ manager.setRateLimit(args.queue, args.limit);
374
+ return { success: true, queue: args.queue, rateLimit: args.limit };
375
+ }
376
+ function handleSetConcurrency(args) {
377
+ const manager = getSharedManager();
378
+ manager.setConcurrency(args.queue, args.limit);
379
+ return { success: true, queue: args.queue, concurrency: args.limit };
380
+ }
381
+ function handleGetDlq(args) {
382
+ const manager = getSharedManager();
383
+ const limit = args.limit || 20;
384
+ const jobs = manager.getDlq(args.queue, limit);
385
+ return jobs.map((j) => {
386
+ const data = j.data;
387
+ return {
388
+ id: String(j.id),
389
+ name: data?.name ?? 'default',
390
+ data: j.data,
391
+ attempts: j.attempts,
392
+ createdAt: new Date(j.createdAt).toISOString(),
393
+ };
394
+ });
395
+ }
396
+ function handleRetryDlq(args) {
397
+ const manager = getSharedManager();
398
+ const id = args.jobId ? jobId(args.jobId) : undefined;
399
+ const retried = manager.retryDlq(args.queue, id);
400
+ return { success: true, queue: args.queue, retried };
401
+ }
402
+ function handlePurgeDlq(args) {
403
+ const manager = getSharedManager();
404
+ const purged = manager.purgeDlq(args.queue);
405
+ return { success: true, queue: args.queue, purged };
406
+ }
407
+ function handleAddCron(args) {
408
+ const manager = getSharedManager();
409
+ const cron = manager.addCron({
410
+ name: args.name,
411
+ queue: args.queue,
412
+ data: args.data,
413
+ schedule: args.schedule,
414
+ repeatEvery: args.repeatEvery,
415
+ priority: args.priority,
416
+ });
417
+ return {
418
+ success: true,
419
+ name: cron.name,
420
+ queue: cron.queue,
421
+ nextRun: cron.nextRun ? new Date(cron.nextRun).toISOString() : null,
422
+ };
423
+ }
424
+ function handleListCrons() {
425
+ const manager = getSharedManager();
426
+ return manager.listCrons().map((c) => ({
427
+ name: c.name,
428
+ queue: c.queue,
429
+ schedule: c.schedule,
430
+ repeatEvery: c.repeatEvery,
431
+ nextRun: c.nextRun ? new Date(c.nextRun).toISOString() : null,
432
+ executions: c.executions,
433
+ }));
434
+ }
435
+ function handleDeleteCron(args) {
436
+ const manager = getSharedManager();
437
+ const deleted = manager.removeCron(args.name);
438
+ return { success: deleted, name: args.name };
439
+ }
440
+ function handleGetStats() {
441
+ const manager = getSharedManager();
442
+ const stats = manager.getStats();
443
+ // Convert BigInt to number for JSON serialization
444
+ return JSON.parse(JSON.stringify(stats, (_key, value) => typeof value === 'bigint' ? Number(value) : value));
445
+ }
446
+ function handleGetJobLogs(args) {
447
+ const manager = getSharedManager();
448
+ return manager.getLogs(jobId(args.jobId));
449
+ }
450
+ function handleAddJobLog(args) {
451
+ const manager = getSharedManager();
452
+ const level = args.level ?? 'info';
453
+ const added = manager.addLog(jobId(args.jobId), args.message, level);
454
+ return { success: added, jobId: args.jobId };
455
+ }
456
+ const TOOL_HANDLERS = new Map([
457
+ ['bunqueue_add_job', handleAddJob],
458
+ ['bunqueue_add_jobs_bulk', handleAddJobsBulk],
459
+ ['bunqueue_get_job', handleGetJob],
460
+ ['bunqueue_cancel_job', handleCancelJob],
461
+ ['bunqueue_update_progress', handleUpdateProgress],
462
+ ['bunqueue_pause_queue', handlePauseQueue],
463
+ ['bunqueue_resume_queue', handleResumeQueue],
464
+ ['bunqueue_drain_queue', handleDrainQueue],
465
+ ['bunqueue_obliterate_queue', handleObliterateQueue],
466
+ ['bunqueue_list_queues', () => handleListQueues()],
467
+ ['bunqueue_count_jobs', handleCountJobs],
468
+ ['bunqueue_set_rate_limit', handleSetRateLimit],
469
+ ['bunqueue_set_concurrency', handleSetConcurrency],
470
+ ['bunqueue_get_dlq', handleGetDlq],
471
+ ['bunqueue_retry_dlq', handleRetryDlq],
472
+ ['bunqueue_purge_dlq', handlePurgeDlq],
473
+ ['bunqueue_add_cron', handleAddCron],
474
+ ['bunqueue_list_crons', () => handleListCrons()],
475
+ ['bunqueue_delete_cron', handleDeleteCron],
476
+ ['bunqueue_get_stats', () => handleGetStats()],
477
+ ['bunqueue_get_job_logs', handleGetJobLogs],
478
+ ['bunqueue_add_job_log', handleAddJobLog],
479
+ ]);
480
+ function handleToolCall(name, args) {
481
+ const handler = TOOL_HANDLERS.get(name);
482
+ if (!handler)
483
+ throw new Error(`Unknown tool: ${name}`);
484
+ return handler(args);
485
+ }
486
+ function createResponse(id, result) {
487
+ return { jsonrpc: '2.0', id, result };
488
+ }
489
+ function createError(id, code, message) {
490
+ return { jsonrpc: '2.0', id, error: { code, message } };
491
+ }
492
+ async function handleRequest(request) {
493
+ const { id, method, params } = request;
494
+ try {
495
+ switch (method) {
496
+ case 'initialize':
497
+ return createResponse(id, {
498
+ protocolVersion: '2024-11-05',
499
+ capabilities: { tools: {} },
500
+ serverInfo: { name: 'bunqueue-mcp', version: '1.0.0' },
501
+ });
502
+ case 'tools/list':
503
+ return createResponse(id, { tools: TOOLS });
504
+ case 'tools/call': {
505
+ const toolName = params?.name;
506
+ const args = (params?.arguments ?? {});
507
+ const result = await handleToolCall(toolName, args);
508
+ return createResponse(id, {
509
+ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
510
+ });
511
+ }
512
+ case 'notifications/initialized':
513
+ case 'notifications/cancelled':
514
+ return createResponse(id, {});
515
+ default:
516
+ return createError(id, -32601, `Method not found: ${method}`);
517
+ }
518
+ }
519
+ catch (error) {
520
+ const message = error instanceof Error ? error.message : 'Unknown error';
521
+ return createError(id, -32603, message);
522
+ }
523
+ }
524
+ async function main() {
525
+ const decoder = new TextDecoder();
526
+ const encoder = new TextEncoder();
527
+ process.stderr.write('bunqueue MCP server started\n');
528
+ let buffer = '';
529
+ // Handle graceful shutdown
530
+ process.on('SIGINT', () => {
531
+ shutdownManager();
532
+ process.exit(0);
533
+ });
534
+ process.on('SIGTERM', () => {
535
+ shutdownManager();
536
+ process.exit(0);
537
+ });
538
+ for await (const chunk of Bun.stdin.stream()) {
539
+ buffer += decoder.decode(chunk);
540
+ let headerEnd = buffer.indexOf('\r\n\r\n');
541
+ while (headerEnd !== -1) {
542
+ const header = buffer.slice(0, headerEnd);
543
+ const contentLengthMatch = header.match(/Content-Length: (\d+)/i);
544
+ if (!contentLengthMatch) {
545
+ buffer = buffer.slice(headerEnd + 4);
546
+ headerEnd = buffer.indexOf('\r\n\r\n');
547
+ continue;
548
+ }
549
+ const contentLength = parseInt(contentLengthMatch[1], 10);
550
+ const messageStart = headerEnd + 4;
551
+ const messageEnd = messageStart + contentLength;
552
+ if (buffer.length < messageEnd)
553
+ break;
554
+ const message = buffer.slice(messageStart, messageEnd);
555
+ buffer = buffer.slice(messageEnd);
556
+ try {
557
+ const request = JSON.parse(message);
558
+ const response = await handleRequest(request);
559
+ const responseJson = JSON.stringify(response);
560
+ const responseHeader = `Content-Length: ${Buffer.byteLength(responseJson)}\r\n\r\n`;
561
+ process.stdout.write(encoder.encode(responseHeader + responseJson));
562
+ }
563
+ catch {
564
+ process.stderr.write(`Failed to parse message: ${message}\n`);
565
+ }
566
+ headerEnd = buffer.indexOf('\r\n\r\n');
567
+ }
568
+ }
569
+ }
570
+ main().catch((err) => {
571
+ process.stderr.write(`Fatal error: ${err}\n`);
572
+ process.exit(1);
573
+ });
574
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "name": "bunqueue",
3
- "version": "1.6.3",
3
+ "version": "1.6.4",
4
4
  "description": "High-performance job queue server written in Bun. SQLite persistence, cron scheduling, priorities, retries, DLQ, webhooks. Minimal dependencies.",
5
5
  "type": "module",
6
6
  "main": "dist/main.js",
7
7
  "types": "dist/main.d.ts",
8
8
  "bin": {
9
- "bunqueue": "./dist/cli/index.js"
9
+ "bunqueue": "./dist/cli/index.js",
10
+ "bunqueue-mcp": "./dist/mcp/index.js"
10
11
  },
11
12
  "exports": {
12
13
  ".": {
@@ -20,6 +21,10 @@
20
21
  "./queue": {
21
22
  "types": "./dist/application/queueManager.d.ts",
22
23
  "import": "./dist/application/queueManager.js"
24
+ },
25
+ "./mcp": {
26
+ "types": "./dist/mcp/index.d.ts",
27
+ "import": "./dist/mcp/index.js"
23
28
  }
24
29
  },
25
30
  "files": [