gufi-cli 0.1.21 → 0.1.22
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/mcp.js +67 -243
- package/package.json +1 -1
package/dist/mcp.js
CHANGED
|
@@ -122,30 +122,29 @@ async function developerRequest(path, options = {}, retry = true) {
|
|
|
122
122
|
return res.json();
|
|
123
123
|
}
|
|
124
124
|
// ════════════════════════════════════════════════════════════════════════════
|
|
125
|
-
// Tool Definitions
|
|
125
|
+
// Tool Definitions - Descriptions loaded from docs/mcp/tool-descriptions.json
|
|
126
126
|
// ════════════════════════════════════════════════════════════════════════════
|
|
127
|
+
// Load tool descriptions from centralized documentation
|
|
128
|
+
const TOOL_DESCRIPTIONS_PATH = path.join(DOCS_MCP_PATH, "tool-descriptions.json");
|
|
129
|
+
let toolDescriptions = {};
|
|
130
|
+
try {
|
|
131
|
+
const content = fs.readFileSync(TOOL_DESCRIPTIONS_PATH, "utf-8");
|
|
132
|
+
toolDescriptions = JSON.parse(content);
|
|
133
|
+
}
|
|
134
|
+
catch (err) {
|
|
135
|
+
console.error(`Warning: Could not load tool descriptions from ${TOOL_DESCRIPTIONS_PATH}`);
|
|
136
|
+
}
|
|
137
|
+
// Helper to get description from JSON or use fallback
|
|
138
|
+
function getDesc(toolName, fallback = "") {
|
|
139
|
+
return toolDescriptions[toolName]?.description || fallback;
|
|
140
|
+
}
|
|
127
141
|
const TOOLS = [
|
|
128
142
|
// ─────────────────────────────────────────────────────────────────────────
|
|
129
143
|
// Context & Info
|
|
130
144
|
// ─────────────────────────────────────────────────────────────────────────
|
|
131
145
|
{
|
|
132
146
|
name: "gufi_context",
|
|
133
|
-
description:
|
|
134
|
-
|
|
135
|
-
Use cases:
|
|
136
|
-
- Starting work on a package: gufi_context({ package_id: "14" })
|
|
137
|
-
- Understanding a view: gufi_context({ view_id: "13" })
|
|
138
|
-
- Exploring a company: gufi_context({ company_id: "116" })
|
|
139
|
-
|
|
140
|
-
The context includes:
|
|
141
|
-
- All modules and their entities (tables) with physical table names
|
|
142
|
-
- Field definitions with types, constraints, and options
|
|
143
|
-
- Available automations and their trigger types
|
|
144
|
-
- DataSources mappings for views (viewSpec.mainTable, etc.)
|
|
145
|
-
- Environment variables available
|
|
146
|
-
- Useful CLI commands for the project
|
|
147
|
-
|
|
148
|
-
Returns markdown-formatted context optimized for Claude.`,
|
|
147
|
+
description: getDesc("gufi_context"),
|
|
149
148
|
inputSchema: {
|
|
150
149
|
type: "object",
|
|
151
150
|
properties: {
|
|
@@ -158,20 +157,12 @@ Returns markdown-formatted context optimized for Claude.`,
|
|
|
158
157
|
},
|
|
159
158
|
{
|
|
160
159
|
name: "gufi_whoami",
|
|
161
|
-
description: "
|
|
160
|
+
description: getDesc("gufi_whoami"),
|
|
162
161
|
inputSchema: { type: "object", properties: {} },
|
|
163
162
|
},
|
|
164
163
|
{
|
|
165
164
|
name: "gufi_schema",
|
|
166
|
-
description:
|
|
167
|
-
|
|
168
|
-
Returns for each entity:
|
|
169
|
-
- id: Entity ID
|
|
170
|
-
- name: Entity name
|
|
171
|
-
- table: Physical table name (m{moduleId}_t{entityId})
|
|
172
|
-
- fields: Array of {name, type, label}
|
|
173
|
-
|
|
174
|
-
Use this to understand the data structure before creating queries or modifications.`,
|
|
165
|
+
description: getDesc("gufi_schema"),
|
|
175
166
|
inputSchema: {
|
|
176
167
|
type: "object",
|
|
177
168
|
properties: {
|
|
@@ -182,26 +173,7 @@ Use this to understand the data structure before creating queries or modificatio
|
|
|
182
173
|
},
|
|
183
174
|
{
|
|
184
175
|
name: "gufi_docs",
|
|
185
|
-
description:
|
|
186
|
-
|
|
187
|
-
Available topics:
|
|
188
|
-
- "overview" - Overview and workflow (start here)
|
|
189
|
-
- "architecture" - Technical architecture
|
|
190
|
-
- "modules" - Module system and entities
|
|
191
|
-
- "fields" - Field types and CB builders (IMPORTANT for data operations)
|
|
192
|
-
- "views" - View system, SDK, and React components
|
|
193
|
-
- "automations" - Automations and worker
|
|
194
|
-
- "api" - API endpoints reference
|
|
195
|
-
- "packages" - Packages and marketplace
|
|
196
|
-
- "errors" - Common errors and solutions
|
|
197
|
-
- "examples" - Practical code examples
|
|
198
|
-
|
|
199
|
-
You can also search across all docs with the search parameter.
|
|
200
|
-
|
|
201
|
-
Examples:
|
|
202
|
-
- gufi_docs({ topic: "fields" }) - Read about field types
|
|
203
|
-
- gufi_docs({ topic: "errors" }) - Common errors and fixes
|
|
204
|
-
- gufi_docs({ search: "currency" }) - Search for currency info`,
|
|
176
|
+
description: getDesc("gufi_docs"),
|
|
205
177
|
inputSchema: {
|
|
206
178
|
type: "object",
|
|
207
179
|
properties: {
|
|
@@ -215,12 +187,12 @@ Examples:
|
|
|
215
187
|
// ─────────────────────────────────────────────────────────────────────────
|
|
216
188
|
{
|
|
217
189
|
name: "gufi_companies",
|
|
218
|
-
description: "
|
|
190
|
+
description: getDesc("gufi_companies"),
|
|
219
191
|
inputSchema: { type: "object", properties: {} },
|
|
220
192
|
},
|
|
221
193
|
{
|
|
222
194
|
name: "gufi_company_create",
|
|
223
|
-
description: "
|
|
195
|
+
description: getDesc("gufi_company_create"),
|
|
224
196
|
inputSchema: {
|
|
225
197
|
type: "object",
|
|
226
198
|
properties: {
|
|
@@ -234,7 +206,7 @@ Examples:
|
|
|
234
206
|
// ─────────────────────────────────────────────────────────────────────────
|
|
235
207
|
{
|
|
236
208
|
name: "gufi_modules",
|
|
237
|
-
description: "
|
|
209
|
+
description: getDesc("gufi_modules"),
|
|
238
210
|
inputSchema: {
|
|
239
211
|
type: "object",
|
|
240
212
|
properties: {
|
|
@@ -245,26 +217,7 @@ Examples:
|
|
|
245
217
|
},
|
|
246
218
|
{
|
|
247
219
|
name: "gufi_module",
|
|
248
|
-
description:
|
|
249
|
-
|
|
250
|
-
Returns the complete module structure:
|
|
251
|
-
- name, displayName, icon
|
|
252
|
-
- submodules[]: Array of submodules
|
|
253
|
-
- entities[]: Array of entities (tables)
|
|
254
|
-
- name, label, kind
|
|
255
|
-
- fields[]: Array of fields with type, label, required, options, etc.
|
|
256
|
-
|
|
257
|
-
Field types (from @gufi/column-types):
|
|
258
|
-
- Text: text, email, url, barcode
|
|
259
|
-
- Numbers: number_int, number_float, percentage
|
|
260
|
-
- Date/Time: date, datetime, time
|
|
261
|
-
- Boolean: boolean
|
|
262
|
-
- Selection: select (single), multiselect (array)
|
|
263
|
-
- Relations: relation (FK), reversed_relation (virtual), users (array of user IDs)
|
|
264
|
-
- Complex (JSONB): currency, phone, location, file, signature, json
|
|
265
|
-
- Computed: formula, mirror
|
|
266
|
-
|
|
267
|
-
Each type has specific format. Use gufi.CB.* builders for correct format.`,
|
|
220
|
+
description: getDesc("gufi_module"),
|
|
268
221
|
inputSchema: {
|
|
269
222
|
type: "object",
|
|
270
223
|
properties: {
|
|
@@ -275,33 +228,7 @@ Each type has specific format. Use gufi.CB.* builders for correct format.`,
|
|
|
275
228
|
},
|
|
276
229
|
{
|
|
277
230
|
name: "gufi_module_update",
|
|
278
|
-
description:
|
|
279
|
-
|
|
280
|
-
IMPORTANT: Always read the module first with gufi_module, modify the JSON, then update.
|
|
281
|
-
|
|
282
|
-
Common modifications:
|
|
283
|
-
- Add a field: Add to entity.fields array
|
|
284
|
-
- Add an entity: Add to submodule.entities array
|
|
285
|
-
- Modify field: Change properties like type, label, required, options
|
|
286
|
-
|
|
287
|
-
Example field definition:
|
|
288
|
-
{
|
|
289
|
-
"name": "fecha_entrega",
|
|
290
|
-
"type": "date",
|
|
291
|
-
"label": "Fecha de Entrega",
|
|
292
|
-
"required": false
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
For select fields, include options:
|
|
296
|
-
{
|
|
297
|
-
"name": "estado",
|
|
298
|
-
"type": "select",
|
|
299
|
-
"label": "Estado",
|
|
300
|
-
"options": [
|
|
301
|
-
{ "value": "pendiente", "label": "Pendiente", "color": "yellow" },
|
|
302
|
-
{ "value": "completado", "label": "Completado", "color": "green" }
|
|
303
|
-
]
|
|
304
|
-
}`,
|
|
231
|
+
description: getDesc("gufi_module_update"),
|
|
305
232
|
inputSchema: {
|
|
306
233
|
type: "object",
|
|
307
234
|
properties: {
|
|
@@ -313,28 +240,7 @@ For select fields, include options:
|
|
|
313
240
|
},
|
|
314
241
|
{
|
|
315
242
|
name: "gufi_module_create",
|
|
316
|
-
description:
|
|
317
|
-
|
|
318
|
-
Example module structure:
|
|
319
|
-
{
|
|
320
|
-
"name": "inventory",
|
|
321
|
-
"displayName": "Inventario",
|
|
322
|
-
"icon": "Package",
|
|
323
|
-
"submodules": [{
|
|
324
|
-
"name": "products",
|
|
325
|
-
"label": "Productos",
|
|
326
|
-
"entities": [{
|
|
327
|
-
"name": "productos",
|
|
328
|
-
"label": "Productos",
|
|
329
|
-
"kind": "table",
|
|
330
|
-
"fields": [
|
|
331
|
-
{ "name": "nombre", "type": "text", "label": "Nombre", "required": true },
|
|
332
|
-
{ "name": "precio", "type": "currency", "label": "Precio" },
|
|
333
|
-
{ "name": "stock", "type": "number_int", "label": "Stock" }
|
|
334
|
-
]
|
|
335
|
-
}]
|
|
336
|
-
}]
|
|
337
|
-
}`,
|
|
243
|
+
description: getDesc("gufi_module_create"),
|
|
338
244
|
inputSchema: {
|
|
339
245
|
type: "object",
|
|
340
246
|
properties: {
|
|
@@ -349,14 +255,7 @@ Example module structure:
|
|
|
349
255
|
// ─────────────────────────────────────────────────────────────────────────
|
|
350
256
|
{
|
|
351
257
|
name: "gufi_automations",
|
|
352
|
-
description:
|
|
353
|
-
|
|
354
|
-
Trigger types:
|
|
355
|
-
- on_create: Runs when a row is created
|
|
356
|
-
- on_update: Runs when a row is updated
|
|
357
|
-
- on_delete: Runs when a row is deleted
|
|
358
|
-
- on_click: Manually triggered from UI buttons
|
|
359
|
-
- schedule: Runs on a cron schedule`,
|
|
258
|
+
description: getDesc("gufi_automations"),
|
|
360
259
|
inputSchema: {
|
|
361
260
|
type: "object",
|
|
362
261
|
properties: {
|
|
@@ -367,7 +266,7 @@ Trigger types:
|
|
|
367
266
|
},
|
|
368
267
|
{
|
|
369
268
|
name: "gufi_automation",
|
|
370
|
-
description: "
|
|
269
|
+
description: getDesc("gufi_automation"),
|
|
371
270
|
inputSchema: {
|
|
372
271
|
type: "object",
|
|
373
272
|
properties: {
|
|
@@ -378,32 +277,7 @@ Trigger types:
|
|
|
378
277
|
},
|
|
379
278
|
{
|
|
380
279
|
name: "gufi_automation_create",
|
|
381
|
-
description:
|
|
382
|
-
|
|
383
|
-
IMPORTANT: api.query() returns rows directly, NOT { rows }:
|
|
384
|
-
const rows = await api.query("SELECT * FROM table"); // ✅ Correct
|
|
385
|
-
const { rows } = await api.query(...); // ❌ Wrong!
|
|
386
|
-
|
|
387
|
-
Available API methods:
|
|
388
|
-
- api.query(sql, params) - Execute SQL, returns rows array
|
|
389
|
-
- api.getOne(table, id) - Get single row
|
|
390
|
-
- api.getList(table, { filters, sort, limit }) - Get multiple rows
|
|
391
|
-
- api.create(table, data) - Create row, returns { id }
|
|
392
|
-
- api.update(table, id, data) - Update row
|
|
393
|
-
- api.delete(table, id) - Delete row
|
|
394
|
-
- api.log(message) - Log for debugging
|
|
395
|
-
- api.sendEmail({ to, subject, body }) - Send email
|
|
396
|
-
- api.sendWhatsApp({ to, template, params }) - Send WhatsApp
|
|
397
|
-
|
|
398
|
-
Example automation:
|
|
399
|
-
async function send_welcome_email({ record, api }) {
|
|
400
|
-
const { email, nombre } = record;
|
|
401
|
-
await api.sendEmail({
|
|
402
|
-
to: email,
|
|
403
|
-
subject: "Bienvenido!",
|
|
404
|
-
body: \`Hola \${nombre}, gracias por registrarte.\`
|
|
405
|
-
});
|
|
406
|
-
}`,
|
|
280
|
+
description: getDesc("gufi_automation_create"),
|
|
407
281
|
inputSchema: {
|
|
408
282
|
type: "object",
|
|
409
283
|
properties: {
|
|
@@ -417,7 +291,7 @@ async function send_welcome_email({ record, api }) {
|
|
|
417
291
|
},
|
|
418
292
|
{
|
|
419
293
|
name: "gufi_entity_automations",
|
|
420
|
-
description: "
|
|
294
|
+
description: getDesc("gufi_entity_automations"),
|
|
421
295
|
inputSchema: {
|
|
422
296
|
type: "object",
|
|
423
297
|
properties: {
|
|
@@ -428,19 +302,7 @@ async function send_welcome_email({ record, api }) {
|
|
|
428
302
|
},
|
|
429
303
|
{
|
|
430
304
|
name: "gufi_entity_automations_update",
|
|
431
|
-
description:
|
|
432
|
-
|
|
433
|
-
Example configuration:
|
|
434
|
-
{
|
|
435
|
-
"on_create": ["send_welcome_email"],
|
|
436
|
-
"on_update": ["sync_to_external", "notify_changes"],
|
|
437
|
-
"on_delete": [],
|
|
438
|
-
"on_click": [
|
|
439
|
-
{ "function_name": "generate_report", "label": "Generar Reporte", "icon": "FileText" }
|
|
440
|
-
]
|
|
441
|
-
}
|
|
442
|
-
|
|
443
|
-
For on_click, you can specify label and icon for the button that triggers it.`,
|
|
305
|
+
description: getDesc("gufi_entity_automations_update"),
|
|
444
306
|
inputSchema: {
|
|
445
307
|
type: "object",
|
|
446
308
|
properties: {
|
|
@@ -455,7 +317,7 @@ For on_click, you can specify label and icon for the button that triggers it.`,
|
|
|
455
317
|
},
|
|
456
318
|
{
|
|
457
319
|
name: "gufi_automations_executions",
|
|
458
|
-
description: "
|
|
320
|
+
description: getDesc("gufi_automations_executions"),
|
|
459
321
|
inputSchema: {
|
|
460
322
|
type: "object",
|
|
461
323
|
properties: {
|
|
@@ -471,13 +333,7 @@ For on_click, you can specify label and icon for the button that triggers it.`,
|
|
|
471
333
|
// ─────────────────────────────────────────────────────────────────────────
|
|
472
334
|
{
|
|
473
335
|
name: "gufi_rows",
|
|
474
|
-
description:
|
|
475
|
-
Company is auto-detected from the module ID in the table name.
|
|
476
|
-
|
|
477
|
-
Supports:
|
|
478
|
-
- Pagination: limit (default 20), offset (default 0)
|
|
479
|
-
- Sorting: sort (field name), order (ASC/DESC)
|
|
480
|
-
- Filtering: filter="field=value"`,
|
|
336
|
+
description: getDesc("gufi_rows"),
|
|
481
337
|
inputSchema: {
|
|
482
338
|
type: "object",
|
|
483
339
|
properties: {
|
|
@@ -493,7 +349,7 @@ Supports:
|
|
|
493
349
|
},
|
|
494
350
|
{
|
|
495
351
|
name: "gufi_row",
|
|
496
|
-
description: "
|
|
352
|
+
description: getDesc("gufi_row"),
|
|
497
353
|
inputSchema: {
|
|
498
354
|
type: "object",
|
|
499
355
|
properties: {
|
|
@@ -505,35 +361,7 @@ Supports:
|
|
|
505
361
|
},
|
|
506
362
|
{
|
|
507
363
|
name: "gufi_row_create",
|
|
508
|
-
description:
|
|
509
|
-
|
|
510
|
-
Field formats (from @gufi/column-types):
|
|
511
|
-
|
|
512
|
-
SIMPLE TYPES:
|
|
513
|
-
- text/email/url/barcode: "string value"
|
|
514
|
-
- number_int: 42 (integer)
|
|
515
|
-
- number_float: 3.14 (decimal)
|
|
516
|
-
- percentage: 0.75 (decimal, displayed as 75%)
|
|
517
|
-
- boolean: true/false
|
|
518
|
-
- date: "2024-01-15" (ISO date)
|
|
519
|
-
- datetime: "2024-01-15T10:30:00Z" (ISO)
|
|
520
|
-
- time: "14:30:00"
|
|
521
|
-
- select: "value" (option value, not label)
|
|
522
|
-
- relation: 123 (FK integer)
|
|
523
|
-
|
|
524
|
-
ARRAY TYPES:
|
|
525
|
-
- multiselect: ["value1", "value2"]
|
|
526
|
-
- users: [16, 23] (array of user IDs)
|
|
527
|
-
|
|
528
|
-
JSONB TYPES (complex objects):
|
|
529
|
-
- currency: { "currency": "EUR", "amount": 150.00 }
|
|
530
|
-
- phone: { "prefix": "+34", "number": "612345678" }
|
|
531
|
-
- location: { "street": "Mayor", "number": "15", "city": "Madrid", "lat": 40.41, "lng": -3.70 }
|
|
532
|
-
- file: [{ "url": "company_130/uuid.pdf", "name": "doc.pdf" }] or ["company_130/photo.jpg"]
|
|
533
|
-
- signature: "data:image/png;base64,..." (base64 data URL)
|
|
534
|
-
- json: { any: "object" }
|
|
535
|
-
|
|
536
|
-
In views, use gufi.CB.* builders for correct formatting.`,
|
|
364
|
+
description: getDesc("gufi_row_create"),
|
|
537
365
|
inputSchema: {
|
|
538
366
|
type: "object",
|
|
539
367
|
properties: {
|
|
@@ -545,20 +373,7 @@ In views, use gufi.CB.* builders for correct formatting.`,
|
|
|
545
373
|
},
|
|
546
374
|
{
|
|
547
375
|
name: "gufi_row_update",
|
|
548
|
-
description:
|
|
549
|
-
|
|
550
|
-
IMPORTANT for select/relation fields:
|
|
551
|
-
When updating a select or relation field, you must update BOTH:
|
|
552
|
-
- The field value: "estado": "completado"
|
|
553
|
-
- The display value: "estado__display": "Completado"
|
|
554
|
-
|
|
555
|
-
Example:
|
|
556
|
-
{
|
|
557
|
-
"estado": "completado",
|
|
558
|
-
"estado__display": "Completado",
|
|
559
|
-
"cliente": 123,
|
|
560
|
-
"cliente__display": "Empresa ABC"
|
|
561
|
-
}`,
|
|
376
|
+
description: getDesc("gufi_row_update"),
|
|
562
377
|
inputSchema: {
|
|
563
378
|
type: "object",
|
|
564
379
|
properties: {
|
|
@@ -571,7 +386,7 @@ Example:
|
|
|
571
386
|
},
|
|
572
387
|
{
|
|
573
388
|
name: "gufi_row_delete",
|
|
574
|
-
description: "
|
|
389
|
+
description: getDesc("gufi_row_delete"),
|
|
575
390
|
inputSchema: {
|
|
576
391
|
type: "object",
|
|
577
392
|
properties: {
|
|
@@ -586,7 +401,7 @@ Example:
|
|
|
586
401
|
// ─────────────────────────────────────────────────────────────────────────
|
|
587
402
|
{
|
|
588
403
|
name: "gufi_env",
|
|
589
|
-
description: "
|
|
404
|
+
description: getDesc("gufi_env"),
|
|
590
405
|
inputSchema: {
|
|
591
406
|
type: "object",
|
|
592
407
|
properties: {
|
|
@@ -596,7 +411,7 @@ Example:
|
|
|
596
411
|
},
|
|
597
412
|
{
|
|
598
413
|
name: "gufi_env_set",
|
|
599
|
-
description: "
|
|
414
|
+
description: getDesc("gufi_env_set"),
|
|
600
415
|
inputSchema: {
|
|
601
416
|
type: "object",
|
|
602
417
|
properties: {
|
|
@@ -608,7 +423,7 @@ Example:
|
|
|
608
423
|
},
|
|
609
424
|
{
|
|
610
425
|
name: "gufi_env_delete",
|
|
611
|
-
description: "
|
|
426
|
+
description: getDesc("gufi_env_delete"),
|
|
612
427
|
inputSchema: {
|
|
613
428
|
type: "object",
|
|
614
429
|
properties: {
|
|
@@ -622,7 +437,7 @@ Example:
|
|
|
622
437
|
// ─────────────────────────────────────────────────────────────────────────
|
|
623
438
|
{
|
|
624
439
|
name: "gufi_view_files",
|
|
625
|
-
description: "
|
|
440
|
+
description: getDesc("gufi_view_files"),
|
|
626
441
|
inputSchema: {
|
|
627
442
|
type: "object",
|
|
628
443
|
properties: {
|
|
@@ -633,7 +448,7 @@ Example:
|
|
|
633
448
|
},
|
|
634
449
|
{
|
|
635
450
|
name: "gufi_view_file_update",
|
|
636
|
-
description: "
|
|
451
|
+
description: getDesc("gufi_view_file_update"),
|
|
637
452
|
inputSchema: {
|
|
638
453
|
type: "object",
|
|
639
454
|
properties: {
|
|
@@ -646,7 +461,7 @@ Example:
|
|
|
646
461
|
},
|
|
647
462
|
{
|
|
648
463
|
name: "gufi_view_files_update",
|
|
649
|
-
description: "
|
|
464
|
+
description: getDesc("gufi_view_files_update"),
|
|
650
465
|
inputSchema: {
|
|
651
466
|
type: "object",
|
|
652
467
|
properties: {
|
|
@@ -672,12 +487,12 @@ Example:
|
|
|
672
487
|
// ─────────────────────────────────────────────────────────────────────────
|
|
673
488
|
{
|
|
674
489
|
name: "gufi_packages",
|
|
675
|
-
description: "
|
|
490
|
+
description: getDesc("gufi_packages"),
|
|
676
491
|
inputSchema: { type: "object", properties: {} },
|
|
677
492
|
},
|
|
678
493
|
{
|
|
679
494
|
name: "gufi_package",
|
|
680
|
-
description: "
|
|
495
|
+
description: getDesc("gufi_package"),
|
|
681
496
|
inputSchema: {
|
|
682
497
|
type: "object",
|
|
683
498
|
properties: {
|
|
@@ -688,7 +503,7 @@ Example:
|
|
|
688
503
|
},
|
|
689
504
|
{
|
|
690
505
|
name: "gufi_package_create",
|
|
691
|
-
description: "
|
|
506
|
+
description: getDesc("gufi_package_create"),
|
|
692
507
|
inputSchema: {
|
|
693
508
|
type: "object",
|
|
694
509
|
properties: {
|
|
@@ -700,7 +515,7 @@ Example:
|
|
|
700
515
|
},
|
|
701
516
|
{
|
|
702
517
|
name: "gufi_package_delete",
|
|
703
|
-
description: "
|
|
518
|
+
description: getDesc("gufi_package_delete"),
|
|
704
519
|
inputSchema: {
|
|
705
520
|
type: "object",
|
|
706
521
|
properties: {
|
|
@@ -711,7 +526,7 @@ Example:
|
|
|
711
526
|
},
|
|
712
527
|
{
|
|
713
528
|
name: "gufi_package_add_module",
|
|
714
|
-
description: "
|
|
529
|
+
description: getDesc("gufi_package_add_module"),
|
|
715
530
|
inputSchema: {
|
|
716
531
|
type: "object",
|
|
717
532
|
properties: {
|
|
@@ -724,7 +539,7 @@ Example:
|
|
|
724
539
|
},
|
|
725
540
|
{
|
|
726
541
|
name: "gufi_package_remove_module",
|
|
727
|
-
description: "
|
|
542
|
+
description: getDesc("gufi_package_remove_module"),
|
|
728
543
|
inputSchema: {
|
|
729
544
|
type: "object",
|
|
730
545
|
properties: {
|
|
@@ -736,7 +551,7 @@ Example:
|
|
|
736
551
|
},
|
|
737
552
|
{
|
|
738
553
|
name: "gufi_package_add_view",
|
|
739
|
-
description: "
|
|
554
|
+
description: getDesc("gufi_package_add_view"),
|
|
740
555
|
inputSchema: {
|
|
741
556
|
type: "object",
|
|
742
557
|
properties: {
|
|
@@ -748,7 +563,7 @@ Example:
|
|
|
748
563
|
},
|
|
749
564
|
{
|
|
750
565
|
name: "gufi_package_remove_view",
|
|
751
|
-
description: "
|
|
566
|
+
description: getDesc("gufi_package_remove_view"),
|
|
752
567
|
inputSchema: {
|
|
753
568
|
type: "object",
|
|
754
569
|
properties: {
|
|
@@ -760,7 +575,7 @@ Example:
|
|
|
760
575
|
},
|
|
761
576
|
{
|
|
762
577
|
name: "gufi_package_publish",
|
|
763
|
-
description: "
|
|
578
|
+
description: getDesc("gufi_package_publish"),
|
|
764
579
|
inputSchema: {
|
|
765
580
|
type: "object",
|
|
766
581
|
properties: {
|
|
@@ -771,7 +586,7 @@ Example:
|
|
|
771
586
|
},
|
|
772
587
|
{
|
|
773
588
|
name: "gufi_package_unpublish",
|
|
774
|
-
description: "
|
|
589
|
+
description: getDesc("gufi_package_unpublish"),
|
|
775
590
|
inputSchema: {
|
|
776
591
|
type: "object",
|
|
777
592
|
properties: {
|
|
@@ -782,7 +597,7 @@ Example:
|
|
|
782
597
|
},
|
|
783
598
|
{
|
|
784
599
|
name: "gufi_package_sync",
|
|
785
|
-
description: "
|
|
600
|
+
description: getDesc("gufi_package_sync"),
|
|
786
601
|
inputSchema: {
|
|
787
602
|
type: "object",
|
|
788
603
|
properties: {
|
|
@@ -793,7 +608,7 @@ Example:
|
|
|
793
608
|
},
|
|
794
609
|
{
|
|
795
610
|
name: "gufi_package_check",
|
|
796
|
-
description: "
|
|
611
|
+
description: getDesc("gufi_package_check"),
|
|
797
612
|
inputSchema: {
|
|
798
613
|
type: "object",
|
|
799
614
|
properties: {
|
|
@@ -807,7 +622,7 @@ Example:
|
|
|
807
622
|
// ─────────────────────────────────────────────────────────────────────────
|
|
808
623
|
{
|
|
809
624
|
name: "gufi_package_migrations",
|
|
810
|
-
description: "
|
|
625
|
+
description: getDesc("gufi_package_migrations"),
|
|
811
626
|
inputSchema: {
|
|
812
627
|
type: "object",
|
|
813
628
|
properties: {
|
|
@@ -818,7 +633,7 @@ Example:
|
|
|
818
633
|
},
|
|
819
634
|
{
|
|
820
635
|
name: "gufi_package_migration_create",
|
|
821
|
-
description: "
|
|
636
|
+
description: getDesc("gufi_package_migration_create"),
|
|
822
637
|
inputSchema: {
|
|
823
638
|
type: "object",
|
|
824
639
|
properties: {
|
|
@@ -834,7 +649,7 @@ Example:
|
|
|
834
649
|
},
|
|
835
650
|
{
|
|
836
651
|
name: "gufi_package_migration_delete",
|
|
837
|
-
description: "
|
|
652
|
+
description: getDesc("gufi_package_migration_delete"),
|
|
838
653
|
inputSchema: {
|
|
839
654
|
type: "object",
|
|
840
655
|
properties: {
|
|
@@ -846,7 +661,7 @@ Example:
|
|
|
846
661
|
},
|
|
847
662
|
{
|
|
848
663
|
name: "gufi_package_entities",
|
|
849
|
-
description: "
|
|
664
|
+
description: getDesc("gufi_package_entities"),
|
|
850
665
|
inputSchema: {
|
|
851
666
|
type: "object",
|
|
852
667
|
properties: {
|
|
@@ -1354,6 +1169,15 @@ const toolHandlers = {
|
|
|
1354
1169
|
content: f.content,
|
|
1355
1170
|
is_entry_point: f.is_entry_point,
|
|
1356
1171
|
})),
|
|
1172
|
+
_hint: {
|
|
1173
|
+
cli_workflow: [
|
|
1174
|
+
`gufi view:pull ${params.view_id} # Download files to local folder`,
|
|
1175
|
+
"# Edit files locally with your editor",
|
|
1176
|
+
"gufi view:push # Upload changes back to Gufi",
|
|
1177
|
+
"gufi view:watch # Auto-sync on file changes",
|
|
1178
|
+
],
|
|
1179
|
+
note: "For large views, consider using CLI commands instead of MCP tools",
|
|
1180
|
+
},
|
|
1357
1181
|
};
|
|
1358
1182
|
},
|
|
1359
1183
|
async gufi_view_file_update(params) {
|