vibekit-mcp 0.1.0 → 0.3.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.
Files changed (3) hide show
  1. package/README.md +71 -38
  2. package/dist/index.js +286 -173
  3. package/package.json +10 -27
package/README.md CHANGED
@@ -1,68 +1,101 @@
1
1
  # vibekit-mcp
2
2
 
3
- MCP (Model Context Protocol) server for [VibeKit](https://vibekit.bot) — use AI coding tasks as native tools in Claude Desktop, Cursor, and other MCP-compatible clients.
3
+ MCP server for [VibeKit](https://vibekit.bot) — manage AI-powered apps as native tools in Claude Desktop, Cursor, Windsurf, and any MCP-compatible client.
4
4
 
5
- ## Installation
5
+ ## Setup
6
6
 
7
- ```bash
8
- npm install -g vibekit-mcp
9
- ```
7
+ ### Claude Desktop
10
8
 
11
- ## Setup
9
+ Add to your `claude_desktop_config.json`:
12
10
 
13
- 1. Get a VibeKit API key:
14
- - Open [@the_vibe_kit_bot](https://t.me/the_vibe_kit_bot) in Telegram
15
- - Send `/apikey` to generate your key
11
+ ```json
12
+ {
13
+ "mcpServers": {
14
+ "vibekit": {
15
+ "command": "npx",
16
+ "args": ["-y", "vibekit-mcp"],
17
+ "env": {
18
+ "VIBEKIT_API_KEY": "vk_your_key_here"
19
+ }
20
+ }
21
+ }
22
+ }
23
+ ```
24
+
25
+ ### Cursor
16
26
 
17
- 2. Add to your Claude Desktop config (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS):
27
+ Add to `.cursor/mcp.json` in your project:
18
28
 
19
29
  ```json
20
30
  {
21
31
  "mcpServers": {
22
32
  "vibekit": {
23
- "command": "vibekit-mcp",
33
+ "command": "npx",
34
+ "args": ["-y", "vibekit-mcp"],
24
35
  "env": {
25
- "VIBEKIT_API_KEY": "vk_your_api_key_here"
36
+ "VIBEKIT_API_KEY": "vk_your_key_here"
26
37
  }
27
38
  }
28
39
  }
29
40
  }
30
41
  ```
31
42
 
32
- 3. Restart Claude Desktop
43
+ Get your API key at [app.vibekit.bot/settings](https://app.vibekit.bot/settings).
33
44
 
34
45
  ## Available Tools
35
46
 
36
- | Tool | Description |
37
- |------|-------------|
38
- | `vibekit_submit_task` | Submit a coding task. AI writes code, commits to GitHub, deploys to Vercel. |
39
- | `vibekit_get_task` | Get status/result of a task |
40
- | `vibekit_list_tasks` | List recent tasks |
41
- | `vibekit_wait_for_task` | Wait for a task to complete (polls until done) |
42
- | `vibekit_create_schedule` | Create a recurring scheduled task |
43
- | `vibekit_list_schedules` | List all scheduled tasks |
44
- | `vibekit_delete_schedule` | Delete a scheduled task |
45
- | `vibekit_account` | Get account info (plan, credits, usage) |
47
+ ### Apps
48
+ - `vibekit_list_apps` — List all your hosted apps
49
+ - `vibekit_app_info` Get app details
50
+ - `vibekit_start` / `vibekit_stop` / `vibekit_restart` Container control
46
51
 
47
- ## Example Usage
52
+ ### AI Agent
53
+ - `vibekit_chat` — Send a message to your app's AI agent
54
+ - `vibekit_agent_status` — Agent status and model info
48
55
 
49
- Once configured, you can ask Claude things like:
56
+ ### Deploy
57
+ - `vibekit_deploy` — Trigger redeploy
58
+ - `vibekit_deploys` — Deploy history
59
+ - `vibekit_rollback` — Rollback to previous deploy
50
60
 
51
- - "Use VibeKit to build me a landing page for my startup"
52
- - "Submit a task to VibeKit: Add a contact form to my website"
53
- - "Check my VibeKit account balance"
54
- - "Create a weekly schedule to improve SEO on my repo"
61
+ ### Logs & Files
62
+ - `vibekit_logs` View app logs
63
+ - `vibekit_files` Browse workspace files
55
64
 
56
- ## Environment Variables
65
+ ### Environment
66
+ - `vibekit_env_list` / `vibekit_env_set` / `vibekit_env_delete` — Manage env vars
57
67
 
58
- | Variable | Description | Default |
59
- |----------|-------------|---------|
60
- | `VIBEKIT_API_KEY` | Your VibeKit API key (required) | — |
61
- | `VIBEKIT_API_URL` | API base URL | `https://vibekit.bot/api/v1` |
68
+ ### Database
69
+ - `vibekit_db_status` — Database stats
70
+ - `vibekit_db_schema` Tables, columns, types
71
+ - `vibekit_db_query` Run read-only SQL
72
+ - `vibekit_db_table` — Browse table data
73
+
74
+ ### Domain & QA
75
+ - `vibekit_set_domain` — Set custom domain
76
+ - `vibekit_qa` — Run QA audit
77
+
78
+ ### Tasks
79
+ - `vibekit_submit_task` — Submit a headless coding task
80
+ - `vibekit_task_status` — Check task status
81
+ - `vibekit_account` — Plan, balance, usage
82
+
83
+ ## Example Usage
84
+
85
+ Once connected, you can say things like:
86
+
87
+ - "List my VibeKit apps"
88
+ - "Show me the logs for my surf app"
89
+ - "Tell my agent to add a dark mode toggle"
90
+ - "Run a SQL query on my database"
91
+ - "Deploy my app"
62
92
 
63
93
  ## Links
64
94
 
65
- - [VibeKit Website](https://vibekit.bot)
66
- - [API Documentation](https://vibekit.bot/SKILL.md)
67
- - [Get API Key](https://t.me/the_vibe_kit_bot)
68
- - [GitHub](https://github.com/609NFT/vibekit)
95
+ - Website: https://vibekit.bot
96
+ - Dashboard: https://app.vibekit.bot
97
+ - CLI: https://www.npmjs.com/package/vibekit-cli
98
+
99
+ ## License
100
+
101
+ MIT
package/dist/index.js CHANGED
@@ -7,267 +7,380 @@ const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
7
7
  const API_BASE = process.env.VIBEKIT_API_URL || "https://vibekit.bot/api/v1";
8
8
  const API_KEY = process.env.VIBEKIT_API_KEY || "";
9
9
  if (!API_KEY) {
10
- console.error("Error: VIBEKIT_API_KEY environment variable is required");
11
- console.error("Get one at https://t.me/the_vibe_kit_bot with /apikey command");
10
+ console.error("VIBEKIT_API_KEY is required. Get one at https://app.vibekit.bot/settings");
12
11
  process.exit(1);
13
12
  }
14
- // API helper
15
- async function apiRequest(method, path, body) {
13
+ // ── API Helper ──────────────────────────────────────────────────────────────
14
+ async function api(method, path, body) {
16
15
  try {
17
16
  const res = await fetch(`${API_BASE}${path}`, {
18
17
  method,
19
- headers: {
20
- "Authorization": `Bearer ${API_KEY}`,
21
- "Content-Type": "application/json",
22
- },
18
+ headers: { Authorization: `Bearer ${API_KEY}`, "Content-Type": "application/json" },
23
19
  body: body ? JSON.stringify(body) : undefined,
24
20
  });
21
+ if (res.status === 204)
22
+ return { ok: true, data: {} };
25
23
  const data = await res.json();
26
- if (!res.ok) {
24
+ if (!res.ok)
27
25
  return { ok: false, error: data.error || `HTTP ${res.status}` };
28
- }
29
26
  return { ok: true, data };
30
27
  }
31
28
  catch (err) {
32
- return { ok: false, error: err instanceof Error ? err.message : "Unknown error" };
29
+ return { ok: false, error: err.message || "Request failed" };
33
30
  }
34
31
  }
35
- // Tool definitions
32
+ // ── Tool Definitions ────────────────────────────────────────────────────────
36
33
  const tools = [
34
+ // Account
37
35
  {
38
- name: "vibekit_submit_task",
39
- description: "Submit a coding task to VibeKit. The AI will write code, commit to GitHub, and deploy to Vercel. Returns a task ID to poll for results.",
36
+ name: "vibekit_account",
37
+ description: "Get account info: plan, balance, session usage.",
38
+ inputSchema: { type: "object", properties: {} },
39
+ },
40
+ // Apps
41
+ {
42
+ name: "vibekit_list_apps",
43
+ description: "List all your hosted apps with status and URLs.",
44
+ inputSchema: { type: "object", properties: {} },
45
+ },
46
+ {
47
+ name: "vibekit_app_info",
48
+ description: "Get details about a specific app.",
49
+ inputSchema: {
50
+ type: "object",
51
+ properties: { slug: { type: "string", description: "App subdomain slug or full UUID" } },
52
+ required: ["slug"],
53
+ },
54
+ },
55
+ // Agent Chat
56
+ {
57
+ name: "vibekit_chat",
58
+ description: "Send a message to an app's AI agent. The agent can modify code, deploy, fix bugs, add features.",
40
59
  inputSchema: {
41
60
  type: "object",
42
61
  properties: {
43
- task: {
44
- type: "string",
45
- description: "What you want built or changed. Be specific about features, design, and behavior.",
46
- },
47
- repo: {
48
- type: "string",
49
- description: "GitHub repo in format 'owner/repo'. Optional — will use user's current repo if not specified.",
50
- },
51
- branch: {
52
- type: "string",
53
- description: "Git branch to work on. Default: main",
54
- },
55
- deploy: {
56
- type: "boolean",
57
- description: "Auto-deploy to Vercel when done. Default: true",
58
- },
59
- callbackUrl: {
60
- type: "string",
61
- description: "Webhook URL to receive task completion notification.",
62
- },
62
+ slug: { type: "string", description: "App subdomain slug" },
63
+ message: { type: "string", description: "Message for the AI agent" },
63
64
  },
64
- required: ["task"],
65
+ required: ["slug", "message"],
66
+ },
67
+ },
68
+ {
69
+ name: "vibekit_agent_status",
70
+ description: "Get the AI agent's status and model info for an app.",
71
+ inputSchema: {
72
+ type: "object",
73
+ properties: { slug: { type: "string", description: "App subdomain slug" } },
74
+ required: ["slug"],
75
+ },
76
+ },
77
+ // Deploy
78
+ {
79
+ name: "vibekit_deploy",
80
+ description: "Trigger a redeploy for an app.",
81
+ inputSchema: {
82
+ type: "object",
83
+ properties: { slug: { type: "string", description: "App subdomain slug" } },
84
+ required: ["slug"],
65
85
  },
66
86
  },
67
87
  {
68
- name: "vibekit_get_task",
69
- description: "Get the status and result of a previously submitted task.",
88
+ name: "vibekit_deploys",
89
+ description: "List deploy history for an app.",
90
+ inputSchema: {
91
+ type: "object",
92
+ properties: { slug: { type: "string", description: "App subdomain slug" } },
93
+ required: ["slug"],
94
+ },
95
+ },
96
+ {
97
+ name: "vibekit_rollback",
98
+ description: "Rollback an app to a previous deploy.",
70
99
  inputSchema: {
71
100
  type: "object",
72
101
  properties: {
73
- taskId: {
74
- type: "string",
75
- description: "The task ID returned from vibekit_submit_task",
76
- },
102
+ slug: { type: "string", description: "App subdomain slug" },
103
+ deployId: { type: "string", description: "Deploy ID to rollback to" },
77
104
  },
78
- required: ["taskId"],
105
+ required: ["slug", "deployId"],
79
106
  },
80
107
  },
108
+ // Logs
81
109
  {
82
- name: "vibekit_list_tasks",
83
- description: "List recent tasks submitted to VibeKit.",
110
+ name: "vibekit_logs",
111
+ description: "Get recent logs for an app.",
84
112
  inputSchema: {
85
113
  type: "object",
86
114
  properties: {
87
- limit: {
88
- type: "number",
89
- description: "Max number of tasks to return. Default: 10",
90
- },
91
- status: {
92
- type: "string",
93
- enum: ["pending", "running", "completed", "failed"],
94
- description: "Filter by status",
95
- },
115
+ slug: { type: "string", description: "App subdomain slug" },
116
+ lines: { type: "number", description: "Number of lines (default 50)" },
96
117
  },
118
+ required: ["slug"],
97
119
  },
98
120
  },
121
+ // Container control
99
122
  {
100
- name: "vibekit_wait_for_task",
101
- description: "Wait for a task to complete and return the result. Polls every 5 seconds up to the timeout.",
123
+ name: "vibekit_start",
124
+ description: "Start an app's container.",
125
+ inputSchema: {
126
+ type: "object",
127
+ properties: { slug: { type: "string", description: "App subdomain slug" } },
128
+ required: ["slug"],
129
+ },
130
+ },
131
+ {
132
+ name: "vibekit_stop",
133
+ description: "Stop an app's container.",
134
+ inputSchema: {
135
+ type: "object",
136
+ properties: { slug: { type: "string", description: "App subdomain slug" } },
137
+ required: ["slug"],
138
+ },
139
+ },
140
+ {
141
+ name: "vibekit_restart",
142
+ description: "Restart an app's container.",
143
+ inputSchema: {
144
+ type: "object",
145
+ properties: { slug: { type: "string", description: "App subdomain slug" } },
146
+ required: ["slug"],
147
+ },
148
+ },
149
+ // Env vars
150
+ {
151
+ name: "vibekit_env_list",
152
+ description: "List environment variables for an app.",
102
153
  inputSchema: {
103
154
  type: "object",
104
155
  properties: {
105
- taskId: {
106
- type: "string",
107
- description: "The task ID to wait for",
108
- },
109
- timeoutSeconds: {
110
- type: "number",
111
- description: "Max seconds to wait. Default: 300 (5 minutes)",
112
- },
156
+ slug: { type: "string", description: "App subdomain slug" },
157
+ reveal: { type: "boolean", description: "Show real values instead of masked" },
113
158
  },
114
- required: ["taskId"],
159
+ required: ["slug"],
115
160
  },
116
161
  },
117
162
  {
118
- name: "vibekit_create_schedule",
119
- description: "Create a scheduled recurring task. The AI will run this task automatically on the specified schedule.",
163
+ name: "vibekit_env_set",
164
+ description: "Set an environment variable.",
120
165
  inputSchema: {
121
166
  type: "object",
122
167
  properties: {
123
- task: {
124
- type: "string",
125
- description: "What to do on each run. e.g., 'Improve SEO and page speed'",
126
- },
127
- repo: {
128
- type: "string",
129
- description: "GitHub repo in format 'owner/repo'",
130
- },
131
- cron: {
132
- type: "string",
133
- description: "Cron expression. e.g., '0 9 * * 1' for every Monday at 9am UTC",
134
- },
135
- name: {
136
- type: "string",
137
- description: "Friendly name for the schedule",
138
- },
168
+ slug: { type: "string", description: "App subdomain slug" },
169
+ key: { type: "string", description: "Variable name" },
170
+ value: { type: "string", description: "Variable value" },
139
171
  },
140
- required: ["task", "repo", "cron"],
172
+ required: ["slug", "key", "value"],
141
173
  },
142
174
  },
143
175
  {
144
- name: "vibekit_list_schedules",
145
- description: "List all scheduled tasks.",
176
+ name: "vibekit_env_delete",
177
+ description: "Delete an environment variable.",
146
178
  inputSchema: {
147
179
  type: "object",
148
- properties: {},
180
+ properties: {
181
+ slug: { type: "string", description: "App subdomain slug" },
182
+ key: { type: "string", description: "Variable name to delete" },
183
+ },
184
+ required: ["slug", "key"],
185
+ },
186
+ },
187
+ // Database
188
+ {
189
+ name: "vibekit_db_status",
190
+ description: "Get database status for an app (tables, size, connections).",
191
+ inputSchema: {
192
+ type: "object",
193
+ properties: { slug: { type: "string", description: "App subdomain slug" } },
194
+ required: ["slug"],
149
195
  },
150
196
  },
151
197
  {
152
- name: "vibekit_delete_schedule",
153
- description: "Delete a scheduled task.",
198
+ name: "vibekit_db_schema",
199
+ description: "Get database schema — tables, columns, types, foreign keys.",
200
+ inputSchema: {
201
+ type: "object",
202
+ properties: { slug: { type: "string", description: "App subdomain slug" } },
203
+ required: ["slug"],
204
+ },
205
+ },
206
+ {
207
+ name: "vibekit_db_query",
208
+ description: "Run a read-only SQL query against an app's database.",
154
209
  inputSchema: {
155
210
  type: "object",
156
211
  properties: {
157
- scheduleId: {
158
- type: "string",
159
- description: "The schedule ID to delete",
160
- },
212
+ slug: { type: "string", description: "App subdomain slug" },
213
+ sql: { type: "string", description: "SQL query (SELECT only)" },
161
214
  },
162
- required: ["scheduleId"],
215
+ required: ["slug", "sql"],
163
216
  },
164
217
  },
165
218
  {
166
- name: "vibekit_account",
167
- description: "Get VibeKit account info including plan, credits balance, and usage.",
219
+ name: "vibekit_db_table",
220
+ description: "Browse data in a specific table.",
221
+ inputSchema: {
222
+ type: "object",
223
+ properties: {
224
+ slug: { type: "string", description: "App subdomain slug" },
225
+ table: { type: "string", description: "Table name" },
226
+ limit: { type: "number", description: "Max rows (default 20)" },
227
+ },
228
+ required: ["slug", "table"],
229
+ },
230
+ },
231
+ // Files
232
+ {
233
+ name: "vibekit_files",
234
+ description: "Browse workspace files for an app.",
235
+ inputSchema: {
236
+ type: "object",
237
+ properties: {
238
+ slug: { type: "string", description: "App subdomain slug" },
239
+ path: { type: "string", description: "Directory path (default: root)" },
240
+ },
241
+ required: ["slug"],
242
+ },
243
+ },
244
+ // QA
245
+ {
246
+ name: "vibekit_qa",
247
+ description: "Run a QA audit on an app — checks for bugs, accessibility, performance issues.",
248
+ inputSchema: {
249
+ type: "object",
250
+ properties: { slug: { type: "string", description: "App subdomain slug" } },
251
+ required: ["slug"],
252
+ },
253
+ },
254
+ // Domain
255
+ {
256
+ name: "vibekit_set_domain",
257
+ description: "Set a custom domain for an app.",
168
258
  inputSchema: {
169
259
  type: "object",
170
- properties: {},
260
+ properties: {
261
+ slug: { type: "string", description: "App subdomain slug" },
262
+ domain: { type: "string", description: "Custom domain (e.g. myapp.com)" },
263
+ },
264
+ required: ["slug", "domain"],
265
+ },
266
+ },
267
+ // Tasks (headless API)
268
+ {
269
+ name: "vibekit_submit_task",
270
+ description: "Submit a coding task. An AI agent will build code and deploy it.",
271
+ inputSchema: {
272
+ type: "object",
273
+ properties: {
274
+ task: { type: "string", description: "What to build or change" },
275
+ repo: { type: "string", description: "GitHub repo (owner/repo)" },
276
+ branch: { type: "string", description: "Branch (default: main)" },
277
+ },
278
+ required: ["task"],
279
+ },
280
+ },
281
+ {
282
+ name: "vibekit_task_status",
283
+ description: "Check status of a submitted task.",
284
+ inputSchema: {
285
+ type: "object",
286
+ properties: { taskId: { type: "string", description: "Task ID" } },
287
+ required: ["taskId"],
171
288
  },
172
289
  },
173
290
  ];
174
- // Tool handlers
291
+ // ── Tool Handlers ───────────────────────────────────────────────────────────
175
292
  async function handleTool(name, args) {
176
293
  let result;
294
+ const s = args.slug;
295
+ const h = `/hosting/app/${s}`;
177
296
  switch (name) {
178
- case "vibekit_submit_task":
179
- result = await apiRequest("POST", "/task", {
180
- task: args.task,
181
- repo: args.repo,
182
- branch: args.branch,
183
- deploy: args.deploy ?? true,
184
- callbackUrl: args.callbackUrl,
185
- });
297
+ case "vibekit_account":
298
+ result = await api("GET", "/account");
186
299
  break;
187
- case "vibekit_get_task":
188
- result = await apiRequest("GET", `/task/${args.taskId}`);
300
+ case "vibekit_list_apps":
301
+ result = await api("GET", "/hosting/apps");
189
302
  break;
190
- case "vibekit_list_tasks": {
191
- let path = "/tasks";
192
- const params = new URLSearchParams();
193
- if (args.limit)
194
- params.set("limit", String(args.limit));
195
- if (args.status)
196
- params.set("status", String(args.status));
197
- if (params.toString())
198
- path += `?${params.toString()}`;
199
- result = await apiRequest("GET", path);
303
+ case "vibekit_app_info":
304
+ result = await api("GET", h);
200
305
  break;
201
- }
202
- case "vibekit_wait_for_task": {
203
- const taskId = args.taskId;
204
- const timeout = (args.timeoutSeconds || 300) * 1000;
205
- const start = Date.now();
206
- while (Date.now() - start < timeout) {
207
- result = await apiRequest("GET", `/task/${taskId}`);
208
- if (!result.ok)
209
- break;
210
- const task = result.data;
211
- if (task.status === "completed" || task.status === "failed") {
212
- break;
213
- }
214
- await new Promise((r) => setTimeout(r, 5000));
215
- }
216
- if (!result) {
217
- result = { ok: false, error: "Timeout waiting for task" };
218
- }
306
+ case "vibekit_chat":
307
+ result = await api("POST", `${h}/agent`, { message: args.message });
219
308
  break;
220
- }
221
- case "vibekit_create_schedule":
222
- result = await apiRequest("POST", "/schedule", {
223
- task: args.task,
224
- repo: args.repo,
225
- cron: args.cron,
226
- name: args.name,
227
- });
309
+ case "vibekit_agent_status":
310
+ result = await api("GET", `${h}/agent/status`);
228
311
  break;
229
- case "vibekit_list_schedules":
230
- result = await apiRequest("GET", "/schedules");
312
+ case "vibekit_deploy":
313
+ result = await api("POST", `${h}/redeploy`);
231
314
  break;
232
- case "vibekit_delete_schedule":
233
- result = await apiRequest("DELETE", `/schedule/${args.scheduleId}`);
315
+ case "vibekit_deploys":
316
+ result = await api("GET", `${h}/deploys`);
234
317
  break;
235
- case "vibekit_account":
236
- result = await apiRequest("GET", "/account");
318
+ case "vibekit_rollback":
319
+ result = await api("POST", `${h}/deploys/${args.deployId}/rollback`);
320
+ break;
321
+ case "vibekit_logs":
322
+ result = await api("GET", `${h}/logs?lines=${args.lines || 50}`);
323
+ break;
324
+ case "vibekit_start":
325
+ result = await api("POST", `${h}/start`);
326
+ break;
327
+ case "vibekit_stop":
328
+ result = await api("POST", `${h}/stop`);
329
+ break;
330
+ case "vibekit_restart":
331
+ result = await api("POST", `${h}/restart`);
332
+ break;
333
+ case "vibekit_env_list":
334
+ result = await api("GET", `${h}/env${args.reveal ? '?reveal=true' : ''}`);
335
+ break;
336
+ case "vibekit_env_set":
337
+ result = await api("POST", `${h}/env`, { vars: { [args.key]: args.value } });
338
+ break;
339
+ case "vibekit_env_delete":
340
+ result = await api("DELETE", `${h}/env/${args.key}`);
237
341
  break;
238
- default:
239
- result = { ok: false, error: `Unknown tool: ${name}` };
342
+ case "vibekit_db_status":
343
+ result = await api("GET", `${h}/database`);
344
+ break;
345
+ case "vibekit_db_schema":
346
+ result = await api("GET", `${h}/database/schema`);
347
+ break;
348
+ case "vibekit_db_query":
349
+ result = await api("POST", `${h}/database/query`, { sql: args.sql });
350
+ break;
351
+ case "vibekit_db_table":
352
+ result = await api("GET", `${h}/database/tables/${args.table}?limit=${args.limit || 20}`);
353
+ break;
354
+ case "vibekit_files":
355
+ result = await api("GET", `${h}/agent/files${args.path ? `?path=${encodeURIComponent(args.path)}` : ''}`);
356
+ break;
357
+ case "vibekit_qa":
358
+ result = await api("POST", `${h}/qa`);
359
+ break;
360
+ case "vibekit_set_domain":
361
+ result = await api("POST", `${h}/domain`, { domain: args.domain });
362
+ break;
363
+ case "vibekit_submit_task":
364
+ result = await api("POST", "/task", { prompt: args.task, repo: args.repo, branch: args.branch });
365
+ break;
366
+ case "vibekit_task_status":
367
+ result = await api("GET", `/task/${args.taskId}`);
368
+ break;
369
+ default: result = { ok: false, error: `Unknown tool: ${name}` };
240
370
  }
241
- const text = result.ok
242
- ? JSON.stringify(result.data, null, 2)
243
- : `Error: ${result.error}`;
371
+ const text = result.ok ? JSON.stringify(result.data, null, 2) : `Error: ${result.error}`;
244
372
  return { content: [{ type: "text", text }] };
245
373
  }
246
- // Main server setup
247
- const server = new index_js_1.Server({
248
- name: "vibekit-mcp",
249
- version: "0.1.0",
250
- }, {
251
- capabilities: {
252
- tools: {},
253
- },
254
- });
255
- // Handle tool listing
256
- server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => ({
257
- tools,
258
- }));
259
- // Handle tool calls
374
+ // ── Server ──────────────────────────────────────────────────────────────────
375
+ const server = new index_js_1.Server({ name: "vibekit-mcp", version: "0.3.0" }, { capabilities: { tools: {} } });
376
+ server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => ({ tools }));
260
377
  server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
261
378
  const { name, arguments: args } = request.params;
262
379
  return handleTool(name, (args || {}));
263
380
  });
264
- // Start server
265
381
  async function main() {
266
382
  const transport = new stdio_js_1.StdioServerTransport();
267
383
  await server.connect(transport);
268
384
  console.error("VibeKit MCP server running on stdio");
269
385
  }
270
- main().catch((err) => {
271
- console.error("Fatal error:", err);
272
- process.exit(1);
273
- });
386
+ main().catch((err) => { console.error("Fatal:", err); process.exit(1); });
package/package.json CHANGED
@@ -1,33 +1,16 @@
1
1
  {
2
2
  "name": "vibekit-mcp",
3
- "version": "0.1.0",
4
- "description": "MCP server for VibeKit — use AI coding tasks as native tools in Claude Desktop, Cursor, etc.",
3
+ "version": "0.3.0",
4
+ "description": "MCP server for VibeKit — manage AI-powered apps as tools in Claude Desktop, Cursor, Windsurf, etc.",
5
5
  "main": "dist/index.js",
6
- "bin": {
7
- "vibekit-mcp": "./dist/index.js"
8
- },
9
- "files": [
10
- "dist/",
11
- "README.md"
12
- ],
13
- "scripts": {
14
- "build": "tsc",
15
- "prepublishOnly": "npm run build"
16
- },
17
- "keywords": ["mcp", "vibekit", "claude", "ai", "coding", "tools", "anthropic"],
18
- "author": "609.sol",
6
+ "bin": { "vibekit-mcp": "./dist/index.js" },
7
+ "files": ["dist/", "README.md"],
8
+ "scripts": { "build": "tsc", "prepublishOnly": "npm run build" },
9
+ "keywords": ["mcp", "vibekit", "claude", "cursor", "ai", "agent", "deploy", "model-context-protocol"],
10
+ "author": "VibeKit",
19
11
  "license": "MIT",
20
- "repository": {
21
- "type": "git",
22
- "url": "https://github.com/609NFT/vibekit.git",
23
- "directory": "packages/mcp-server"
24
- },
25
12
  "homepage": "https://vibekit.bot",
26
- "dependencies": {
27
- "@modelcontextprotocol/sdk": "^1.0.0"
28
- },
29
- "devDependencies": {
30
- "@types/node": "^20.0.0",
31
- "typescript": "^5.0.0"
32
- }
13
+ "repository": { "type": "git", "url": "https://github.com/vibekit-apps/vibekit-mcp" },
14
+ "dependencies": { "@modelcontextprotocol/sdk": "^1.0.0" },
15
+ "devDependencies": { "typescript": "^5.0.0", "@types/node": "^22.0.0" }
33
16
  }