vibekit-mcp 0.4.0 → 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 +405 -254
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -12,7 +12,7 @@ let skillsCache = null;
|
|
|
12
12
|
const CACHE_TTL = 5 * 60 * 1000;
|
|
13
13
|
if (!API_KEY) {
|
|
14
14
|
console.error("Error: VIBEKIT_API_KEY environment variable is required");
|
|
15
|
-
console.error("Get one at https://t.me/the_vibe_kit_bot with /apikey
|
|
15
|
+
console.error("Get one at https://vibekit.bot or https://t.me/the_vibe_kit_bot with /apikey");
|
|
16
16
|
process.exit(1);
|
|
17
17
|
}
|
|
18
18
|
// API helper
|
|
@@ -38,25 +38,19 @@ async function apiRequest(method, path, body) {
|
|
|
38
38
|
}
|
|
39
39
|
// Tool definitions
|
|
40
40
|
const tools = [
|
|
41
|
-
// Hosting & Apps
|
|
41
|
+
// ── Hosting & Apps ──────────────────────────────────────────────────────────
|
|
42
42
|
{
|
|
43
43
|
name: "vibekit_list_apps",
|
|
44
44
|
description: "List all hosted apps in your VibeKit account.",
|
|
45
|
-
inputSchema: {
|
|
46
|
-
type: "object",
|
|
47
|
-
properties: {},
|
|
48
|
-
},
|
|
45
|
+
inputSchema: { type: "object", properties: {} },
|
|
49
46
|
},
|
|
50
47
|
{
|
|
51
48
|
name: "vibekit_get_app",
|
|
52
|
-
description: "Get details about a specific hosted app.",
|
|
49
|
+
description: "Get details about a specific hosted app including status, URL, plan, and usage.",
|
|
53
50
|
inputSchema: {
|
|
54
51
|
type: "object",
|
|
55
52
|
properties: {
|
|
56
|
-
appId: {
|
|
57
|
-
type: "string",
|
|
58
|
-
description: "The app ID to get details for",
|
|
59
|
-
},
|
|
53
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
60
54
|
},
|
|
61
55
|
required: ["appId"],
|
|
62
56
|
},
|
|
@@ -67,14 +61,8 @@ const tools = [
|
|
|
67
61
|
inputSchema: {
|
|
68
62
|
type: "object",
|
|
69
63
|
properties: {
|
|
70
|
-
template: {
|
|
71
|
-
|
|
72
|
-
description: "Template to use (e.g., 'nextjs', 'react', 'express')",
|
|
73
|
-
},
|
|
74
|
-
subdomain: {
|
|
75
|
-
type: "string",
|
|
76
|
-
description: "Subdomain for the app (will be deployed to {subdomain}.vibekit.bot)",
|
|
77
|
-
},
|
|
64
|
+
template: { type: "string", description: "Template to use (e.g., 'nextjs', 'react', 'express', 'static')" },
|
|
65
|
+
subdomain: { type: "string", description: "Subdomain — app will be at {subdomain}.vibekit.bot" },
|
|
78
66
|
},
|
|
79
67
|
required: ["template", "subdomain"],
|
|
80
68
|
},
|
|
@@ -85,28 +73,42 @@ const tools = [
|
|
|
85
73
|
inputSchema: {
|
|
86
74
|
type: "object",
|
|
87
75
|
properties: {
|
|
88
|
-
repo: {
|
|
89
|
-
|
|
90
|
-
description: "GitHub repo in format 'owner/repo'",
|
|
91
|
-
},
|
|
92
|
-
subdomain: {
|
|
93
|
-
type: "string",
|
|
94
|
-
description: "Subdomain for the app (will be deployed to {subdomain}.vibekit.bot)",
|
|
95
|
-
},
|
|
76
|
+
repo: { type: "string", description: "GitHub repo in format 'owner/repo'" },
|
|
77
|
+
subdomain: { type: "string", description: "Subdomain — app will be at {subdomain}.vibekit.bot" },
|
|
96
78
|
},
|
|
97
79
|
required: ["repo", "subdomain"],
|
|
98
80
|
},
|
|
99
81
|
},
|
|
100
82
|
{
|
|
101
83
|
name: "vibekit_redeploy",
|
|
102
|
-
description: "Redeploy an existing hosted app to
|
|
84
|
+
description: "Redeploy an existing hosted app to pick up the latest code changes.",
|
|
103
85
|
inputSchema: {
|
|
104
86
|
type: "object",
|
|
105
87
|
properties: {
|
|
106
|
-
appId: {
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
88
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
89
|
+
},
|
|
90
|
+
required: ["appId"],
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
name: "vibekit_rollback",
|
|
95
|
+
description: "Roll back an app to a previous deployment snapshot.",
|
|
96
|
+
inputSchema: {
|
|
97
|
+
type: "object",
|
|
98
|
+
properties: {
|
|
99
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
100
|
+
deployId: { type: "string", description: "Deployment ID to roll back to. Use vibekit_deploy_history to list available deployments." },
|
|
101
|
+
},
|
|
102
|
+
required: ["appId", "deployId"],
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
name: "vibekit_deploy_history",
|
|
107
|
+
description: "List deployment history for an app so you can roll back to a previous snapshot.",
|
|
108
|
+
inputSchema: {
|
|
109
|
+
type: "object",
|
|
110
|
+
properties: {
|
|
111
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
110
112
|
},
|
|
111
113
|
required: ["appId"],
|
|
112
114
|
},
|
|
@@ -117,28 +119,19 @@ const tools = [
|
|
|
117
119
|
inputSchema: {
|
|
118
120
|
type: "object",
|
|
119
121
|
properties: {
|
|
120
|
-
appId: {
|
|
121
|
-
|
|
122
|
-
description: "The app ID to get logs for",
|
|
123
|
-
},
|
|
124
|
-
lines: {
|
|
125
|
-
type: "number",
|
|
126
|
-
description: "Number of log lines to retrieve (default: 100)",
|
|
127
|
-
},
|
|
122
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
123
|
+
lines: { type: "number", description: "Number of log lines to retrieve (default: 100)" },
|
|
128
124
|
},
|
|
129
125
|
required: ["appId"],
|
|
130
126
|
},
|
|
131
127
|
},
|
|
132
128
|
{
|
|
133
129
|
name: "vibekit_restart_app",
|
|
134
|
-
description: "Restart a hosted app.",
|
|
130
|
+
description: "Restart a hosted app (zero-downtime reload).",
|
|
135
131
|
inputSchema: {
|
|
136
132
|
type: "object",
|
|
137
133
|
properties: {
|
|
138
|
-
appId: {
|
|
139
|
-
type: "string",
|
|
140
|
-
description: "The app ID to restart",
|
|
141
|
-
},
|
|
134
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
142
135
|
},
|
|
143
136
|
required: ["appId"],
|
|
144
137
|
},
|
|
@@ -149,10 +142,7 @@ const tools = [
|
|
|
149
142
|
inputSchema: {
|
|
150
143
|
type: "object",
|
|
151
144
|
properties: {
|
|
152
|
-
appId: {
|
|
153
|
-
type: "string",
|
|
154
|
-
description: "The app ID to stop",
|
|
155
|
-
},
|
|
145
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
156
146
|
},
|
|
157
147
|
required: ["appId"],
|
|
158
148
|
},
|
|
@@ -163,122 +153,208 @@ const tools = [
|
|
|
163
153
|
inputSchema: {
|
|
164
154
|
type: "object",
|
|
165
155
|
properties: {
|
|
166
|
-
appId: {
|
|
167
|
-
type: "string",
|
|
168
|
-
description: "The app ID to start",
|
|
169
|
-
},
|
|
156
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
170
157
|
},
|
|
171
158
|
required: ["appId"],
|
|
172
159
|
},
|
|
173
160
|
},
|
|
161
|
+
{
|
|
162
|
+
name: "vibekit_delete_app",
|
|
163
|
+
description: "Permanently delete a hosted app and all its data.",
|
|
164
|
+
inputSchema: {
|
|
165
|
+
type: "object",
|
|
166
|
+
properties: {
|
|
167
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
168
|
+
},
|
|
169
|
+
required: ["appId"],
|
|
170
|
+
},
|
|
171
|
+
},
|
|
172
|
+
// ── Environment Variables ────────────────────────────────────────────────────
|
|
174
173
|
{
|
|
175
174
|
name: "vibekit_app_env",
|
|
176
175
|
description: "Get environment variables for a hosted app.",
|
|
177
176
|
inputSchema: {
|
|
178
177
|
type: "object",
|
|
179
178
|
properties: {
|
|
180
|
-
appId: {
|
|
181
|
-
type: "string",
|
|
182
|
-
description: "The app ID to get environment variables for",
|
|
183
|
-
},
|
|
179
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
184
180
|
},
|
|
185
181
|
required: ["appId"],
|
|
186
182
|
},
|
|
187
183
|
},
|
|
188
184
|
{
|
|
189
185
|
name: "vibekit_set_env",
|
|
190
|
-
description: "Set environment variables for a hosted app.",
|
|
186
|
+
description: "Set one or more environment variables for a hosted app. Changes take effect on next restart.",
|
|
191
187
|
inputSchema: {
|
|
192
188
|
type: "object",
|
|
193
189
|
properties: {
|
|
194
|
-
appId: {
|
|
195
|
-
|
|
196
|
-
description: "The app ID to set environment variables for",
|
|
197
|
-
},
|
|
198
|
-
vars: {
|
|
199
|
-
type: "object",
|
|
200
|
-
description: "Object of key-value pairs to set as environment variables",
|
|
201
|
-
},
|
|
190
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
191
|
+
vars: { type: "object", description: "Key-value pairs to set, e.g. { \"API_KEY\": \"abc\", \"DEBUG\": \"true\" }" },
|
|
202
192
|
},
|
|
203
193
|
required: ["appId", "vars"],
|
|
204
194
|
},
|
|
205
195
|
},
|
|
206
196
|
{
|
|
207
|
-
name: "
|
|
208
|
-
description: "Delete a hosted app
|
|
197
|
+
name: "vibekit_delete_env",
|
|
198
|
+
description: "Delete a specific environment variable from a hosted app.",
|
|
209
199
|
inputSchema: {
|
|
210
200
|
type: "object",
|
|
211
201
|
properties: {
|
|
212
|
-
appId: {
|
|
213
|
-
|
|
214
|
-
description: "The app ID to delete",
|
|
215
|
-
},
|
|
202
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
203
|
+
key: { type: "string", description: "Environment variable name to delete" },
|
|
216
204
|
},
|
|
217
|
-
required: ["appId"],
|
|
205
|
+
required: ["appId", "key"],
|
|
218
206
|
},
|
|
219
207
|
},
|
|
220
|
-
// AI Agent
|
|
208
|
+
// ── AI Agent ─────────────────────────────────────────────────────────────────
|
|
221
209
|
{
|
|
222
210
|
name: "vibekit_chat",
|
|
223
|
-
description: "
|
|
211
|
+
description: "Send a message to an app's AI agent. The agent can read, write, and modify the app's code, run commands, and deploy changes.",
|
|
224
212
|
inputSchema: {
|
|
225
213
|
type: "object",
|
|
226
214
|
properties: {
|
|
227
|
-
appId: {
|
|
228
|
-
|
|
229
|
-
description: "The app ID to chat with the agent for",
|
|
230
|
-
},
|
|
231
|
-
message: {
|
|
232
|
-
type: "string",
|
|
233
|
-
description: "Message to send to the AI agent",
|
|
234
|
-
},
|
|
215
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
216
|
+
message: { type: "string", description: "Message to send to the AI agent" },
|
|
235
217
|
},
|
|
236
218
|
required: ["appId", "message"],
|
|
237
219
|
},
|
|
238
220
|
},
|
|
239
221
|
{
|
|
240
222
|
name: "vibekit_agent_status",
|
|
241
|
-
description: "Get the status of an app's AI agent.",
|
|
223
|
+
description: "Get the current status of an app's AI agent (idle, running, etc.).",
|
|
242
224
|
inputSchema: {
|
|
243
225
|
type: "object",
|
|
244
226
|
properties: {
|
|
245
|
-
appId: {
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
227
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
228
|
+
},
|
|
229
|
+
required: ["appId"],
|
|
230
|
+
},
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
name: "vibekit_agent_stop",
|
|
234
|
+
description: "Stop a currently running agent request.",
|
|
235
|
+
inputSchema: {
|
|
236
|
+
type: "object",
|
|
237
|
+
properties: {
|
|
238
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
249
239
|
},
|
|
250
240
|
required: ["appId"],
|
|
251
241
|
},
|
|
252
242
|
},
|
|
253
243
|
{
|
|
254
244
|
name: "vibekit_agent_history",
|
|
255
|
-
description: "Get chat history with an app's AI agent.",
|
|
245
|
+
description: "Get the chat history with an app's AI agent.",
|
|
256
246
|
inputSchema: {
|
|
257
247
|
type: "object",
|
|
258
248
|
properties: {
|
|
259
|
-
appId: {
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
249
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
250
|
+
limit: { type: "number", description: "Maximum number of messages to return (default: 20)" },
|
|
251
|
+
},
|
|
252
|
+
required: ["appId"],
|
|
253
|
+
},
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
name: "vibekit_agent_config",
|
|
257
|
+
description: "Get the AI agent configuration for an app (model, system prompt, features).",
|
|
258
|
+
inputSchema: {
|
|
259
|
+
type: "object",
|
|
260
|
+
properties: {
|
|
261
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
267
262
|
},
|
|
268
263
|
required: ["appId"],
|
|
269
264
|
},
|
|
270
265
|
},
|
|
271
|
-
|
|
266
|
+
{
|
|
267
|
+
name: "vibekit_agent_set_config",
|
|
268
|
+
description: "Update the AI agent configuration for an app.",
|
|
269
|
+
inputSchema: {
|
|
270
|
+
type: "object",
|
|
271
|
+
properties: {
|
|
272
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
273
|
+
model: { type: "string", description: "Model to use, e.g. 'claude-opus-4-5', 'claude-sonnet-4-6'" },
|
|
274
|
+
systemPrompt: { type: "string", description: "Custom system prompt for the agent" },
|
|
275
|
+
},
|
|
276
|
+
required: ["appId"],
|
|
277
|
+
},
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
name: "vibekit_agent_reset",
|
|
281
|
+
description: "Reset an agent — clears sessions and restarts the agent process. Use when the agent is stuck.",
|
|
282
|
+
inputSchema: {
|
|
283
|
+
type: "object",
|
|
284
|
+
properties: {
|
|
285
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
286
|
+
},
|
|
287
|
+
required: ["appId"],
|
|
288
|
+
},
|
|
289
|
+
},
|
|
290
|
+
{
|
|
291
|
+
name: "vibekit_agent_compact",
|
|
292
|
+
description: "Compact the agent's memory to free up context window space. Useful for long-running agents.",
|
|
293
|
+
inputSchema: {
|
|
294
|
+
type: "object",
|
|
295
|
+
properties: {
|
|
296
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
297
|
+
},
|
|
298
|
+
required: ["appId"],
|
|
299
|
+
},
|
|
300
|
+
},
|
|
301
|
+
// ── Files ────────────────────────────────────────────────────────────────────
|
|
302
|
+
{
|
|
303
|
+
name: "vibekit_list_files",
|
|
304
|
+
description: "List files in an app's workspace directory.",
|
|
305
|
+
inputSchema: {
|
|
306
|
+
type: "object",
|
|
307
|
+
properties: {
|
|
308
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
309
|
+
path: { type: "string", description: "Directory path to list (default: root)" },
|
|
310
|
+
},
|
|
311
|
+
required: ["appId"],
|
|
312
|
+
},
|
|
313
|
+
},
|
|
314
|
+
{
|
|
315
|
+
name: "vibekit_read_file",
|
|
316
|
+
description: "Read the contents of a file in an app's workspace.",
|
|
317
|
+
inputSchema: {
|
|
318
|
+
type: "object",
|
|
319
|
+
properties: {
|
|
320
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
321
|
+
path: { type: "string", description: "File path relative to workspace root, e.g. 'src/index.ts'" },
|
|
322
|
+
},
|
|
323
|
+
required: ["appId", "path"],
|
|
324
|
+
},
|
|
325
|
+
},
|
|
326
|
+
{
|
|
327
|
+
name: "vibekit_write_file",
|
|
328
|
+
description: "Write or update a file in an app's workspace. Use this to edit code directly.",
|
|
329
|
+
inputSchema: {
|
|
330
|
+
type: "object",
|
|
331
|
+
properties: {
|
|
332
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
333
|
+
path: { type: "string", description: "File path relative to workspace root, e.g. 'src/index.ts'" },
|
|
334
|
+
content: { type: "string", description: "Full file content to write" },
|
|
335
|
+
},
|
|
336
|
+
required: ["appId", "path", "content"],
|
|
337
|
+
},
|
|
338
|
+
},
|
|
339
|
+
{
|
|
340
|
+
name: "vibekit_file_changes",
|
|
341
|
+
description: "Get a diff of recent file changes in an app's workspace (uncommitted changes).",
|
|
342
|
+
inputSchema: {
|
|
343
|
+
type: "object",
|
|
344
|
+
properties: {
|
|
345
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
346
|
+
},
|
|
347
|
+
required: ["appId"],
|
|
348
|
+
},
|
|
349
|
+
},
|
|
350
|
+
// ── Database ─────────────────────────────────────────────────────────────────
|
|
272
351
|
{
|
|
273
352
|
name: "vibekit_enable_database",
|
|
274
|
-
description: "Enable database for
|
|
353
|
+
description: "Enable a managed Postgres database for an app. Free tier users need the database add-on.",
|
|
275
354
|
inputSchema: {
|
|
276
355
|
type: "object",
|
|
277
356
|
properties: {
|
|
278
|
-
appId: {
|
|
279
|
-
type: "string",
|
|
280
|
-
description: "The app ID to enable database for",
|
|
281
|
-
},
|
|
357
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
282
358
|
},
|
|
283
359
|
required: ["appId"],
|
|
284
360
|
},
|
|
@@ -289,70 +365,131 @@ const tools = [
|
|
|
289
365
|
inputSchema: {
|
|
290
366
|
type: "object",
|
|
291
367
|
properties: {
|
|
292
|
-
appId: {
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
368
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
369
|
+
},
|
|
370
|
+
required: ["appId"],
|
|
371
|
+
},
|
|
372
|
+
},
|
|
373
|
+
{
|
|
374
|
+
name: "vibekit_database_schema",
|
|
375
|
+
description: "Get the database schema (tables and columns) for an app's database.",
|
|
376
|
+
inputSchema: {
|
|
377
|
+
type: "object",
|
|
378
|
+
properties: {
|
|
379
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
296
380
|
},
|
|
297
381
|
required: ["appId"],
|
|
298
382
|
},
|
|
299
383
|
},
|
|
300
|
-
|
|
384
|
+
{
|
|
385
|
+
name: "vibekit_database_query",
|
|
386
|
+
description: "Run a SQL query against an app's database. Read-only queries are always safe; write queries modify data.",
|
|
387
|
+
inputSchema: {
|
|
388
|
+
type: "object",
|
|
389
|
+
properties: {
|
|
390
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
391
|
+
sql: { type: "string", description: "SQL query to execute, e.g. 'SELECT * FROM users LIMIT 10'" },
|
|
392
|
+
},
|
|
393
|
+
required: ["appId", "sql"],
|
|
394
|
+
},
|
|
395
|
+
},
|
|
396
|
+
// ── Domain ───────────────────────────────────────────────────────────────────
|
|
397
|
+
{
|
|
398
|
+
name: "vibekit_add_domain",
|
|
399
|
+
description: "Add a custom domain to an app. After adding, update your DNS CNAME to point to vibekit.bot.",
|
|
400
|
+
inputSchema: {
|
|
401
|
+
type: "object",
|
|
402
|
+
properties: {
|
|
403
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
404
|
+
domain: { type: "string", description: "Custom domain to add, e.g. 'myapp.com'" },
|
|
405
|
+
},
|
|
406
|
+
required: ["appId", "domain"],
|
|
407
|
+
},
|
|
408
|
+
},
|
|
409
|
+
{
|
|
410
|
+
name: "vibekit_remove_domain",
|
|
411
|
+
description: "Remove a custom domain from an app.",
|
|
412
|
+
inputSchema: {
|
|
413
|
+
type: "object",
|
|
414
|
+
properties: {
|
|
415
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
416
|
+
},
|
|
417
|
+
required: ["appId"],
|
|
418
|
+
},
|
|
419
|
+
},
|
|
420
|
+
// ── QA ───────────────────────────────────────────────────────────────────────
|
|
301
421
|
{
|
|
302
422
|
name: "vibekit_run_qa",
|
|
303
|
-
description: "Run automated QA tests on a hosted app.",
|
|
423
|
+
description: "Run automated QA tests on a hosted app. Takes a screenshot and tests key flows.",
|
|
304
424
|
inputSchema: {
|
|
305
425
|
type: "object",
|
|
306
426
|
properties: {
|
|
307
|
-
appId: {
|
|
308
|
-
type: "string",
|
|
309
|
-
description: "The app ID to run QA tests for",
|
|
310
|
-
},
|
|
427
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
311
428
|
},
|
|
312
429
|
required: ["appId"],
|
|
313
430
|
},
|
|
314
431
|
},
|
|
315
432
|
{
|
|
316
433
|
name: "vibekit_qa_status",
|
|
317
|
-
description: "Get QA test results
|
|
434
|
+
description: "Get the latest QA test results for an app.",
|
|
318
435
|
inputSchema: {
|
|
319
436
|
type: "object",
|
|
320
437
|
properties: {
|
|
321
|
-
appId: {
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
438
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
439
|
+
},
|
|
440
|
+
required: ["appId"],
|
|
441
|
+
},
|
|
442
|
+
},
|
|
443
|
+
// ── Schedules (app-level cron jobs) ──────────────────────────────────────────
|
|
444
|
+
{
|
|
445
|
+
name: "vibekit_app_schedules",
|
|
446
|
+
description: "List cron schedules configured for an app's agent.",
|
|
447
|
+
inputSchema: {
|
|
448
|
+
type: "object",
|
|
449
|
+
properties: {
|
|
450
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
325
451
|
},
|
|
326
452
|
required: ["appId"],
|
|
327
453
|
},
|
|
328
454
|
},
|
|
329
|
-
|
|
455
|
+
{
|
|
456
|
+
name: "vibekit_create_app_schedule",
|
|
457
|
+
description: "Create a cron schedule for an app's agent (e.g. daily report, nightly cleanup).",
|
|
458
|
+
inputSchema: {
|
|
459
|
+
type: "object",
|
|
460
|
+
properties: {
|
|
461
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
462
|
+
name: { type: "string", description: "Friendly name for the schedule" },
|
|
463
|
+
cron: { type: "string", description: "Cron expression, e.g. '0 9 * * 1' for every Monday 9am UTC" },
|
|
464
|
+
task: { type: "string", description: "What the agent should do on each run" },
|
|
465
|
+
},
|
|
466
|
+
required: ["appId", "name", "cron", "task"],
|
|
467
|
+
},
|
|
468
|
+
},
|
|
469
|
+
{
|
|
470
|
+
name: "vibekit_delete_app_schedule",
|
|
471
|
+
description: "Delete a cron schedule from an app.",
|
|
472
|
+
inputSchema: {
|
|
473
|
+
type: "object",
|
|
474
|
+
properties: {
|
|
475
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
476
|
+
jobId: { type: "string", description: "Schedule job ID to delete" },
|
|
477
|
+
},
|
|
478
|
+
required: ["appId", "jobId"],
|
|
479
|
+
},
|
|
480
|
+
},
|
|
481
|
+
// ── Tasks (async coding tasks) ───────────────────────────────────────────────
|
|
330
482
|
{
|
|
331
483
|
name: "vibekit_submit_task",
|
|
332
|
-
description: "Submit
|
|
484
|
+
description: "Submit an async coding task to VibeKit. The AI will write code, commit to GitHub, and optionally deploy. Returns a task ID to poll for results.",
|
|
333
485
|
inputSchema: {
|
|
334
486
|
type: "object",
|
|
335
487
|
properties: {
|
|
336
|
-
task: {
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
},
|
|
340
|
-
|
|
341
|
-
type: "string",
|
|
342
|
-
description: "GitHub repo in format 'owner/repo'. Optional — will use user's current repo if not specified.",
|
|
343
|
-
},
|
|
344
|
-
branch: {
|
|
345
|
-
type: "string",
|
|
346
|
-
description: "Git branch to work on. Default: main",
|
|
347
|
-
},
|
|
348
|
-
deploy: {
|
|
349
|
-
type: "boolean",
|
|
350
|
-
description: "Auto-deploy to Vercel when done. Default: true",
|
|
351
|
-
},
|
|
352
|
-
callbackUrl: {
|
|
353
|
-
type: "string",
|
|
354
|
-
description: "Webhook URL to receive task completion notification.",
|
|
355
|
-
},
|
|
488
|
+
task: { type: "string", description: "What you want built or changed. Be specific." },
|
|
489
|
+
repo: { type: "string", description: "GitHub repo in format 'owner/repo'" },
|
|
490
|
+
branch: { type: "string", description: "Git branch to work on (default: main)" },
|
|
491
|
+
deploy: { type: "boolean", description: "Auto-deploy when done (default: true)" },
|
|
492
|
+
callbackUrl: { type: "string", description: "Webhook URL to receive completion notification" },
|
|
356
493
|
},
|
|
357
494
|
required: ["task"],
|
|
358
495
|
},
|
|
@@ -363,10 +500,7 @@ const tools = [
|
|
|
363
500
|
inputSchema: {
|
|
364
501
|
type: "object",
|
|
365
502
|
properties: {
|
|
366
|
-
taskId: {
|
|
367
|
-
type: "string",
|
|
368
|
-
description: "The task ID returned from vibekit_submit_task",
|
|
369
|
-
},
|
|
503
|
+
taskId: { type: "string", description: "Task ID from vibekit_submit_task" },
|
|
370
504
|
},
|
|
371
505
|
required: ["taskId"],
|
|
372
506
|
},
|
|
@@ -377,10 +511,7 @@ const tools = [
|
|
|
377
511
|
inputSchema: {
|
|
378
512
|
type: "object",
|
|
379
513
|
properties: {
|
|
380
|
-
limit: {
|
|
381
|
-
type: "number",
|
|
382
|
-
description: "Max number of tasks to return. Default: 10",
|
|
383
|
-
},
|
|
514
|
+
limit: { type: "number", description: "Max tasks to return (default: 10)" },
|
|
384
515
|
status: {
|
|
385
516
|
type: "string",
|
|
386
517
|
enum: ["pending", "running", "completed", "failed"],
|
|
@@ -391,102 +522,71 @@ const tools = [
|
|
|
391
522
|
},
|
|
392
523
|
{
|
|
393
524
|
name: "vibekit_wait_for_task",
|
|
394
|
-
description: "Wait for a task to complete
|
|
525
|
+
description: "Wait for a task to complete, polling every 5 seconds.",
|
|
395
526
|
inputSchema: {
|
|
396
527
|
type: "object",
|
|
397
528
|
properties: {
|
|
398
|
-
taskId: {
|
|
399
|
-
|
|
400
|
-
description: "The task ID to wait for",
|
|
401
|
-
},
|
|
402
|
-
timeoutSeconds: {
|
|
403
|
-
type: "number",
|
|
404
|
-
description: "Max seconds to wait. Default: 300 (5 minutes)",
|
|
405
|
-
},
|
|
529
|
+
taskId: { type: "string", description: "Task ID to wait for" },
|
|
530
|
+
timeoutSeconds: { type: "number", description: "Max seconds to wait (default: 300)" },
|
|
406
531
|
},
|
|
407
532
|
required: ["taskId"],
|
|
408
533
|
},
|
|
409
534
|
},
|
|
535
|
+
// ── Account-level Schedules ───────────────────────────────────────────────────
|
|
410
536
|
{
|
|
411
537
|
name: "vibekit_create_schedule",
|
|
412
|
-
description: "Create a
|
|
538
|
+
description: "Create a recurring coding task schedule (GitHub-based, not app-agent based).",
|
|
413
539
|
inputSchema: {
|
|
414
540
|
type: "object",
|
|
415
541
|
properties: {
|
|
416
|
-
task: {
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
},
|
|
420
|
-
repo: {
|
|
421
|
-
type: "string",
|
|
422
|
-
description: "GitHub repo in format 'owner/repo'",
|
|
423
|
-
},
|
|
424
|
-
cron: {
|
|
425
|
-
type: "string",
|
|
426
|
-
description: "Cron expression. e.g., '0 9 * * 1' for every Monday at 9am UTC",
|
|
427
|
-
},
|
|
428
|
-
name: {
|
|
429
|
-
type: "string",
|
|
430
|
-
description: "Friendly name for the schedule",
|
|
431
|
-
},
|
|
542
|
+
task: { type: "string", description: "What to do on each run" },
|
|
543
|
+
repo: { type: "string", description: "GitHub repo in format 'owner/repo'" },
|
|
544
|
+
cron: { type: "string", description: "Cron expression, e.g. '0 9 * * 1'" },
|
|
545
|
+
name: { type: "string", description: "Friendly name for this schedule" },
|
|
432
546
|
},
|
|
433
547
|
required: ["task", "repo", "cron"],
|
|
434
548
|
},
|
|
435
549
|
},
|
|
436
550
|
{
|
|
437
551
|
name: "vibekit_list_schedules",
|
|
438
|
-
description: "List all
|
|
439
|
-
inputSchema: {
|
|
440
|
-
type: "object",
|
|
441
|
-
properties: {},
|
|
442
|
-
},
|
|
552
|
+
description: "List all account-level recurring task schedules.",
|
|
553
|
+
inputSchema: { type: "object", properties: {} },
|
|
443
554
|
},
|
|
444
555
|
{
|
|
445
556
|
name: "vibekit_delete_schedule",
|
|
446
|
-
description: "Delete
|
|
557
|
+
description: "Delete an account-level recurring schedule.",
|
|
447
558
|
inputSchema: {
|
|
448
559
|
type: "object",
|
|
449
560
|
properties: {
|
|
450
|
-
scheduleId: {
|
|
451
|
-
type: "string",
|
|
452
|
-
description: "The schedule ID to delete",
|
|
453
|
-
},
|
|
561
|
+
scheduleId: { type: "string", description: "Schedule ID to delete" },
|
|
454
562
|
},
|
|
455
563
|
required: ["scheduleId"],
|
|
456
564
|
},
|
|
457
565
|
},
|
|
458
|
-
// Account
|
|
566
|
+
// ── Account ──────────────────────────────────────────────────────────────────
|
|
459
567
|
{
|
|
460
568
|
name: "vibekit_account",
|
|
461
|
-
description: "Get VibeKit account info
|
|
462
|
-
inputSchema: {
|
|
463
|
-
type: "object",
|
|
464
|
-
properties: {},
|
|
465
|
-
},
|
|
569
|
+
description: "Get VibeKit account info — plan, credits balance, session usage, and limits.",
|
|
570
|
+
inputSchema: { type: "object", properties: {} },
|
|
466
571
|
},
|
|
572
|
+
// ── Skills ───────────────────────────────────────────────────────────────────
|
|
467
573
|
{
|
|
468
574
|
name: "vibekit_list_skills",
|
|
469
|
-
description: "List
|
|
575
|
+
description: "List available implementation skills. Skills contain code patterns and best practices for specific domains.",
|
|
470
576
|
inputSchema: {
|
|
471
577
|
type: "object",
|
|
472
578
|
properties: {
|
|
473
|
-
tag: {
|
|
474
|
-
type: "string",
|
|
475
|
-
description: "Filter skills by tag (e.g., 'react', 'database', 'security')",
|
|
476
|
-
},
|
|
579
|
+
tag: { type: "string", description: "Filter by tag (e.g. 'react', 'database', 'security')" },
|
|
477
580
|
},
|
|
478
581
|
},
|
|
479
582
|
},
|
|
480
583
|
{
|
|
481
584
|
name: "vibekit_get_skill",
|
|
482
|
-
description: "Fetch the full content of a specific skill.
|
|
585
|
+
description: "Fetch the full content of a specific skill. Use vibekit_list_skills to discover available skill IDs.",
|
|
483
586
|
inputSchema: {
|
|
484
587
|
type: "object",
|
|
485
588
|
properties: {
|
|
486
|
-
id: {
|
|
487
|
-
type: "string",
|
|
488
|
-
description: "Skill ID from vibekit_list_skills (e.g., 'nextjs', 'trpc', 'auth')",
|
|
489
|
-
},
|
|
589
|
+
id: { type: "string", description: "Skill ID (e.g. 'nextjs', 'trpc', 'auth')" },
|
|
490
590
|
},
|
|
491
591
|
required: ["id"],
|
|
492
592
|
},
|
|
@@ -496,7 +596,7 @@ const tools = [
|
|
|
496
596
|
async function handleTool(name, args) {
|
|
497
597
|
let result;
|
|
498
598
|
switch (name) {
|
|
499
|
-
//
|
|
599
|
+
// Apps
|
|
500
600
|
case "vibekit_list_apps":
|
|
501
601
|
result = await apiRequest("GET", "/hosting/apps");
|
|
502
602
|
break;
|
|
@@ -518,15 +618,15 @@ async function handleTool(name, args) {
|
|
|
518
618
|
case "vibekit_redeploy":
|
|
519
619
|
result = await apiRequest("POST", `/hosting/app/${args.appId}/redeploy`);
|
|
520
620
|
break;
|
|
621
|
+
case "vibekit_rollback":
|
|
622
|
+
result = await apiRequest("POST", `/hosting/app/${args.appId}/deploys/${args.deployId}/rollback`);
|
|
623
|
+
break;
|
|
624
|
+
case "vibekit_deploy_history":
|
|
625
|
+
result = await apiRequest("GET", `/hosting/app/${args.appId}/deploys`);
|
|
626
|
+
break;
|
|
521
627
|
case "vibekit_app_logs": {
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
path += `?lines=${args.lines}`;
|
|
525
|
-
}
|
|
526
|
-
else {
|
|
527
|
-
path += "?lines=100";
|
|
528
|
-
}
|
|
529
|
-
result = await apiRequest("GET", path);
|
|
628
|
+
const lines = args.lines || 100;
|
|
629
|
+
result = await apiRequest("GET", `/hosting/app/${args.appId}/logs?lines=${lines}`);
|
|
530
630
|
break;
|
|
531
631
|
}
|
|
532
632
|
case "vibekit_restart_app":
|
|
@@ -538,6 +638,10 @@ async function handleTool(name, args) {
|
|
|
538
638
|
case "vibekit_start_app":
|
|
539
639
|
result = await apiRequest("POST", `/hosting/app/${args.appId}/start`);
|
|
540
640
|
break;
|
|
641
|
+
case "vibekit_delete_app":
|
|
642
|
+
result = await apiRequest("DELETE", `/hosting/app/${args.appId}`);
|
|
643
|
+
break;
|
|
644
|
+
// Env
|
|
541
645
|
case "vibekit_app_env":
|
|
542
646
|
result = await apiRequest("GET", `/hosting/app/${args.appId}/env`);
|
|
543
647
|
break;
|
|
@@ -546,10 +650,10 @@ async function handleTool(name, args) {
|
|
|
546
650
|
vars: args.vars,
|
|
547
651
|
});
|
|
548
652
|
break;
|
|
549
|
-
case "
|
|
550
|
-
result = await apiRequest("DELETE", `/hosting/app/${args.appId}`);
|
|
653
|
+
case "vibekit_delete_env":
|
|
654
|
+
result = await apiRequest("DELETE", `/hosting/app/${args.appId}/env/${args.key}`);
|
|
551
655
|
break;
|
|
552
|
-
//
|
|
656
|
+
// Agent
|
|
553
657
|
case "vibekit_chat":
|
|
554
658
|
result = await apiRequest("POST", `/hosting/app/${args.appId}/agent`, {
|
|
555
659
|
message: args.message,
|
|
@@ -558,17 +662,49 @@ async function handleTool(name, args) {
|
|
|
558
662
|
case "vibekit_agent_status":
|
|
559
663
|
result = await apiRequest("GET", `/hosting/app/${args.appId}/agent/status`);
|
|
560
664
|
break;
|
|
665
|
+
case "vibekit_agent_stop":
|
|
666
|
+
result = await apiRequest("POST", `/hosting/app/${args.appId}/agent/stop`);
|
|
667
|
+
break;
|
|
561
668
|
case "vibekit_agent_history": {
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
669
|
+
const limit = args.limit || 20;
|
|
670
|
+
result = await apiRequest("GET", `/hosting/app/${args.appId}/agent/history?limit=${limit}`);
|
|
671
|
+
break;
|
|
672
|
+
}
|
|
673
|
+
case "vibekit_agent_config":
|
|
674
|
+
result = await apiRequest("GET", `/hosting/app/${args.appId}/agent/config`);
|
|
675
|
+
break;
|
|
676
|
+
case "vibekit_agent_set_config":
|
|
677
|
+
result = await apiRequest("POST", `/hosting/app/${args.appId}/agent/config`, {
|
|
678
|
+
model: args.model,
|
|
679
|
+
systemPrompt: args.systemPrompt,
|
|
680
|
+
});
|
|
681
|
+
break;
|
|
682
|
+
case "vibekit_agent_reset":
|
|
683
|
+
result = await apiRequest("POST", `/hosting/app/${args.appId}/agent/reset`);
|
|
684
|
+
break;
|
|
685
|
+
case "vibekit_agent_compact":
|
|
686
|
+
result = await apiRequest("POST", `/hosting/app/${args.appId}/agent/compact`);
|
|
687
|
+
break;
|
|
688
|
+
// Files
|
|
689
|
+
case "vibekit_list_files": {
|
|
690
|
+
let path = `/hosting/app/${args.appId}/agent/files`;
|
|
691
|
+
if (args.path)
|
|
692
|
+
path += `?path=${encodeURIComponent(args.path)}`;
|
|
569
693
|
result = await apiRequest("GET", path);
|
|
570
694
|
break;
|
|
571
695
|
}
|
|
696
|
+
case "vibekit_read_file":
|
|
697
|
+
result = await apiRequest("GET", `/hosting/app/${args.appId}/agent/file?path=${encodeURIComponent(args.path)}`);
|
|
698
|
+
break;
|
|
699
|
+
case "vibekit_write_file":
|
|
700
|
+
result = await apiRequest("PUT", `/hosting/app/${args.appId}/agent/file`, {
|
|
701
|
+
path: args.path,
|
|
702
|
+
content: args.content,
|
|
703
|
+
});
|
|
704
|
+
break;
|
|
705
|
+
case "vibekit_file_changes":
|
|
706
|
+
result = await apiRequest("GET", `/hosting/app/${args.appId}/agent/changes`);
|
|
707
|
+
break;
|
|
572
708
|
// Database
|
|
573
709
|
case "vibekit_enable_database":
|
|
574
710
|
result = await apiRequest("POST", `/hosting/app/${args.appId}/database`);
|
|
@@ -576,6 +712,23 @@ async function handleTool(name, args) {
|
|
|
576
712
|
case "vibekit_database_status":
|
|
577
713
|
result = await apiRequest("GET", `/hosting/app/${args.appId}/database`);
|
|
578
714
|
break;
|
|
715
|
+
case "vibekit_database_schema":
|
|
716
|
+
result = await apiRequest("GET", `/hosting/app/${args.appId}/database/schema`);
|
|
717
|
+
break;
|
|
718
|
+
case "vibekit_database_query":
|
|
719
|
+
result = await apiRequest("POST", `/hosting/app/${args.appId}/database/query`, {
|
|
720
|
+
sql: args.sql,
|
|
721
|
+
});
|
|
722
|
+
break;
|
|
723
|
+
// Domain
|
|
724
|
+
case "vibekit_add_domain":
|
|
725
|
+
result = await apiRequest("POST", `/hosting/app/${args.appId}/domain`, {
|
|
726
|
+
domain: args.domain,
|
|
727
|
+
});
|
|
728
|
+
break;
|
|
729
|
+
case "vibekit_remove_domain":
|
|
730
|
+
result = await apiRequest("DELETE", `/hosting/app/${args.appId}/domain`);
|
|
731
|
+
break;
|
|
579
732
|
// QA
|
|
580
733
|
case "vibekit_run_qa":
|
|
581
734
|
result = await apiRequest("POST", `/hosting/app/${args.appId}/qa`);
|
|
@@ -583,7 +736,21 @@ async function handleTool(name, args) {
|
|
|
583
736
|
case "vibekit_qa_status":
|
|
584
737
|
result = await apiRequest("GET", `/hosting/app/${args.appId}/qa`);
|
|
585
738
|
break;
|
|
586
|
-
//
|
|
739
|
+
// App-level schedules
|
|
740
|
+
case "vibekit_app_schedules":
|
|
741
|
+
result = await apiRequest("GET", `/hosting/app/${args.appId}/schedules`);
|
|
742
|
+
break;
|
|
743
|
+
case "vibekit_create_app_schedule":
|
|
744
|
+
result = await apiRequest("POST", `/hosting/app/${args.appId}/schedules`, {
|
|
745
|
+
name: args.name,
|
|
746
|
+
cron: args.cron,
|
|
747
|
+
task: args.task,
|
|
748
|
+
});
|
|
749
|
+
break;
|
|
750
|
+
case "vibekit_delete_app_schedule":
|
|
751
|
+
result = await apiRequest("DELETE", `/hosting/app/${args.appId}/schedules/${args.jobId}`);
|
|
752
|
+
break;
|
|
753
|
+
// Tasks
|
|
587
754
|
case "vibekit_submit_task":
|
|
588
755
|
result = await apiRequest("POST", "/task", {
|
|
589
756
|
task: args.task,
|
|
@@ -597,36 +764,35 @@ async function handleTool(name, args) {
|
|
|
597
764
|
result = await apiRequest("GET", `/task/${args.taskId}`);
|
|
598
765
|
break;
|
|
599
766
|
case "vibekit_list_tasks": {
|
|
600
|
-
let path = "/tasks";
|
|
601
767
|
const params = new URLSearchParams();
|
|
602
768
|
if (args.limit)
|
|
603
769
|
params.set("limit", String(args.limit));
|
|
604
770
|
if (args.status)
|
|
605
771
|
params.set("status", String(args.status));
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
result = await apiRequest("GET", path);
|
|
772
|
+
const qs = params.toString();
|
|
773
|
+
result = await apiRequest("GET", `/tasks${qs ? `?${qs}` : ""}`);
|
|
609
774
|
break;
|
|
610
775
|
}
|
|
611
776
|
case "vibekit_wait_for_task": {
|
|
612
777
|
const taskId = args.taskId;
|
|
613
778
|
const timeout = (args.timeoutSeconds || 300) * 1000;
|
|
614
779
|
const start = Date.now();
|
|
780
|
+
result = { ok: false, error: "Timeout waiting for task" };
|
|
615
781
|
while (Date.now() - start < timeout) {
|
|
616
|
-
|
|
617
|
-
if (!
|
|
618
|
-
|
|
619
|
-
const task = result.data;
|
|
620
|
-
if (task.status === "completed" || task.status === "failed") {
|
|
782
|
+
const poll = await apiRequest("GET", `/task/${taskId}`);
|
|
783
|
+
if (!poll.ok) {
|
|
784
|
+
result = poll;
|
|
621
785
|
break;
|
|
622
786
|
}
|
|
787
|
+
const task = poll.data;
|
|
788
|
+
result = poll;
|
|
789
|
+
if (task.status === "completed" || task.status === "failed")
|
|
790
|
+
break;
|
|
623
791
|
await new Promise((r) => setTimeout(r, 5000));
|
|
624
792
|
}
|
|
625
|
-
if (!result) {
|
|
626
|
-
result = { ok: false, error: "Timeout waiting for task" };
|
|
627
|
-
}
|
|
628
793
|
break;
|
|
629
794
|
}
|
|
795
|
+
// Account-level schedules
|
|
630
796
|
case "vibekit_create_schedule":
|
|
631
797
|
result = await apiRequest("POST", "/schedule", {
|
|
632
798
|
task: args.task,
|
|
@@ -645,18 +811,16 @@ async function handleTool(name, args) {
|
|
|
645
811
|
case "vibekit_account":
|
|
646
812
|
result = await apiRequest("GET", "/account");
|
|
647
813
|
break;
|
|
814
|
+
// Skills
|
|
648
815
|
case "vibekit_list_skills": {
|
|
649
816
|
try {
|
|
650
|
-
// Check cache
|
|
651
817
|
if (skillsCache && Date.now() - skillsCache.fetchedAt < CACHE_TTL) {
|
|
652
818
|
let skills = skillsCache.manifest.skills;
|
|
653
|
-
if (args.tag)
|
|
819
|
+
if (args.tag)
|
|
654
820
|
skills = skills.filter((s) => s.tags?.includes(args.tag));
|
|
655
|
-
}
|
|
656
|
-
result = { ok: true, data: { skills } };
|
|
821
|
+
result = { ok: true, data: { skills, count: skills.length } };
|
|
657
822
|
break;
|
|
658
823
|
}
|
|
659
|
-
// Fetch manifest
|
|
660
824
|
const res = await fetch(`${SKILLS_REGISTRY}/skills.json`);
|
|
661
825
|
if (!res.ok) {
|
|
662
826
|
result = { ok: false, error: `Failed to fetch skills: ${res.status}` };
|
|
@@ -665,9 +829,8 @@ async function handleTool(name, args) {
|
|
|
665
829
|
const manifest = await res.json();
|
|
666
830
|
skillsCache = { manifest, fetchedAt: Date.now() };
|
|
667
831
|
let skills = manifest.skills;
|
|
668
|
-
if (args.tag)
|
|
832
|
+
if (args.tag)
|
|
669
833
|
skills = skills.filter((s) => s.tags?.includes(args.tag));
|
|
670
|
-
}
|
|
671
834
|
result = { ok: true, data: { skills, count: skills.length } };
|
|
672
835
|
}
|
|
673
836
|
catch (err) {
|
|
@@ -703,25 +866,13 @@ async function handleTool(name, args) {
|
|
|
703
866
|
: `Error: ${result.error}`;
|
|
704
867
|
return { content: [{ type: "text", text }] };
|
|
705
868
|
}
|
|
706
|
-
//
|
|
707
|
-
const server = new index_js_1.Server({
|
|
708
|
-
|
|
709
|
-
version: "0.4.0",
|
|
710
|
-
}, {
|
|
711
|
-
capabilities: {
|
|
712
|
-
tools: {},
|
|
713
|
-
},
|
|
714
|
-
});
|
|
715
|
-
// Handle tool listing
|
|
716
|
-
server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => ({
|
|
717
|
-
tools,
|
|
718
|
-
}));
|
|
719
|
-
// Handle tool calls
|
|
869
|
+
// Server setup
|
|
870
|
+
const server = new index_js_1.Server({ name: "vibekit-mcp", version: "0.5.0" }, { capabilities: { tools: {} } });
|
|
871
|
+
server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => ({ tools }));
|
|
720
872
|
server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
|
|
721
873
|
const { name, arguments: args } = request.params;
|
|
722
874
|
return handleTool(name, (args || {}));
|
|
723
875
|
});
|
|
724
|
-
// Start server
|
|
725
876
|
async function main() {
|
|
726
877
|
const transport = new stdio_js_1.StdioServerTransport();
|
|
727
878
|
await server.connect(transport);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vibekit-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "MCP server for VibeKit — deploy apps, manage hosting, chat with AI agents, and run coding tasks from Claude Desktop, Cursor, and other MCP clients.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -39,4 +39,4 @@
|
|
|
39
39
|
"@types/node": "^20.0.0",
|
|
40
40
|
"typescript": "^5.0.0"
|
|
41
41
|
}
|
|
42
|
-
}
|
|
42
|
+
}
|