Assets
Space MCP tools in the Assets scope (assets). Reach these with a wks_live_ key over space-mcp or space-api.
Tools in the assets scope, callable over space-mcp (tools/call) or space-api (REST) with a wks_live_* key that grants assets.
add_asset_from_url
Scope: assets:write
Add a file/image/video/audio to this space's asset library by downloading it from a public http/https URL. Ideal for saving a generate_image / generate_media result into the library. Returns the re-hosted URL and asset id. Pass folder_id to file it on the way in.
| Parameter | Type | Required | Description |
|---|---|---|---|
filename | string | yes | File name to store it under, including extension. |
source_url | string | yes | Public http/https URL to import the file from. |
mime_type | string | MIME type override. Auto-detected from the response/extension if omitted. | |
title | string | Display title. Defaults to the filename. | |
description | string | ||
folder_id | string | File it into this folder on the way in (see list_asset_folders). Omit for the root. |
add_asset_link
Scope: assets:write
Save a video or page LINK into this space's asset library without downloading it — a YouTube/Vimeo/Loom/Wistia/Dailymotion URL, a pasted <iframe> embed snippet, or a direct media URL (…/clip.mp4). The asset points at the original, so it uses no storage quota and plays in-app from the gallery. Use this for reference videos, tutorials, and anything hosted elsewhere; use add_asset_from_url instead when you need your OWN permanent copy of a file. Re-saving a URL already in the library reuses that asset instead of duplicating it.
| Parameter | Type | Required | Description |
|---|---|---|---|
url | string | yes | Full http(s) URL, e.g. https://www.youtube.com/watch?v=… — or a whole <iframe …> embed snippet. |
title | string | Display title. Defaults to a provider-derived name. | |
description | string | ||
thumbnail_url | string | Optional poster image. YouTube/Loom/Dailymotion thumbnails are derived automatically. | |
folder_id | string | File it into this folder (see list_asset_folders). Omit for the root. |
add_tips
Scope: assets:write
Write tips you harvested yourself into a bank — what you extracted while reading a creator's archive in your browser. EVERY tip carries its source url (the post it came from), or it is refused: a tip nobody can trace cannot be defended when a reader asks "where'd you get that?". Each tip: headline (the claim, one line), thread (the advice as one standalone post, 220 chars or more, never "as I said above"), optional short_text, support (the reasoning or numbers, verbatim from the source), category, audience_bucket (on_topic | adjacent | off_topic). Duplicate headlines are skipped, never overwritten. Give posts_read and source_label so the bank remembers where it was fed from.
| Parameter | Type | Required | Description |
|---|---|---|---|
bank_id | string | yes | From list_tip_banks or create_tip_bank. |
tips | object[] | yes | |
posts_read | number | How many posts you read to get these. | |
source_label | string | The archive, e.g. '@sourdoughsam on X'. |
add_voice_from_library
Scope: assets:write
Add a stock voice from a provider's catalog (see list_voice_library), or a community voice (discover_voices, pass public_owner_id), to this space. It becomes a voice asset assigned here — immediately usable by generate_speech, generate_media (tts) and apps. Free and idempotent: re-adding an existing voice just ensures it is assigned.
| Parameter | Type | Required | Description |
|---|---|---|---|
voice_id | string | yes | The provider's voice id, from list_voice_library or discover_voices. |
public_owner_id | string | Only for a community voice from discover_voices: its public_owner_id. | |
preview_url | string | A community voice's preview_url, kept so people can listen to it later. | |
provider | elevenlabs | cartesia | openai | fish-audio | Defaults to elevenlabs. | |
name | string | Display name. Filled from the catalog when omitted. | |
description | string |
clone_voice
Scope: assets:write
Clone a voice from audio samples (elevenlabs or cartesia) and assign it to this space, immediately usable by generate_speech and apps. Provide 1+ public audio URLs — e.g. the file_url of an audio asset from list_document_assets. BILLABLE: charges the space wallet $1.00 per clone.
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | yes | Name for the cloned voice. |
audio_urls | string[] | yes | Public http(s) URLs of clean voice samples (30s+ of clear speech works best). |
provider | elevenlabs | cartesia | Defaults to elevenlabs. | |
description | string | What this voice sounds like. |
create_asset_folder
Scope: assets:write
Create a folder in this space's asset library — at the root, inside parent_folder_id, or by path ("Ads/Video/Retargeting" makes every missing level). A same-named sibling is returned instead of a duplicate (reused: true), so it is safe to call again. Folders nest as deep as you need.
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | The folder's name — or a path like "Ads/Video" to make (or walk into) nested folders. | |
path | string | Same as a name with slashes: "Ads/Video/Retargeting". Either name or path is required. | |
parent_folder_id | string | Nest inside this existing folder (a path is then relative to it). | |
color | string | Optional accent color. | |
icon | string | Optional icon name. |
create_character
Scope: assets:write
Create a reusable character asset: a face (identity image), a persona, and its own voice with how it speaks (voice_settings).
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | yes | |
description | string | ||
identity_image_url | string | ||
reference_image_urls | string[] | ||
gender | string | ||
archetype | string | ||
voice_asset_id | string | A voice of THIS space (add_voice_from_library or clone_voice). | |
voice_settings | object | How the character speaks in every video (AI Auto Edits): { model: 'elevenlabs/v4' (most expressive, follows [tags]) | 'elevenlabs/v4-turbo' (same, faster, half the price) | 'elevenlabs/v3' (older expressive) | 'elevenlabs/multilingual-v2' (even, no tags) | 'fish-audio/s2-pro', stability (v3: 0, 0.5 or 1; v4: any 0-1), similarity_boost, style, use_speaker_boost, speed 0.7-1.2, auto_expression }. | |
tags | string[] | ||
sheet | object | ||
metadata | object |
create_tip_bank
Scope: assets:write
Create an empty tip bank for a topic. The bank is the container harvesting writes into — an app that writes from harvested advice needs one before it can research anything. Fill it by running that app's harvest pipeline (run_app_pipeline), or, when you read the archive yourself, with add_tips — never by inventing tips: every tip carries the url of the post it came from, so a claim can be defended if someone asks where it came from.
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | yes | |
topic | string | yes | Be specific — it decides what counts as on-topic when the bank is sorted. |
audience | string | ||
categories | string[] | ||
min_caption_chars | number | Shortest caption worth reading when harvesting. Default 220. |
delete_asset
Scope: assets:delete
PERMANENTLY delete a document asset — the stored file, its space assignments, and its folder memberships. Cannot be undone. Use remove_asset_from_space instead unless the file itself should stop existing. Documents/images/videos/audio and saved links only: deleting a VOICE also destroys the clone at the voice provider, so voices must be deleted by their owner in the Assets UI.
| Parameter | Type | Required | Description |
|---|---|---|---|
asset_id | string | yes |
delete_asset_folder
Scope: assets:delete
Delete a folder and its subfolders. No file is deleted: everything in the branch moves up to the folder's parent (the root when it had none).
| Parameter | Type | Required | Description |
|---|---|---|---|
folder_id | string | yes |
delete_character
Scope: assets:delete
Delete a character asset (persona) from this space. Permanent — photos and app records that referenced it keep their stored URLs but lose the link.
| Parameter | Type | Required | Description |
|---|---|---|---|
character_id | string | yes |
delete_tips
Scope: assets:write
Delete tips from a bank. Deleting an original ALSO deletes its restyled variants — otherwise the lesson the user just rejected keeps being taught in different words. Returns how many of each went.
| Parameter | Type | Required | Description |
|---|---|---|---|
tip_ids | string[] | yes |
discover_voices
Scope: assets:read
Search ElevenLabs' community library — thousands of voices their owners chose to share — by words ("deep british narrator", "young energetic") and by gender, accent, age, use_case, language. Each result carries labels and a preview_url. Add one with add_voice_from_library { voice_id, public_owner_id, name }. Free to search.
| Parameter | Type | Required | Description |
|---|---|---|---|
search | string | ||
gender | male | female | neutral | ||
accent | string | e.g. american, british, australian, nigerian | |
age | young | middle_aged | old | ||
use_case | string | e.g. narrative_story, conversational, social_media, informative_educational, characters_animation, advertisement | |
language | string | Two-letter code, e.g. en, fr, es | |
page | number | 0 first; has_more says whether there is another page. |
finish_asset_upload
Scope: assets:write
Finish a start_asset_upload once the file is PUT: the file becomes an asset of this space. Returns its lasting url and asset id. Pass folder_id to file it.
| Parameter | Type | Required | Description |
|---|---|---|---|
path | string | yes | The path start_asset_upload returned. |
title | string | ||
description | string | ||
folder_id | string | File it into this folder (see list_asset_folders). Omit for the root. |
list_asset_folders
Scope: assets:read
The space's asset folders as a tree: every folder with its id, parent_folder_id, path ("Ads/Video/Retargeting"), depth, asset_count (directly inside) and total_count (the whole branch). Everyone in the space sees the same tree. Use a folder's id with list_document_assets to see what is inside it, with upload_asset / add_asset_from_url / add_asset_link to file something on the way in, or with move_asset_to_folder to move something there.
list_characters
Scope: assets:read
List reusable character assets (identity image + persona sheet) in this space.
list_document_assets
Scope: assets:read
List document/image/video/audio assets available to this space (file_url, file_type, kind, tags), each with the folder it sits in (path like "Ads/Video", or null at the root). Filter by folder_id to see what is inside one folder and everything under it, by kind, or by a title search. Linked assets (YouTube/Vimeo/…) come back with is_link:true and a link object instead of a stored file.
| Parameter | Type | Required | Description |
|---|---|---|---|
folder_id | string | Only assets filed in this folder — and its subfolders, unless include_subfolders is false (see list_asset_folders). | |
include_subfolders | boolean | With folder_id: false lists only what sits directly in that folder. Default true. | |
kind | string | Filter by kind: image, video, audio, document, webpage, scrape, search, transcription, code, text. | |
search | string | Case-insensitive match on the title. | |
limit | number | Max assets to return (newest first). |
list_tip_banks
Scope: assets:read
Tip banks in this space, each with its counts. A tip bank is harvested advice held as a SPACE asset — one paid harvest of a creator's archive, reusable by every app and agent here. usable_count = on_topic + adjacent (what may be posted); off_topic is kept but never posted. Thread Pilot draws every thread from one of these.
list_voice_assets
Scope: assets:read
List voice assets available to this space. To add more: browse a provider's stock catalog with list_voice_library + add_voice_from_library, or clone_voice from audio samples.
list_voice_library
Scope: assets:read
Browse a TTS provider's stock voice catalog (elevenlabs | cartesia | openai | fish-audio) — ready-made voices the space can adopt without cloning. Free. Use add_voice_from_library to make one usable in this space.
| Parameter | Type | Required | Description |
|---|---|---|---|
provider | elevenlabs | cartesia | openai | fish-audio | Defaults to elevenlabs. |
move_asset_to_folder
Scope: assets:write
Put an existing asset in a folder of this space. A file has ONE place per space, so this MOVES it — wherever it sat before, it sits in this folder now. Works on any asset available in the space, whoever added it. Use remove_asset_from_folder to move one back to the root.
| Parameter | Type | Required | Description |
|---|---|---|---|
asset_id | string | yes | |
folder_id | string | yes | |
asset_type | document | voice | Defaults to document. |
query_tip_bank
Scope: assets:read
Read tips out of one bank — filter by audience_bucket (on_topic / adjacent / off_topic), category, style ('original' for un-restyled only), or a headline search. Use it to answer what the space actually knows about a topic, or to find the weak tips worth deleting. Each tip's thread field is the text that would publish.
| Parameter | Type | Required | Description |
|---|---|---|---|
bank_id | string | yes | From list_tip_banks. |
audience_bucket | string | on_topic | adjacent | off_topic | |
category | string | ||
style | string | 'original' for un-restyled tips, or a style name (remix, mentor, operator, contrarian). | |
search | string | Substring match on the headline. | |
limit | number | Default 200, max 1000. |
remove_asset_from_folder
Scope: assets:write
Take an asset out of its folder in this space — it sits at the root ("All assets") afterwards. The asset itself is kept.
| Parameter | Type | Required | Description |
|---|---|---|---|
asset_id | string | yes | |
asset_type | document | voice | Defaults to document. |
remove_asset_from_space
Scope: assets:write
Detach an asset from this space without deleting it — it stays in the owner's library and in any other space it is shared with. Prefer this over delete_asset when tidying a space.
| Parameter | Type | Required | Description |
|---|---|---|---|
asset_id | string | yes | |
asset_type | document | voice | Defaults to document. |
start_asset_upload
Scope: assets:write
Upload a BIG file from your own computer (a video you rendered, a long recording): this gives you an upload address; PUT the file there from your shell with curl (the answer says how), then call finish_asset_upload with the same path. Up to 500 MB. Use this instead of upload_asset whenever the file is more than a few MB — you cannot send a file's bytes through a tool call.
| Parameter | Type | Required | Description |
|---|---|---|---|
filename | string | yes | File name including extension, e.g. 'edited-v2.mp4'. |
mime_type | string | MIME type, e.g. 'video/mp4'. Detected from the extension when omitted. |
update_asset_folder
Scope: assets:write
Rename a folder, or move it under another folder (parent_folder_id; null moves it to the root). Moving a folder takes everything in it along. A folder cannot be moved into its own subfolders.
| Parameter | Type | Required | Description |
|---|---|---|---|
folder_id | string | yes | |
name | string | New name (no slashes). | |
parent_folder_id | string,null | New parent folder id, or null for the root. | |
color | string | ||
icon | string |
update_character
Scope: assets:write
Update a character asset by id.
| Parameter | Type | Required | Description |
|---|---|---|---|
character_id | string | yes | |
name | string | ||
description | string | ||
identity_image_url | string | ||
reference_image_urls | string[] | ||
gender | string | ||
archetype | string | ||
voice_asset_id | string | A voice of THIS space (add_voice_from_library or clone_voice). | |
voice_settings | object | How the character speaks in every video (AI Auto Edits): { model: 'elevenlabs/v4' (most expressive, follows [tags]) | 'elevenlabs/v4-turbo' (same, faster, half the price) | 'elevenlabs/v3' (older expressive) | 'elevenlabs/multilingual-v2' (even, no tags) | 'fish-audio/s2-pro', stability (v3: 0, 0.5 or 1; v4: any 0-1), similarity_boost, style, use_speaker_boost, speed 0.7-1.2, auto_expression }. | |
tags | string[] | ||
status | string | ||
is_favorite | boolean | ||
sheet | object | ||
metadata | object |
upload_asset
Scope: assets:write
Upload a file, image, video, or audio into this space's asset library from inline base64. Returns the hosted URL and asset id. Pass folder_id to file it on the way in. Use add_asset_from_url instead when you already have a URL (e.g. a generate_image result).
| Parameter | Type | Required | Description |
|---|---|---|---|
filename | string | yes | File name including extension, e.g. 'logo.png'. |
data_base64 | string | yes | Base64-encoded file bytes (a data: URI prefix is also accepted). |
mime_type | string | MIME type, e.g. 'image/png'. Auto-detected from the extension if omitted. | |
title | string | Display title. Defaults to the filename. | |
description | string | ||
folder_id | string | File it into this folder on the way in (see list_asset_folders). Omit for the root. |