vibekit-mcp 0.5.4 → 0.5.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +55 -104
- package/dist/index.js +256 -429
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,20 +1,22 @@
|
|
|
1
1
|
# vibekit-mcp
|
|
2
2
|
|
|
3
|
-
MCP server for VibeKit
|
|
3
|
+
MCP server for VibeKit, deploy apps, manage hosting, and chat with AI agents from any MCP client.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
This package is for **VibeKit cloud/API access**. It does **not** connect your local Claude Code instance to Telegram. For local-machine remote control, use `vibekit-agent`.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
## Installation
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
10
|
npm install -g vibekit-mcp
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
## Setup
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
1. Get a VibeKit API key:
|
|
16
|
+
- Open [@the_vibe_kit_bot](https://t.me/the_vibe_kit_bot) in Telegram
|
|
17
|
+
- Send `/apikey` to generate your key
|
|
16
18
|
|
|
17
|
-
|
|
19
|
+
2. Add to your MCP client config (e.g. Claude Desktop) (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS):
|
|
18
20
|
|
|
19
21
|
```json
|
|
20
22
|
{
|
|
@@ -29,134 +31,80 @@ Go to [app.vibekit.bot](https://app.vibekit.bot) → Settings → API Keys, or v
|
|
|
29
31
|
}
|
|
30
32
|
```
|
|
31
33
|
|
|
32
|
-
|
|
34
|
+
3. Restart your MCP client
|
|
33
35
|
|
|
34
|
-
|
|
36
|
+
## Available Tools
|
|
35
37
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
### Apps
|
|
38
|
+
### Hosting
|
|
39
39
|
|
|
40
40
|
| Tool | Description |
|
|
41
41
|
|------|-------------|
|
|
42
|
-
| `vibekit_list_apps` | List all
|
|
43
|
-
| `vibekit_get_app` | Get
|
|
44
|
-
| `vibekit_create_app` | Create
|
|
45
|
-
| `vibekit_deploy` | Deploy
|
|
46
|
-
| `vibekit_redeploy` | Redeploy with latest code |
|
|
47
|
-
| `
|
|
48
|
-
| `vibekit_deploy_history` | List deployment snapshots |
|
|
49
|
-
| `vibekit_app_logs` | Get runtime logs |
|
|
42
|
+
| `vibekit_list_apps` | List all hosted apps |
|
|
43
|
+
| `vibekit_get_app` | Get details about a specific app |
|
|
44
|
+
| `vibekit_create_app` | Create new app from template |
|
|
45
|
+
| `vibekit_deploy` | Deploy GitHub repo to hosting |
|
|
46
|
+
| `vibekit_redeploy` | Redeploy app with latest code |
|
|
47
|
+
| `vibekit_app_logs` | Get application logs |
|
|
50
48
|
| `vibekit_restart_app` | Restart an app |
|
|
51
49
|
| `vibekit_stop_app` | Stop an app |
|
|
52
50
|
| `vibekit_start_app` | Start a stopped app |
|
|
53
|
-
| `
|
|
54
|
-
| `
|
|
55
|
-
|
|
56
|
-
### Environment Variables
|
|
57
|
-
|
|
58
|
-
| Tool | Description |
|
|
59
|
-
|------|-------------|
|
|
60
|
-
| `vibekit_app_env` | Get env vars (values revealed) |
|
|
61
|
-
| `vibekit_set_env` | Set one or more env vars |
|
|
62
|
-
| `vibekit_delete_env` | Delete a specific env var |
|
|
63
|
-
|
|
64
|
-
### AI Agent
|
|
65
|
-
|
|
66
|
-
| Tool | Description |
|
|
67
|
-
|------|-------------|
|
|
68
|
-
| `vibekit_chat` | Send a message to an app's AI agent |
|
|
69
|
-
| `vibekit_agent_status` | Check if agent is idle or running |
|
|
70
|
-
| `vibekit_agent_stop` | Stop a running agent request |
|
|
71
|
-
| `vibekit_agent_history` | Get conversation history |
|
|
72
|
-
| `vibekit_agent_config` | Get current model config |
|
|
73
|
-
| `vibekit_agent_set_model` | Change model (`claude-opus-4-6`, `claude-sonnet-4-20250514`, `claude-haiku-3.5`) |
|
|
74
|
-
| `vibekit_agent_reset` | Reset agent (clear sessions, memory, restart, or cleanup disk) |
|
|
75
|
-
| `vibekit_agent_compact` | Compact agent memory to free context |
|
|
51
|
+
| `vibekit_app_env` | Get app environment variables |
|
|
52
|
+
| `vibekit_set_env` | Set app environment variables |
|
|
53
|
+
| `vibekit_delete_app` | Delete an app permanently |
|
|
76
54
|
|
|
77
|
-
###
|
|
55
|
+
### Agent
|
|
78
56
|
|
|
79
57
|
| Tool | Description |
|
|
80
58
|
|------|-------------|
|
|
81
|
-
| `
|
|
82
|
-
| `
|
|
83
|
-
| `
|
|
84
|
-
| `vibekit_file_changes` | See uncommitted file changes |
|
|
59
|
+
| `vibekit_chat` | Chat with an app's AI agent |
|
|
60
|
+
| `vibekit_agent_status` | Get agent status |
|
|
61
|
+
| `vibekit_agent_history` | Get chat history with agent |
|
|
85
62
|
|
|
86
63
|
### Database
|
|
87
64
|
|
|
88
65
|
| Tool | Description |
|
|
89
66
|
|------|-------------|
|
|
90
|
-
| `vibekit_enable_database` |
|
|
91
|
-
| `vibekit_database_status` |
|
|
92
|
-
| `vibekit_database_schema` | Get tables and columns |
|
|
93
|
-
| `vibekit_database_query` | Run a SQL query |
|
|
94
|
-
|
|
95
|
-
### Custom Domains
|
|
96
|
-
|
|
97
|
-
| Tool | Description |
|
|
98
|
-
|------|-------------|
|
|
99
|
-
| `vibekit_add_domain` | Add a custom domain |
|
|
100
|
-
| `vibekit_remove_domain` | Remove a custom domain |
|
|
67
|
+
| `vibekit_enable_database` | Enable database for an app |
|
|
68
|
+
| `vibekit_database_status` | Get database status and connection info |
|
|
101
69
|
|
|
102
70
|
### QA
|
|
103
71
|
|
|
104
72
|
| Tool | Description |
|
|
105
73
|
|------|-------------|
|
|
106
74
|
| `vibekit_run_qa` | Run automated QA tests |
|
|
107
|
-
| `vibekit_qa_status` | Get
|
|
108
|
-
|
|
109
|
-
### Cron Schedules (per app)
|
|
75
|
+
| `vibekit_qa_status` | Get QA test results |
|
|
110
76
|
|
|
111
|
-
|
|
112
|
-
|------|-------------|
|
|
113
|
-
| `vibekit_app_schedules` | List cron jobs for an app |
|
|
114
|
-
| `vibekit_create_app_schedule` | Create a cron job |
|
|
115
|
-
| `vibekit_delete_app_schedule` | Delete a cron job |
|
|
116
|
-
|
|
117
|
-
### Async Coding Tasks
|
|
77
|
+
### Tasks
|
|
118
78
|
|
|
119
79
|
| Tool | Description |
|
|
120
80
|
|------|-------------|
|
|
121
|
-
| `vibekit_submit_task` | Submit
|
|
122
|
-
| `vibekit_get_task` | Get task status
|
|
81
|
+
| `vibekit_submit_task` | Submit a coding task |
|
|
82
|
+
| `vibekit_get_task` | Get task status/result |
|
|
123
83
|
| `vibekit_list_tasks` | List recent tasks |
|
|
124
|
-
| `vibekit_wait_for_task` |
|
|
125
|
-
| `vibekit_create_schedule` | Create
|
|
126
|
-
| `vibekit_list_schedules` | List
|
|
127
|
-
| `vibekit_delete_schedule` | Delete
|
|
84
|
+
| `vibekit_wait_for_task` | Wait for task completion |
|
|
85
|
+
| `vibekit_create_schedule` | Create recurring scheduled task |
|
|
86
|
+
| `vibekit_list_schedules` | List scheduled tasks |
|
|
87
|
+
| `vibekit_delete_schedule` | Delete scheduled task |
|
|
128
88
|
|
|
129
|
-
### Account
|
|
89
|
+
### Account
|
|
130
90
|
|
|
131
91
|
| Tool | Description |
|
|
132
92
|
|------|-------------|
|
|
133
|
-
| `vibekit_account` |
|
|
134
|
-
| `vibekit_list_skills` |
|
|
135
|
-
| `vibekit_get_skill` | Fetch
|
|
136
|
-
|
|
137
|
-
---
|
|
138
|
-
|
|
139
|
-
## Example Prompts
|
|
140
|
-
|
|
141
|
-
```
|
|
142
|
-
"List my apps and show the logs for the one that's erroring"
|
|
93
|
+
| `vibekit_account` | Get account info (plan, credits, usage) |
|
|
94
|
+
| `vibekit_list_skills` | List implementation skills |
|
|
95
|
+
| `vibekit_get_skill` | Fetch specific skill content |
|
|
143
96
|
|
|
144
|
-
|
|
97
|
+
## Example Usage
|
|
145
98
|
|
|
146
|
-
|
|
99
|
+
Once configured, you can use prompts like:
|
|
147
100
|
|
|
148
|
-
"
|
|
149
|
-
|
|
150
|
-
"
|
|
151
|
-
|
|
152
|
-
"
|
|
153
|
-
|
|
154
|
-
"
|
|
155
|
-
|
|
156
|
-
"Check my account balance and show how many sessions I've used this month"
|
|
157
|
-
```
|
|
158
|
-
|
|
159
|
-
---
|
|
101
|
+
- "Deploy my GitHub repo to VibeKit and create a new app"
|
|
102
|
+
- "Chat with the AI agent for my app about adding a contact form"
|
|
103
|
+
- "Show me the logs for my app and restart it if there are errors"
|
|
104
|
+
- "Enable a database for my app and check its status"
|
|
105
|
+
- "Run QA tests on my deployed app"
|
|
106
|
+
- "Check my VibeKit account balance and list my apps"
|
|
107
|
+
- "Create a weekly schedule to improve my app's performance"
|
|
160
108
|
|
|
161
109
|
## Environment Variables
|
|
162
110
|
|
|
@@ -165,11 +113,14 @@ Go to [app.vibekit.bot](https://app.vibekit.bot) → Settings → API Keys, or v
|
|
|
165
113
|
| `VIBEKIT_API_KEY` | Your VibeKit API key (required) | — |
|
|
166
114
|
| `VIBEKIT_API_URL` | API base URL | `https://vibekit.bot/api/v1` |
|
|
167
115
|
|
|
168
|
-
|
|
116
|
+
## Related Packages
|
|
117
|
+
|
|
118
|
+
- `vibekit-cli`: terminal client for VibeKit cloud workflows
|
|
119
|
+
- `vibekit-agent`: Telegram bridge for local Claude Code on your own machine
|
|
169
120
|
|
|
170
121
|
## Links
|
|
171
122
|
|
|
172
|
-
- [
|
|
173
|
-
- [
|
|
174
|
-
- [API
|
|
175
|
-
- [GitHub](https://github.com/609NFT/vibekit)
|
|
123
|
+
- [VibeKit Website](https://vibekit.bot)
|
|
124
|
+
- [API Documentation](https://vibekit.bot/SKILL.md)
|
|
125
|
+
- [Get API Key](https://t.me/the_vibe_kit_bot)
|
|
126
|
+
- [GitHub](https://github.com/609NFT/vibekit)
|
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://
|
|
15
|
+
console.error("Get one at https://t.me/the_vibe_kit_bot with /apikey command");
|
|
16
16
|
process.exit(1);
|
|
17
17
|
}
|
|
18
18
|
// API helper
|
|
@@ -38,19 +38,25 @@ async function apiRequest(method, path, body) {
|
|
|
38
38
|
}
|
|
39
39
|
// Tool definitions
|
|
40
40
|
const tools = [
|
|
41
|
-
//
|
|
41
|
+
// Hosting & Apps
|
|
42
42
|
{
|
|
43
43
|
name: "vibekit_list_apps",
|
|
44
44
|
description: "List all hosted apps in your VibeKit account.",
|
|
45
|
-
inputSchema: {
|
|
45
|
+
inputSchema: {
|
|
46
|
+
type: "object",
|
|
47
|
+
properties: {},
|
|
48
|
+
},
|
|
46
49
|
},
|
|
47
50
|
{
|
|
48
51
|
name: "vibekit_get_app",
|
|
49
|
-
description: "Get details about a specific hosted app
|
|
52
|
+
description: "Get details about a specific hosted app.",
|
|
50
53
|
inputSchema: {
|
|
51
54
|
type: "object",
|
|
52
55
|
properties: {
|
|
53
|
-
appId: {
|
|
56
|
+
appId: {
|
|
57
|
+
type: "string",
|
|
58
|
+
description: "The app ID to get details for",
|
|
59
|
+
},
|
|
54
60
|
},
|
|
55
61
|
required: ["appId"],
|
|
56
62
|
},
|
|
@@ -61,8 +67,14 @@ const tools = [
|
|
|
61
67
|
inputSchema: {
|
|
62
68
|
type: "object",
|
|
63
69
|
properties: {
|
|
64
|
-
template: {
|
|
65
|
-
|
|
70
|
+
template: {
|
|
71
|
+
type: "string",
|
|
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
|
+
},
|
|
66
78
|
},
|
|
67
79
|
required: ["template", "subdomain"],
|
|
68
80
|
},
|
|
@@ -73,42 +85,28 @@ const tools = [
|
|
|
73
85
|
inputSchema: {
|
|
74
86
|
type: "object",
|
|
75
87
|
properties: {
|
|
76
|
-
repo: {
|
|
77
|
-
|
|
88
|
+
repo: {
|
|
89
|
+
type: "string",
|
|
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
|
+
},
|
|
78
96
|
},
|
|
79
97
|
required: ["repo", "subdomain"],
|
|
80
98
|
},
|
|
81
99
|
},
|
|
82
100
|
{
|
|
83
101
|
name: "vibekit_redeploy",
|
|
84
|
-
description: "Redeploy an existing hosted app to
|
|
102
|
+
description: "Redeploy an existing hosted app to update it with latest code.",
|
|
85
103
|
inputSchema: {
|
|
86
104
|
type: "object",
|
|
87
105
|
properties: {
|
|
88
|
-
appId: {
|
|
89
|
-
|
|
90
|
-
|
|
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" },
|
|
106
|
+
appId: {
|
|
107
|
+
type: "string",
|
|
108
|
+
description: "The app ID to redeploy",
|
|
109
|
+
},
|
|
112
110
|
},
|
|
113
111
|
required: ["appId"],
|
|
114
112
|
},
|
|
@@ -119,19 +117,28 @@ const tools = [
|
|
|
119
117
|
inputSchema: {
|
|
120
118
|
type: "object",
|
|
121
119
|
properties: {
|
|
122
|
-
appId: {
|
|
123
|
-
|
|
120
|
+
appId: {
|
|
121
|
+
type: "string",
|
|
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
|
+
},
|
|
124
128
|
},
|
|
125
129
|
required: ["appId"],
|
|
126
130
|
},
|
|
127
131
|
},
|
|
128
132
|
{
|
|
129
133
|
name: "vibekit_restart_app",
|
|
130
|
-
description: "Restart a hosted app
|
|
134
|
+
description: "Restart a hosted app.",
|
|
131
135
|
inputSchema: {
|
|
132
136
|
type: "object",
|
|
133
137
|
properties: {
|
|
134
|
-
appId: {
|
|
138
|
+
appId: {
|
|
139
|
+
type: "string",
|
|
140
|
+
description: "The app ID to restart",
|
|
141
|
+
},
|
|
135
142
|
},
|
|
136
143
|
required: ["appId"],
|
|
137
144
|
},
|
|
@@ -142,7 +149,10 @@ const tools = [
|
|
|
142
149
|
inputSchema: {
|
|
143
150
|
type: "object",
|
|
144
151
|
properties: {
|
|
145
|
-
appId: {
|
|
152
|
+
appId: {
|
|
153
|
+
type: "string",
|
|
154
|
+
description: "The app ID to stop",
|
|
155
|
+
},
|
|
146
156
|
},
|
|
147
157
|
required: ["appId"],
|
|
148
158
|
},
|
|
@@ -153,224 +163,122 @@ const tools = [
|
|
|
153
163
|
inputSchema: {
|
|
154
164
|
type: "object",
|
|
155
165
|
properties: {
|
|
156
|
-
appId: {
|
|
157
|
-
|
|
158
|
-
|
|
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" },
|
|
166
|
+
appId: {
|
|
167
|
+
type: "string",
|
|
168
|
+
description: "The app ID to start",
|
|
169
|
+
},
|
|
168
170
|
},
|
|
169
171
|
required: ["appId"],
|
|
170
172
|
},
|
|
171
173
|
},
|
|
172
|
-
// ── Environment Variables ────────────────────────────────────────────────────
|
|
173
174
|
{
|
|
174
175
|
name: "vibekit_app_env",
|
|
175
176
|
description: "Get environment variables for a hosted app.",
|
|
176
177
|
inputSchema: {
|
|
177
178
|
type: "object",
|
|
178
179
|
properties: {
|
|
179
|
-
appId: {
|
|
180
|
+
appId: {
|
|
181
|
+
type: "string",
|
|
182
|
+
description: "The app ID to get environment variables for",
|
|
183
|
+
},
|
|
180
184
|
},
|
|
181
185
|
required: ["appId"],
|
|
182
186
|
},
|
|
183
187
|
},
|
|
184
188
|
{
|
|
185
189
|
name: "vibekit_set_env",
|
|
186
|
-
description: "Set
|
|
190
|
+
description: "Set environment variables for a hosted app.",
|
|
187
191
|
inputSchema: {
|
|
188
192
|
type: "object",
|
|
189
193
|
properties: {
|
|
190
|
-
appId: {
|
|
191
|
-
|
|
194
|
+
appId: {
|
|
195
|
+
type: "string",
|
|
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
|
+
},
|
|
192
202
|
},
|
|
193
203
|
required: ["appId", "vars"],
|
|
194
204
|
},
|
|
195
205
|
},
|
|
196
206
|
{
|
|
197
|
-
name: "
|
|
198
|
-
description: "Delete a
|
|
207
|
+
name: "vibekit_delete_app",
|
|
208
|
+
description: "Delete a hosted app permanently.",
|
|
199
209
|
inputSchema: {
|
|
200
210
|
type: "object",
|
|
201
211
|
properties: {
|
|
202
|
-
appId: {
|
|
203
|
-
|
|
212
|
+
appId: {
|
|
213
|
+
type: "string",
|
|
214
|
+
description: "The app ID to delete",
|
|
215
|
+
},
|
|
204
216
|
},
|
|
205
|
-
required: ["appId"
|
|
217
|
+
required: ["appId"],
|
|
206
218
|
},
|
|
207
219
|
},
|
|
208
|
-
//
|
|
220
|
+
// AI Agent
|
|
209
221
|
{
|
|
210
222
|
name: "vibekit_chat",
|
|
211
|
-
description: "
|
|
223
|
+
description: "Chat with an app's AI agent. The agent can read, write, and modify the app's code.",
|
|
212
224
|
inputSchema: {
|
|
213
225
|
type: "object",
|
|
214
226
|
properties: {
|
|
215
|
-
appId: {
|
|
216
|
-
|
|
227
|
+
appId: {
|
|
228
|
+
type: "string",
|
|
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
|
+
},
|
|
217
235
|
},
|
|
218
236
|
required: ["appId", "message"],
|
|
219
237
|
},
|
|
220
238
|
},
|
|
221
239
|
{
|
|
222
240
|
name: "vibekit_agent_status",
|
|
223
|
-
description: "Get the
|
|
241
|
+
description: "Get the status of an app's AI agent.",
|
|
224
242
|
inputSchema: {
|
|
225
243
|
type: "object",
|
|
226
244
|
properties: {
|
|
227
|
-
appId: {
|
|
228
|
-
|
|
229
|
-
|
|
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" },
|
|
245
|
+
appId: {
|
|
246
|
+
type: "string",
|
|
247
|
+
description: "The app ID to get agent status for",
|
|
248
|
+
},
|
|
239
249
|
},
|
|
240
250
|
required: ["appId"],
|
|
241
251
|
},
|
|
242
252
|
},
|
|
243
253
|
{
|
|
244
254
|
name: "vibekit_agent_history",
|
|
245
|
-
description: "Get
|
|
246
|
-
inputSchema: {
|
|
247
|
-
type: "object",
|
|
248
|
-
properties: {
|
|
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. Returns the current model.",
|
|
255
|
+
description: "Get chat history with an app's AI agent.",
|
|
258
256
|
inputSchema: {
|
|
259
257
|
type: "object",
|
|
260
258
|
properties: {
|
|
261
|
-
appId: {
|
|
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 app's agent. Choose an action: 'clear-sessions' (wipe conversation history), 'clear-memory' (wipe memory files), 'restart-agent' (restart the gateway process), 'cleanup-disk' (free disk space).",
|
|
293
|
-
inputSchema: {
|
|
294
|
-
type: "object",
|
|
295
|
-
properties: {
|
|
296
|
-
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
297
|
-
action: {
|
|
259
|
+
appId: {
|
|
298
260
|
type: "string",
|
|
299
|
-
|
|
300
|
-
|
|
261
|
+
description: "The app ID to get agent history for",
|
|
262
|
+
},
|
|
263
|
+
limit: {
|
|
264
|
+
type: "number",
|
|
265
|
+
description: "Maximum number of messages to return (default: 20)",
|
|
301
266
|
},
|
|
302
|
-
},
|
|
303
|
-
required: ["appId", "action"],
|
|
304
|
-
},
|
|
305
|
-
},
|
|
306
|
-
{
|
|
307
|
-
name: "vibekit_agent_compact",
|
|
308
|
-
description: "Compact the agent's memory to free up context window space. Useful for long-running agents.",
|
|
309
|
-
inputSchema: {
|
|
310
|
-
type: "object",
|
|
311
|
-
properties: {
|
|
312
|
-
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
313
|
-
},
|
|
314
|
-
required: ["appId"],
|
|
315
|
-
},
|
|
316
|
-
},
|
|
317
|
-
// ── Files ────────────────────────────────────────────────────────────────────
|
|
318
|
-
{
|
|
319
|
-
name: "vibekit_list_files",
|
|
320
|
-
description: "List files in an app's workspace directory.",
|
|
321
|
-
inputSchema: {
|
|
322
|
-
type: "object",
|
|
323
|
-
properties: {
|
|
324
|
-
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
325
|
-
path: { type: "string", description: "Directory path to list (default: root)" },
|
|
326
|
-
},
|
|
327
|
-
required: ["appId"],
|
|
328
|
-
},
|
|
329
|
-
},
|
|
330
|
-
{
|
|
331
|
-
name: "vibekit_read_file",
|
|
332
|
-
description: "Read the contents of a file in an app's workspace.",
|
|
333
|
-
inputSchema: {
|
|
334
|
-
type: "object",
|
|
335
|
-
properties: {
|
|
336
|
-
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
337
|
-
path: { type: "string", description: "File path relative to workspace root, e.g. 'src/index.ts'" },
|
|
338
|
-
},
|
|
339
|
-
required: ["appId", "path"],
|
|
340
|
-
},
|
|
341
|
-
},
|
|
342
|
-
{
|
|
343
|
-
name: "vibekit_write_file",
|
|
344
|
-
description: "Write or update a file in an app's workspace. Use this to edit code directly.",
|
|
345
|
-
inputSchema: {
|
|
346
|
-
type: "object",
|
|
347
|
-
properties: {
|
|
348
|
-
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
349
|
-
path: { type: "string", description: "File path relative to workspace root, e.g. 'src/index.ts'" },
|
|
350
|
-
content: { type: "string", description: "Full file content to write" },
|
|
351
|
-
},
|
|
352
|
-
required: ["appId", "path", "content"],
|
|
353
|
-
},
|
|
354
|
-
},
|
|
355
|
-
{
|
|
356
|
-
name: "vibekit_file_changes",
|
|
357
|
-
description: "Get a diff of recent file changes in an app's workspace (uncommitted changes).",
|
|
358
|
-
inputSchema: {
|
|
359
|
-
type: "object",
|
|
360
|
-
properties: {
|
|
361
|
-
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
362
267
|
},
|
|
363
268
|
required: ["appId"],
|
|
364
269
|
},
|
|
365
270
|
},
|
|
366
|
-
//
|
|
271
|
+
// Database
|
|
367
272
|
{
|
|
368
273
|
name: "vibekit_enable_database",
|
|
369
|
-
description: "Enable
|
|
274
|
+
description: "Enable database for a hosted app.",
|
|
370
275
|
inputSchema: {
|
|
371
276
|
type: "object",
|
|
372
277
|
properties: {
|
|
373
|
-
appId: {
|
|
278
|
+
appId: {
|
|
279
|
+
type: "string",
|
|
280
|
+
description: "The app ID to enable database for",
|
|
281
|
+
},
|
|
374
282
|
},
|
|
375
283
|
required: ["appId"],
|
|
376
284
|
},
|
|
@@ -381,131 +289,70 @@ const tools = [
|
|
|
381
289
|
inputSchema: {
|
|
382
290
|
type: "object",
|
|
383
291
|
properties: {
|
|
384
|
-
appId: {
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
},
|
|
389
|
-
{
|
|
390
|
-
name: "vibekit_database_schema",
|
|
391
|
-
description: "Get the database schema (tables and columns) for an app's database.",
|
|
392
|
-
inputSchema: {
|
|
393
|
-
type: "object",
|
|
394
|
-
properties: {
|
|
395
|
-
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
396
|
-
},
|
|
397
|
-
required: ["appId"],
|
|
398
|
-
},
|
|
399
|
-
},
|
|
400
|
-
{
|
|
401
|
-
name: "vibekit_database_query",
|
|
402
|
-
description: "Run a SQL query against an app's database. Read-only queries are always safe; write queries modify data.",
|
|
403
|
-
inputSchema: {
|
|
404
|
-
type: "object",
|
|
405
|
-
properties: {
|
|
406
|
-
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
407
|
-
sql: { type: "string", description: "SQL query to execute, e.g. 'SELECT * FROM users LIMIT 10'" },
|
|
408
|
-
},
|
|
409
|
-
required: ["appId", "sql"],
|
|
410
|
-
},
|
|
411
|
-
},
|
|
412
|
-
// ── Domain ───────────────────────────────────────────────────────────────────
|
|
413
|
-
{
|
|
414
|
-
name: "vibekit_add_domain",
|
|
415
|
-
description: "Add a custom domain to an app. After adding, update your DNS CNAME to point to vibekit.bot.",
|
|
416
|
-
inputSchema: {
|
|
417
|
-
type: "object",
|
|
418
|
-
properties: {
|
|
419
|
-
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
420
|
-
domain: { type: "string", description: "Custom domain to add, e.g. 'myapp.com'" },
|
|
421
|
-
},
|
|
422
|
-
required: ["appId", "domain"],
|
|
423
|
-
},
|
|
424
|
-
},
|
|
425
|
-
{
|
|
426
|
-
name: "vibekit_remove_domain",
|
|
427
|
-
description: "Remove a custom domain from an app.",
|
|
428
|
-
inputSchema: {
|
|
429
|
-
type: "object",
|
|
430
|
-
properties: {
|
|
431
|
-
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
292
|
+
appId: {
|
|
293
|
+
type: "string",
|
|
294
|
+
description: "The app ID to get database status for",
|
|
295
|
+
},
|
|
432
296
|
},
|
|
433
297
|
required: ["appId"],
|
|
434
298
|
},
|
|
435
299
|
},
|
|
436
|
-
//
|
|
300
|
+
// QA
|
|
437
301
|
{
|
|
438
302
|
name: "vibekit_run_qa",
|
|
439
|
-
description: "Run automated QA tests on a hosted app.
|
|
303
|
+
description: "Run automated QA tests on a hosted app.",
|
|
440
304
|
inputSchema: {
|
|
441
305
|
type: "object",
|
|
442
306
|
properties: {
|
|
443
|
-
appId: {
|
|
307
|
+
appId: {
|
|
308
|
+
type: "string",
|
|
309
|
+
description: "The app ID to run QA tests for",
|
|
310
|
+
},
|
|
444
311
|
},
|
|
445
312
|
required: ["appId"],
|
|
446
313
|
},
|
|
447
314
|
},
|
|
448
315
|
{
|
|
449
316
|
name: "vibekit_qa_status",
|
|
450
|
-
description: "Get
|
|
317
|
+
description: "Get QA test results and status for an app.",
|
|
451
318
|
inputSchema: {
|
|
452
319
|
type: "object",
|
|
453
320
|
properties: {
|
|
454
|
-
appId: {
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
},
|
|
459
|
-
// ── Schedules (app-level cron jobs) ──────────────────────────────────────────
|
|
460
|
-
{
|
|
461
|
-
name: "vibekit_app_schedules",
|
|
462
|
-
description: "List cron schedules configured for an app's agent.",
|
|
463
|
-
inputSchema: {
|
|
464
|
-
type: "object",
|
|
465
|
-
properties: {
|
|
466
|
-
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
321
|
+
appId: {
|
|
322
|
+
type: "string",
|
|
323
|
+
description: "The app ID to get QA status for",
|
|
324
|
+
},
|
|
467
325
|
},
|
|
468
326
|
required: ["appId"],
|
|
469
327
|
},
|
|
470
328
|
},
|
|
471
|
-
|
|
472
|
-
name: "vibekit_create_app_schedule",
|
|
473
|
-
description: "Create a cron schedule for an app's agent (e.g. daily report, nightly cleanup).",
|
|
474
|
-
inputSchema: {
|
|
475
|
-
type: "object",
|
|
476
|
-
properties: {
|
|
477
|
-
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
478
|
-
name: { type: "string", description: "Friendly name for the schedule" },
|
|
479
|
-
cron: { type: "string", description: "Cron expression, e.g. '0 9 * * 1' for every Monday 9am UTC" },
|
|
480
|
-
task: { type: "string", description: "What the agent should do on each run" },
|
|
481
|
-
},
|
|
482
|
-
required: ["appId", "name", "cron", "task"],
|
|
483
|
-
},
|
|
484
|
-
},
|
|
485
|
-
{
|
|
486
|
-
name: "vibekit_delete_app_schedule",
|
|
487
|
-
description: "Delete a cron schedule from an app.",
|
|
488
|
-
inputSchema: {
|
|
489
|
-
type: "object",
|
|
490
|
-
properties: {
|
|
491
|
-
appId: { type: "string", description: "App ID or subdomain slug" },
|
|
492
|
-
jobId: { type: "string", description: "Schedule job ID to delete" },
|
|
493
|
-
},
|
|
494
|
-
required: ["appId", "jobId"],
|
|
495
|
-
},
|
|
496
|
-
},
|
|
497
|
-
// ── Tasks (async coding tasks) ───────────────────────────────────────────────
|
|
329
|
+
// Tasks (existing)
|
|
498
330
|
{
|
|
499
331
|
name: "vibekit_submit_task",
|
|
500
|
-
description: "Submit
|
|
332
|
+
description: "Submit a coding task to VibeKit. The AI will write code, commit to GitHub, and deploy to {subdomain}.vibekit.bot. Returns a task ID to poll for results.",
|
|
501
333
|
inputSchema: {
|
|
502
334
|
type: "object",
|
|
503
335
|
properties: {
|
|
504
|
-
task: {
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
336
|
+
task: {
|
|
337
|
+
type: "string",
|
|
338
|
+
description: "What you want built or changed. Be specific about features, design, and behavior.",
|
|
339
|
+
},
|
|
340
|
+
repo: {
|
|
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
|
+
},
|
|
509
356
|
},
|
|
510
357
|
required: ["task"],
|
|
511
358
|
},
|
|
@@ -516,7 +363,10 @@ const tools = [
|
|
|
516
363
|
inputSchema: {
|
|
517
364
|
type: "object",
|
|
518
365
|
properties: {
|
|
519
|
-
taskId: {
|
|
366
|
+
taskId: {
|
|
367
|
+
type: "string",
|
|
368
|
+
description: "The task ID returned from vibekit_submit_task",
|
|
369
|
+
},
|
|
520
370
|
},
|
|
521
371
|
required: ["taskId"],
|
|
522
372
|
},
|
|
@@ -527,82 +377,116 @@ const tools = [
|
|
|
527
377
|
inputSchema: {
|
|
528
378
|
type: "object",
|
|
529
379
|
properties: {
|
|
530
|
-
limit: {
|
|
380
|
+
limit: {
|
|
381
|
+
type: "number",
|
|
382
|
+
description: "Max number of tasks to return. Default: 10",
|
|
383
|
+
},
|
|
531
384
|
status: {
|
|
532
385
|
type: "string",
|
|
533
|
-
enum: ["pending", "running", "
|
|
534
|
-
description: "Filter by status
|
|
386
|
+
enum: ["pending", "running", "completed", "failed"],
|
|
387
|
+
description: "Filter by status",
|
|
535
388
|
},
|
|
536
389
|
},
|
|
537
390
|
},
|
|
538
391
|
},
|
|
539
392
|
{
|
|
540
393
|
name: "vibekit_wait_for_task",
|
|
541
|
-
description: "Wait for a task to complete
|
|
394
|
+
description: "Wait for a task to complete and return the result. Polls every 5 seconds up to the timeout.",
|
|
542
395
|
inputSchema: {
|
|
543
396
|
type: "object",
|
|
544
397
|
properties: {
|
|
545
|
-
taskId: {
|
|
546
|
-
|
|
398
|
+
taskId: {
|
|
399
|
+
type: "string",
|
|
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
|
+
},
|
|
547
406
|
},
|
|
548
407
|
required: ["taskId"],
|
|
549
408
|
},
|
|
550
409
|
},
|
|
551
|
-
// ── Account-level Schedules ───────────────────────────────────────────────────
|
|
552
410
|
{
|
|
553
411
|
name: "vibekit_create_schedule",
|
|
554
|
-
description: "Create a recurring
|
|
412
|
+
description: "Create a scheduled recurring task. The AI will run this task automatically on the specified schedule.",
|
|
555
413
|
inputSchema: {
|
|
556
414
|
type: "object",
|
|
557
415
|
properties: {
|
|
558
|
-
task: {
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
416
|
+
task: {
|
|
417
|
+
type: "string",
|
|
418
|
+
description: "What to do on each run. e.g., 'Improve SEO and page speed'",
|
|
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
|
+
},
|
|
562
432
|
},
|
|
563
433
|
required: ["task", "repo", "cron"],
|
|
564
434
|
},
|
|
565
435
|
},
|
|
566
436
|
{
|
|
567
437
|
name: "vibekit_list_schedules",
|
|
568
|
-
description: "List all
|
|
569
|
-
inputSchema: {
|
|
438
|
+
description: "List all scheduled tasks.",
|
|
439
|
+
inputSchema: {
|
|
440
|
+
type: "object",
|
|
441
|
+
properties: {},
|
|
442
|
+
},
|
|
570
443
|
},
|
|
571
444
|
{
|
|
572
445
|
name: "vibekit_delete_schedule",
|
|
573
|
-
description: "Delete
|
|
446
|
+
description: "Delete a scheduled task.",
|
|
574
447
|
inputSchema: {
|
|
575
448
|
type: "object",
|
|
576
449
|
properties: {
|
|
577
|
-
scheduleId: {
|
|
450
|
+
scheduleId: {
|
|
451
|
+
type: "string",
|
|
452
|
+
description: "The schedule ID to delete",
|
|
453
|
+
},
|
|
578
454
|
},
|
|
579
455
|
required: ["scheduleId"],
|
|
580
456
|
},
|
|
581
457
|
},
|
|
582
|
-
//
|
|
458
|
+
// Account
|
|
583
459
|
{
|
|
584
460
|
name: "vibekit_account",
|
|
585
|
-
description: "Get VibeKit account info
|
|
586
|
-
inputSchema: {
|
|
461
|
+
description: "Get VibeKit account info including plan, credits balance, and usage.",
|
|
462
|
+
inputSchema: {
|
|
463
|
+
type: "object",
|
|
464
|
+
properties: {},
|
|
465
|
+
},
|
|
587
466
|
},
|
|
588
|
-
// ── Skills ───────────────────────────────────────────────────────────────────
|
|
589
467
|
{
|
|
590
468
|
name: "vibekit_list_skills",
|
|
591
|
-
description: "List available implementation skills.
|
|
469
|
+
description: "List all available implementation skills. Returns skill IDs, names, descriptions, and tags. Use this to discover what skills are available before fetching specific ones.",
|
|
592
470
|
inputSchema: {
|
|
593
471
|
type: "object",
|
|
594
472
|
properties: {
|
|
595
|
-
tag: {
|
|
473
|
+
tag: {
|
|
474
|
+
type: "string",
|
|
475
|
+
description: "Filter skills by tag (e.g., 'react', 'database', 'security')",
|
|
476
|
+
},
|
|
596
477
|
},
|
|
597
478
|
},
|
|
598
479
|
},
|
|
599
480
|
{
|
|
600
481
|
name: "vibekit_get_skill",
|
|
601
|
-
description: "Fetch the full content of a specific skill.
|
|
482
|
+
description: "Fetch the full content of a specific skill. Skills contain implementation patterns, code examples, and best practices for a domain. Fetch skills on-demand when you need guidance on a specific topic.",
|
|
602
483
|
inputSchema: {
|
|
603
484
|
type: "object",
|
|
604
485
|
properties: {
|
|
605
|
-
id: {
|
|
486
|
+
id: {
|
|
487
|
+
type: "string",
|
|
488
|
+
description: "Skill ID from vibekit_list_skills (e.g., 'nextjs', 'trpc', 'auth')",
|
|
489
|
+
},
|
|
606
490
|
},
|
|
607
491
|
required: ["id"],
|
|
608
492
|
},
|
|
@@ -612,7 +496,7 @@ const tools = [
|
|
|
612
496
|
async function handleTool(name, args) {
|
|
613
497
|
let result;
|
|
614
498
|
switch (name) {
|
|
615
|
-
// Apps
|
|
499
|
+
// Hosting & Apps
|
|
616
500
|
case "vibekit_list_apps":
|
|
617
501
|
result = await apiRequest("GET", "/hosting/apps");
|
|
618
502
|
break;
|
|
@@ -634,15 +518,15 @@ async function handleTool(name, args) {
|
|
|
634
518
|
case "vibekit_redeploy":
|
|
635
519
|
result = await apiRequest("POST", `/hosting/app/${args.appId}/redeploy`);
|
|
636
520
|
break;
|
|
637
|
-
case "vibekit_rollback":
|
|
638
|
-
result = await apiRequest("POST", `/hosting/app/${args.appId}/deploys/${args.deployId}/rollback`);
|
|
639
|
-
break;
|
|
640
|
-
case "vibekit_deploy_history":
|
|
641
|
-
result = await apiRequest("GET", `/hosting/app/${args.appId}/deploys`);
|
|
642
|
-
break;
|
|
643
521
|
case "vibekit_app_logs": {
|
|
644
|
-
|
|
645
|
-
|
|
522
|
+
let path = `/hosting/app/${args.appId}/logs`;
|
|
523
|
+
if (args.lines) {
|
|
524
|
+
path += `?lines=${args.lines}`;
|
|
525
|
+
}
|
|
526
|
+
else {
|
|
527
|
+
path += "?lines=100";
|
|
528
|
+
}
|
|
529
|
+
result = await apiRequest("GET", path);
|
|
646
530
|
break;
|
|
647
531
|
}
|
|
648
532
|
case "vibekit_restart_app":
|
|
@@ -654,22 +538,18 @@ async function handleTool(name, args) {
|
|
|
654
538
|
case "vibekit_start_app":
|
|
655
539
|
result = await apiRequest("POST", `/hosting/app/${args.appId}/start`);
|
|
656
540
|
break;
|
|
657
|
-
case "vibekit_delete_app":
|
|
658
|
-
result = await apiRequest("DELETE", `/hosting/app/${args.appId}`);
|
|
659
|
-
break;
|
|
660
|
-
// Env
|
|
661
541
|
case "vibekit_app_env":
|
|
662
|
-
result = await apiRequest("GET", `/hosting/app/${args.appId}/env
|
|
542
|
+
result = await apiRequest("GET", `/hosting/app/${args.appId}/env`);
|
|
663
543
|
break;
|
|
664
544
|
case "vibekit_set_env":
|
|
665
545
|
result = await apiRequest("PUT", `/hosting/app/${args.appId}/env`, {
|
|
666
546
|
vars: args.vars,
|
|
667
547
|
});
|
|
668
548
|
break;
|
|
669
|
-
case "
|
|
670
|
-
result = await apiRequest("DELETE", `/hosting/app/${args.appId}
|
|
549
|
+
case "vibekit_delete_app":
|
|
550
|
+
result = await apiRequest("DELETE", `/hosting/app/${args.appId}`);
|
|
671
551
|
break;
|
|
672
|
-
// Agent
|
|
552
|
+
// AI Agent
|
|
673
553
|
case "vibekit_chat":
|
|
674
554
|
result = await apiRequest("POST", `/hosting/app/${args.appId}/agent`, {
|
|
675
555
|
message: args.message,
|
|
@@ -678,55 +558,17 @@ async function handleTool(name, args) {
|
|
|
678
558
|
case "vibekit_agent_status":
|
|
679
559
|
result = await apiRequest("GET", `/hosting/app/${args.appId}/agent/status`);
|
|
680
560
|
break;
|
|
681
|
-
case "vibekit_agent_stop":
|
|
682
|
-
result = await apiRequest("POST", `/hosting/app/${args.appId}/agent/stop`);
|
|
683
|
-
break;
|
|
684
561
|
case "vibekit_agent_history": {
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
case "vibekit_agent_set_model":
|
|
693
|
-
result = await apiRequest("POST", `/hosting/app/${args.appId}/agent/config`, {
|
|
694
|
-
model: args.model,
|
|
695
|
-
});
|
|
696
|
-
break;
|
|
697
|
-
case "vibekit_exec":
|
|
698
|
-
result = await apiRequest("POST", `/hosting/app/${args.appId}/exec`, {
|
|
699
|
-
command: args.command,
|
|
700
|
-
});
|
|
701
|
-
break;
|
|
702
|
-
case "vibekit_agent_reset":
|
|
703
|
-
result = await apiRequest("POST", `/hosting/app/${args.appId}/agent/reset`, {
|
|
704
|
-
action: args.action,
|
|
705
|
-
});
|
|
706
|
-
break;
|
|
707
|
-
case "vibekit_agent_compact":
|
|
708
|
-
result = await apiRequest("POST", `/hosting/app/${args.appId}/agent/compact`);
|
|
709
|
-
break;
|
|
710
|
-
// Files
|
|
711
|
-
case "vibekit_list_files": {
|
|
712
|
-
let path = `/hosting/app/${args.appId}/agent/files`;
|
|
713
|
-
if (args.path)
|
|
714
|
-
path += `?path=${encodeURIComponent(args.path)}`;
|
|
562
|
+
let path = `/hosting/app/${args.appId}/agent/history`;
|
|
563
|
+
if (args.limit) {
|
|
564
|
+
path += `?limit=${args.limit}`;
|
|
565
|
+
}
|
|
566
|
+
else {
|
|
567
|
+
path += "?limit=20";
|
|
568
|
+
}
|
|
715
569
|
result = await apiRequest("GET", path);
|
|
716
570
|
break;
|
|
717
571
|
}
|
|
718
|
-
case "vibekit_read_file":
|
|
719
|
-
result = await apiRequest("GET", `/hosting/app/${args.appId}/agent/file?path=${encodeURIComponent(args.path)}`);
|
|
720
|
-
break;
|
|
721
|
-
case "vibekit_write_file":
|
|
722
|
-
result = await apiRequest("PUT", `/hosting/app/${args.appId}/agent/file`, {
|
|
723
|
-
path: args.path,
|
|
724
|
-
content: args.content,
|
|
725
|
-
});
|
|
726
|
-
break;
|
|
727
|
-
case "vibekit_file_changes":
|
|
728
|
-
result = await apiRequest("GET", `/hosting/app/${args.appId}/agent/changes`);
|
|
729
|
-
break;
|
|
730
572
|
// Database
|
|
731
573
|
case "vibekit_enable_database":
|
|
732
574
|
result = await apiRequest("POST", `/hosting/app/${args.appId}/database`);
|
|
@@ -734,23 +576,6 @@ async function handleTool(name, args) {
|
|
|
734
576
|
case "vibekit_database_status":
|
|
735
577
|
result = await apiRequest("GET", `/hosting/app/${args.appId}/database`);
|
|
736
578
|
break;
|
|
737
|
-
case "vibekit_database_schema":
|
|
738
|
-
result = await apiRequest("GET", `/hosting/app/${args.appId}/database/schema`);
|
|
739
|
-
break;
|
|
740
|
-
case "vibekit_database_query":
|
|
741
|
-
result = await apiRequest("POST", `/hosting/app/${args.appId}/database/query`, {
|
|
742
|
-
sql: args.sql,
|
|
743
|
-
});
|
|
744
|
-
break;
|
|
745
|
-
// Domain
|
|
746
|
-
case "vibekit_add_domain":
|
|
747
|
-
result = await apiRequest("POST", `/hosting/app/${args.appId}/domain`, {
|
|
748
|
-
domain: args.domain,
|
|
749
|
-
});
|
|
750
|
-
break;
|
|
751
|
-
case "vibekit_remove_domain":
|
|
752
|
-
result = await apiRequest("DELETE", `/hosting/app/${args.appId}/domain`);
|
|
753
|
-
break;
|
|
754
579
|
// QA
|
|
755
580
|
case "vibekit_run_qa":
|
|
756
581
|
result = await apiRequest("POST", `/hosting/app/${args.appId}/qa`);
|
|
@@ -758,24 +583,10 @@ async function handleTool(name, args) {
|
|
|
758
583
|
case "vibekit_qa_status":
|
|
759
584
|
result = await apiRequest("GET", `/hosting/app/${args.appId}/qa`);
|
|
760
585
|
break;
|
|
761
|
-
//
|
|
762
|
-
case "vibekit_app_schedules":
|
|
763
|
-
result = await apiRequest("GET", `/hosting/app/${args.appId}/schedules`);
|
|
764
|
-
break;
|
|
765
|
-
case "vibekit_create_app_schedule":
|
|
766
|
-
result = await apiRequest("POST", `/hosting/app/${args.appId}/schedules`, {
|
|
767
|
-
name: args.name,
|
|
768
|
-
cron_expression: args.cron, // API field is "cron_expression", not "cron"
|
|
769
|
-
prompt: args.task, // API field is "prompt", not "task"
|
|
770
|
-
});
|
|
771
|
-
break;
|
|
772
|
-
case "vibekit_delete_app_schedule":
|
|
773
|
-
result = await apiRequest("DELETE", `/hosting/app/${args.appId}/schedules/${args.jobId}`);
|
|
774
|
-
break;
|
|
775
|
-
// Tasks
|
|
586
|
+
// Tasks (existing)
|
|
776
587
|
case "vibekit_submit_task":
|
|
777
588
|
result = await apiRequest("POST", "/task", {
|
|
778
|
-
|
|
589
|
+
task: args.task,
|
|
779
590
|
repo: args.repo,
|
|
780
591
|
branch: args.branch,
|
|
781
592
|
deploy: args.deploy ?? true,
|
|
@@ -786,35 +597,36 @@ async function handleTool(name, args) {
|
|
|
786
597
|
result = await apiRequest("GET", `/task/${args.taskId}`);
|
|
787
598
|
break;
|
|
788
599
|
case "vibekit_list_tasks": {
|
|
600
|
+
let path = "/tasks";
|
|
789
601
|
const params = new URLSearchParams();
|
|
790
602
|
if (args.limit)
|
|
791
603
|
params.set("limit", String(args.limit));
|
|
792
604
|
if (args.status)
|
|
793
605
|
params.set("status", String(args.status));
|
|
794
|
-
|
|
795
|
-
|
|
606
|
+
if (params.toString())
|
|
607
|
+
path += `?${params.toString()}`;
|
|
608
|
+
result = await apiRequest("GET", path);
|
|
796
609
|
break;
|
|
797
610
|
}
|
|
798
611
|
case "vibekit_wait_for_task": {
|
|
799
612
|
const taskId = args.taskId;
|
|
800
613
|
const timeout = (args.timeoutSeconds || 300) * 1000;
|
|
801
614
|
const start = Date.now();
|
|
802
|
-
result = { ok: false, error: "Timeout waiting for task" };
|
|
803
615
|
while (Date.now() - start < timeout) {
|
|
804
|
-
|
|
805
|
-
if (!
|
|
806
|
-
result = poll;
|
|
616
|
+
result = await apiRequest("GET", `/task/${taskId}`);
|
|
617
|
+
if (!result.ok)
|
|
807
618
|
break;
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
result = poll;
|
|
811
|
-
if (task.status === "complete" || task.status === "completed" || task.status === "failed")
|
|
619
|
+
const task = result.data;
|
|
620
|
+
if (task.status === "completed" || task.status === "failed") {
|
|
812
621
|
break;
|
|
622
|
+
}
|
|
813
623
|
await new Promise((r) => setTimeout(r, 5000));
|
|
814
624
|
}
|
|
625
|
+
if (!result) {
|
|
626
|
+
result = { ok: false, error: "Timeout waiting for task" };
|
|
627
|
+
}
|
|
815
628
|
break;
|
|
816
629
|
}
|
|
817
|
-
// Account-level schedules
|
|
818
630
|
case "vibekit_create_schedule":
|
|
819
631
|
result = await apiRequest("POST", "/schedule", {
|
|
820
632
|
task: args.task,
|
|
@@ -833,16 +645,18 @@ async function handleTool(name, args) {
|
|
|
833
645
|
case "vibekit_account":
|
|
834
646
|
result = await apiRequest("GET", "/account");
|
|
835
647
|
break;
|
|
836
|
-
// Skills
|
|
837
648
|
case "vibekit_list_skills": {
|
|
838
649
|
try {
|
|
650
|
+
// Check cache
|
|
839
651
|
if (skillsCache && Date.now() - skillsCache.fetchedAt < CACHE_TTL) {
|
|
840
652
|
let skills = skillsCache.manifest.skills;
|
|
841
|
-
if (args.tag)
|
|
653
|
+
if (args.tag) {
|
|
842
654
|
skills = skills.filter((s) => s.tags?.includes(args.tag));
|
|
843
|
-
|
|
655
|
+
}
|
|
656
|
+
result = { ok: true, data: { skills } };
|
|
844
657
|
break;
|
|
845
658
|
}
|
|
659
|
+
// Fetch manifest
|
|
846
660
|
const res = await fetch(`${SKILLS_REGISTRY}/skills.json`);
|
|
847
661
|
if (!res.ok) {
|
|
848
662
|
result = { ok: false, error: `Failed to fetch skills: ${res.status}` };
|
|
@@ -851,8 +665,9 @@ async function handleTool(name, args) {
|
|
|
851
665
|
const manifest = await res.json();
|
|
852
666
|
skillsCache = { manifest, fetchedAt: Date.now() };
|
|
853
667
|
let skills = manifest.skills;
|
|
854
|
-
if (args.tag)
|
|
668
|
+
if (args.tag) {
|
|
855
669
|
skills = skills.filter((s) => s.tags?.includes(args.tag));
|
|
670
|
+
}
|
|
856
671
|
result = { ok: true, data: { skills, count: skills.length } };
|
|
857
672
|
}
|
|
858
673
|
catch (err) {
|
|
@@ -888,13 +703,25 @@ async function handleTool(name, args) {
|
|
|
888
703
|
: `Error: ${result.error}`;
|
|
889
704
|
return { content: [{ type: "text", text }] };
|
|
890
705
|
}
|
|
891
|
-
//
|
|
892
|
-
const server = new index_js_1.Server({
|
|
893
|
-
|
|
706
|
+
// Main server setup
|
|
707
|
+
const server = new index_js_1.Server({
|
|
708
|
+
name: "vibekit-mcp",
|
|
709
|
+
version: "0.5.5",
|
|
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
|
|
894
720
|
server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
|
|
895
721
|
const { name, arguments: args } = request.params;
|
|
896
722
|
return handleTool(name, (args || {}));
|
|
897
723
|
});
|
|
724
|
+
// Start server
|
|
898
725
|
async function main() {
|
|
899
726
|
const transport = new stdio_js_1.StdioServerTransport();
|
|
900
727
|
await server.connect(transport);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vibekit-mcp",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.5",
|
|
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
|
+
}
|