Skip to main content

file-management

File and asset management — upload via URL, organize folders, query file metadata, retrieve base64 assets. This skill should be used when the user asks to manage files, upload images, import files from URLs, organize folders, query file metadata, or retrieve assets in Directus.

Source facts

Repository
Agents-Store/opencode-plugins
Last source activity
October 4, 2026 at 20:44
Detected SKILL.md language
English
Stars
0
Forks
0

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

File Explorer
2 files

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
file-management
description
File and asset management — upload via URL, organize folders, query file metadata, retrieve base64 assets. This skill should be used when the user asks to manage files, upload images, import files from URLs, organize folders, query file metadata, or retrieve assets in Directus.
# File Management Reference for the `files`, `assets`, and `folders` MCP tools. ## Three Tools | Tool | Purpose | Actions | |------|---------|---------| | `files` | File metadata CRUD + URL imports | read, update, delete, import | | `assets` | Retrieve file content as base64 | read by ID | | `folders` | Virtual file organization | create, read, update, delete | **Note:** Files cannot be uploaded directly from local disk via MCP. Use the `import` action to import from URLs. ## Files Tool ### Import Files from URL ```text Tool: files Input: { "action": "import", "data": [{ "url": "https://example.com/photo.jpg", "file": { "title": "Product Hero Image", "description": "Main product photo for landing page", "folder": "folder-uuid-here" } }] } ``` ### Batch Import ```text Tool: files Input: { "action": "import", "data": [ { "url": "https://example.com/image1.jpg", "file": { "title": "Image 1", "folder": "folder-uuid" } }, { "url": "https://example.com/image2.jpg", "file": { "title": "Image 2", "folder": "folder-uuid" } } ] } ``` ### List Files ```text Tool: files Input: { "action": "read", "query": { "fields": ["id", "title", "filename_download", "type", "filesize", "width", "height", "folder"], "filter": { "type": { "_starts_with": "image/" } }, "sort": ["-uploaded_on"], "limit": 25 } } ``` ### Filter by Folder ```text Tool: files Input: { "action": "read", "query": { "fields": ["id", "title", "type", "filesize"], "filter": { "folder": { "_eq": "folder-uuid" } }, "limit": 50 } } ``` ### Update File Metadata ```text Tool: files Input: { "action": "update", "keys": ["file-uuid"], "data": [{ "title": "Updated Title", "description": "Better description for SEO", "focal_point_x": 0.5, "focal_point_y": 0.3 }] } ``` ### Delete Files ```text Tool: files Input: { "action": "delete", "keys": ["file-uuid-1", "file-uuid-2"] } ``` ## File Metadata Fields | Field | Type | Description | |-------|------|-------------| | `id` | uuid | File identifier | | `title` | string | Display title | | `filename_disk` | string | Storage filename | | `filename_download` | string | Download filename | | `type` | string | MIME type (e.g., `image/jpeg`) | | `folder` | uuid | Parent folder ID | | `filesize` | integer | Size in bytes | | `width` | integer | Image width (px) | | `height` | integer | Image height (px) | | `duration` | integer | Audio/video duration (ms) | | `description` | string | File description | | `location` | string | Location metadata | | `tags` | string \| null | Comma-separated tags string (not an array — the MCP tool schema expects `string \| null`, arrays will cause validation errors) | | `uploaded_by` | uuid | Uploader user ID | | `uploaded_on` | timestamp | Upload date | | `modified_by` | uuid | Last modifier | | `modified_on` | timestamp | Last modified date | | `focal_point_x` | float | Focal point X (0-1) | | `focal_point_y` | float | Focal point Y (0-1) | ## Assets Tool Retrieve file content as base64 for AI analysis: ```text Tool: assets Input: { "id": "file-uuid" } ``` Returns: ```json { "data": "base64-encoded-content", "mimeType": "image/jpeg" } ``` Supports images and audio files. Use for: - Image analysis with vision models - Reading document content - Audio file processing ## Folders Tool ### Create Folder ```text Tool: folders Input: { "action": "create", "data": [{ "name": "Product Images", "parent": null }] } ``` ### Create Nested Folder ```text Tool: folders Input: { "action": "create", "data": [{ "name": "Thumbnails", "parent": "parent-folder-uuid" }] } ``` ### List Folders ```text Tool: folders Input: { "action": "read", "query": { "fields": ["id", "name", "parent"], "sort": ["name"] } } ``` ### Update Folder ```text Tool: folders Input: { "action": "update", "keys": ["folder-uuid"], "data": [{ "name": "Renamed Folder" }] } ``` ### Delete Folder ```text Tool: folders Input: { "action": "delete", "keys": ["folder-uuid"] } ``` **Note:** Folders are virtual (database only) — they don't correspond to filesystem directories in storage. ## Common Workflows ### Organize Files into Folders 1. Create folder structure: ```text Tool: folders Input: { "action": "create", "data": [ { "name": "Blog" }, { "name": "Products" }, { "name": "Team" } ] } ``` 2. Move files to folders: ```text Tool: files Input: { "action": "update", "keys": ["file-uuid-1", "file-uuid-2"], "data": [{ "folder": "blog-folder-uuid" }] } ``` ### Import and Catalog Images 1. Create target folder 2. Import files from URLs with metadata: ```text Tool: files Input: { "action": "import", "data": [ { "url": "https://cdn.example.com/hero.jpg", "file": { "title": "Homepage Hero", "folder": "folder-uuid" } } ] } ``` ### Rename and Tag Files in Bulk 1. List files to rename: ```text Tool: files Input: { "action": "read", "query": { "filter": { "title": { "_null": true } }, "fields": ["id", "filename_download", "type"], "limit": 50 } } ``` 2. Update each file with descriptive metadata ### Analyze an Image 1. Get file UUID from files list 2. Retrieve content: ```text Tool: assets Input: { "id": "file-uuid" } ``` 3. The returned base64 data can be processed by vision models ## Best Practices - Use folders to organize files — don't leave everything in the root - Set descriptive titles on import — don't rely on original filenames - Tags are `string | null` in the MCP tool schema — pass a comma-separated string like `"hero,product"`, never an array - Filter by MIME type when listing: `{ "type": { "_starts_with": "image/" } }` - Set focal points for images used in cropped contexts - Import files with metadata in a single call rather than importing then updating
View on GitHub