wolfpack-mcp 1.0.46 → 1.0.47
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/dist/client.js +13 -0
- package/dist/index.js +106 -20
- package/package.json +1 -1
package/dist/client.js
CHANGED
|
@@ -555,6 +555,19 @@ export class WolfpackClient {
|
|
|
555
555
|
async unmuteSubscription(documentType, documentId) {
|
|
556
556
|
return this.api.post(`/subscriptions/${documentType}/${documentId}/unmute`, {});
|
|
557
557
|
}
|
|
558
|
+
// Discussion methods
|
|
559
|
+
async getDiscussions(documentType, documentId) {
|
|
560
|
+
return this.api.get(`/discussions/${documentType}/${documentId}`);
|
|
561
|
+
}
|
|
562
|
+
async getDiscussionByComment(commentId) {
|
|
563
|
+
return this.api.get(`/discussions/by-comment/${commentId}`);
|
|
564
|
+
}
|
|
565
|
+
async addDiscussionComment(discussionId, content, parentCommentId) {
|
|
566
|
+
return this.api.post(`/discussions/${discussionId}/comments`, {
|
|
567
|
+
content,
|
|
568
|
+
parentCommentId,
|
|
569
|
+
});
|
|
570
|
+
}
|
|
558
571
|
close() {
|
|
559
572
|
// No cleanup needed for API client
|
|
560
573
|
}
|
package/dist/index.js
CHANGED
|
@@ -525,6 +525,24 @@ const UUID_FIELDS_TO_STRIP = new Set([
|
|
|
525
525
|
'teamId', // Internal team UUID - noise for agents
|
|
526
526
|
'workItemId', // Cross-reference UUID on Issues - noise
|
|
527
527
|
]);
|
|
528
|
+
// Discussion schemas
|
|
529
|
+
const GetDiscussionsSchema = z.object({
|
|
530
|
+
document_type: z.string().describe('Document type (e.g. "wiki", "work_item", "issue")'),
|
|
531
|
+
document_id: z.string().describe('The ID of the document'),
|
|
532
|
+
});
|
|
533
|
+
const GetDiscussionByCommentSchema = z.object({
|
|
534
|
+
comment_id: z
|
|
535
|
+
.string()
|
|
536
|
+
.describe('The ID of a discussion comment (e.g. from a notification sourceDocumentId)'),
|
|
537
|
+
});
|
|
538
|
+
const AddDiscussionCommentSchema = z.object({
|
|
539
|
+
discussion_id: z.string().describe('The ID of the discussion to comment on'),
|
|
540
|
+
content: z.string().describe('Comment content (supports markdown and @mentions)'),
|
|
541
|
+
parent_comment_id: z
|
|
542
|
+
.string()
|
|
543
|
+
.optional()
|
|
544
|
+
.describe('Parent comment ID for threaded replies (omit for top-level)'),
|
|
545
|
+
});
|
|
528
546
|
// Fields containing user-defined data that should never be recursively processed.
|
|
529
547
|
const PASSTHROUGH_FIELDS = new Set(['formDefinition', 'formValues']);
|
|
530
548
|
// Strip UUID v4 fields from response objects so agents use refId/slug instead.
|
|
@@ -1734,6 +1752,65 @@ class WolfpackMCPServer {
|
|
|
1734
1752
|
required: ['document_type', 'document_id'],
|
|
1735
1753
|
},
|
|
1736
1754
|
},
|
|
1755
|
+
// Discussion tools
|
|
1756
|
+
{
|
|
1757
|
+
name: 'get_discussions',
|
|
1758
|
+
description: 'Get all discussion threads on a document (wiki page, work item, issue, etc.). ' +
|
|
1759
|
+
'Returns discussions with their full comment threads including replies.',
|
|
1760
|
+
inputSchema: {
|
|
1761
|
+
type: 'object',
|
|
1762
|
+
properties: {
|
|
1763
|
+
document_type: {
|
|
1764
|
+
type: 'string',
|
|
1765
|
+
description: 'Document type (e.g. "wiki", "work_item", "issue")',
|
|
1766
|
+
},
|
|
1767
|
+
document_id: {
|
|
1768
|
+
type: 'string',
|
|
1769
|
+
description: 'The ID of the document',
|
|
1770
|
+
},
|
|
1771
|
+
},
|
|
1772
|
+
required: ['document_type', 'document_id'],
|
|
1773
|
+
},
|
|
1774
|
+
},
|
|
1775
|
+
{
|
|
1776
|
+
name: 'get_discussion_by_comment',
|
|
1777
|
+
description: 'Find the full discussion thread containing a specific comment. ' +
|
|
1778
|
+
'Use this when you have a comment ID from a notification (sourceDocumentType: "discussion_comment") ' +
|
|
1779
|
+
'and need to see the full discussion context.',
|
|
1780
|
+
inputSchema: {
|
|
1781
|
+
type: 'object',
|
|
1782
|
+
properties: {
|
|
1783
|
+
comment_id: {
|
|
1784
|
+
type: 'string',
|
|
1785
|
+
description: 'The comment ID (e.g. from a notification sourceDocumentId)',
|
|
1786
|
+
},
|
|
1787
|
+
},
|
|
1788
|
+
required: ['comment_id'],
|
|
1789
|
+
},
|
|
1790
|
+
},
|
|
1791
|
+
{
|
|
1792
|
+
name: 'create_discussion_comment',
|
|
1793
|
+
description: 'Add a comment to a discussion thread. Supports threaded replies via parent_comment_id. ' +
|
|
1794
|
+
'Use this to respond to wiki page discussions, work item discussions, or any document discussion.',
|
|
1795
|
+
inputSchema: {
|
|
1796
|
+
type: 'object',
|
|
1797
|
+
properties: {
|
|
1798
|
+
discussion_id: {
|
|
1799
|
+
type: 'string',
|
|
1800
|
+
description: 'The ID of the discussion to comment on',
|
|
1801
|
+
},
|
|
1802
|
+
content: {
|
|
1803
|
+
type: 'string',
|
|
1804
|
+
description: 'Comment content (supports markdown and @mentions)',
|
|
1805
|
+
},
|
|
1806
|
+
parent_comment_id: {
|
|
1807
|
+
type: 'string',
|
|
1808
|
+
description: 'Parent comment ID for threaded replies (omit for top-level)',
|
|
1809
|
+
},
|
|
1810
|
+
},
|
|
1811
|
+
required: ['discussion_id', 'content'],
|
|
1812
|
+
},
|
|
1813
|
+
},
|
|
1737
1814
|
],
|
|
1738
1815
|
}));
|
|
1739
1816
|
this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
@@ -2435,11 +2512,12 @@ class WolfpackMCPServer {
|
|
|
2435
2512
|
limit: parsed.limit,
|
|
2436
2513
|
offset: parsed.offset,
|
|
2437
2514
|
});
|
|
2515
|
+
// Don't strip UUIDs — agents need notification IDs to mark as read/delete
|
|
2438
2516
|
return {
|
|
2439
2517
|
content: [
|
|
2440
2518
|
{
|
|
2441
2519
|
type: 'text',
|
|
2442
|
-
text: JSON.stringify(
|
|
2520
|
+
text: JSON.stringify(result, null, 2),
|
|
2443
2521
|
},
|
|
2444
2522
|
],
|
|
2445
2523
|
};
|
|
@@ -2471,11 +2549,12 @@ class WolfpackMCPServer {
|
|
|
2471
2549
|
documentType: parsed.document_type,
|
|
2472
2550
|
isActive: parsed.is_active,
|
|
2473
2551
|
});
|
|
2552
|
+
// Don't strip UUIDs — agents need subscription IDs
|
|
2474
2553
|
return {
|
|
2475
2554
|
content: [
|
|
2476
2555
|
{
|
|
2477
2556
|
type: 'text',
|
|
2478
|
-
text: JSON.stringify(
|
|
2557
|
+
text: JSON.stringify(result, null, 2),
|
|
2479
2558
|
},
|
|
2480
2559
|
],
|
|
2481
2560
|
};
|
|
@@ -2493,12 +2572,7 @@ class WolfpackMCPServer {
|
|
|
2493
2572
|
cooldownMinutes: parsed.cooldown_minutes,
|
|
2494
2573
|
});
|
|
2495
2574
|
return {
|
|
2496
|
-
content: [
|
|
2497
|
-
{
|
|
2498
|
-
type: 'text',
|
|
2499
|
-
text: JSON.stringify(stripUuids(result), null, 2),
|
|
2500
|
-
},
|
|
2501
|
-
],
|
|
2575
|
+
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
2502
2576
|
};
|
|
2503
2577
|
}
|
|
2504
2578
|
case 'unsubscribe': {
|
|
@@ -2512,24 +2586,36 @@ class WolfpackMCPServer {
|
|
|
2512
2586
|
const parsed = MuteSubscriptionSchema.parse(args);
|
|
2513
2587
|
const result = await this.client.muteSubscription(parsed.document_type, parsed.document_id, parsed.duration);
|
|
2514
2588
|
return {
|
|
2515
|
-
content: [
|
|
2516
|
-
{
|
|
2517
|
-
type: 'text',
|
|
2518
|
-
text: JSON.stringify(stripUuids(result), null, 2),
|
|
2519
|
-
},
|
|
2520
|
-
],
|
|
2589
|
+
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
2521
2590
|
};
|
|
2522
2591
|
}
|
|
2523
2592
|
case 'unmute_subscription': {
|
|
2524
2593
|
const parsed = UnmuteSubscriptionSchema.parse(args);
|
|
2525
2594
|
const result = await this.client.unmuteSubscription(parsed.document_type, parsed.document_id);
|
|
2526
2595
|
return {
|
|
2527
|
-
content: [
|
|
2528
|
-
|
|
2529
|
-
|
|
2530
|
-
|
|
2531
|
-
|
|
2532
|
-
|
|
2596
|
+
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
2597
|
+
};
|
|
2598
|
+
}
|
|
2599
|
+
// Discussion handlers
|
|
2600
|
+
case 'get_discussions': {
|
|
2601
|
+
const parsed = GetDiscussionsSchema.parse(args);
|
|
2602
|
+
const result = await this.client.getDiscussions(parsed.document_type, parsed.document_id);
|
|
2603
|
+
return {
|
|
2604
|
+
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
2605
|
+
};
|
|
2606
|
+
}
|
|
2607
|
+
case 'get_discussion_by_comment': {
|
|
2608
|
+
const parsed = GetDiscussionByCommentSchema.parse(args);
|
|
2609
|
+
const result = await this.client.getDiscussionByComment(parsed.comment_id);
|
|
2610
|
+
return {
|
|
2611
|
+
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
2612
|
+
};
|
|
2613
|
+
}
|
|
2614
|
+
case 'create_discussion_comment': {
|
|
2615
|
+
const parsed = AddDiscussionCommentSchema.parse(args);
|
|
2616
|
+
const result = await this.client.addDiscussionComment(parsed.discussion_id, parsed.content, parsed.parent_comment_id);
|
|
2617
|
+
return {
|
|
2618
|
+
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
2533
2619
|
};
|
|
2534
2620
|
}
|
|
2535
2621
|
default:
|