vibekit-mcp 0.4.1 → 0.5.1
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 +420 -254
- package/package.json +1 -1
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,219 @@ const tools = [
|
|
|
163
153
|
inputSchema: {
|
|
164
154
|
type: "object",
|
|
165
155
|
properties: {
|
|
166
|
-
appId: {
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
156
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
157
|
+
},
|
|
158
|
+
required: ["appId"],
|
|
159
|
+
},
|
|
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" },
|
|
170
168
|
},
|
|
171
169
|
required: ["appId"],
|
|
172
170
|
},
|
|
173
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" },
|
|
262
|
+
},
|
|
263
|
+
required: ["appId"],
|
|
264
|
+
},
|
|
265
|
+
},
|
|
266
|
+
{
|
|
267
|
+
name: "vibekit_agent_set_model",
|
|
268
|
+
description: "Change the AI model used by an app's agent.",
|
|
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. Options: 'claude-opus-4-6', 'claude-sonnet-4-20250514', 'claude-haiku-3.5'" },
|
|
274
|
+
},
|
|
275
|
+
required: ["appId", "model"],
|
|
276
|
+
},
|
|
277
|
+
},
|
|
278
|
+
{
|
|
279
|
+
name: "vibekit_exec",
|
|
280
|
+
description: "Run a shell command inside an app's container. The app must be running. Useful for inspecting state, running migrations, or debugging.",
|
|
281
|
+
inputSchema: {
|
|
282
|
+
type: "object",
|
|
283
|
+
properties: {
|
|
284
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
285
|
+
command: { type: "string", description: "Shell command to run, e.g. 'ls -la' or 'node -e \"console.log(process.env)\"'" },
|
|
286
|
+
},
|
|
287
|
+
required: ["appId", "command"],
|
|
288
|
+
},
|
|
289
|
+
},
|
|
290
|
+
{
|
|
291
|
+
name: "vibekit_agent_reset",
|
|
292
|
+
description: "Reset an agent — clears sessions and restarts the agent process. Use when the agent is stuck.",
|
|
293
|
+
inputSchema: {
|
|
294
|
+
type: "object",
|
|
295
|
+
properties: {
|
|
296
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
297
|
+
},
|
|
298
|
+
required: ["appId"],
|
|
299
|
+
},
|
|
300
|
+
},
|
|
301
|
+
{
|
|
302
|
+
name: "vibekit_agent_compact",
|
|
303
|
+
description: "Compact the agent's memory to free up context window space. Useful for long-running agents.",
|
|
304
|
+
inputSchema: {
|
|
305
|
+
type: "object",
|
|
306
|
+
properties: {
|
|
307
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
308
|
+
},
|
|
309
|
+
required: ["appId"],
|
|
310
|
+
},
|
|
311
|
+
},
|
|
312
|
+
// ── Files ────────────────────────────────────────────────────────────────────
|
|
313
|
+
{
|
|
314
|
+
name: "vibekit_list_files",
|
|
315
|
+
description: "List files in an app's workspace directory.",
|
|
316
|
+
inputSchema: {
|
|
317
|
+
type: "object",
|
|
318
|
+
properties: {
|
|
319
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
320
|
+
path: { type: "string", description: "Directory path to list (default: root)" },
|
|
321
|
+
},
|
|
322
|
+
required: ["appId"],
|
|
323
|
+
},
|
|
324
|
+
},
|
|
325
|
+
{
|
|
326
|
+
name: "vibekit_read_file",
|
|
327
|
+
description: "Read the contents of a file in an app's workspace.",
|
|
328
|
+
inputSchema: {
|
|
329
|
+
type: "object",
|
|
330
|
+
properties: {
|
|
331
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
332
|
+
path: { type: "string", description: "File path relative to workspace root, e.g. 'src/index.ts'" },
|
|
333
|
+
},
|
|
334
|
+
required: ["appId", "path"],
|
|
335
|
+
},
|
|
336
|
+
},
|
|
337
|
+
{
|
|
338
|
+
name: "vibekit_write_file",
|
|
339
|
+
description: "Write or update a file in an app's workspace. Use this to edit code directly.",
|
|
340
|
+
inputSchema: {
|
|
341
|
+
type: "object",
|
|
342
|
+
properties: {
|
|
343
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
344
|
+
path: { type: "string", description: "File path relative to workspace root, e.g. 'src/index.ts'" },
|
|
345
|
+
content: { type: "string", description: "Full file content to write" },
|
|
346
|
+
},
|
|
347
|
+
required: ["appId", "path", "content"],
|
|
348
|
+
},
|
|
349
|
+
},
|
|
350
|
+
{
|
|
351
|
+
name: "vibekit_file_changes",
|
|
352
|
+
description: "Get a diff of recent file changes in an app's workspace (uncommitted changes).",
|
|
353
|
+
inputSchema: {
|
|
354
|
+
type: "object",
|
|
355
|
+
properties: {
|
|
356
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
267
357
|
},
|
|
268
358
|
required: ["appId"],
|
|
269
359
|
},
|
|
270
360
|
},
|
|
271
|
-
// Database
|
|
361
|
+
// ── Database ─────────────────────────────────────────────────────────────────
|
|
272
362
|
{
|
|
273
363
|
name: "vibekit_enable_database",
|
|
274
|
-
description: "Enable database for
|
|
364
|
+
description: "Enable a managed Postgres database for an app. Free tier users need the database add-on.",
|
|
275
365
|
inputSchema: {
|
|
276
366
|
type: "object",
|
|
277
367
|
properties: {
|
|
278
|
-
appId: {
|
|
279
|
-
type: "string",
|
|
280
|
-
description: "The app ID to enable database for",
|
|
281
|
-
},
|
|
368
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
282
369
|
},
|
|
283
370
|
required: ["appId"],
|
|
284
371
|
},
|
|
@@ -289,70 +376,131 @@ const tools = [
|
|
|
289
376
|
inputSchema: {
|
|
290
377
|
type: "object",
|
|
291
378
|
properties: {
|
|
292
|
-
appId: {
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
379
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
380
|
+
},
|
|
381
|
+
required: ["appId"],
|
|
382
|
+
},
|
|
383
|
+
},
|
|
384
|
+
{
|
|
385
|
+
name: "vibekit_database_schema",
|
|
386
|
+
description: "Get the database schema (tables and columns) for an app's database.",
|
|
387
|
+
inputSchema: {
|
|
388
|
+
type: "object",
|
|
389
|
+
properties: {
|
|
390
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
391
|
+
},
|
|
392
|
+
required: ["appId"],
|
|
393
|
+
},
|
|
394
|
+
},
|
|
395
|
+
{
|
|
396
|
+
name: "vibekit_database_query",
|
|
397
|
+
description: "Run a SQL query against an app's database. Read-only queries are always safe; write queries modify data.",
|
|
398
|
+
inputSchema: {
|
|
399
|
+
type: "object",
|
|
400
|
+
properties: {
|
|
401
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
402
|
+
sql: { type: "string", description: "SQL query to execute, e.g. 'SELECT * FROM users LIMIT 10'" },
|
|
403
|
+
},
|
|
404
|
+
required: ["appId", "sql"],
|
|
405
|
+
},
|
|
406
|
+
},
|
|
407
|
+
// ── Domain ───────────────────────────────────────────────────────────────────
|
|
408
|
+
{
|
|
409
|
+
name: "vibekit_add_domain",
|
|
410
|
+
description: "Add a custom domain to an app. After adding, update your DNS CNAME to point to vibekit.bot.",
|
|
411
|
+
inputSchema: {
|
|
412
|
+
type: "object",
|
|
413
|
+
properties: {
|
|
414
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
415
|
+
domain: { type: "string", description: "Custom domain to add, e.g. 'myapp.com'" },
|
|
416
|
+
},
|
|
417
|
+
required: ["appId", "domain"],
|
|
418
|
+
},
|
|
419
|
+
},
|
|
420
|
+
{
|
|
421
|
+
name: "vibekit_remove_domain",
|
|
422
|
+
description: "Remove a custom domain from an app.",
|
|
423
|
+
inputSchema: {
|
|
424
|
+
type: "object",
|
|
425
|
+
properties: {
|
|
426
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
296
427
|
},
|
|
297
428
|
required: ["appId"],
|
|
298
429
|
},
|
|
299
430
|
},
|
|
300
|
-
// QA
|
|
431
|
+
// ── QA ───────────────────────────────────────────────────────────────────────
|
|
301
432
|
{
|
|
302
433
|
name: "vibekit_run_qa",
|
|
303
|
-
description: "Run automated QA tests on a hosted app.",
|
|
434
|
+
description: "Run automated QA tests on a hosted app. Takes a screenshot and tests key flows.",
|
|
304
435
|
inputSchema: {
|
|
305
436
|
type: "object",
|
|
306
437
|
properties: {
|
|
307
|
-
appId: {
|
|
308
|
-
type: "string",
|
|
309
|
-
description: "The app ID to run QA tests for",
|
|
310
|
-
},
|
|
438
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
311
439
|
},
|
|
312
440
|
required: ["appId"],
|
|
313
441
|
},
|
|
314
442
|
},
|
|
315
443
|
{
|
|
316
444
|
name: "vibekit_qa_status",
|
|
317
|
-
description: "Get QA test results
|
|
445
|
+
description: "Get the latest QA test results for an app.",
|
|
318
446
|
inputSchema: {
|
|
319
447
|
type: "object",
|
|
320
448
|
properties: {
|
|
321
|
-
appId: {
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
449
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
450
|
+
},
|
|
451
|
+
required: ["appId"],
|
|
452
|
+
},
|
|
453
|
+
},
|
|
454
|
+
// ── Schedules (app-level cron jobs) ──────────────────────────────────────────
|
|
455
|
+
{
|
|
456
|
+
name: "vibekit_app_schedules",
|
|
457
|
+
description: "List cron schedules configured for an app's agent.",
|
|
458
|
+
inputSchema: {
|
|
459
|
+
type: "object",
|
|
460
|
+
properties: {
|
|
461
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
325
462
|
},
|
|
326
463
|
required: ["appId"],
|
|
327
464
|
},
|
|
328
465
|
},
|
|
329
|
-
|
|
466
|
+
{
|
|
467
|
+
name: "vibekit_create_app_schedule",
|
|
468
|
+
description: "Create a cron schedule for an app's agent (e.g. daily report, nightly cleanup).",
|
|
469
|
+
inputSchema: {
|
|
470
|
+
type: "object",
|
|
471
|
+
properties: {
|
|
472
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
473
|
+
name: { type: "string", description: "Friendly name for the schedule" },
|
|
474
|
+
cron: { type: "string", description: "Cron expression, e.g. '0 9 * * 1' for every Monday 9am UTC" },
|
|
475
|
+
task: { type: "string", description: "What the agent should do on each run" },
|
|
476
|
+
},
|
|
477
|
+
required: ["appId", "name", "cron", "task"],
|
|
478
|
+
},
|
|
479
|
+
},
|
|
480
|
+
{
|
|
481
|
+
name: "vibekit_delete_app_schedule",
|
|
482
|
+
description: "Delete a cron schedule from an app.",
|
|
483
|
+
inputSchema: {
|
|
484
|
+
type: "object",
|
|
485
|
+
properties: {
|
|
486
|
+
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
487
|
+
jobId: { type: "string", description: "Schedule job ID to delete" },
|
|
488
|
+
},
|
|
489
|
+
required: ["appId", "jobId"],
|
|
490
|
+
},
|
|
491
|
+
},
|
|
492
|
+
// ── Tasks (async coding tasks) ───────────────────────────────────────────────
|
|
330
493
|
{
|
|
331
494
|
name: "vibekit_submit_task",
|
|
332
|
-
description: "Submit
|
|
495
|
+
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
496
|
inputSchema: {
|
|
334
497
|
type: "object",
|
|
335
498
|
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
|
-
},
|
|
499
|
+
task: { type: "string", description: "What you want built or changed. Be specific." },
|
|
500
|
+
repo: { type: "string", description: "GitHub repo in format 'owner/repo'" },
|
|
501
|
+
branch: { type: "string", description: "Git branch to work on (default: main)" },
|
|
502
|
+
deploy: { type: "boolean", description: "Auto-deploy when done (default: true)" },
|
|
503
|
+
callbackUrl: { type: "string", description: "Webhook URL to receive completion notification" },
|
|
356
504
|
},
|
|
357
505
|
required: ["task"],
|
|
358
506
|
},
|
|
@@ -363,10 +511,7 @@ const tools = [
|
|
|
363
511
|
inputSchema: {
|
|
364
512
|
type: "object",
|
|
365
513
|
properties: {
|
|
366
|
-
taskId: {
|
|
367
|
-
type: "string",
|
|
368
|
-
description: "The task ID returned from vibekit_submit_task",
|
|
369
|
-
},
|
|
514
|
+
taskId: { type: "string", description: "Task ID from vibekit_submit_task" },
|
|
370
515
|
},
|
|
371
516
|
required: ["taskId"],
|
|
372
517
|
},
|
|
@@ -377,10 +522,7 @@ const tools = [
|
|
|
377
522
|
inputSchema: {
|
|
378
523
|
type: "object",
|
|
379
524
|
properties: {
|
|
380
|
-
limit: {
|
|
381
|
-
type: "number",
|
|
382
|
-
description: "Max number of tasks to return. Default: 10",
|
|
383
|
-
},
|
|
525
|
+
limit: { type: "number", description: "Max tasks to return (default: 10)" },
|
|
384
526
|
status: {
|
|
385
527
|
type: "string",
|
|
386
528
|
enum: ["pending", "running", "completed", "failed"],
|
|
@@ -391,102 +533,71 @@ const tools = [
|
|
|
391
533
|
},
|
|
392
534
|
{
|
|
393
535
|
name: "vibekit_wait_for_task",
|
|
394
|
-
description: "Wait for a task to complete
|
|
536
|
+
description: "Wait for a task to complete, polling every 5 seconds.",
|
|
395
537
|
inputSchema: {
|
|
396
538
|
type: "object",
|
|
397
539
|
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
|
-
},
|
|
540
|
+
taskId: { type: "string", description: "Task ID to wait for" },
|
|
541
|
+
timeoutSeconds: { type: "number", description: "Max seconds to wait (default: 300)" },
|
|
406
542
|
},
|
|
407
543
|
required: ["taskId"],
|
|
408
544
|
},
|
|
409
545
|
},
|
|
546
|
+
// ── Account-level Schedules ───────────────────────────────────────────────────
|
|
410
547
|
{
|
|
411
548
|
name: "vibekit_create_schedule",
|
|
412
|
-
description: "Create a
|
|
549
|
+
description: "Create a recurring coding task schedule (GitHub-based, not app-agent based).",
|
|
413
550
|
inputSchema: {
|
|
414
551
|
type: "object",
|
|
415
552
|
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
|
-
},
|
|
553
|
+
task: { type: "string", description: "What to do on each run" },
|
|
554
|
+
repo: { type: "string", description: "GitHub repo in format 'owner/repo'" },
|
|
555
|
+
cron: { type: "string", description: "Cron expression, e.g. '0 9 * * 1'" },
|
|
556
|
+
name: { type: "string", description: "Friendly name for this schedule" },
|
|
432
557
|
},
|
|
433
558
|
required: ["task", "repo", "cron"],
|
|
434
559
|
},
|
|
435
560
|
},
|
|
436
561
|
{
|
|
437
562
|
name: "vibekit_list_schedules",
|
|
438
|
-
description: "List all
|
|
439
|
-
inputSchema: {
|
|
440
|
-
type: "object",
|
|
441
|
-
properties: {},
|
|
442
|
-
},
|
|
563
|
+
description: "List all account-level recurring task schedules.",
|
|
564
|
+
inputSchema: { type: "object", properties: {} },
|
|
443
565
|
},
|
|
444
566
|
{
|
|
445
567
|
name: "vibekit_delete_schedule",
|
|
446
|
-
description: "Delete
|
|
568
|
+
description: "Delete an account-level recurring schedule.",
|
|
447
569
|
inputSchema: {
|
|
448
570
|
type: "object",
|
|
449
571
|
properties: {
|
|
450
|
-
scheduleId: {
|
|
451
|
-
type: "string",
|
|
452
|
-
description: "The schedule ID to delete",
|
|
453
|
-
},
|
|
572
|
+
scheduleId: { type: "string", description: "Schedule ID to delete" },
|
|
454
573
|
},
|
|
455
574
|
required: ["scheduleId"],
|
|
456
575
|
},
|
|
457
576
|
},
|
|
458
|
-
// Account
|
|
577
|
+
// ── Account ──────────────────────────────────────────────────────────────────
|
|
459
578
|
{
|
|
460
579
|
name: "vibekit_account",
|
|
461
|
-
description: "Get VibeKit account info
|
|
462
|
-
inputSchema: {
|
|
463
|
-
type: "object",
|
|
464
|
-
properties: {},
|
|
465
|
-
},
|
|
580
|
+
description: "Get VibeKit account info — plan, credits balance, session usage, and limits.",
|
|
581
|
+
inputSchema: { type: "object", properties: {} },
|
|
466
582
|
},
|
|
583
|
+
// ── Skills ───────────────────────────────────────────────────────────────────
|
|
467
584
|
{
|
|
468
585
|
name: "vibekit_list_skills",
|
|
469
|
-
description: "List
|
|
586
|
+
description: "List available implementation skills. Skills contain code patterns and best practices for specific domains.",
|
|
470
587
|
inputSchema: {
|
|
471
588
|
type: "object",
|
|
472
589
|
properties: {
|
|
473
|
-
tag: {
|
|
474
|
-
type: "string",
|
|
475
|
-
description: "Filter skills by tag (e.g., 'react', 'database', 'security')",
|
|
476
|
-
},
|
|
590
|
+
tag: { type: "string", description: "Filter by tag (e.g. 'react', 'database', 'security')" },
|
|
477
591
|
},
|
|
478
592
|
},
|
|
479
593
|
},
|
|
480
594
|
{
|
|
481
595
|
name: "vibekit_get_skill",
|
|
482
|
-
description: "Fetch the full content of a specific skill.
|
|
596
|
+
description: "Fetch the full content of a specific skill. Use vibekit_list_skills to discover available skill IDs.",
|
|
483
597
|
inputSchema: {
|
|
484
598
|
type: "object",
|
|
485
599
|
properties: {
|
|
486
|
-
id: {
|
|
487
|
-
type: "string",
|
|
488
|
-
description: "Skill ID from vibekit_list_skills (e.g., 'nextjs', 'trpc', 'auth')",
|
|
489
|
-
},
|
|
600
|
+
id: { type: "string", description: "Skill ID (e.g. 'nextjs', 'trpc', 'auth')" },
|
|
490
601
|
},
|
|
491
602
|
required: ["id"],
|
|
492
603
|
},
|
|
@@ -496,7 +607,7 @@ const tools = [
|
|
|
496
607
|
async function handleTool(name, args) {
|
|
497
608
|
let result;
|
|
498
609
|
switch (name) {
|
|
499
|
-
//
|
|
610
|
+
// Apps
|
|
500
611
|
case "vibekit_list_apps":
|
|
501
612
|
result = await apiRequest("GET", "/hosting/apps");
|
|
502
613
|
break;
|
|
@@ -518,15 +629,15 @@ async function handleTool(name, args) {
|
|
|
518
629
|
case "vibekit_redeploy":
|
|
519
630
|
result = await apiRequest("POST", `/hosting/app/${args.appId}/redeploy`);
|
|
520
631
|
break;
|
|
632
|
+
case "vibekit_rollback":
|
|
633
|
+
result = await apiRequest("POST", `/hosting/app/${args.appId}/deploys/${args.deployId}/rollback`);
|
|
634
|
+
break;
|
|
635
|
+
case "vibekit_deploy_history":
|
|
636
|
+
result = await apiRequest("GET", `/hosting/app/${args.appId}/deploys`);
|
|
637
|
+
break;
|
|
521
638
|
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);
|
|
639
|
+
const lines = args.lines || 100;
|
|
640
|
+
result = await apiRequest("GET", `/hosting/app/${args.appId}/logs?lines=${lines}`);
|
|
530
641
|
break;
|
|
531
642
|
}
|
|
532
643
|
case "vibekit_restart_app":
|
|
@@ -538,6 +649,10 @@ async function handleTool(name, args) {
|
|
|
538
649
|
case "vibekit_start_app":
|
|
539
650
|
result = await apiRequest("POST", `/hosting/app/${args.appId}/start`);
|
|
540
651
|
break;
|
|
652
|
+
case "vibekit_delete_app":
|
|
653
|
+
result = await apiRequest("DELETE", `/hosting/app/${args.appId}`);
|
|
654
|
+
break;
|
|
655
|
+
// Env
|
|
541
656
|
case "vibekit_app_env":
|
|
542
657
|
result = await apiRequest("GET", `/hosting/app/${args.appId}/env`);
|
|
543
658
|
break;
|
|
@@ -546,10 +661,10 @@ async function handleTool(name, args) {
|
|
|
546
661
|
vars: args.vars,
|
|
547
662
|
});
|
|
548
663
|
break;
|
|
549
|
-
case "
|
|
550
|
-
result = await apiRequest("DELETE", `/hosting/app/${args.appId}`);
|
|
664
|
+
case "vibekit_delete_env":
|
|
665
|
+
result = await apiRequest("DELETE", `/hosting/app/${args.appId}/env/${args.key}`);
|
|
551
666
|
break;
|
|
552
|
-
//
|
|
667
|
+
// Agent
|
|
553
668
|
case "vibekit_chat":
|
|
554
669
|
result = await apiRequest("POST", `/hosting/app/${args.appId}/agent`, {
|
|
555
670
|
message: args.message,
|
|
@@ -558,17 +673,53 @@ async function handleTool(name, args) {
|
|
|
558
673
|
case "vibekit_agent_status":
|
|
559
674
|
result = await apiRequest("GET", `/hosting/app/${args.appId}/agent/status`);
|
|
560
675
|
break;
|
|
676
|
+
case "vibekit_agent_stop":
|
|
677
|
+
result = await apiRequest("POST", `/hosting/app/${args.appId}/agent/stop`);
|
|
678
|
+
break;
|
|
561
679
|
case "vibekit_agent_history": {
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
680
|
+
const limit = args.limit || 20;
|
|
681
|
+
result = await apiRequest("GET", `/hosting/app/${args.appId}/agent/history?limit=${limit}`);
|
|
682
|
+
break;
|
|
683
|
+
}
|
|
684
|
+
case "vibekit_agent_config":
|
|
685
|
+
result = await apiRequest("GET", `/hosting/app/${args.appId}/agent/config`);
|
|
686
|
+
break;
|
|
687
|
+
case "vibekit_agent_set_model":
|
|
688
|
+
result = await apiRequest("POST", `/hosting/app/${args.appId}/agent/config`, {
|
|
689
|
+
model: args.model,
|
|
690
|
+
});
|
|
691
|
+
break;
|
|
692
|
+
case "vibekit_exec":
|
|
693
|
+
result = await apiRequest("POST", `/hosting/app/${args.appId}/exec`, {
|
|
694
|
+
command: args.command,
|
|
695
|
+
});
|
|
696
|
+
break;
|
|
697
|
+
case "vibekit_agent_reset":
|
|
698
|
+
result = await apiRequest("POST", `/hosting/app/${args.appId}/agent/reset`);
|
|
699
|
+
break;
|
|
700
|
+
case "vibekit_agent_compact":
|
|
701
|
+
result = await apiRequest("POST", `/hosting/app/${args.appId}/agent/compact`);
|
|
702
|
+
break;
|
|
703
|
+
// Files
|
|
704
|
+
case "vibekit_list_files": {
|
|
705
|
+
let path = `/hosting/app/${args.appId}/agent/files`;
|
|
706
|
+
if (args.path)
|
|
707
|
+
path += `?path=${encodeURIComponent(args.path)}`;
|
|
569
708
|
result = await apiRequest("GET", path);
|
|
570
709
|
break;
|
|
571
710
|
}
|
|
711
|
+
case "vibekit_read_file":
|
|
712
|
+
result = await apiRequest("GET", `/hosting/app/${args.appId}/agent/file?path=${encodeURIComponent(args.path)}`);
|
|
713
|
+
break;
|
|
714
|
+
case "vibekit_write_file":
|
|
715
|
+
result = await apiRequest("PUT", `/hosting/app/${args.appId}/agent/file`, {
|
|
716
|
+
path: args.path,
|
|
717
|
+
content: args.content,
|
|
718
|
+
});
|
|
719
|
+
break;
|
|
720
|
+
case "vibekit_file_changes":
|
|
721
|
+
result = await apiRequest("GET", `/hosting/app/${args.appId}/agent/changes`);
|
|
722
|
+
break;
|
|
572
723
|
// Database
|
|
573
724
|
case "vibekit_enable_database":
|
|
574
725
|
result = await apiRequest("POST", `/hosting/app/${args.appId}/database`);
|
|
@@ -576,6 +727,23 @@ async function handleTool(name, args) {
|
|
|
576
727
|
case "vibekit_database_status":
|
|
577
728
|
result = await apiRequest("GET", `/hosting/app/${args.appId}/database`);
|
|
578
729
|
break;
|
|
730
|
+
case "vibekit_database_schema":
|
|
731
|
+
result = await apiRequest("GET", `/hosting/app/${args.appId}/database/schema`);
|
|
732
|
+
break;
|
|
733
|
+
case "vibekit_database_query":
|
|
734
|
+
result = await apiRequest("POST", `/hosting/app/${args.appId}/database/query`, {
|
|
735
|
+
sql: args.sql,
|
|
736
|
+
});
|
|
737
|
+
break;
|
|
738
|
+
// Domain
|
|
739
|
+
case "vibekit_add_domain":
|
|
740
|
+
result = await apiRequest("POST", `/hosting/app/${args.appId}/domain`, {
|
|
741
|
+
domain: args.domain,
|
|
742
|
+
});
|
|
743
|
+
break;
|
|
744
|
+
case "vibekit_remove_domain":
|
|
745
|
+
result = await apiRequest("DELETE", `/hosting/app/${args.appId}/domain`);
|
|
746
|
+
break;
|
|
579
747
|
// QA
|
|
580
748
|
case "vibekit_run_qa":
|
|
581
749
|
result = await apiRequest("POST", `/hosting/app/${args.appId}/qa`);
|
|
@@ -583,7 +751,21 @@ async function handleTool(name, args) {
|
|
|
583
751
|
case "vibekit_qa_status":
|
|
584
752
|
result = await apiRequest("GET", `/hosting/app/${args.appId}/qa`);
|
|
585
753
|
break;
|
|
586
|
-
//
|
|
754
|
+
// App-level schedules
|
|
755
|
+
case "vibekit_app_schedules":
|
|
756
|
+
result = await apiRequest("GET", `/hosting/app/${args.appId}/schedules`);
|
|
757
|
+
break;
|
|
758
|
+
case "vibekit_create_app_schedule":
|
|
759
|
+
result = await apiRequest("POST", `/hosting/app/${args.appId}/schedules`, {
|
|
760
|
+
name: args.name,
|
|
761
|
+
cron: args.cron,
|
|
762
|
+
task: args.task,
|
|
763
|
+
});
|
|
764
|
+
break;
|
|
765
|
+
case "vibekit_delete_app_schedule":
|
|
766
|
+
result = await apiRequest("DELETE", `/hosting/app/${args.appId}/schedules/${args.jobId}`);
|
|
767
|
+
break;
|
|
768
|
+
// Tasks
|
|
587
769
|
case "vibekit_submit_task":
|
|
588
770
|
result = await apiRequest("POST", "/task", {
|
|
589
771
|
task: args.task,
|
|
@@ -597,36 +779,35 @@ async function handleTool(name, args) {
|
|
|
597
779
|
result = await apiRequest("GET", `/task/${args.taskId}`);
|
|
598
780
|
break;
|
|
599
781
|
case "vibekit_list_tasks": {
|
|
600
|
-
let path = "/tasks";
|
|
601
782
|
const params = new URLSearchParams();
|
|
602
783
|
if (args.limit)
|
|
603
784
|
params.set("limit", String(args.limit));
|
|
604
785
|
if (args.status)
|
|
605
786
|
params.set("status", String(args.status));
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
result = await apiRequest("GET", path);
|
|
787
|
+
const qs = params.toString();
|
|
788
|
+
result = await apiRequest("GET", `/tasks${qs ? `?${qs}` : ""}`);
|
|
609
789
|
break;
|
|
610
790
|
}
|
|
611
791
|
case "vibekit_wait_for_task": {
|
|
612
792
|
const taskId = args.taskId;
|
|
613
793
|
const timeout = (args.timeoutSeconds || 300) * 1000;
|
|
614
794
|
const start = Date.now();
|
|
795
|
+
result = { ok: false, error: "Timeout waiting for task" };
|
|
615
796
|
while (Date.now() - start < timeout) {
|
|
616
|
-
|
|
617
|
-
if (!
|
|
618
|
-
|
|
619
|
-
const task = result.data;
|
|
620
|
-
if (task.status === "completed" || task.status === "failed") {
|
|
797
|
+
const poll = await apiRequest("GET", `/task/${taskId}`);
|
|
798
|
+
if (!poll.ok) {
|
|
799
|
+
result = poll;
|
|
621
800
|
break;
|
|
622
801
|
}
|
|
802
|
+
const task = poll.data;
|
|
803
|
+
result = poll;
|
|
804
|
+
if (task.status === "completed" || task.status === "failed")
|
|
805
|
+
break;
|
|
623
806
|
await new Promise((r) => setTimeout(r, 5000));
|
|
624
807
|
}
|
|
625
|
-
if (!result) {
|
|
626
|
-
result = { ok: false, error: "Timeout waiting for task" };
|
|
627
|
-
}
|
|
628
808
|
break;
|
|
629
809
|
}
|
|
810
|
+
// Account-level schedules
|
|
630
811
|
case "vibekit_create_schedule":
|
|
631
812
|
result = await apiRequest("POST", "/schedule", {
|
|
632
813
|
task: args.task,
|
|
@@ -645,18 +826,16 @@ async function handleTool(name, args) {
|
|
|
645
826
|
case "vibekit_account":
|
|
646
827
|
result = await apiRequest("GET", "/account");
|
|
647
828
|
break;
|
|
829
|
+
// Skills
|
|
648
830
|
case "vibekit_list_skills": {
|
|
649
831
|
try {
|
|
650
|
-
// Check cache
|
|
651
832
|
if (skillsCache && Date.now() - skillsCache.fetchedAt < CACHE_TTL) {
|
|
652
833
|
let skills = skillsCache.manifest.skills;
|
|
653
|
-
if (args.tag)
|
|
834
|
+
if (args.tag)
|
|
654
835
|
skills = skills.filter((s) => s.tags?.includes(args.tag));
|
|
655
|
-
}
|
|
656
|
-
result = { ok: true, data: { skills } };
|
|
836
|
+
result = { ok: true, data: { skills, count: skills.length } };
|
|
657
837
|
break;
|
|
658
838
|
}
|
|
659
|
-
// Fetch manifest
|
|
660
839
|
const res = await fetch(`${SKILLS_REGISTRY}/skills.json`);
|
|
661
840
|
if (!res.ok) {
|
|
662
841
|
result = { ok: false, error: `Failed to fetch skills: ${res.status}` };
|
|
@@ -665,9 +844,8 @@ async function handleTool(name, args) {
|
|
|
665
844
|
const manifest = await res.json();
|
|
666
845
|
skillsCache = { manifest, fetchedAt: Date.now() };
|
|
667
846
|
let skills = manifest.skills;
|
|
668
|
-
if (args.tag)
|
|
847
|
+
if (args.tag)
|
|
669
848
|
skills = skills.filter((s) => s.tags?.includes(args.tag));
|
|
670
|
-
}
|
|
671
849
|
result = { ok: true, data: { skills, count: skills.length } };
|
|
672
850
|
}
|
|
673
851
|
catch (err) {
|
|
@@ -703,25 +881,13 @@ async function handleTool(name, args) {
|
|
|
703
881
|
: `Error: ${result.error}`;
|
|
704
882
|
return { content: [{ type: "text", text }] };
|
|
705
883
|
}
|
|
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
|
|
884
|
+
// Server setup
|
|
885
|
+
const server = new index_js_1.Server({ name: "vibekit-mcp", version: "0.5.0" }, { capabilities: { tools: {} } });
|
|
886
|
+
server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => ({ tools }));
|
|
720
887
|
server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
|
|
721
888
|
const { name, arguments: args } = request.params;
|
|
722
889
|
return handleTool(name, (args || {}));
|
|
723
890
|
});
|
|
724
|
-
// Start server
|
|
725
891
|
async function main() {
|
|
726
892
|
const transport = new stdio_js_1.StdioServerTransport();
|
|
727
893
|
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.1",
|
|
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": {
|