@vibesharingapp/mcp-server 0.4.1 → 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/README.md +56 -35
- package/dist/index.js +132 -21
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -22,21 +22,26 @@ Until now.
|
|
|
22
22
|
VibeSharing's MCP server connects Claude Code directly to your team's prototype hub. Every prototype you build becomes instantly shareable, trackable, and open for feedback.
|
|
23
23
|
|
|
24
24
|
```
|
|
25
|
-
You: "
|
|
25
|
+
You: "Post this prototype to VibeSharing"
|
|
26
26
|
|
|
27
|
-
Claude:
|
|
28
|
-
|
|
27
|
+
Claude: I found these collections in your org:
|
|
28
|
+
1. All Hero Use Cases
|
|
29
|
+
2. Compliance Hub
|
|
30
|
+
3. Internal Tools
|
|
31
|
+
|
|
32
|
+
Which collection should this go in? And do you want a custom URL
|
|
33
|
+
like erg-v3-teams.vercel.app?
|
|
29
34
|
```
|
|
30
35
|
|
|
31
|
-
|
|
36
|
+
No guessing. No duplicates. Just a quick confirmation and your prototype is live.
|
|
32
37
|
|
|
33
38
|
## What You Can Do
|
|
34
39
|
|
|
35
40
|
### Ship prototypes without leaving your terminal
|
|
36
41
|
```
|
|
37
|
-
"Deploy this to
|
|
42
|
+
"Deploy this to VibeSharing in the Hero Use Cases collection as erg-v3-teams"
|
|
38
43
|
```
|
|
39
|
-
Claude
|
|
44
|
+
Claude confirms the collection, names the deployment, and handles everything—GitHub repo, Vercel deploy, team registration—in one conversation.
|
|
40
45
|
|
|
41
46
|
### Check what your team thinks
|
|
42
47
|
```
|
|
@@ -53,32 +58,34 @@ Your project context persists on VibeSharing, so any team member (or AI session)
|
|
|
53
58
|
### See all your work in one place
|
|
54
59
|
```
|
|
55
60
|
"List my prototypes"
|
|
61
|
+
"Search collections for hero"
|
|
56
62
|
```
|
|
57
|
-
Every prototype you've registered, with links and recent activity.
|
|
63
|
+
Every prototype you've registered, with links and recent activity. Fuzzy search included.
|
|
58
64
|
|
|
59
65
|
## Quick Start
|
|
60
66
|
|
|
61
|
-
### 1.
|
|
62
|
-
|
|
63
|
-
```bash
|
|
64
|
-
npm install -g @vibesharingapp/mcp-server
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
### 2. Get Your Token & Connect GitHub
|
|
67
|
+
### 1. Get Your Token & Connect GitHub
|
|
68
68
|
|
|
69
69
|
Sign up at [vibesharing.app](https://vibesharing.app), then go to [Account Settings](https://vibesharing.app/dashboard/account) to:
|
|
70
70
|
- **Connect your GitHub account** — required for Push to Deploy (gives you automatic push access to prototype repos)
|
|
71
71
|
- **Copy your deploy token** — needed for the MCP server config below
|
|
72
72
|
|
|
73
|
-
###
|
|
73
|
+
### 2. Configure Claude Code
|
|
74
74
|
|
|
75
|
-
|
|
75
|
+
```bash
|
|
76
|
+
claude mcp add vibesharing \
|
|
77
|
+
-e VIBESHARING_TOKEN=vs_your_token_here \
|
|
78
|
+
-- npx -y @vibesharingapp/mcp-server@latest
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Or add to your Claude Code settings manually:
|
|
76
82
|
|
|
77
83
|
```json
|
|
78
84
|
{
|
|
79
85
|
"mcpServers": {
|
|
80
86
|
"vibesharing": {
|
|
81
|
-
"command": "
|
|
87
|
+
"command": "npx",
|
|
88
|
+
"args": ["-y", "@vibesharingapp/mcp-server@latest"],
|
|
82
89
|
"env": {
|
|
83
90
|
"VIBESHARING_TOKEN": "vs_your_token_here"
|
|
84
91
|
}
|
|
@@ -87,7 +94,9 @@ Add to your Claude Code settings:
|
|
|
87
94
|
}
|
|
88
95
|
```
|
|
89
96
|
|
|
90
|
-
|
|
97
|
+
Using `@latest` ensures you always get new features and fixes automatically.
|
|
98
|
+
|
|
99
|
+
### 3. Start Building
|
|
91
100
|
|
|
92
101
|
That's it. Ask Claude to register prototypes, check feedback, or sync context. It just works.
|
|
93
102
|
|
|
@@ -106,11 +115,21 @@ See the full picture of your team's prototyping velocity. Guide feedback with cu
|
|
|
106
115
|
|
|
107
116
|
| Tool | Description |
|
|
108
117
|
|------|-------------|
|
|
109
|
-
| `
|
|
118
|
+
| `resolve_target` | **Start here.** Fuzzy-matches collection/project names and confirms where to deploy before proceeding. |
|
|
119
|
+
| `import_repo` | Import a GitHub repo into VibeSharing with a named Vercel deployment |
|
|
120
|
+
| `deploy_files` | Deploy multi-file projects to VibeSharing with named deployments |
|
|
121
|
+
| `deploy_prototype` | Deploy a single code file directly |
|
|
110
122
|
| `register_prototype` | Register an already-deployed prototype with name, description, and URL |
|
|
111
|
-
| `list_prototypes` | List all prototypes in your organization |
|
|
123
|
+
| `list_prototypes` | List/search all prototypes in your organization |
|
|
124
|
+
| `list_collections` | List/search all collections |
|
|
112
125
|
| `get_feedback` | Get feedback and comments for any prototype |
|
|
113
126
|
| `sync_context` | Push CLAUDE.md, AGENTS.md, or project notes to VibeSharing |
|
|
127
|
+
| `create_collection` | Create a new collection |
|
|
128
|
+
| `upload_source` | Upload source code to an existing prototype |
|
|
129
|
+
| `add_context_link` | Attach reference links (Figma, PRDs, docs) to collections or projects |
|
|
130
|
+
| `list_context_links` | List reference links on a collection or project |
|
|
131
|
+
| `remove_context_link` | Remove a reference link |
|
|
132
|
+
| `verify_token` | Check that your deploy token is valid |
|
|
114
133
|
|
|
115
134
|
## Environment Variables
|
|
116
135
|
|
|
@@ -121,25 +140,23 @@ See the full picture of your team's prototyping velocity. Guide feedback with cu
|
|
|
121
140
|
|
|
122
141
|
## Examples
|
|
123
142
|
|
|
124
|
-
### Deploy
|
|
143
|
+
### Deploy with a named URL
|
|
125
144
|
```
|
|
126
|
-
You: "Deploy this to VibeSharing as
|
|
145
|
+
You: "Deploy this to VibeSharing as erg-v3-teams in the Hero Use Cases collection"
|
|
127
146
|
|
|
128
|
-
Claude: Deployed
|
|
147
|
+
Claude: Deployed!
|
|
129
148
|
|
|
130
|
-
Live URL: https://
|
|
149
|
+
Live URL: https://erg-v3-teams.vercel.app
|
|
131
150
|
VibeSharing: https://vibesharing.app/dashboard/projects/xyz789
|
|
132
151
|
|
|
133
152
|
Your team can now view the prototype and leave feedback.
|
|
134
153
|
```
|
|
135
154
|
|
|
136
|
-
###
|
|
155
|
+
### Fuzzy search for collections
|
|
137
156
|
```
|
|
138
|
-
You: "
|
|
139
|
-
as 'Checkout Flow v2' and mention it simplifies the payment step"
|
|
157
|
+
You: "Put this in the hero collection"
|
|
140
158
|
|
|
141
|
-
Claude:
|
|
142
|
-
https://vibesharing.app/dashboard/projects/xyz789
|
|
159
|
+
Claude: I found "All Hero Use Cases" — is that the right collection?
|
|
143
160
|
```
|
|
144
161
|
|
|
145
162
|
### Get feedback before your next session
|
|
@@ -154,7 +171,7 @@ Claude: 3 new comments on Dashboard Redesign:
|
|
|
154
171
|
|
|
155
172
|
### Keep your AI context in sync
|
|
156
173
|
```
|
|
157
|
-
You: "Sync my CLAUDE.md
|
|
174
|
+
You: "Sync my CLAUDE.md to the Dashboard project on VibeSharing"
|
|
158
175
|
|
|
159
176
|
Claude: Context synced! Your team can now see your project notes at:
|
|
160
177
|
https://vibesharing.app/dashboard/projects/abc123
|
|
@@ -164,21 +181,25 @@ Claude: Context synced! Your team can now see your project notes at:
|
|
|
164
181
|
|
|
165
182
|
VibeSharing isn't just another tool to check. It's infrastructure for teams building with AI:
|
|
166
183
|
|
|
184
|
+
- **Smart deploy targeting** — fuzzy-matches collections and projects so you don't need exact IDs
|
|
185
|
+
- **Named deployments** — deterministic URLs like `erg-v3-teams.vercel.app` instead of random hashes
|
|
167
186
|
- **Context file sync** (CLAUDE.md, AGENTS.md) keeps context alive across sessions and team members
|
|
168
187
|
- **Guided feedback topics** help stakeholders give useful input
|
|
169
188
|
- **Email notifications** when prototypes update or get feedback
|
|
170
|
-
- **Works with any deploy target**
|
|
189
|
+
- **Works with any deploy target** — Vercel, Netlify, Replit, Lovable, v0, or paste any URL
|
|
171
190
|
|
|
172
191
|
## Learn More
|
|
173
192
|
|
|
174
|
-
- [VibeSharing](https://vibesharing.app)
|
|
175
|
-
- [Documentation](https://vibesharing.app/get-started)
|
|
176
|
-
- [GitHub](https://github.com/erova/vibesharing)
|
|
193
|
+
- [VibeSharing](https://vibesharing.app) — Sign up free
|
|
194
|
+
- [Documentation](https://vibesharing.app/get-started) — Full setup guide
|
|
195
|
+
- [GitHub](https://github.com/erova/vibesharing) — Source code
|
|
177
196
|
|
|
178
197
|
---
|
|
179
198
|
|
|
180
199
|
**Stop building in isolation. Start shipping with your team.**
|
|
181
200
|
|
|
182
201
|
```bash
|
|
183
|
-
|
|
202
|
+
claude mcp add vibesharing \
|
|
203
|
+
-e VIBESHARING_TOKEN=vs_your_token_here \
|
|
204
|
+
-- npx -y @vibesharingapp/mcp-server@latest
|
|
184
205
|
```
|
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