@vibesharingapp/mcp-server 0.4.2 → 0.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.
- package/dist/index.js +132 -21
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -59,8 +59,37 @@ class VibesharingClient {
|
|
|
59
59
|
async getPrototype(id) {
|
|
60
60
|
return this.request(`/api/prototypes/${id}`);
|
|
61
61
|
}
|
|
62
|
-
async getFeedback(projectId) {
|
|
63
|
-
|
|
62
|
+
async getFeedback(projectId, filters) {
|
|
63
|
+
const params = new URLSearchParams({ projectId });
|
|
64
|
+
if (filters?.status)
|
|
65
|
+
params.set("status", filters.status);
|
|
66
|
+
if (filters?.priority)
|
|
67
|
+
params.set("priority", filters.priority);
|
|
68
|
+
if (filters?.assigned_to)
|
|
69
|
+
params.set("assignedTo", filters.assigned_to);
|
|
70
|
+
return this.request(`/api/feedback?${params.toString()}`);
|
|
71
|
+
}
|
|
72
|
+
async triageFeedback(feedbackIds, updates) {
|
|
73
|
+
if (feedbackIds.length === 1) {
|
|
74
|
+
return this.request("/api/feedback", {
|
|
75
|
+
method: "PATCH",
|
|
76
|
+
body: JSON.stringify({
|
|
77
|
+
feedbackId: feedbackIds[0],
|
|
78
|
+
status: updates.status,
|
|
79
|
+
priority: updates.priority,
|
|
80
|
+
assignedTo: updates.assigned_to,
|
|
81
|
+
}),
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
return this.request("/api/feedback/bulk", {
|
|
85
|
+
method: "PATCH",
|
|
86
|
+
body: JSON.stringify({
|
|
87
|
+
feedbackIds,
|
|
88
|
+
status: updates.status,
|
|
89
|
+
priority: updates.priority,
|
|
90
|
+
assignedTo: updates.assigned_to,
|
|
91
|
+
}),
|
|
92
|
+
});
|
|
64
93
|
}
|
|
65
94
|
async syncContext(projectId, content) {
|
|
66
95
|
return this.request("/api/context", {
|
|
@@ -178,20 +207,21 @@ function fuzzyMatch(query, items, getName, threshold = 0.3) {
|
|
|
178
207
|
.sort((a, b) => b.score - a.score);
|
|
179
208
|
}
|
|
180
209
|
// ---- Version tracking & What's New ----
|
|
181
|
-
const CURRENT_VERSION = "0.
|
|
210
|
+
const CURRENT_VERSION = "0.5.0";
|
|
182
211
|
const WHATS_NEW = {
|
|
183
|
-
"0.
|
|
184
|
-
"🆕 VibeSharing MCP v0.
|
|
212
|
+
"0.5.0": [
|
|
213
|
+
"🆕 VibeSharing MCP v0.5.0 — What's New:",
|
|
185
214
|
"",
|
|
186
|
-
"•
|
|
187
|
-
"
|
|
188
|
-
"
|
|
189
|
-
"•
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
"
|
|
193
|
-
"•
|
|
194
|
-
"
|
|
215
|
+
"• Feedback triage — get_feedback now supports status, priority, and assignee",
|
|
216
|
+
" filters. Use triage_feedback to update status (open/in_progress/resolved/",
|
|
217
|
+
" wont_fix/deferred), set priority, and assign feedback to team members.",
|
|
218
|
+
"• New tool: triage_feedback — Bulk update feedback items without leaving your editor.",
|
|
219
|
+
].join("\n"),
|
|
220
|
+
"0.4.0": [
|
|
221
|
+
"• resolve_target tool — Fuzzy-matches collection/project names.",
|
|
222
|
+
"• Named deployments — Set friendly Vercel URLs with deploy_name.",
|
|
223
|
+
"• Fuzzy search on list_collections and list_prototypes.",
|
|
224
|
+
"• Guardrails on deploy tools.",
|
|
195
225
|
].join("\n"),
|
|
196
226
|
};
|
|
197
227
|
function getWhatsNew() {
|
|
@@ -242,7 +272,7 @@ const client = new VibesharingClient(VIBESHARING_URL, VIBESHARING_TOKEN);
|
|
|
242
272
|
// Create MCP server
|
|
243
273
|
const server = new index_js_1.Server({
|
|
244
274
|
name: "vibesharing",
|
|
245
|
-
version: "0.
|
|
275
|
+
version: "0.5.0",
|
|
246
276
|
}, {
|
|
247
277
|
capabilities: {
|
|
248
278
|
tools: {},
|
|
@@ -319,7 +349,7 @@ server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => {
|
|
|
319
349
|
},
|
|
320
350
|
{
|
|
321
351
|
name: "get_feedback",
|
|
322
|
-
description: "Get feedback and comments for a specific prototype.
|
|
352
|
+
description: "Get feedback and comments for a specific prototype. Can filter by status (open, in_progress, resolved, wont_fix, deferred), priority (critical, high, medium, low), or assignee.",
|
|
323
353
|
inputSchema: {
|
|
324
354
|
type: "object",
|
|
325
355
|
properties: {
|
|
@@ -327,10 +357,51 @@ server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => {
|
|
|
327
357
|
type: "string",
|
|
328
358
|
description: "The VibeSharing project/prototype ID",
|
|
329
359
|
},
|
|
360
|
+
status: {
|
|
361
|
+
type: "string",
|
|
362
|
+
description: "Filter by status: open, in_progress, resolved, wont_fix, deferred. Comma-separated for multiple.",
|
|
363
|
+
},
|
|
364
|
+
priority: {
|
|
365
|
+
type: "string",
|
|
366
|
+
description: "Filter by priority: critical, high, medium, low",
|
|
367
|
+
},
|
|
368
|
+
assigned_to: {
|
|
369
|
+
type: "string",
|
|
370
|
+
description: "Filter by assignee user ID, or 'unassigned' for unassigned feedback",
|
|
371
|
+
},
|
|
330
372
|
},
|
|
331
373
|
required: ["project_id"],
|
|
332
374
|
},
|
|
333
375
|
},
|
|
376
|
+
{
|
|
377
|
+
name: "triage_feedback",
|
|
378
|
+
description: "Update status, priority, or assignee on one or more feedback items. Use this to triage feedback from within your editor.",
|
|
379
|
+
inputSchema: {
|
|
380
|
+
type: "object",
|
|
381
|
+
properties: {
|
|
382
|
+
feedback_ids: {
|
|
383
|
+
type: "array",
|
|
384
|
+
items: { type: "string" },
|
|
385
|
+
description: "One or more feedback IDs to update",
|
|
386
|
+
},
|
|
387
|
+
status: {
|
|
388
|
+
type: "string",
|
|
389
|
+
enum: ["open", "in_progress", "resolved", "wont_fix", "deferred"],
|
|
390
|
+
description: "New status for the feedback items",
|
|
391
|
+
},
|
|
392
|
+
priority: {
|
|
393
|
+
type: "string",
|
|
394
|
+
enum: ["critical", "high", "medium", "low"],
|
|
395
|
+
description: "New priority for the feedback items. Omit to leave unchanged.",
|
|
396
|
+
},
|
|
397
|
+
assigned_to: {
|
|
398
|
+
type: "string",
|
|
399
|
+
description: "User ID to assign to. Use empty string to unassign.",
|
|
400
|
+
},
|
|
401
|
+
},
|
|
402
|
+
required: ["feedback_ids"],
|
|
403
|
+
},
|
|
404
|
+
},
|
|
334
405
|
{
|
|
335
406
|
name: "sync_context",
|
|
336
407
|
description: "Sync your CLAUDE.md, AGENTS.md, or project context to VibeSharing. This helps maintain context across AI sessions and team members.",
|
|
@@ -716,26 +787,35 @@ server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
|
|
|
716
787
|
};
|
|
717
788
|
}
|
|
718
789
|
case "get_feedback": {
|
|
719
|
-
const { project_id } = args;
|
|
720
|
-
const result = await client.getFeedback(project_id
|
|
790
|
+
const { project_id, status: statusFilter, priority: priorityFilter, assigned_to: assignedToFilter } = args;
|
|
791
|
+
const result = await client.getFeedback(project_id, {
|
|
792
|
+
status: statusFilter,
|
|
793
|
+
priority: priorityFilter,
|
|
794
|
+
assigned_to: assignedToFilter,
|
|
795
|
+
});
|
|
721
796
|
const feedback = result.feedback || [];
|
|
722
797
|
if (feedback.length === 0) {
|
|
798
|
+
const filterNote = statusFilter || priorityFilter || assignedToFilter
|
|
799
|
+
? " matching your filters"
|
|
800
|
+
: "";
|
|
723
801
|
return {
|
|
724
802
|
content: [
|
|
725
803
|
{
|
|
726
804
|
type: "text",
|
|
727
|
-
text:
|
|
805
|
+
text: `No feedback${filterNote} for this prototype. Share it with your team to get their thoughts!`,
|
|
728
806
|
},
|
|
729
807
|
],
|
|
730
808
|
};
|
|
731
809
|
}
|
|
732
810
|
const feedbackList = feedback
|
|
733
811
|
.map((f) => {
|
|
734
|
-
const
|
|
812
|
+
const itemStatus = f.status || (f.resolved_at ? "resolved" : "open");
|
|
813
|
+
const priorityLabel = f.priority ? ` [${f.priority.toUpperCase()}]` : "";
|
|
814
|
+
const assigneeLabel = f.assignee_name ? ` → ${f.assignee_name}` : "";
|
|
735
815
|
const replies = f.replies && f.replies.length > 0
|
|
736
816
|
? `\n Replies: ${f.replies.length}`
|
|
737
817
|
: "";
|
|
738
|
-
return `- ${f.user_name}
|
|
818
|
+
return `- [${itemStatus}]${priorityLabel}${assigneeLabel} ${f.user_name}: "${f.content}"\n ID: ${f.id}\n ${new Date(f.created_at).toLocaleDateString()}${replies}`;
|
|
739
819
|
})
|
|
740
820
|
.join("\n\n");
|
|
741
821
|
return {
|
|
@@ -747,6 +827,37 @@ server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
|
|
|
747
827
|
],
|
|
748
828
|
};
|
|
749
829
|
}
|
|
830
|
+
case "triage_feedback": {
|
|
831
|
+
const { feedback_ids, status: newStatus, priority: newPriority, assigned_to: newAssignee } = args;
|
|
832
|
+
if (!feedback_ids || feedback_ids.length === 0) {
|
|
833
|
+
return {
|
|
834
|
+
content: [{ type: "text", text: "Error: feedback_ids array is required" }],
|
|
835
|
+
};
|
|
836
|
+
}
|
|
837
|
+
const updates = {};
|
|
838
|
+
if (newStatus)
|
|
839
|
+
updates.status = newStatus;
|
|
840
|
+
if (newPriority !== undefined)
|
|
841
|
+
updates.priority = newPriority;
|
|
842
|
+
if (newAssignee !== undefined)
|
|
843
|
+
updates.assigned_to = newAssignee || null;
|
|
844
|
+
const result = await client.triageFeedback(feedback_ids, updates);
|
|
845
|
+
const changes = [];
|
|
846
|
+
if (newStatus)
|
|
847
|
+
changes.push(`status → ${newStatus}`);
|
|
848
|
+
if (newPriority)
|
|
849
|
+
changes.push(`priority → ${newPriority}`);
|
|
850
|
+
if (newAssignee !== undefined)
|
|
851
|
+
changes.push(newAssignee ? `assigned → ${newAssignee}` : "unassigned");
|
|
852
|
+
return {
|
|
853
|
+
content: [
|
|
854
|
+
{
|
|
855
|
+
type: "text",
|
|
856
|
+
text: `Updated ${feedback_ids.length} feedback item(s): ${changes.join(", ")}`,
|
|
857
|
+
},
|
|
858
|
+
],
|
|
859
|
+
};
|
|
860
|
+
}
|
|
750
861
|
case "sync_context": {
|
|
751
862
|
const { project_id, content } = args;
|
|
752
863
|
await client.syncContext(project_id, content);
|
package/package.json
CHANGED