@biznetgio/neo-app 0.4.13 → 0.4.14
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/package.json +1 -1
- package/src/mcp/server.js +1 -1
- package/src/mcp/tools.js +68 -10
package/package.json
CHANGED
package/src/mcp/server.js
CHANGED
|
@@ -29,7 +29,7 @@ export async function runMcpServer() {
|
|
|
29
29
|
name: t.name,
|
|
30
30
|
description: t.description,
|
|
31
31
|
inputSchema: t.schema,
|
|
32
|
-
annotations: { readOnlyHint: !t.mutating, destructiveHint:
|
|
32
|
+
annotations: { readOnlyHint: !t.mutating, destructiveHint: !!t.destructive },
|
|
33
33
|
})),
|
|
34
34
|
}));
|
|
35
35
|
|
package/src/mcp/tools.js
CHANGED
|
@@ -61,22 +61,22 @@ export const TOOLS = [
|
|
|
61
61
|
// Honest support matrix: what THIS build does, not the roadmap. `create`
|
|
62
62
|
// is true, false, or 'via_folder' (created through neo_deploy_folder).
|
|
63
63
|
const resourceTypes = [
|
|
64
|
-
{ type: 'web', create: true, deploy: true, scale: true, logs: true, variables: true, delete:
|
|
65
|
-
{ type: 'template', create: true, deploy: true, scale: false, logs: true, variables: true, delete:
|
|
66
|
-
{ type: 'static_site', create: 'via_folder', deploy: true, scale: false, logs: true, variables: true, delete:
|
|
67
|
-
{ type: 'worker', create: 'via_folder', deploy: true, scale: true, logs: true, variables: true, delete:
|
|
68
|
-
{ type: 'database', create: false, deploy: false, delete:
|
|
69
|
-
{ type: 'queue', create: false, deploy: false, delete:
|
|
70
|
-
{ type: 'cron', create: false, deploy: false, delete:
|
|
71
|
-
{ type: 'object_storage', create: false, deploy: false, delete:
|
|
64
|
+
{ type: 'web', create: true, deploy: true, scale: true, logs: true, variables: true, delete: true },
|
|
65
|
+
{ type: 'template', create: true, deploy: true, scale: false, logs: true, variables: true, delete: true },
|
|
66
|
+
{ type: 'static_site', create: 'via_folder', deploy: true, scale: false, logs: true, variables: true, delete: true, note: 'neo_deploy_folder serviceType=static_site (auto-detected for static-only folders); auto-detection from a repo/monorepo is still TODO (handoff 6)' },
|
|
67
|
+
{ type: 'worker', create: 'via_folder', deploy: true, scale: true, logs: true, variables: true, delete: true, note: 'neo_deploy_folder serviceType=worker — no public ingress; repo auto-detection still TODO (handoff 6)' },
|
|
68
|
+
{ type: 'database', create: false, deploy: false, delete: true, note: 'neo_delete_database exists; create still has no MCP tool (handoff 4.4)' },
|
|
69
|
+
{ type: 'queue', create: false, deploy: false, delete: true, note: 'neo_delete_queue exists; create still has no MCP tool (handoff 4.5)' },
|
|
70
|
+
{ type: 'cron', create: false, deploy: false, delete: true, note: 'neo_delete_cron exists; create still has no MCP tool (handoff 4.6)' },
|
|
71
|
+
{ type: 'object_storage', create: false, deploy: false, delete: true, note: 'neo_delete_bucket exists; create still has no MCP tool (handoff 4.7)' },
|
|
72
72
|
];
|
|
73
73
|
|
|
74
74
|
return {
|
|
75
75
|
mcp: { name: 'neo-app', version: pkgVersion() },
|
|
76
76
|
controlPlane,
|
|
77
77
|
resourceTypes,
|
|
78
|
-
// Verbs this MCP build exposes today (no create-DB/queue/cron/bucket, no
|
|
79
|
-
lifecycleVerbs: ['list', 'get', 'deploy', 'scale', 'logs', 'get_variables', 'set_variable', 'list_approvals', 'get_approval', 'get_credit', 'list_templates'],
|
|
78
|
+
// Verbs this MCP build exposes today (no create-DB/queue/cron/bucket, no costed plan/apply yet).
|
|
79
|
+
lifecycleVerbs: ['list', 'get', 'deploy', 'scale', 'logs', 'get_variables', 'set_variable', 'delete', 'list_approvals', 'get_approval', 'get_credit', 'list_templates'],
|
|
80
80
|
sourceTypes: ['git', 'image', 'dockerfile', 'local', 'template'],
|
|
81
81
|
environments: ['staging', 'production'],
|
|
82
82
|
pricing,
|
|
@@ -327,4 +327,62 @@ export const TOOLS = [
|
|
|
327
327
|
return found;
|
|
328
328
|
},
|
|
329
329
|
},
|
|
330
|
+
// --- Cleanup (handoff 3.6): MCP can delete every resource type it can reach, so
|
|
331
|
+
// an agent never leaks a resource it created. These are DESTRUCTIVE and permanent;
|
|
332
|
+
// the server hard-deletes the record and tears down the running workload. ---
|
|
333
|
+
{
|
|
334
|
+
name: 'neo_delete_service',
|
|
335
|
+
description: 'Permanently delete a service (web / worker / static_site) and tear down its running workload. Destructive and irreversible.',
|
|
336
|
+
mutating: true,
|
|
337
|
+
destructive: true,
|
|
338
|
+
schema: { type: 'object', properties: { appId: str('Service/app id (from neo_list_services)') }, required: ['appId'] },
|
|
339
|
+
async call(api, args) {
|
|
340
|
+
const { status, data } = await api.del(`/api/v1/apps/${args.appId}`);
|
|
341
|
+
return result(status, data);
|
|
342
|
+
},
|
|
343
|
+
},
|
|
344
|
+
{
|
|
345
|
+
name: 'neo_delete_database',
|
|
346
|
+
description: 'Permanently delete a managed database and its instance/volume. Destructive and irreversible — the data is not recoverable.',
|
|
347
|
+
mutating: true,
|
|
348
|
+
destructive: true,
|
|
349
|
+
schema: { type: 'object', properties: { databaseId: str('Database id') }, required: ['databaseId'] },
|
|
350
|
+
async call(api, args) {
|
|
351
|
+
const { status, data } = await api.del(`/api/v1/databases/${args.databaseId}`);
|
|
352
|
+
return result(status, data);
|
|
353
|
+
},
|
|
354
|
+
},
|
|
355
|
+
{
|
|
356
|
+
name: 'neo_delete_queue',
|
|
357
|
+
description: 'Permanently delete a managed queue and its instance. Destructive and irreversible.',
|
|
358
|
+
mutating: true,
|
|
359
|
+
destructive: true,
|
|
360
|
+
schema: { type: 'object', properties: { queueId: str('Queue id') }, required: ['queueId'] },
|
|
361
|
+
async call(api, args) {
|
|
362
|
+
const { status, data } = await api.del(`/api/v1/queues/${args.queueId}`);
|
|
363
|
+
return result(status, data);
|
|
364
|
+
},
|
|
365
|
+
},
|
|
366
|
+
{
|
|
367
|
+
name: 'neo_delete_cron',
|
|
368
|
+
description: 'Permanently delete a scheduled job (cron). Destructive and irreversible.',
|
|
369
|
+
mutating: true,
|
|
370
|
+
destructive: true,
|
|
371
|
+
schema: { type: 'object', properties: { cronId: str('Cron/scheduled-job id') }, required: ['cronId'] },
|
|
372
|
+
async call(api, args) {
|
|
373
|
+
const { status, data } = await api.del(`/api/v1/crons/${args.cronId}`);
|
|
374
|
+
return result(status, data);
|
|
375
|
+
},
|
|
376
|
+
},
|
|
377
|
+
{
|
|
378
|
+
name: 'neo_delete_bucket',
|
|
379
|
+
description: 'Permanently delete an object-storage bucket. Destructive and irreversible — bucket contents are lost.',
|
|
380
|
+
mutating: true,
|
|
381
|
+
destructive: true,
|
|
382
|
+
schema: { type: 'object', properties: { bucketId: str('Bucket id') }, required: ['bucketId'] },
|
|
383
|
+
async call(api, args) {
|
|
384
|
+
const { status, data } = await api.del(`/api/v1/buckets/${args.bucketId}`);
|
|
385
|
+
return result(status, data);
|
|
386
|
+
},
|
|
387
|
+
},
|
|
330
388
|
];
|