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.

ParameterTypeRequiredDescription
filenamestringyesFile name to store it under, including extension.
source_urlstringyesPublic http/https URL to import the file from.
mime_typestringMIME type override. Auto-detected from the response/extension if omitted.
titlestringDisplay title. Defaults to the filename.
descriptionstring
folder_idstringFile it into this folder on the way in (see list_asset_folders). Omit for the root.

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.

ParameterTypeRequiredDescription
urlstringyesFull http(s) URL, e.g. https://www.youtube.com/watch?v=… — or a whole <iframe …> embed snippet.
titlestringDisplay title. Defaults to a provider-derived name.
descriptionstring
thumbnail_urlstringOptional poster image. YouTube/Loom/Dailymotion thumbnails are derived automatically.
folder_idstringFile 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.

ParameterTypeRequiredDescription
bank_idstringyesFrom list_tip_banks or create_tip_bank.
tipsobject[]yes
posts_readnumberHow many posts you read to get these.
source_labelstringThe 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.

ParameterTypeRequiredDescription
voice_idstringyesThe provider's voice id, from list_voice_library or discover_voices.
public_owner_idstringOnly for a community voice from discover_voices: its public_owner_id.
preview_urlstringA community voice's preview_url, kept so people can listen to it later.
providerelevenlabs | cartesia | openai | fish-audioDefaults to elevenlabs.
namestringDisplay name. Filled from the catalog when omitted.
descriptionstring

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.

ParameterTypeRequiredDescription
namestringyesName for the cloned voice.
audio_urlsstring[]yesPublic http(s) URLs of clean voice samples (30s+ of clear speech works best).
providerelevenlabs | cartesiaDefaults to elevenlabs.
descriptionstringWhat 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.

ParameterTypeRequiredDescription
namestringThe folder's name — or a path like "Ads/Video" to make (or walk into) nested folders.
pathstringSame as a name with slashes: "Ads/Video/Retargeting". Either name or path is required.
parent_folder_idstringNest inside this existing folder (a path is then relative to it).
colorstringOptional accent color.
iconstringOptional 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).

ParameterTypeRequiredDescription
namestringyes
descriptionstring
identity_image_urlstring
reference_image_urlsstring[]
genderstring
archetypestring
voice_asset_idstringA voice of THIS space (add_voice_from_library or clone_voice).
voice_settingsobjectHow 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 }.
tagsstring[]
sheetobject
metadataobject

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.

ParameterTypeRequiredDescription
namestringyes
topicstringyesBe specific — it decides what counts as on-topic when the bank is sorted.
audiencestring
categoriesstring[]
min_caption_charsnumberShortest 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.

ParameterTypeRequiredDescription
asset_idstringyes

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).

ParameterTypeRequiredDescription
folder_idstringyes

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.

ParameterTypeRequiredDescription
character_idstringyes

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.

ParameterTypeRequiredDescription
tip_idsstring[]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.

ParameterTypeRequiredDescription
searchstring
gendermale | female | neutral
accentstringe.g. american, british, australian, nigerian
ageyoung | middle_aged | old
use_casestringe.g. narrative_story, conversational, social_media, informative_educational, characters_animation, advertisement
languagestringTwo-letter code, e.g. en, fr, es
pagenumber0 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.

ParameterTypeRequiredDescription
pathstringyesThe path start_asset_upload returned.
titlestring
descriptionstring
folder_idstringFile 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.

ParameterTypeRequiredDescription
folder_idstringOnly assets filed in this folder — and its subfolders, unless include_subfolders is false (see list_asset_folders).
include_subfoldersbooleanWith folder_id: false lists only what sits directly in that folder. Default true.
kindstringFilter by kind: image, video, audio, document, webpage, scrape, search, transcription, code, text.
searchstringCase-insensitive match on the title.
limitnumberMax 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.

ParameterTypeRequiredDescription
providerelevenlabs | cartesia | openai | fish-audioDefaults 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.

ParameterTypeRequiredDescription
asset_idstringyes
folder_idstringyes
asset_typedocument | voiceDefaults 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.

ParameterTypeRequiredDescription
bank_idstringyesFrom list_tip_banks.
audience_bucketstringon_topic | adjacent | off_topic
categorystring
stylestring'original' for un-restyled tips, or a style name (remix, mentor, operator, contrarian).
searchstringSubstring match on the headline.
limitnumberDefault 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.

ParameterTypeRequiredDescription
asset_idstringyes
asset_typedocument | voiceDefaults 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.

ParameterTypeRequiredDescription
asset_idstringyes
asset_typedocument | voiceDefaults 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.

ParameterTypeRequiredDescription
filenamestringyesFile name including extension, e.g. 'edited-v2.mp4'.
mime_typestringMIME 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.

ParameterTypeRequiredDescription
folder_idstringyes
namestringNew name (no slashes).
parent_folder_idstring,nullNew parent folder id, or null for the root.
colorstring
iconstring

update_character

Scope: assets:write

Update a character asset by id.

ParameterTypeRequiredDescription
character_idstringyes
namestring
descriptionstring
identity_image_urlstring
reference_image_urlsstring[]
genderstring
archetypestring
voice_asset_idstringA voice of THIS space (add_voice_from_library or clone_voice).
voice_settingsobjectHow 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 }.
tagsstring[]
statusstring
is_favoriteboolean
sheetobject
metadataobject

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).

ParameterTypeRequiredDescription
filenamestringyesFile name including extension, e.g. 'logo.png'.
data_base64stringyesBase64-encoded file bytes (a data: URI prefix is also accepted).
mime_typestringMIME type, e.g. 'image/png'. Auto-detected from the extension if omitted.
titlestringDisplay title. Defaults to the filename.
descriptionstring
folder_idstringFile it into this folder on the way in (see list_asset_folders). Omit for the root.

On this page