@vibesharingapp/mcp-server 0.1.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 +169 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +307 -0
- package/package.json +54 -0
package/README.md
ADDED
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
# VibeSharing MCP Server
|
|
2
|
+
|
|
3
|
+
**The missing link between your AI coding assistant and your team.**
|
|
4
|
+
|
|
5
|
+
Build prototypes with Claude Code, Cursor, or any AI tool—then instantly share them with your team for feedback. No context switching. No copy-pasting URLs. Just ship and collaborate.
|
|
6
|
+
|
|
7
|
+
## The Problem
|
|
8
|
+
|
|
9
|
+
You're building fast with AI. Prototypes are flying. But then:
|
|
10
|
+
|
|
11
|
+
- You deploy to Vercel and... forget to tell anyone
|
|
12
|
+
- Your teammate asks "where's that dashboard thing you made?"
|
|
13
|
+
- Feedback lives in Slack threads that disappear
|
|
14
|
+
- Next AI session? All that context is gone
|
|
15
|
+
|
|
16
|
+
**Your AI helps you build. But it can't help you collaborate.**
|
|
17
|
+
|
|
18
|
+
Until now.
|
|
19
|
+
|
|
20
|
+
## The Solution
|
|
21
|
+
|
|
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
|
+
|
|
24
|
+
```
|
|
25
|
+
You: "Register this on VibeSharing, it's deployed at my-app.vercel.app"
|
|
26
|
+
|
|
27
|
+
Claude: Done! Your team can now view and leave feedback at:
|
|
28
|
+
vibesharing.app/dashboard/projects/abc123
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
That's it. Your prototype is live on VibeSharing. Your team gets notified. Feedback flows back to you.
|
|
32
|
+
|
|
33
|
+
## What You Can Do
|
|
34
|
+
|
|
35
|
+
### Ship prototypes without leaving your terminal
|
|
36
|
+
```
|
|
37
|
+
"Deploy this to Vercel and register it on VibeSharing"
|
|
38
|
+
```
|
|
39
|
+
Claude handles the deployment AND registers it with your team—in one conversation.
|
|
40
|
+
|
|
41
|
+
### Check what your team thinks
|
|
42
|
+
```
|
|
43
|
+
"What feedback did I get on the checkout flow prototype?"
|
|
44
|
+
```
|
|
45
|
+
See comments, suggestions, and resolved issues without opening a browser.
|
|
46
|
+
|
|
47
|
+
### Keep context alive across sessions
|
|
48
|
+
```
|
|
49
|
+
"Sync my CLAUDE.md to VibeSharing"
|
|
50
|
+
```
|
|
51
|
+
Your project context persists on VibeSharing, so any team member (or AI session) can pick up where you left off.
|
|
52
|
+
|
|
53
|
+
### See all your work in one place
|
|
54
|
+
```
|
|
55
|
+
"List my prototypes"
|
|
56
|
+
```
|
|
57
|
+
Every prototype you've registered, with links and recent activity.
|
|
58
|
+
|
|
59
|
+
## Quick Start
|
|
60
|
+
|
|
61
|
+
### 1. Install
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
npm install -g @vibesharingapp/mcp-server
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### 2. Get Your Token
|
|
68
|
+
|
|
69
|
+
Sign up at [vibesharing.app](https://vibesharing.app) and grab your deploy token from Account Settings.
|
|
70
|
+
|
|
71
|
+
### 3. Configure Claude Code
|
|
72
|
+
|
|
73
|
+
Add to your Claude Code settings:
|
|
74
|
+
|
|
75
|
+
```json
|
|
76
|
+
{
|
|
77
|
+
"mcpServers": {
|
|
78
|
+
"vibesharing": {
|
|
79
|
+
"command": "vibesharing-mcp",
|
|
80
|
+
"env": {
|
|
81
|
+
"VIBESHARING_TOKEN": "vs_your_token_here"
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### 4. Start Building
|
|
89
|
+
|
|
90
|
+
That's it. Ask Claude to register prototypes, check feedback, or sync context. It just works.
|
|
91
|
+
|
|
92
|
+
## Why This Matters
|
|
93
|
+
|
|
94
|
+
### For Solo Builders
|
|
95
|
+
Stop losing track of what you've built. Every prototype is catalogued, shareable, and ready for feedback when you need it.
|
|
96
|
+
|
|
97
|
+
### For Teams
|
|
98
|
+
Finally, visibility into what everyone's shipping. No more "hey, can you send me that link again?" Feedback is structured, threaded, and actionable.
|
|
99
|
+
|
|
100
|
+
### For Design Leaders
|
|
101
|
+
See the full picture of your team's prototyping velocity. Guide feedback with custom topics. Keep stakeholders in the loop without endless meetings.
|
|
102
|
+
|
|
103
|
+
## Available Tools
|
|
104
|
+
|
|
105
|
+
| Tool | Description |
|
|
106
|
+
|------|-------------|
|
|
107
|
+
| `register_prototype` | Register a deployed prototype with name, description, and URL |
|
|
108
|
+
| `list_prototypes` | List all prototypes in your organization |
|
|
109
|
+
| `get_feedback` | Get feedback and comments for any prototype |
|
|
110
|
+
| `sync_context` | Push CLAUDE.md or project notes to VibeSharing |
|
|
111
|
+
|
|
112
|
+
## Environment Variables
|
|
113
|
+
|
|
114
|
+
| Variable | Required | Description |
|
|
115
|
+
|----------|----------|-------------|
|
|
116
|
+
| `VIBESHARING_TOKEN` | Yes | Your deploy token from VibeSharing |
|
|
117
|
+
| `VIBESHARING_URL` | No | Custom API URL (defaults to https://vibesharing.app) |
|
|
118
|
+
|
|
119
|
+
## Examples
|
|
120
|
+
|
|
121
|
+
### Register after deploying
|
|
122
|
+
```
|
|
123
|
+
You: "I just deployed to https://checkout-v2.vercel.app - register it on VibeSharing
|
|
124
|
+
as 'Checkout Flow v2' and mention it simplifies the payment step"
|
|
125
|
+
|
|
126
|
+
Claude: Registered! Your team can view and leave feedback at:
|
|
127
|
+
https://vibesharing.app/dashboard/projects/xyz789
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### Get feedback before your next session
|
|
131
|
+
```
|
|
132
|
+
You: "Before I continue on the dashboard, what feedback came in?"
|
|
133
|
+
|
|
134
|
+
Claude: 3 new comments on Dashboard Redesign:
|
|
135
|
+
- Sarah: "Love the new nav, but can we make the search more prominent?"
|
|
136
|
+
- Mike: "The loading states feel snappy now"
|
|
137
|
+
- Alex: "Can we add keyboard shortcuts?" [Resolved]
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Keep your AI context in sync
|
|
141
|
+
```
|
|
142
|
+
You: "Sync my CLAUDE.md to the Dashboard project on VibeSharing"
|
|
143
|
+
|
|
144
|
+
Claude: Context synced! Your team can now see your project notes at:
|
|
145
|
+
https://vibesharing.app/dashboard/projects/abc123
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## Built for the AI-Native Workflow
|
|
149
|
+
|
|
150
|
+
VibeSharing isn't just another tool to check. It's infrastructure for teams building with AI:
|
|
151
|
+
|
|
152
|
+
- **CLAUDE.md sync** keeps context alive across sessions and team members
|
|
153
|
+
- **Guided feedback topics** help stakeholders give useful input
|
|
154
|
+
- **Email notifications** when prototypes update or get feedback
|
|
155
|
+
- **Works with any deploy target** - Vercel, Netlify, Replit, Lovable, v0, or paste any URL
|
|
156
|
+
|
|
157
|
+
## Learn More
|
|
158
|
+
|
|
159
|
+
- [VibeSharing](https://vibesharing.app) - Sign up free
|
|
160
|
+
- [Documentation](https://vibesharing.app/get-started) - Full setup guide
|
|
161
|
+
- [GitHub](https://github.com/erova/vibesharing) - Source code
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
**Stop building in isolation. Start shipping with your team.**
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
npm install -g @vibesharingapp/mcp-server
|
|
169
|
+
```
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const index_js_1 = require("@modelcontextprotocol/sdk/server/index.js");
|
|
5
|
+
const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
|
|
6
|
+
const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
|
|
7
|
+
// VibeSharing API client
|
|
8
|
+
class VibesharingClient {
|
|
9
|
+
baseUrl;
|
|
10
|
+
token;
|
|
11
|
+
constructor(baseUrl, token) {
|
|
12
|
+
this.baseUrl = baseUrl.replace(/\/$/, "");
|
|
13
|
+
this.token = token;
|
|
14
|
+
}
|
|
15
|
+
async request(path, options = {}) {
|
|
16
|
+
const url = `${this.baseUrl}${path}`;
|
|
17
|
+
const response = await fetch(url, {
|
|
18
|
+
...options,
|
|
19
|
+
headers: {
|
|
20
|
+
"Content-Type": "application/json",
|
|
21
|
+
Authorization: `Bearer ${this.token}`,
|
|
22
|
+
...options.headers,
|
|
23
|
+
},
|
|
24
|
+
});
|
|
25
|
+
if (!response.ok) {
|
|
26
|
+
const error = await response.json().catch(() => ({ error: response.statusText }));
|
|
27
|
+
throw new Error(error.error || `API error: ${response.status}`);
|
|
28
|
+
}
|
|
29
|
+
return response.json();
|
|
30
|
+
}
|
|
31
|
+
async registerPrototype(params) {
|
|
32
|
+
return this.request("/api/prototypes", {
|
|
33
|
+
method: "POST",
|
|
34
|
+
body: JSON.stringify(params),
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
async listPrototypes() {
|
|
38
|
+
return this.request("/api/prototypes");
|
|
39
|
+
}
|
|
40
|
+
async getPrototype(id) {
|
|
41
|
+
return this.request(`/api/prototypes/${id}`);
|
|
42
|
+
}
|
|
43
|
+
async getFeedback(projectId) {
|
|
44
|
+
return this.request(`/api/feedback?projectId=${projectId}`);
|
|
45
|
+
}
|
|
46
|
+
async syncContext(projectId, content) {
|
|
47
|
+
return this.request("/api/context", {
|
|
48
|
+
method: "POST",
|
|
49
|
+
body: JSON.stringify({ projectId, content }),
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// Get configuration from environment
|
|
54
|
+
const VIBESHARING_URL = process.env.VIBESHARING_URL || "https://vibesharing.app";
|
|
55
|
+
const VIBESHARING_TOKEN = process.env.VIBESHARING_TOKEN;
|
|
56
|
+
if (!VIBESHARING_TOKEN) {
|
|
57
|
+
console.error("Error: VIBESHARING_TOKEN environment variable is required");
|
|
58
|
+
console.error("Get your deploy token from VibeSharing → Account Settings");
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
const client = new VibesharingClient(VIBESHARING_URL, VIBESHARING_TOKEN);
|
|
62
|
+
// Create MCP server
|
|
63
|
+
const server = new index_js_1.Server({
|
|
64
|
+
name: "vibesharing",
|
|
65
|
+
version: "0.1.0",
|
|
66
|
+
}, {
|
|
67
|
+
capabilities: {
|
|
68
|
+
tools: {},
|
|
69
|
+
resources: {},
|
|
70
|
+
},
|
|
71
|
+
});
|
|
72
|
+
// Define available tools
|
|
73
|
+
server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => {
|
|
74
|
+
return {
|
|
75
|
+
tools: [
|
|
76
|
+
{
|
|
77
|
+
name: "register_prototype",
|
|
78
|
+
description: "Register a new prototype on VibeSharing. Use this after deploying a prototype to Vercel, Netlify, or any hosting service. Returns the VibeSharing URL where the team can view and leave feedback.",
|
|
79
|
+
inputSchema: {
|
|
80
|
+
type: "object",
|
|
81
|
+
properties: {
|
|
82
|
+
name: {
|
|
83
|
+
type: "string",
|
|
84
|
+
description: "Name of the prototype (e.g., 'Dashboard Redesign v2')",
|
|
85
|
+
},
|
|
86
|
+
description: {
|
|
87
|
+
type: "string",
|
|
88
|
+
description: "Brief description of what this prototype demonstrates",
|
|
89
|
+
},
|
|
90
|
+
external_url: {
|
|
91
|
+
type: "string",
|
|
92
|
+
description: "URL where the prototype is deployed (e.g., https://my-app.vercel.app)",
|
|
93
|
+
},
|
|
94
|
+
parent_project_id: {
|
|
95
|
+
type: "string",
|
|
96
|
+
description: "Optional: ID of parent project if this is a version/iteration",
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
required: ["name"],
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
name: "list_prototypes",
|
|
104
|
+
description: "List all prototypes in your VibeSharing organization. Shows name, URL, and recent activity.",
|
|
105
|
+
inputSchema: {
|
|
106
|
+
type: "object",
|
|
107
|
+
properties: {},
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
name: "get_feedback",
|
|
112
|
+
description: "Get feedback and comments for a specific prototype. Use this to see what the team thinks about a prototype.",
|
|
113
|
+
inputSchema: {
|
|
114
|
+
type: "object",
|
|
115
|
+
properties: {
|
|
116
|
+
project_id: {
|
|
117
|
+
type: "string",
|
|
118
|
+
description: "The VibeSharing project/prototype ID",
|
|
119
|
+
},
|
|
120
|
+
},
|
|
121
|
+
required: ["project_id"],
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
name: "sync_context",
|
|
126
|
+
description: "Sync your CLAUDE.md or project context to VibeSharing. This helps maintain context across AI sessions and team members.",
|
|
127
|
+
inputSchema: {
|
|
128
|
+
type: "object",
|
|
129
|
+
properties: {
|
|
130
|
+
project_id: {
|
|
131
|
+
type: "string",
|
|
132
|
+
description: "The VibeSharing project/prototype ID to sync context to",
|
|
133
|
+
},
|
|
134
|
+
content: {
|
|
135
|
+
type: "string",
|
|
136
|
+
description: "The context content (typically contents of CLAUDE.md)",
|
|
137
|
+
},
|
|
138
|
+
},
|
|
139
|
+
required: ["project_id", "content"],
|
|
140
|
+
},
|
|
141
|
+
},
|
|
142
|
+
],
|
|
143
|
+
};
|
|
144
|
+
});
|
|
145
|
+
// Handle tool calls
|
|
146
|
+
server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
|
|
147
|
+
const { name, arguments: args } = request.params;
|
|
148
|
+
try {
|
|
149
|
+
switch (name) {
|
|
150
|
+
case "register_prototype": {
|
|
151
|
+
const params = args;
|
|
152
|
+
const result = await client.registerPrototype(params);
|
|
153
|
+
return {
|
|
154
|
+
content: [
|
|
155
|
+
{
|
|
156
|
+
type: "text",
|
|
157
|
+
text: `Prototype registered successfully!\n\nName: ${result.project?.name || params.name}\nVibeSharing URL: ${VIBESHARING_URL}/dashboard/projects/${result.project?.id}\n${params.external_url ? `Live URL: ${params.external_url}` : ""}\n\nYour team can now view and leave feedback on this prototype.`,
|
|
158
|
+
},
|
|
159
|
+
],
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
case "list_prototypes": {
|
|
163
|
+
const result = await client.listPrototypes();
|
|
164
|
+
const prototypes = result.prototypes || [];
|
|
165
|
+
if (prototypes.length === 0) {
|
|
166
|
+
return {
|
|
167
|
+
content: [
|
|
168
|
+
{
|
|
169
|
+
type: "text",
|
|
170
|
+
text: "No prototypes found. Use register_prototype to add your first one!",
|
|
171
|
+
},
|
|
172
|
+
],
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
const list = prototypes
|
|
176
|
+
.map((p) => `- ${p.name}\n ID: ${p.id}\n ${p.external_url ? `URL: ${p.external_url}\n ` : ""}Updated: ${new Date(p.updated_at).toLocaleDateString()}`)
|
|
177
|
+
.join("\n\n");
|
|
178
|
+
return {
|
|
179
|
+
content: [
|
|
180
|
+
{
|
|
181
|
+
type: "text",
|
|
182
|
+
text: `Found ${prototypes.length} prototype(s):\n\n${list}`,
|
|
183
|
+
},
|
|
184
|
+
],
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
case "get_feedback": {
|
|
188
|
+
const { project_id } = args;
|
|
189
|
+
const result = await client.getFeedback(project_id);
|
|
190
|
+
const feedback = result.feedback || [];
|
|
191
|
+
if (feedback.length === 0) {
|
|
192
|
+
return {
|
|
193
|
+
content: [
|
|
194
|
+
{
|
|
195
|
+
type: "text",
|
|
196
|
+
text: "No feedback yet for this prototype. Share it with your team to get their thoughts!",
|
|
197
|
+
},
|
|
198
|
+
],
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
const feedbackList = feedback
|
|
202
|
+
.map((f) => {
|
|
203
|
+
const status = f.resolved_at ? " [Resolved]" : "";
|
|
204
|
+
const replies = f.replies && f.replies.length > 0
|
|
205
|
+
? `\n Replies: ${f.replies.length}`
|
|
206
|
+
: "";
|
|
207
|
+
return `- ${f.user_name}${status}: "${f.content}"\n ${new Date(f.created_at).toLocaleDateString()}${replies}`;
|
|
208
|
+
})
|
|
209
|
+
.join("\n\n");
|
|
210
|
+
return {
|
|
211
|
+
content: [
|
|
212
|
+
{
|
|
213
|
+
type: "text",
|
|
214
|
+
text: `Feedback (${feedback.length} items):\n\n${feedbackList}`,
|
|
215
|
+
},
|
|
216
|
+
],
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
case "sync_context": {
|
|
220
|
+
const { project_id, content } = args;
|
|
221
|
+
await client.syncContext(project_id, content);
|
|
222
|
+
return {
|
|
223
|
+
content: [
|
|
224
|
+
{
|
|
225
|
+
type: "text",
|
|
226
|
+
text: `Context synced successfully to VibeSharing!\n\nProject ID: ${project_id}\nContent length: ${content.length} characters\n\nThis context will be available to team members viewing the prototype.`,
|
|
227
|
+
},
|
|
228
|
+
],
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
default:
|
|
232
|
+
return {
|
|
233
|
+
content: [
|
|
234
|
+
{
|
|
235
|
+
type: "text",
|
|
236
|
+
text: `Unknown tool: ${name}`,
|
|
237
|
+
},
|
|
238
|
+
],
|
|
239
|
+
isError: true,
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
catch (error) {
|
|
244
|
+
return {
|
|
245
|
+
content: [
|
|
246
|
+
{
|
|
247
|
+
type: "text",
|
|
248
|
+
text: `Error: ${error instanceof Error ? error.message : "Unknown error"}`,
|
|
249
|
+
},
|
|
250
|
+
],
|
|
251
|
+
isError: true,
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
});
|
|
255
|
+
// List available resources (prototypes as resources)
|
|
256
|
+
server.setRequestHandler(types_js_1.ListResourcesRequestSchema, async () => {
|
|
257
|
+
try {
|
|
258
|
+
const result = await client.listPrototypes();
|
|
259
|
+
const prototypes = result.prototypes || [];
|
|
260
|
+
return {
|
|
261
|
+
resources: prototypes.map((p) => ({
|
|
262
|
+
uri: `vibesharing://prototype/${p.id}`,
|
|
263
|
+
name: p.name,
|
|
264
|
+
description: p.description || `Prototype: ${p.name}`,
|
|
265
|
+
mimeType: "application/json",
|
|
266
|
+
})),
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
catch {
|
|
270
|
+
return { resources: [] };
|
|
271
|
+
}
|
|
272
|
+
});
|
|
273
|
+
// Read a specific resource
|
|
274
|
+
server.setRequestHandler(types_js_1.ReadResourceRequestSchema, async (request) => {
|
|
275
|
+
const { uri } = request.params;
|
|
276
|
+
const match = uri.match(/^vibesharing:\/\/prototype\/(.+)$/);
|
|
277
|
+
if (!match) {
|
|
278
|
+
throw new Error(`Invalid resource URI: ${uri}`);
|
|
279
|
+
}
|
|
280
|
+
const projectId = match[1];
|
|
281
|
+
const [prototype, feedbackResult] = await Promise.all([
|
|
282
|
+
client.getPrototype(projectId),
|
|
283
|
+
client.getFeedback(projectId),
|
|
284
|
+
]);
|
|
285
|
+
return {
|
|
286
|
+
contents: [
|
|
287
|
+
{
|
|
288
|
+
uri,
|
|
289
|
+
mimeType: "application/json",
|
|
290
|
+
text: JSON.stringify({
|
|
291
|
+
prototype: prototype.project,
|
|
292
|
+
feedback: feedbackResult.feedback,
|
|
293
|
+
}, null, 2),
|
|
294
|
+
},
|
|
295
|
+
],
|
|
296
|
+
};
|
|
297
|
+
});
|
|
298
|
+
// Start the server
|
|
299
|
+
async function main() {
|
|
300
|
+
const transport = new stdio_js_1.StdioServerTransport();
|
|
301
|
+
await server.connect(transport);
|
|
302
|
+
console.error("VibeSharing MCP server running");
|
|
303
|
+
}
|
|
304
|
+
main().catch((error) => {
|
|
305
|
+
console.error("Fatal error:", error);
|
|
306
|
+
process.exit(1);
|
|
307
|
+
});
|
package/package.json
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@vibesharingapp/mcp-server",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "MCP server for VibeSharing - register prototypes and get feedback directly from Claude Code",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"bin": {
|
|
8
|
+
"vibesharing-mcp": "./dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist",
|
|
12
|
+
"README.md"
|
|
13
|
+
],
|
|
14
|
+
"scripts": {
|
|
15
|
+
"build": "tsc",
|
|
16
|
+
"dev": "tsc --watch",
|
|
17
|
+
"start": "node dist/index.js",
|
|
18
|
+
"prepublishOnly": "npm run build"
|
|
19
|
+
},
|
|
20
|
+
"keywords": [
|
|
21
|
+
"mcp",
|
|
22
|
+
"model-context-protocol",
|
|
23
|
+
"claude",
|
|
24
|
+
"claude-code",
|
|
25
|
+
"vibesharing",
|
|
26
|
+
"prototypes",
|
|
27
|
+
"feedback",
|
|
28
|
+
"collaboration",
|
|
29
|
+
"ai",
|
|
30
|
+
"cursor",
|
|
31
|
+
"vibe-coding"
|
|
32
|
+
],
|
|
33
|
+
"author": "VibeSharing <hello@vibesharing.app>",
|
|
34
|
+
"license": "MIT",
|
|
35
|
+
"repository": {
|
|
36
|
+
"type": "git",
|
|
37
|
+
"url": "git+https://github.com/erova/vibesharing.git",
|
|
38
|
+
"directory": "mcp-server"
|
|
39
|
+
},
|
|
40
|
+
"bugs": {
|
|
41
|
+
"url": "https://github.com/erova/vibesharing/issues"
|
|
42
|
+
},
|
|
43
|
+
"homepage": "https://vibesharing.app",
|
|
44
|
+
"engines": {
|
|
45
|
+
"node": ">=18.0.0"
|
|
46
|
+
},
|
|
47
|
+
"dependencies": {
|
|
48
|
+
"@modelcontextprotocol/sdk": "^1.0.0"
|
|
49
|
+
},
|
|
50
|
+
"devDependencies": {
|
|
51
|
+
"@types/node": "^20.0.0",
|
|
52
|
+
"typescript": "^5.0.0"
|
|
53
|
+
}
|
|
54
|
+
}
|