{"ok":true,"site":{"host":"assets-curator.vercel.app","url":"https://assets-curator.vercel.app/","type":"live","desc":"WebMCP media bin: stills, clips, VO, score, SFX, and YouTube refs, arranged shot-by-shot and exported as a folder pack.","tools":[{"name":"get_project","kind":"answer","impl":"imperative","description":"Read the current AssetsCurator storyboard: title, aspect, scenes, and every asset id, kind, role, provider, and status. Use before editing so you target the correct sceneId or assetId.","title":"Get board state","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"inspect_asset","kind":"answer","impl":"imperative","description":"Read one asset and its parent scene, including preview URL, prompt, attribution, and YouTube metadata.","title":"Inspect an asset","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"assetId":{"type":"string","description":"Asset id from get_project (ast_…)."}},"required":["assetId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"list_providers","kind":"answer","impl":"imperative","description":"Show which AI image, AI video, stock, and YouTube backends are configured or currently exhausted. Use when a generate or search call reports quota issues.","title":"List media providers","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"create_or_reset_project","kind":"act","impl":"imperative","description":"Start a new storyboard. Clears existing scenes. Provide a title and a logline/brief; this does not invent scenes by itself — call upsert_scene or pass scaffoldScenes true.","title":"Create or reset the board","inputSchema":{"type":"object","properties":{"title":{"type":"string","description":"Project title, e.g. Espresso Dawn."},"logline":{"type":"string","description":"Short film brief the human can see on the board."},"aspect":{"type":"string","enum":["16:9","9:16","1:1"]},"scaffoldScenes":{"type":"boolean","description":"If true, split the logline into 3–4 empty scenes on the board."}},"required":["title"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"reset_board","kind":"act","impl":"imperative","description":"Clear the entire storyboard — every scene and asset — back to an empty board, keeping the current aspect ratio. Use when the human asks to start over or wipe the board. To start a fresh titled project instead, use create_or_reset_project.","title":"Reset the board","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"update_project","kind":"act","impl":"imperative","description":"Change the project title, logline, or aspect ratio without clearing scenes. Aspect affects every future generation and stock search, so set it before filling shots.","title":"Update title, logline, or aspect","inputSchema":{"type":"object","properties":{"title":{"type":"string","description":"New project title."},"logline":{"type":"string","description":"New logline/brief shown on the board."},"aspect":{"type":"string","enum":["16:9","9:16","1:1"]}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"select_scene","kind":"act","impl":"imperative","description":"Bring a scene into focus on the human's board so they see what you are working on. Pass a sceneId, or omit to clear the selection. Read-only for project state; only changes what is highlighted.","title":"Focus a scene","inputSchema":{"type":"object","properties":{"sceneId":{"type":"string","description":"Scene id to focus. Omit to clear selection."}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"upsert_scene","kind":"act","impl":"imperative","description":"Create a scene beat on the storyboard, or update an existing one by sceneId. The human sees the new card immediately. index is 1-based order.","title":"Add or edit a scene","inputSchema":{"type":"object","properties":{"sceneId":{"type":"string","description":"Existing scene id to update. Omit to create."},"index":{"type":"number","description":"1-based insert position for a new scene."},"title":{"type":"string","description":"Short scene name, e.g. Pour."},"brief":{"type":"string","description":"Shot intent written for humans and later searches."},"durationHintSec":{"type":"number","description":"Suggested clip length in seconds."}},"required":["title"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"reorder_scenes","kind":"act","impl":"imperative","description":"Set export order by passing every scene id from first to last. The numbered folders in the zip follow this order.","title":"Reorder scenes","inputSchema":{"type":"object","properties":{"sceneIds":{"type":"array","items":{"type":"string"},"description":"All scene ids in the desired 1..n order."}},"required":["sceneIds"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"remove_scene","kind":"act","impl":"imperative","description":"Delete a scene and its assets from the board.","title":"Remove a scene","inputSchema":{"type":"object","properties":{"sceneId":{"type":"string","description":"Scene id from get_project (scn_…)."}},"required":["sceneId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"generate_image","kind":"act","impl":"imperative","description":"Generate an AI image for a scene using the free fallback chain (Pollinations → Hugging Face → Together → anonymous Pollinations). A card appears on the board as generating, then ready. Prefer a cinematic still prompt.","title":"Generate an AI still","inputSchema":{"type":"object","properties":{"sceneId":{"type":"string","description":"Scene id from get_project (scn_…)."},"prompt":{"type":"string","description":"Image prompt. Raw natural language is fine."},"role":{"type":"string","enum":["hero","broll","ref","alt","vo","music","sfx"]}},"required":["sceneId","prompt"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"generate_video","kind":"act","impl":"imperative","description":"Generate a short AI video for a scene (about 6 seconds). If AI video quota is exhausted, the board attaches real stock footage instead and marks degraded. Optional firstFrameAssetId uses an existing still as image-to-video reference.","title":"Generate an AI clip","inputSchema":{"type":"object","properties":{"sceneId":{"type":"string","description":"Scene id from get_project (scn_…)."},"prompt":{"type":"string","description":"Shot prompt in present tense, one action."},"role":{"type":"string","enum":["hero","broll","ref","alt","vo","music","sfx"]},"durationSec":{"type":"number","description":"4–10 seconds. Default 6."},"firstFrameAssetId":{"type":"string","description":"Optional still asset id to animate."}},"required":["sceneId","prompt"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"generate_audio","kind":"act","impl":"imperative","description":"Generate downloadable audio for a shot: spoken VO (tts), music bed (music), or sound effect (sfx). Uses Pollinations with stock-audio fallback. The file is pinned on the board and included in the scene zip as mp3/ogg.","title":"Generate VO, score, or SFX","inputSchema":{"type":"object","properties":{"sceneId":{"type":"string","description":"Scene id from get_project (scn_…)."},"prompt":{"type":"string","description":"VO script, music description, or SFX description. Raw text is fine."},"mode":{"type":"string","enum":["tts","music","sfx"],"description":"Default tts."},"role":{"type":"string","enum":["hero","broll","ref","alt","vo","music","sfx"]},"durationSec":{"type":"number","description":"Optional length for music beds."}},"required":["sceneId","prompt"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"search_stock_images","kind":"answer","impl":"imperative","description":"Search royalty-free photos (Pexels → Pixabay → Wikimedia) and optionally attach the top results to a scene. Default attachTop is 1. Set attachTop to 0 to only return candidates.","title":"Search real photos","inputSchema":{"type":"object","properties":{"sceneId":{"type":"string","description":"Scene id from get_project (scn_…)."},"query":{"type":"string","description":"Visual search query, e.g. night city wide, wet asphalt."},"attachTop":{"type":"number","description":"How many results to pin on the scene. Default 1. 0 = search only."},"role":{"type":"string","enum":["hero","broll","ref","alt","vo","music","sfx"]}},"required":["sceneId","query"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"search_stock_videos","kind":"answer","impl":"imperative","description":"Search royalty-free video clips (Pexels → Pixabay → Wikimedia) and optionally attach the top clip to a scene. Default attachTop is 1.","title":"Search real footage","inputSchema":{"type":"object","properties":{"sceneId":{"type":"string","description":"Scene id from get_project (scn_…)."},"query":{"type":"string","description":"Footage query, e.g. handheld walk through neon streets."},"attachTop":{"type":"number"},"role":{"type":"string","enum":["hero","broll","ref","alt","vo","music","sfx"]}},"required":["sceneId","query"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"search_stock_audio","kind":"answer","impl":"imperative","description":"Search royalty-free audio (Wikimedia Commons) and optionally attach the top file to a scene. Default attachTop is 1. Use for beds, room tone, or effects when AI audio quota is out.","title":"Search real audio","inputSchema":{"type":"object","properties":{"sceneId":{"type":"string","description":"Scene id from get_project (scn_…)."},"query":{"type":"string","description":"Audio search, e.g. city night ambience."},"attachTop":{"type":"number"},"role":{"type":"string","enum":["hero","broll","ref","alt","vo","music","sfx"]}},"required":["sceneId","query"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"search_youtube","kind":"answer","impl":"imperative","description":"Search YouTube for reference clips. Stores watch links and embeds — never downloads YouTube files. Default attachTop is 1. With no API key, paste a watch URL or 11-character video id (oEmbed). Keyword search needs YOUTUBE_API_KEY; otherwise a search URL is returned.","title":"Find YouTube clips","inputSchema":{"type":"object","properties":{"sceneId":{"type":"string","description":"Scene id from get_project (scn_…)."},"query":{"type":"string","description":"YouTube search, e.g. night city lighting reference."},"attachTop":{"type":"number"}},"required":["sceneId","query"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"attach_asset","kind":"act","impl":"imperative","description":"Pin a candidate from the most recent search (its candidateId) onto a scene. Use after search_* with attachTop 0.","title":"Attach a search candidate","inputSchema":{"type":"object","properties":{"sceneId":{"type":"string","description":"Scene id from get_project (scn_…)."},"candidateId":{"type":"string","description":"id from the last search_* result."},"role":{"type":"string","enum":["hero","broll","ref","alt","vo","music","sfx"]}},"required":["sceneId","candidateId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"replace_asset","kind":"act","impl":"imperative","description":"Swap a single board card in place, keeping its scene position and role. Use when the human asks to change a particular still, clip, or YouTube link. Provide action plus prompt or query.","title":"Replace one asset","inputSchema":{"type":"object","properties":{"assetId":{"type":"string","description":"Existing asset id to replace."},"action":{"type":"string","enum":["generate_image","generate_video","generate_audio","stock_image","stock_video","stock_audio","youtube"],"description":"What to put in its place."},"prompt":{"type":"string","description":"For generate_image, generate_video, or generate_audio."},"query":{"type":"string","description":"For stock or YouTube search."},"durationSec":{"type":"number"},"mode":{"type":"string","enum":["tts","music","sfx"]}},"required":["assetId","action"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"remove_asset","kind":"act","impl":"imperative","description":"Delete one still, clip, or YouTube link from the board.","title":"Remove an asset","inputSchema":{"type":"object","properties":{"assetId":{"type":"string"}},"required":["assetId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_asset_role","kind":"act","impl":"imperative","description":"Mark an asset as hero, broll, vo, music, sfx, ref, or alt. Export filenames use this role.","title":"Set hero or b-roll","inputSchema":{"type":"object","properties":{"assetId":{"type":"string"},"role":{"type":"string","enum":["hero","broll","ref","alt","vo","music","sfx"]}},"required":["assetId","role"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"check_job","kind":"answer","impl":"imperative","description":"Read the status of a long-running generate_video job by jobId.","title":"Check a generation job","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"jobId":{"type":"string"}},"required":["jobId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"download_asset","kind":"act","impl":"imperative","description":"Download a single still, clip, or audio file from the board (mp3/ogg for audio). YouTube becomes a .url shortcut.","title":"Download one asset file","inputSchema":{"type":"object","properties":{"assetId":{"type":"string"}},"required":["assetId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"export_pack","kind":"act","impl":"imperative","description":"Build a zip of the sequence as numbered shot folders with stills, clips, VO/score/SFX audio files, attribution, and YouTube .url shortcuts. Triggers a browser download and returns the file tree.","title":"Download the scene folder zip","inputSchema":{"type":"object","properties":{"includeYoutubeLinks":{"type":"boolean","description":"Include YouTube shortcuts. Default true. YouTube files are never downloaded."}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"category":"Media & Personal","favicon":"/favicons/assets-curator.vercel.app.svg","apiSurface":"spec","toolCount":24}}