@apteva/integrations 0.3.25 → 0.3.28

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.
@@ -1,182 +1,818 @@
1
1
  {
2
2
  "slug": "omnikit-storage",
3
3
  "name": "OmniKit Storage",
4
- "description": "File storage and management with buckets, folders, uploads, and search",
4
+ "description": "File storage, folders, buckets, transcripts, thumbnails, search, and document generation. Upload, organize, transcribe, and manage media files with CDN delivery.",
5
5
  "logo": "https://cdn.omnikit.co/cdn/project-10/public/10_1770556267491_eecb0n/603050903_10162713420734412_6016628635295692734_n.jpg",
6
- "categories": ["storage", "files", "media"],
7
- "base_url": "https://api.omnikit.co/storage",
6
+ "categories": [
7
+ "storage",
8
+ "files",
9
+ "folders",
10
+ "buckets",
11
+ "upload",
12
+ "download",
13
+ "transcripts",
14
+ "thumbnails",
15
+ "search",
16
+ "cdn",
17
+ "media"
18
+ ],
19
+ "base_url": "https://api.omnikit.co",
8
20
  "auth": {
9
- "types": ["api_key"],
10
- "headers": { "X-API-Key": "{{api_key}}" },
21
+ "types": [
22
+ "api_key"
23
+ ],
24
+ "headers": {
25
+ "X-API-Key": "{{api_key}}"
26
+ },
11
27
  "credential_fields": [
12
- { "name": "api_key", "label": "OmniKit API Key", "description": "Your OmniKit API key (starts with 'okt_')" }
28
+ {
29
+ "name": "api_key",
30
+ "label": "Api Key",
31
+ "description": "Your OmniKit API key (starts with 'okt_'). The project is determined automatically from the key."
32
+ }
13
33
  ]
14
34
  },
15
35
  "tools": [
36
+ {
37
+ "name": "get_file",
38
+ "description": "Get detailed file metadata including size, dimensions, duration, MIME type, URLs, and optionally transcripts with segments. Use include_transcripts=true to get transcript text, include_transcript_segments=true for timestamped segments, include_thumbnails=true for video thumbnails.",
39
+ "method": "GET",
40
+ "path": "/storage/files/{file_id}",
41
+ "input_schema": {
42
+ "type": "object",
43
+ "properties": {
44
+ "file_id": {
45
+ "type": "integer",
46
+ "description": "ID of the file to retrieve"
47
+ },
48
+ "include_transcripts": {
49
+ "type": "boolean",
50
+ "default": false,
51
+ "description": "Include transcript full text for audio/video files"
52
+ },
53
+ "include_transcript_segments": {
54
+ "type": "boolean",
55
+ "default": false,
56
+ "description": "Include timestamped transcript segments with start/end times and confidence scores"
57
+ },
58
+ "include_thumbnails": {
59
+ "type": "boolean",
60
+ "default": false,
61
+ "description": "Include video thumbnail list with timestamps"
62
+ },
63
+ "include_storage_info": {
64
+ "type": "boolean",
65
+ "default": false,
66
+ "description": "Include storage bucket details and availability info"
67
+ },
68
+ "include_entity_tracks": {
69
+ "type": "boolean",
70
+ "default": false,
71
+ "description": "Include entity tracking data for videos (persons, objects)"
72
+ }
73
+ },
74
+ "required": [
75
+ "file_id"
76
+ ]
77
+ }
78
+ },
16
79
  {
17
80
  "name": "list_files",
18
- "description": "List files with filtering, sorting, and pagination",
81
+ "description": "List files in a project with optional filtering by bucket, folder, file type, and pagination",
19
82
  "method": "GET",
20
- "path": "/files",
83
+ "path": "/storage/files",
21
84
  "input_schema": {
22
85
  "type": "object",
23
86
  "properties": {
24
- "bucket_id": { "type": "integer", "description": "Filter by storage bucket" },
25
- "folder_id": { "type": "integer", "description": "Filter by folder" },
26
- "file_type": { "type": "string", "enum": ["image", "video", "audio", "document", "archive", "other"], "description": "Filter by file type" },
27
- "search": { "type": "string", "description": "Search in file names and descriptions" },
28
- "access_level": { "type": "string", "enum": ["private", "public"], "description": "Filter by access level" },
29
- "limit": { "type": "integer", "default": 50, "description": "Number of files to return" },
30
- "offset": { "type": "integer", "default": 0, "description": "Pagination offset" },
31
- "sort_by": { "type": "string", "enum": ["name", "size", "created_at", "updated_at"], "default": "created_at", "description": "Sort field" },
32
- "sort_order": { "type": "string", "enum": ["asc", "desc"], "default": "desc", "description": "Sort direction" }
87
+ "bucket_id": {
88
+ "type": "integer",
89
+ "description": "Filter by storage bucket ID"
90
+ },
91
+ "folder_id": {
92
+ "type": "integer",
93
+ "description": "Filter by folder ID"
94
+ },
95
+ "file_type": {
96
+ "type": "string",
97
+ "enum": [
98
+ "image",
99
+ "video",
100
+ "audio",
101
+ "document",
102
+ "archive",
103
+ "other"
104
+ ],
105
+ "description": "Filter by file type"
106
+ },
107
+ "limit": {
108
+ "type": "integer",
109
+ "default": 50,
110
+ "description": "Number of files to return (max 1000)"
111
+ },
112
+ "offset": {
113
+ "type": "integer",
114
+ "default": 0,
115
+ "description": "Pagination offset"
116
+ }
33
117
  }
34
118
  }
35
119
  },
36
120
  {
37
- "name": "search_files",
38
- "description": "Search and filter files with advanced options including content rating, format, dimensions, and folder search",
121
+ "name": "upload_file",
122
+ "description": "Upload a file with base64-encoded data. Auto-generates thumbnails for images/videos and transcripts for audio/video files.",
123
+ "method": "POST",
124
+ "path": "/storage/upload",
125
+ "input_schema": {
126
+ "type": "object",
127
+ "properties": {
128
+ "file_name": {
129
+ "type": "string",
130
+ "description": "Name for the uploaded file"
131
+ },
132
+ "file_data": {
133
+ "type": "string",
134
+ "description": "Base64-encoded file content"
135
+ },
136
+ "mime_type": {
137
+ "type": "string",
138
+ "description": "MIME type (e.g., image/png, video/mp4, audio/mp3)"
139
+ },
140
+ "folder_id": {
141
+ "type": "integer",
142
+ "description": "Target folder ID"
143
+ },
144
+ "description": {
145
+ "type": "string",
146
+ "description": "File description"
147
+ },
148
+ "tags": {
149
+ "type": "array",
150
+ "items": {
151
+ "type": "string"
152
+ },
153
+ "description": "Tags for organizing the file"
154
+ },
155
+ "access_level": {
156
+ "type": "string",
157
+ "enum": [
158
+ "public",
159
+ "private"
160
+ ],
161
+ "default": "public",
162
+ "description": "File access level"
163
+ },
164
+ "auto_transcribe": {
165
+ "type": "boolean",
166
+ "default": true,
167
+ "description": "Auto-generate transcripts for audio/video files"
168
+ }
169
+ },
170
+ "required": [
171
+ "file_name",
172
+ "file_data",
173
+ "mime_type"
174
+ ]
175
+ }
176
+ },
177
+ {
178
+ "name": "update_file",
179
+ "description": "Update file metadata: name, description, tags, access level, or move to a different folder",
180
+ "method": "PUT",
181
+ "path": "/storage/files/{file_id}",
182
+ "input_schema": {
183
+ "type": "object",
184
+ "properties": {
185
+ "file_id": {
186
+ "type": "integer",
187
+ "description": "ID of the file to update"
188
+ },
189
+ "name": {
190
+ "type": "string",
191
+ "description": "New file name"
192
+ },
193
+ "description": {
194
+ "type": "string",
195
+ "description": "New description"
196
+ },
197
+ "tags": {
198
+ "type": "array",
199
+ "items": {
200
+ "type": "string"
201
+ },
202
+ "description": "New tags"
203
+ },
204
+ "access_level": {
205
+ "type": "string",
206
+ "enum": [
207
+ "public",
208
+ "private"
209
+ ],
210
+ "description": "New access level"
211
+ },
212
+ "folder_id": {
213
+ "type": "integer",
214
+ "description": "Move file to this folder"
215
+ }
216
+ },
217
+ "required": [
218
+ "file_id"
219
+ ]
220
+ }
221
+ },
222
+ {
223
+ "name": "download_file",
224
+ "description": "Get a download URL for a file",
225
+ "method": "GET",
226
+ "path": "/storage/files/{file_id}/download",
227
+ "input_schema": {
228
+ "type": "object",
229
+ "properties": {
230
+ "file_id": {
231
+ "type": "integer",
232
+ "description": "ID of the file to download"
233
+ }
234
+ },
235
+ "required": [
236
+ "file_id"
237
+ ]
238
+ }
239
+ },
240
+ {
241
+ "name": "search",
242
+ "description": "Advanced file search with filtering by name, type, MIME type, size, dimensions, duration, tags, date ranges, and more. Supports sorting by name, size, date, type.",
39
243
  "method": "GET",
40
- "path": "/search",
244
+ "path": "/storage/search",
41
245
  "input_schema": {
42
246
  "type": "object",
43
247
  "properties": {
44
- "search": { "type": "string", "description": "Search in file names, descriptions, and tags" },
45
- "folder": { "type": "string", "description": "Search within a folder by name, path, or ID" },
46
- "file_type": { "type": "string", "enum": ["image", "video", "audio", "document", "archive", "other"], "description": "Filter by file type" },
47
- "extension": { "type": "string", "description": "Filter by file extension (e.g. jpg, pdf, mp4)" },
48
- "format": { "type": "string", "enum": ["portrait", "landscape", "square"], "description": "Filter by aspect ratio" },
49
- "sort_by": { "type": "string", "enum": ["name", "size_bytes", "created_at", "uploaded_at", "random"], "default": "created_at", "description": "Sort field" },
50
- "sort_order": { "type": "string", "enum": ["asc", "desc"], "default": "desc" },
51
- "limit": { "type": "integer", "default": 50, "description": "Number of files to return" },
52
- "offset": { "type": "integer", "default": 0, "description": "Pagination offset" }
248
+ "query": {
249
+ "type": "string",
250
+ "description": "Search query (searches file names and descriptions)"
251
+ },
252
+ "file_type": {
253
+ "type": "string",
254
+ "enum": [
255
+ "image",
256
+ "video",
257
+ "audio",
258
+ "document"
259
+ ],
260
+ "description": "Filter by file type"
261
+ },
262
+ "mime_type": {
263
+ "type": "string",
264
+ "description": "Filter by MIME type (e.g., video/mp4)"
265
+ },
266
+ "folder_id": {
267
+ "type": "integer",
268
+ "description": "Filter by folder"
269
+ },
270
+ "bucket_id": {
271
+ "type": "integer",
272
+ "description": "Filter by bucket"
273
+ },
274
+ "tags": {
275
+ "type": "string",
276
+ "description": "Comma-separated tags to filter by"
277
+ },
278
+ "min_size": {
279
+ "type": "integer",
280
+ "description": "Minimum file size in bytes"
281
+ },
282
+ "max_size": {
283
+ "type": "integer",
284
+ "description": "Maximum file size in bytes"
285
+ },
286
+ "min_duration": {
287
+ "type": "number",
288
+ "description": "Minimum duration in seconds (audio/video)"
289
+ },
290
+ "max_duration": {
291
+ "type": "number",
292
+ "description": "Maximum duration in seconds (audio/video)"
293
+ },
294
+ "sort_by": {
295
+ "type": "string",
296
+ "enum": [
297
+ "name",
298
+ "size",
299
+ "created_at",
300
+ "updated_at",
301
+ "file_type"
302
+ ],
303
+ "default": "created_at",
304
+ "description": "Sort field"
305
+ },
306
+ "sort_order": {
307
+ "type": "string",
308
+ "enum": [
309
+ "asc",
310
+ "desc"
311
+ ],
312
+ "default": "desc",
313
+ "description": "Sort order"
314
+ },
315
+ "limit": {
316
+ "type": "integer",
317
+ "default": 50,
318
+ "description": "Results per page (max 1000)"
319
+ },
320
+ "offset": {
321
+ "type": "integer",
322
+ "default": 0,
323
+ "description": "Pagination offset"
324
+ }
53
325
  }
54
326
  }
55
327
  },
56
328
  {
57
- "name": "get_file",
58
- "description": "Get detailed file info including optional transcripts and thumbnails",
329
+ "name": "generate_document",
330
+ "description": "Generate PDF, DOCX, or XLSX documents from HTML content or templates and upload to storage",
331
+ "method": "POST",
332
+ "path": "/storage/files/generate",
333
+ "input_schema": {
334
+ "type": "object",
335
+ "properties": {
336
+ "content": {
337
+ "type": "string",
338
+ "description": "HTML content or template content to convert"
339
+ },
340
+ "format": {
341
+ "type": "string",
342
+ "enum": [
343
+ "pdf",
344
+ "docx",
345
+ "xlsx"
346
+ ],
347
+ "default": "pdf",
348
+ "description": "Output format"
349
+ },
350
+ "file_name": {
351
+ "type": "string",
352
+ "description": "Output file name"
353
+ },
354
+ "folder_id": {
355
+ "type": "integer",
356
+ "description": "Target folder ID"
357
+ }
358
+ },
359
+ "required": [
360
+ "content",
361
+ "file_name"
362
+ ]
363
+ }
364
+ },
365
+ {
366
+ "name": "generate_presigned_url",
367
+ "description": "Generate a presigned URL for direct client-to-storage file upload. Use for large files instead of base64 upload. After upload, call confirm-upload to trigger processing.",
368
+ "method": "POST",
369
+ "path": "/storage/generate-presigned-url",
370
+ "input_schema": {
371
+ "type": "object",
372
+ "properties": {
373
+ "file_name": {
374
+ "type": "string",
375
+ "description": "Name of the file to upload"
376
+ },
377
+ "mime_type": {
378
+ "type": "string",
379
+ "description": "MIME type of the file"
380
+ },
381
+ "size_bytes": {
382
+ "type": "integer",
383
+ "description": "File size in bytes"
384
+ },
385
+ "folder_id": {
386
+ "type": "integer",
387
+ "description": "Target folder ID"
388
+ },
389
+ "access_level": {
390
+ "type": "string",
391
+ "enum": [
392
+ "public",
393
+ "private"
394
+ ],
395
+ "default": "public",
396
+ "description": "File access level"
397
+ }
398
+ },
399
+ "required": [
400
+ "file_name",
401
+ "mime_type"
402
+ ]
403
+ }
404
+ },
405
+ {
406
+ "name": "confirm_upload",
407
+ "description": "Confirm that a presigned URL upload completed. Triggers post-processing: thumbnail generation, transcription, and AI description.",
408
+ "method": "POST",
409
+ "path": "/storage/confirm-upload",
410
+ "input_schema": {
411
+ "type": "object",
412
+ "properties": {
413
+ "file_id": {
414
+ "type": "integer",
415
+ "description": "ID of the file to confirm"
416
+ }
417
+ },
418
+ "required": [
419
+ "file_id"
420
+ ]
421
+ }
422
+ },
423
+ {
424
+ "name": "list_thumbnails",
425
+ "description": "List all generated thumbnails for a video file with timestamps and dimensions",
59
426
  "method": "GET",
60
- "path": "/files/{file_id}",
427
+ "path": "/storage/files/{file_id}/thumbnails",
61
428
  "input_schema": {
62
429
  "type": "object",
63
430
  "properties": {
64
- "file_id": { "type": "integer", "description": "File ID" },
65
- "include_transcripts": { "type": "boolean", "default": false, "description": "Include transcript metadata" },
66
- "include_transcript_segments": { "type": "boolean", "default": false, "description": "Include transcript segments with timecodes" },
67
- "include_thumbnails": { "type": "boolean", "default": false, "description": "Include thumbnail URLs" }
431
+ "file_id": {
432
+ "type": "integer",
433
+ "description": "ID of the video file"
434
+ }
68
435
  },
69
- "required": ["file_id"]
436
+ "required": [
437
+ "file_id"
438
+ ]
70
439
  }
71
440
  },
72
441
  {
73
- "name": "upload_file",
74
- "description": "Upload a file via base64 data or a public URL",
442
+ "name": "generate_transcript",
443
+ "description": "Generate a transcript for an audio/video file using OpenAI Whisper. Supports language auto-detection or manual language specification.",
75
444
  "method": "POST",
76
- "path": "/upload",
445
+ "path": "/storage/files/{file_id}/transcripts/generate",
77
446
  "input_schema": {
78
447
  "type": "object",
79
448
  "properties": {
80
- "file_name": { "type": "string", "description": "File name with extension" },
81
- "source_url": { "type": "string", "description": "Public URL to fetch the file from" },
82
- "file_data": { "type": "string", "description": "Base64-encoded file data (use source_url instead if possible)" },
83
- "folder_id": { "type": "string", "description": "Folder ID to store file in" },
84
- "description": { "type": "string", "description": "File description" },
85
- "tags": { "type": "array", "items": { "type": "string" }, "description": "Tags for organizing" },
86
- "access_level": { "type": "string", "enum": ["private", "public"], "default": "public", "description": "Access level" }
449
+ "file_id": {
450
+ "type": "integer",
451
+ "description": "ID of the audio/video file to transcribe"
452
+ },
453
+ "language_code": {
454
+ "type": "string",
455
+ "description": "Language code (e.g., en, fr, es). Auto-detected if not specified."
456
+ }
87
457
  },
88
- "required": ["file_name"]
458
+ "required": [
459
+ "file_id"
460
+ ]
89
461
  }
90
462
  },
91
463
  {
92
- "name": "update_file",
93
- "description": "Update file metadata, tags, or move to a different folder",
94
- "method": "PUT",
95
- "path": "/files/{file_id}",
464
+ "name": "list_transcripts",
465
+ "description": "List all transcripts for a specific file with optional segment data",
466
+ "method": "GET",
467
+ "path": "/storage/files/{file_id}/transcripts",
96
468
  "input_schema": {
97
469
  "type": "object",
98
470
  "properties": {
99
- "file_id": { "type": "integer", "description": "File ID to update" },
100
- "name": { "type": "string", "description": "New file name" },
101
- "description": { "type": "string", "description": "New description" },
102
- "folder_id": { "type": "integer", "description": "Move to different folder" },
103
- "tags": { "type": "array", "items": { "type": "string" }, "description": "Update tags" },
104
- "access_level": { "type": "string", "enum": ["private", "public"], "description": "Update access level" }
471
+ "file_id": {
472
+ "type": "integer",
473
+ "description": "ID of the file"
474
+ },
475
+ "include_segments": {
476
+ "type": "boolean",
477
+ "default": false,
478
+ "description": "Include timestamped segments"
479
+ },
480
+ "language_code": {
481
+ "type": "string",
482
+ "description": "Filter by language code"
483
+ }
105
484
  },
106
- "required": ["file_id"]
485
+ "required": [
486
+ "file_id"
487
+ ]
107
488
  }
108
489
  },
109
490
  {
110
- "name": "delete_file",
111
- "description": "Delete a file from storage",
112
- "method": "DELETE",
113
- "path": "/files/{file_id}",
491
+ "name": "get_transcript",
492
+ "description": "Get a transcript by ID with optional format conversion (JSON, VTT, SRT, TXT) and segment data",
493
+ "method": "GET",
494
+ "path": "/storage/transcripts/{transcript_id}",
495
+ "input_schema": {
496
+ "type": "object",
497
+ "properties": {
498
+ "transcript_id": {
499
+ "type": "integer",
500
+ "description": "ID of the transcript"
501
+ },
502
+ "include_segments": {
503
+ "type": "boolean",
504
+ "default": false,
505
+ "description": "Include timestamped segments"
506
+ },
507
+ "format": {
508
+ "type": "string",
509
+ "enum": [
510
+ "json",
511
+ "vtt",
512
+ "srt",
513
+ "txt"
514
+ ],
515
+ "default": "json",
516
+ "description": "Output format"
517
+ }
518
+ },
519
+ "required": [
520
+ "transcript_id"
521
+ ]
522
+ }
523
+ },
524
+ {
525
+ "name": "translate_transcript",
526
+ "description": "Translate a transcript to another language using AI (GPT-4). Creates a new transcript in the target language.",
527
+ "method": "POST",
528
+ "path": "/storage/transcripts/{transcript_id}/translate",
529
+ "input_schema": {
530
+ "type": "object",
531
+ "properties": {
532
+ "transcript_id": {
533
+ "type": "integer",
534
+ "description": "ID of the transcript to translate"
535
+ },
536
+ "target_language": {
537
+ "type": "string",
538
+ "description": "Target language (e.g., french, spanish, german)"
539
+ }
540
+ },
541
+ "required": [
542
+ "transcript_id",
543
+ "target_language"
544
+ ]
545
+ }
546
+ },
547
+ {
548
+ "name": "upload_transcript",
549
+ "description": "Upload an existing transcript file (SRT, VTT, JSON, or TXT format) for a file",
550
+ "method": "POST",
551
+ "path": "/storage/transcripts/upload",
114
552
  "input_schema": {
115
553
  "type": "object",
116
554
  "properties": {
117
- "file_id": { "type": "integer", "description": "File ID to delete" },
118
- "force": { "type": "boolean", "default": false, "description": "Force delete without trash" }
555
+ "file_id": {
556
+ "type": "integer",
557
+ "description": "ID of the audio/video file"
558
+ },
559
+ "content": {
560
+ "type": "string",
561
+ "description": "Transcript content (SRT, VTT, JSON, or plain text)"
562
+ },
563
+ "format": {
564
+ "type": "string",
565
+ "enum": [
566
+ "srt",
567
+ "vtt",
568
+ "json",
569
+ "txt"
570
+ ],
571
+ "description": "Format of the transcript content"
572
+ },
573
+ "language_code": {
574
+ "type": "string",
575
+ "description": "Language code (e.g., en, fr)"
576
+ }
119
577
  },
120
- "required": ["file_id"]
578
+ "required": [
579
+ "file_id",
580
+ "content",
581
+ "format"
582
+ ]
121
583
  }
122
584
  },
123
585
  {
124
586
  "name": "list_folders",
125
- "description": "List folders in a bucket or parent folder",
587
+ "description": "List folders with optional parent folder filter and recursive listing",
126
588
  "method": "GET",
127
- "path": "/folders",
589
+ "path": "/storage/folders",
128
590
  "input_schema": {
129
591
  "type": "object",
130
592
  "properties": {
131
- "parent_id": { "type": "integer", "description": "Parent folder ID (null for root)" },
132
- "bucket_id": { "type": "integer", "description": "Storage bucket ID" },
133
- "include_file_count": { "type": "boolean", "default": false, "description": "Include file count per folder" },
134
- "search": { "type": "string", "description": "Search folder names" },
135
- "limit": { "type": "integer", "default": 100, "description": "Number of folders to return" }
593
+ "parent_folder_id": {
594
+ "type": "integer",
595
+ "description": "Filter by parent folder (omit for root folders)"
596
+ },
597
+ "include_children": {
598
+ "type": "boolean",
599
+ "default": false,
600
+ "description": "Recursively include child folders"
601
+ }
136
602
  }
137
603
  }
138
604
  },
139
605
  {
140
606
  "name": "create_folder",
141
- "description": "Create a new folder for organizing files",
607
+ "description": "Create a new folder with optional parent folder and description",
142
608
  "method": "POST",
143
- "path": "/folders",
609
+ "path": "/storage/folders",
610
+ "input_schema": {
611
+ "type": "object",
612
+ "properties": {
613
+ "name": {
614
+ "type": "string",
615
+ "description": "Folder name"
616
+ },
617
+ "parent_folder_id": {
618
+ "type": "integer",
619
+ "description": "Parent folder ID (omit for root)"
620
+ },
621
+ "description": {
622
+ "type": "string",
623
+ "description": "Folder description"
624
+ }
625
+ },
626
+ "required": [
627
+ "name"
628
+ ]
629
+ }
630
+ },
631
+ {
632
+ "name": "update_folder",
633
+ "description": "Update folder name, description, or move to a different parent",
634
+ "method": "PUT",
635
+ "path": "/storage/folders/{folder_id}",
636
+ "input_schema": {
637
+ "type": "object",
638
+ "properties": {
639
+ "folder_id": {
640
+ "type": "integer",
641
+ "description": "ID of the folder to update"
642
+ },
643
+ "name": {
644
+ "type": "string",
645
+ "description": "New folder name"
646
+ },
647
+ "description": {
648
+ "type": "string",
649
+ "description": "New description"
650
+ },
651
+ "parent_folder_id": {
652
+ "type": "integer",
653
+ "description": "Move to this parent folder"
654
+ }
655
+ },
656
+ "required": [
657
+ "folder_id"
658
+ ]
659
+ }
660
+ },
661
+ {
662
+ "name": "delete_folder",
663
+ "description": "Delete a folder. Use recursive=true to delete all contents.",
664
+ "method": "DELETE",
665
+ "path": "/storage/folders/{folder_id}",
144
666
  "input_schema": {
145
667
  "type": "object",
146
668
  "properties": {
147
- "name": { "type": "string", "description": "Folder name" },
148
- "parent_id": { "type": "integer", "description": "Parent folder ID (for nested folders)" },
149
- "description": { "type": "string", "description": "Folder description" },
150
- "access_level": { "type": "string", "enum": ["private", "public"], "default": "private", "description": "Access level" }
669
+ "folder_id": {
670
+ "type": "integer",
671
+ "description": "ID of the folder to delete"
672
+ },
673
+ "recursive": {
674
+ "type": "boolean",
675
+ "default": false,
676
+ "description": "Delete folder contents recursively"
677
+ }
151
678
  },
152
- "required": ["name"]
679
+ "required": [
680
+ "folder_id"
681
+ ]
153
682
  }
154
683
  },
155
684
  {
156
685
  "name": "list_buckets",
157
- "description": "List all storage buckets with optional statistics",
686
+ "description": "List storage buckets for the project with optional statistics",
158
687
  "method": "GET",
159
- "path": "/buckets",
688
+ "path": "/storage/buckets",
160
689
  "input_schema": {
161
690
  "type": "object",
162
691
  "properties": {
163
- "include_stats": { "type": "boolean", "default": false, "description": "Include storage statistics" }
692
+ "include_stats": {
693
+ "type": "boolean",
694
+ "default": false,
695
+ "description": "Include file count and size statistics"
696
+ }
164
697
  }
165
698
  }
166
699
  },
700
+ {
701
+ "name": "get_bucket",
702
+ "description": "Get storage bucket details with optional statistics",
703
+ "method": "GET",
704
+ "path": "/storage/buckets/{bucket_id}",
705
+ "input_schema": {
706
+ "type": "object",
707
+ "properties": {
708
+ "bucket_id": {
709
+ "type": "integer",
710
+ "description": "ID of the bucket"
711
+ },
712
+ "include_stats": {
713
+ "type": "boolean",
714
+ "default": false,
715
+ "description": "Include statistics"
716
+ }
717
+ },
718
+ "required": [
719
+ "bucket_id"
720
+ ]
721
+ }
722
+ },
723
+ {
724
+ "name": "delete_file",
725
+ "description": "Delete a file from storage",
726
+ "method": "DELETE",
727
+ "path": "/storage/files/{file_id}",
728
+ "input_schema": {
729
+ "type": "object",
730
+ "properties": {
731
+ "file_id": {
732
+ "type": "integer",
733
+ "description": "File ID to delete"
734
+ },
735
+ "force": {
736
+ "type": "boolean",
737
+ "default": false,
738
+ "description": "Force delete without trash"
739
+ }
740
+ },
741
+ "required": [
742
+ "file_id"
743
+ ]
744
+ }
745
+ },
167
746
  {
168
747
  "name": "create_bucket",
169
748
  "description": "Create a new storage bucket",
170
749
  "method": "POST",
171
- "path": "/buckets",
750
+ "path": "/storage/buckets",
751
+ "input_schema": {
752
+ "type": "object",
753
+ "properties": {
754
+ "name": {
755
+ "type": "string",
756
+ "description": "Bucket name (must be unique)"
757
+ },
758
+ "region": {
759
+ "type": "string",
760
+ "default": "us-east-1",
761
+ "description": "Storage region"
762
+ },
763
+ "is_default": {
764
+ "type": "boolean",
765
+ "default": false,
766
+ "description": "Set as default bucket"
767
+ }
768
+ },
769
+ "required": [
770
+ "name"
771
+ ]
772
+ }
773
+ },
774
+ {
775
+ "name": "delete_bucket",
776
+ "description": "Delete a storage bucket (must be empty)",
777
+ "method": "DELETE",
778
+ "path": "/storage/buckets/{bucket_id}",
779
+ "input_schema": {
780
+ "type": "object",
781
+ "properties": {
782
+ "bucket_id": {
783
+ "type": "integer",
784
+ "description": "Bucket ID to delete"
785
+ }
786
+ },
787
+ "required": [
788
+ "bucket_id"
789
+ ]
790
+ }
791
+ },
792
+ {
793
+ "name": "update_bucket",
794
+ "description": "Update storage bucket settings",
795
+ "method": "PUT",
796
+ "path": "/storage/buckets/{bucket_id}",
172
797
  "input_schema": {
173
798
  "type": "object",
174
799
  "properties": {
175
- "name": { "type": "string", "description": "Bucket name (must be unique)" },
176
- "region": { "type": "string", "default": "us-east-1", "description": "Storage region" },
177
- "is_default": { "type": "boolean", "default": false, "description": "Set as default bucket" }
800
+ "bucket_id": {
801
+ "type": "integer",
802
+ "description": "Bucket ID to update"
803
+ },
804
+ "name": {
805
+ "type": "string",
806
+ "description": "New bucket name"
807
+ },
808
+ "is_default": {
809
+ "type": "boolean",
810
+ "description": "Set as default bucket"
811
+ }
178
812
  },
179
- "required": ["name"]
813
+ "required": [
814
+ "bucket_id"
815
+ ]
180
816
  }
181
817
  }
182
818
  ]