{"id":78747,"plugin_id":"plugin_asdk_app_6a1ea93307208191b5fe82494caf73a8","kind":"skill","collection_source":"plugin_package","comparison_source":null,"observed_at":"2026-11-03T18:19:52.789Z","digest":"4f693d451e569c7ed892c277e77905e44621b2533f646ee4b3f4408e9f99724e","against":null,"payload":{"description":"Use when the user wants to find, list, search, upload, import, inspect, or reuse images, videos, audio, or PDFs in the Simplified Asset Library, including media for a social draft or a generation reference.","included_files":[{"relative_path":"agents/openai.yaml","size_in_bytes":484}],"name":"manage-assets","skill_md_contents":"---\nname: manage-assets\ndescription: Use when the user wants to find, list, search, upload, import, inspect, or reuse images, videos, audio, or PDFs in the Simplified Asset Library, including media for a social draft or a generation reference.\n---\n\n# Manage Simplified Assets\n\nFind existing media before uploading another copy. Keep the permanent asset UUID for reuse; retrieve a fresh URL only when a tool or user needs it.\n\n## Scope and tool availability\n\nUse the connected Simplified tools, not another provider's asset library. Names here are canonical operation names; clients may add a prefix such as `mcp__simplified__`. Match the operation and its input schema in the client's available tools.\n\nWhen a workspace or teamspace is named or uncertain, use `api_getWorkspaceInfo` and `api_listTeamspaces` to resolve scope. Carry the same numeric `space_id` into every asset, generation, and social call. A UUID from another workspace is not a valid reference.\n\nCheck that `api_listAssets` is exposed before promising discovery. Installing a skill does not add a missing MCP tool. If absent, refresh/reconnect the connector; if still absent, explain that its deployed profile lacks discovery and use IDs or downloadable URLs the user supplies.\n\n## Find existing media\n\nCall `api_listAssets`:\n\n| Request | Arguments |\n|---|---|\n| Browse available media | Omit `search`; start with `page: 1` |\n| Find a filename, asset name, or tag | `search: \"car\"` |\n| Find images | `asset_type: 0` |\n| Find videos | `asset_type: 2` |\n| Continue results | Increment `page`, preserving search, filters, and scope |\n\nOther numeric types include `4` giphy, `6` font, `8` audio, and `17` PDF. `page_size` requests a page size subject to server limits. Follow the returned pagination metadata; collect all pages when the user requests all matches. Deduplicate by `id` and retain the actual result names and IDs.\n\nSearch matches names and tags, not objects visible in an image. A search term includes matching media inside folders. Folder-name lookup and listing a named folder's contents are not exposed by this tool. Without search, folder contents can be excluded by the backend: do not promise a complete recursive library inventory.\n\nFor “use everything in Dynamic Auto,” explain the folder limitation and ask for an asset-name/tag search or specific IDs. Do not treat a folder name as an asset search that proves completeness.\n\n## Inspect and reuse\n\nCall `api_getAsset({id: \"<asset UUID>\"})` for details or a fresh file URL. Wait for `status: 4` before generation or relying on stored files. Stop on `2` (processing failed) or `3` (thumbnail failed); preserve the ID and report a pending state if processing remains unfinished. Use reasonable intervals and a bounded wait.\n\n| Destination | Value to pass |\n|---|---|\n| Social draft `media` | Asset UUID |\n| Project item `data.assets` | Asset UUID |\n| Image `parameters.reference_images` | Prefer asset UUIDs; the current tool also accepts absolute HTTP(S) URLs |\n| Video input slots, including `image_url` and `video_url` | Asset UUIDs, despite the `_url` suffix |\n| User wants to open/download a file | Current returned URL as a clickable link |\n\nKeep signed URL query strings intact. Stored assets have permanent IDs, but returned file/thumbnail URLs can expire. Call `api_getAsset` again to refresh them.\n\n## Import or upload\n\nA downloadable remote file: call `api_createAsset` with `url` and an optional `name`, save its `id`, then check readiness. A web page or login-only link is not a downloadable file. This also persists an existing temporary generated URL while it remains accessible; no regeneration is needed.\n\nAn attachment/local file: first check that this client can read the bytes and perform an HTTP PUT. If it can, follow the signed upload flow:\n\n1. Generate a UUID and determine the original filename and MIME type.\n2. Call `api_signAssetUpload` with `resource: \"assets\"`, `resource_id`, `filename`, and `filetype`.\n3. PUT the bytes to `signed` with that MIME type and no Simplified authorization header. Keep the signed upload URL out of user-facing output.\n4. Only after a successful PUT, call `api_registerAsset` with `id: resource_id`, `asset_name: filename`, and unchanged `asset_type`, `asset_key`, `asset_url`, `bucket_name`, and `thumbnail: sign.asset`.\n5. Save the returned `id` and check it with `api_getAsset`.\n\nIf the client cannot read/PUT bytes, ask the user to upload in Simplified and provide the resulting ID, or supply a downloadable URL. A ChatGPT/Claude attachment is not automatically in the Simplified library. Never pass a client-local path to a hosted MCP tool or register an upload that did not happen.\n\n## Handoff\n\nReturn the selected names, permanent IDs, readiness, and useful file links. For social work, pass the IDs to `simplified-social` and create `action: \"draft\"` when drafting is requested. Asset reuse or generation is not publishing authorization. For creation/editing, continue with `generate-image` or `generate-video`.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}