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.
Files changed (2) hide show
  1. package/dist/mcp.js +67 -243
  2. 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: `Generate intelligent context about a Gufi project. This is the FIRST tool to use when starting work on a Gufi project - it provides a complete overview of modules, entities, fields, automations, and relationships.
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: "Get current user info and environment (local/prod). Use this to verify authentication status before making changes.",
160
+ description: getDesc("gufi_whoami"),
162
161
  inputSchema: { type: "object", properties: {} },
163
162
  },
164
163
  {
165
164
  name: "gufi_schema",
166
- description: `Get the database schema of a company - lists all modules, entities (tables), and their fields.
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: `Read documentation about Gufi. Use this when you need detailed information about specific topics.
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: "List all companies the user has access to. Returns company IDs, names, and creation dates.",
190
+ description: getDesc("gufi_companies"),
219
191
  inputSchema: { type: "object", properties: {} },
220
192
  },
221
193
  {
222
194
  name: "gufi_company_create",
223
- description: "Create a new company. Returns the new company ID.",
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: "List all modules of a company. Modules define the data structure (entities, fields, relations). Returns module IDs, names, and entity counts.",
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: `Get the full JSON definition of a module. Auto-detects company from module ID.
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: `Update a module's JSON definition. Use this to add/modify entities, fields, relations.
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: `Create a new module in a company.
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: `List all automation scripts of a company. Automations are JavaScript functions that run on events.
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: "Get the JavaScript code and metadata of an automation script. Returns id, name, description, company_id, and the full JS code.",
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: `Create or update an automation script. If a script with the same name exists, it will be updated.
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: "Get the automation triggers configured for an entity. Shows which scripts run on create, update, delete, or click events.",
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: `Update the automation triggers for an entity. Configure which scripts run on which events.
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: "Get the execution history of automations. Useful for debugging - shows success/failure, duration, and error messages.",
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: `List rows from a table. Table names follow the pattern m{moduleId}_t{entityId}.
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: "Get a single row by ID. Returns all fields including relations and computed values.",
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: `Create a new row in a table. Data should match the entity's field schema.
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: `Update an existing row. Only include fields you want to change.
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: "Delete a row from a table. This is permanent and cannot be undone.",
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: "List environment variables of a company. These are used in automations via process.env.KEY.",
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: "Create or update an environment variable. Used for API keys, secrets, and configuration.",
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: "Delete an environment variable.",
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: "Get all files of a marketplace view. Returns the React/TypeScript code, CSS, and configuration files.",
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: "Update a single file in a marketplace view. Use for modifying React components, styles, or configuration.",
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: "Update multiple files in a marketplace view at once. More efficient than updating one by one.",
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: "List all packages owned by the user. Packages bundle modules and views for distribution in the Marketplace.",
490
+ description: getDesc("gufi_packages"),
676
491
  inputSchema: { type: "object", properties: {} },
677
492
  },
678
493
  {
679
494
  name: "gufi_package",
680
- description: "Get detailed information about a package including its modules, views, and publication status.",
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: "Create a new package. After creation, add modules and views to it.",
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: "Delete a package. Only works if the package is not published.",
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: "Import a module into a package. The module will be snapshotted for distribution.",
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: "Remove a module from a package.",
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: "Add a marketplace view to a package.",
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: "Remove a view from a package.",
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: "Publish a package to the Marketplace. Makes it available for installation by other companies.",
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: "Unpublish a package from the Marketplace.",
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: "Sync package version - updates module snapshots and increments version number.",
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: "Check if package modules have changes that need syncing.",
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: "List SQL migrations for a package. Migrations run when clients update to new versions.",
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: "Create a SQL migration for a package. Use placeholders: {tableName}, {entityId}, {companyId}.",
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: "Delete a migration (only if not yet applied to any installation).",
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: "List entities available in a package. Use for target_entity in migrations.",
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) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gufi-cli",
3
- "version": "0.1.21",
3
+ "version": "0.1.22",
4
4
  "description": "CLI for developing Gufi Marketplace views locally with Claude Code",
5
5
  "bin": {
6
6
  "gufi": "./bin/gufi.js"