{"ok":true,"site":{"host":"creative-studio-eight-vert.vercel.app","url":"https://creative-studio-eight-vert.vercel.app/","type":"live","desc":"A multi-agent creative studio where 10+ specialist AI agents collaborate with humans to create video content through WebMCP tools.","tools":[{"name":"create_project","kind":"act","impl":"imperative","description":"Starts a new video campaign in the studio. Sets the campaign name, goal, target audience, platform, and visual style. Call this once at the very start of a new campaign, before any other studio tool. When SEED_DEMO=true (env), the studio hydrates from a pre-recorded manifest so the deployed live URL can show real Veo 3 + OpenAI artifacts without burning provider budget per click.","title":"Create project","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Short, human-readable campaign name."},"goal":{"type":"string","description":"What this video should accomplish, in plain language."},"audience":{"type":"string","description":"Who the video is for."},"platform":{"type":"string","enum":["instagram","youtube","tiktok","linkedin","generic"],"description":"Where this video will primarily be published."},"style":{"type":"string","enum":["professional","casual","dramatic","playful","cinematic"],"description":"Overall creative tone for the campaign."},"targetDurationSeconds":{"type":"number","description":"Approximate target length of the finished video, in seconds."}},"required":["name","goal","audience","platform","style"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"generate_script","kind":"act","impl":"imperative","description":"Scriptwriter agent: writes a beat-sheet video script (Hook → Pain → Promise → Proof → Objection → Payoff → CTA) as concrete, spoken narration lines powered by the project brief, platform, audience, and style. Each scene's description is a real VO line that feeds directly into Speechify TTS. Call after brand guidelines exist and before any visual or audio generation.","title":"Generate script","inputSchema":{"type":"object","properties":{"sceneCount":{"type":"number","description":"How many scenes/beats the script should have. Short-form platforms (Instagram, TikTok) work best at 5-7; YouTube and LinkedIn can take 8+."},"keyMessage":{"type":"string","description":"The single most important idea the script must land (e.g. 'drive signups for an eco walking-shoe launch'). Falls back to the project brief goal."}},"required":["sceneCount","keyMessage"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"create_storyboard","kind":"act","impl":"imperative","description":"Graphic Designer agent: turns the existing script scenes into a storyboard by writing a concrete image-generation prompt for each scene. Call after generate_script and before generate_image.","title":"Create storyboard","inputSchema":{"type":"object","properties":{"visualStyleNotes":{"type":"string","description":"Art-direction notes to apply across every scene."}},"required":["visualStyleNotes"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"generate_image","kind":"act","impl":"imperative","description":"Graphic Designer agent: generates the still key visual for one scene from its storyboard prompt. Call once per scene after create_storyboard.","title":"Generate key visual","inputSchema":{"type":"object","properties":{"sceneId":{"type":"string","description":"The scene id, e.g. 'scene_1'."},"promptOverride":{"type":"string","description":"Optional replacement prompt."}},"required":["sceneId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"text_to_video","kind":"act","impl":"imperative","description":"Motion Graphics agent: generates a short video clip for a scene from a text prompt.","title":"Generate video from text","inputSchema":{"type":"object","properties":{"sceneId":{"type":"string"},"durationSeconds":{"type":"number","description":"Target clip length in seconds (2–10)."},"motionNotes":{"type":"string"}},"required":["sceneId","durationSeconds"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"image_to_video","kind":"act","impl":"imperative","description":"Motion Graphics agent: animates an existing scene key visual into a short video clip.","title":"Animate key visual","inputSchema":{"type":"object","properties":{"sceneId":{"type":"string"},"durationSeconds":{"type":"number","description":"Target clip length in seconds (2–10)."},"motionNotes":{"type":"string","description":"Camera/motion direction, e.g. 'slow push in, parallax'."}},"required":["sceneId","durationSeconds"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"text_to_speech","kind":"act","impl":"imperative","description":"Voiceover agent: converts a scene's narration line into spoken audio.","title":"Generate narration","inputSchema":{"type":"object","properties":{"sceneId":{"type":"string"},"line":{"type":"string","description":"The narration line to voice."},"voiceTone":{"type":"string","enum":["warm","energetic","authoritative","calm","playful"],"description":"Vocal tone."}},"required":["sceneId","line","voiceTone"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"write_caption","kind":"act","impl":"imperative","description":"Copywriter agent: writes short-form on-screen text or a social caption for one scene.","title":"Write caption","inputSchema":{"type":"object","properties":{"sceneId":{"type":"string"},"purpose":{"type":"string","enum":["on_screen_text","post_caption","hook_line"],"description":"Type of copy."}},"required":["sceneId","purpose"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"compose_video","kind":"act","impl":"imperative","description":"Video Editor agent: assembles all scene clips, narration, and captions into a single timeline.","title":"Compose final video","inputSchema":{"type":"object","properties":{"transitionStyle":{"type":"string","enum":["cut","crossfade","whip_pan","match_cut"],"description":"Style of transition between scenes."}},"required":["transitionStyle"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"review_video","kind":"act","impl":"imperative","description":"Critic/QA agent. Does NOT create content. Reviews the composed video and returns APPROVED or NEEDS_REVISION with notes. Read-only.","title":"Review composed video","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"checklistNotes":{"type":"string"}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"request_human_approval","kind":"act","impl":"imperative","description":"Pauses the campaign and asks the human to approve or reject before proceeding. The human veto: call it before marking a campaign complete, before anything would be published or sent externally, and any other time a specialist's output needs a human sign-off. Execution does not resume until the human responds. Use sparingly — this is a blocking checkpoint.","title":"Request human approval","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"summary":{"type":"string","description":"One-line summary of what's being approved."},"detail":{"type":"string","description":"Fuller context the human needs to decide."}},"required":["summary","detail"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_project_roadmap","kind":"answer","impl":"imperative","description":"Project Manager agent. Does NOT create or judge content. Returns the full production roadmap and the current phase. Read-only; safe to call at any time.","title":"Get project roadmap","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_project_status","kind":"answer","impl":"imperative","description":"Project Manager agent. Does NOT create or judge content. Returns a snapshot of the current project: name, phase, per-scene asset completeness, and any open QA notes or pending approvals. Read-only; safe to call at any time, including before deciding what to do next.","title":"Get project status","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"refine_scene","kind":"act","impl":"imperative","description":"Refines an existing scene from specific feedback and/or a list of property/value changes. Applied from the Critic/QA NEEDS_REVISION loop, or from a human asking for a targeted edit. Pass sceneId plus optional feedback (why it needs work) and a changes array covering one or more of: description, imagePrompt, caption, durationSeconds. When the scene has a key visual, the still is re-generated against the feedback.","title":"Refine scene","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"sceneId":{"type":"string","description":"The scene id, e.g. \"scene_2\"."},"feedback":{"type":"string","description":"Why the scene needs refinement — this drives re-generation."},"changes":{"type":"array","description":"Specific property/value edits to apply to the scene.","items":{"type":"object","properties":{"property":{"type":"string","description":"One of: description, imagePrompt, caption, durationSeconds."},"value":{"type":"string","description":"The new value."}}}}},"required":["sceneId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"export_video","kind":"act","impl":"imperative","description":"Video Editor agent: confirms the composed video is ready to ship and reports what export would produce. With download=true an agent running in the browser triggers the actual file download. Without a real mp4 on disk the studio falls back to a per-scene slideshow manifest that the VideoPreview component stitches in-browser.","title":"Export composed video","inputSchema":{"type":"object","properties":{"download":{"type":"boolean","description":"When true (browser-side only), trigger the actual file download."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"list_available_providers","kind":"answer","impl":"imperative","description":"Returns which generation providers are configured for each capability (image, tts, text-to-video, image-to-video, compose). Lets an external agent see whether the studio will call real APIs (OpenAI, fal.ai, Speechify, etc.) or fall back to deterministic placeholders under DEMO_MODE. Read-only.","title":"List configured providers","inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"procedural_video","kind":"act","impl":"imperative","description":"Generates a real video file from a scene's still image by animating it with Ken Burns / parallax / pulse / glide / tilt-shift transforms and recording the result via MediaRecorder. Browser-only fallback used when external video providers (Veo, FAL, Luma, Runway, Replicate) are not reachable. Uploads the WebM to /public/assets/ and stores the public URL on scene.videoUrl so the scene plays as a real video, not a static image.","title":"Generate procedural video","inputSchema":{"type":"object","properties":{"sceneId":{"type":"string","description":"ID of the scene to generate procedural video for. Must already have an imageUrl."},"pattern":{"type":"string","enum":["kenBurns-in","kenBurns-out","parallax-drift","glide-up","pulse-zoom"],"description":"Ken Burns pattern. Default 'kenBurns-in'."},"logToActivity":{"type":"boolean","description":"When true, log this call to the activity feed and update the motion-graphics agent status."}},"required":["sceneId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"category":"AI & Agents","favicon":"/favicons/creative-studio-eight-vert.vercel.app.svg","apiSurface":"spec","toolCount":17}}