framesail
What this MCP does
Creates long-form YouTube videos through script generation, storyboarding, visual assets, voiceover, music, scene composition, and MP4 export.
Tools
Input schema
{'type': 'object', 'title': 'activate_script_versionArguments', 'required': ['script_id'], 'properties': {'script_id': {'type': 'string', 'title': 'Script Id', 'description': "ID of the script version to activate, from get_script's version list"}}}
Input schema
{'type': 'object', 'title': 'add_music_trackArguments', 'required': ['project_id', 'library_track_id'], 'properties': {'loop': {'type': 'boolean', 'title': 'Loop', 'default': True, 'description': 'True loops the track under the whole video; false plays it once'}, 'name': {'type': 'string', 'title': 'Name', 'default': 'Music', 'description': "Display name for the track on the project's timeline"}, 'volume': {'type': 'number', 'title': 'Volume', 'default': 0.12, 'description': "Playback volume 0-1; the 0.12 default sits at bed level under narration â\x80\x94 don't raise it unless asked"}, 'project_id': {'type': 'string', 'title': 'Project Id', 'description': 'Project ID, as returned by create_project or list_projects'}, 'start_frame': {'type': 'integer', 'title': 'Start Frame', 'default': 0, 'description': 'Timeline frame at which the track starts (0 = start of the video)'}, 'library_track_id': {'type': 'string', 'title': 'Library Track Id', 'description': 'Audio library track ID, from browse_audio_library(category="music")'}}}
Input schema
{'type': 'object', 'title': 'add_segment_sfxArguments', 'required': ['project_id', 'segment_number', 'library_track_id'], 'properties': {'project_id': {'type': 'string', 'title': 'Project Id', 'description': 'Project ID, as returned by create_project or list_projects'}, 'segment_number': {'type': 'integer', 'title': 'Segment Number', 'description': '1-based segment number, as reported by get_segments'}, 'library_track_id': {'type': 'string', 'title': 'Library Track Id', 'description': 'Audio library track ID, from browse_audio_library(category="sfx")'}}}
Input schema
{'type': 'object', 'title': 'analyze_styleArguments', 'required': ['style_id'], 'properties': {'style_id': {'type': 'string', 'title': 'Style Id', 'description': 'ID of the style to re-analyze, from create_style or list_styles'}}}
Input schema
{'type': 'object', 'title': 'animate_segmentArguments', 'required': ['project_id', 'segment_number'], 'properties': {'voice': {'type': 'boolean', 'title': 'Voice', 'default': False, 'description': 'True lip-syncs the on-frame speaker to the voiceover (lip-sync model family â\x80\x94 bills the exact segment length, so long segments cost proportionally more); False is an ordinary prompt-driven clip. Always explicit, never inferred.'}, 'project_id': {'type': 'string', 'title': 'Project Id', 'description': 'Project ID, as returned by create_project or list_projects'}, 'segment_number': {'type': 'integer', 'title': 'Segment Number', 'description': '1-based segment number, as reported by get_segments'}}}
Input schema
{'type': 'object', 'title': 'await_jobsArguments', 'properties': {'style_id': {'type': 'string', 'title': 'Style Id', 'default': '', 'description': 'Style ID whose analysis/template jobs to wait for; pass exactly one of project_id or style_id'}, 'project_id': {'type': 'string', 'title': 'Project Id', 'default': '', 'description': 'Project ID whose jobs to wait for; pass exactly one of project_id or style_id'}, 'timeout_seconds': {'type': 'integer', 'title': 'Timeout Seconds', 'default': 50, 'description': "Max seconds to block server-side before returning done=false; keep <= 50 so the client doesn't time out the tool call"}}}
Input schema
{'type': 'object', 'title': 'browse_audio_libraryArguments', 'properties': {'mood': {'type': 'string', 'title': 'Mood', 'default': '', 'description': "Filter by the track's mood tag; empty for no filter"}, 'genre': {'type': 'string', 'title': 'Genre', 'default': '', 'description': "Filter by the track's genre tag; empty for no filter"}, 'search': {'type': 'string', 'title': 'Search', 'default': '', 'description': 'Free-text search over track names/descriptions; empty for no filter'}, 'category': {'type': 'string', 'title': 'Category', 'default': '', 'description': 'Track kind: "music" (background tracks) or "sfx" (sound effects); empty returns both'}}}
Input schema
{'type': 'object', 'title': 'build_scenesArguments', 'required': ['project_id'], 'properties': {'project_id': {'type': 'string', 'title': 'Project Id', 'description': 'Project ID, as returned by create_project or list_projects'}}}
Input schema
{'type': 'object', 'title': 'change_segment_typeArguments', 'required': ['project_id', 'segment_number', 'segment_type'], 'properties': {'dry_run': {'type': 'boolean', 'title': 'Dry Run', 'default': False, 'description': 'True previews the consequences (assets kept / staled / recreated / deleted, rendered assets lost) without changing anything'}, 'project_id': {'type': 'string', 'title': 'Project Id', 'description': 'Project ID, as returned by create_project or list_projects'}, 'carry_frame': {'type': 'boolean', 'title': 'Carry Frame', 'default': False, 'description': "True reuses the already-rendered frame as the new type's starting visual instead of recreating it from scratch"}, 'media_source': {'type': 'string', 'title': 'Media Source', 'default': '', 'description': '"" keeps the segment\'s current source; "real" makes the visual fetched stock footage / a real photo (b-roll) instead of a generated one; "generated" switches back'}, 'segment_type': {'type': 'string', 'title': 'Segment Type', 'description': 'New visual type: "image", "video" (fetched b-roll only â\x80\x94 requires media_source "real"), or "overlay_scene"'}, 'segment_number': {'type': 'integer', 'title': 'Segment Number', 'description': '1-based segment number, as reported by get_segments'}}}
Input schema
{'type': 'object', 'title': 'combine_segmentsArguments', 'required': ['project_id', 'segment_number', 'with_segment_number'], 'properties': {'keep': {'type': 'string', 'title': 'Keep', 'default': 'this', 'description': 'Whose creative data survives the merge: "this" (segment_number) or "other" (with_segment_number)'}, 'dry_run': {'type': 'boolean', 'title': 'Dry Run', 'default': False, 'description': 'True previews the consequences without changing anything'}, 'project_id': {'type': 'string', 'title': 'Project Id', 'description': 'Project ID, as returned by create_project or list_projects'}, 'segment_number': {'type': 'integer', 'title': 'Segment Number', 'description': '1-based segment number, as reported by get_segments'}, 'with_segment_number': {'type': 'integer', 'title': 'With Segment Number', 'description': '1-based number of the adjacent segment to merge with (must neighbor segment_number)'}}}
Input schema
{'type': 'object', 'title': 'create_assetArguments', 'required': ['project_id', 'asset_type', 'name'], 'properties': {'name': {'type': 'string', 'title': 'Name', 'description': "Asset name as the script refers to it (e.g. the character's name)"}, 'asset_type': {'type': 'string', 'title': 'Asset Type', 'description': 'Kind of asset: "character", "environment", or "object"'}, 'project_id': {'type': 'string', 'title': 'Project Id', 'description': 'Project ID, as returned by create_project or list_projects'}, 'description': {'type': 'string', 'title': 'Description', 'default': '', 'description': "Generation-facing spec of the asset's look; every shot renders from it, so be specific"}}}
Input schema
{'type': 'object', 'title': 'create_channelArguments', 'required': ['name'], 'properties': {'name': {'type': 'string', 'title': 'Name', 'description': 'Display name for the new channel'}, 'description': {'type': 'string', 'title': 'Description', 'default': '', 'description': "Optional free-text description of the channel's content focus"}}}
Input schema
{'type': 'object', 'title': 'create_projectArguments', 'required': ['channel_id', 'title'], 'properties': {'title': {'type': 'string', 'title': 'Title', 'description': 'Project title shown in the app'}, 'channel_id': {'type': 'string', 'title': 'Channel Id', 'description': 'ID of the channel to create the project in, from list_channels or create_channel'}, 'description': {'type': 'string', 'title': 'Description', 'default': '', 'description': 'The video concept/topic; seeds script generation, so make it specific and meaningful'}, 'video_format': {'enum': ['landscape', 'portrait'], 'type': 'string', 'title': 'Video Format', 'default': 'landscape', 'description': "Output frame shape: 'landscape' (16:9, the default â\x80\x94 YouTube and long-form) or 'portrait' (9:16 â\x80\x94 Shorts, Reels, TikTok). Fixed once the storyboard is generated, so pick it up front."}}}
Input schema
{'type': 'object', 'title': 'create_styleArguments', 'required': ['channel_id', 'name'], 'properties': {'name': {'type': 'string', 'title': 'Name', 'description': 'Display name for the style'}, 'inputs': {'anyOf': [{'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, {'type': 'null'}], 'title': 'Inputs', 'default': None, 'description': 'Reference material to analyze, [{"input_type": "youtube" | "text", "value": "<url or description>"}]; a youtube value can be a video link or a channel link/@handle (resolved to that channel\'s newest usable upload). Triggers an async analysis job. Mutually exclusive with presets'}, 'presets': {'anyOf': [{'type': 'object', 'additionalProperties': True}, {'type': 'null'}], 'title': 'Presets', 'default': None, 'description': 'Preset IDs per axis, {"art_style": id, "narrative_style": id, "director_style": id}, from list_style_presets; instant, no analysis. Mutually exclusive with inputs'}, 'channel_id': {'type': 'string', 'title': 'Channel Id', 'description': 'ID of the channel to create the style in, from list_channels'}}}
Input schema
{'type': 'object', 'title': 'delete_assetArguments', 'required': ['asset_id'], 'properties': {'asset_id': {'type': 'string', 'title': 'Asset Id', 'description': 'ID of the asset to delete, from list_assets'}}}
Input schema
{'type': 'object', 'title': 'delete_projectArguments', 'required': ['project_id'], 'properties': {'project_id': {'type': 'string', 'title': 'Project Id', 'description': 'ID of the project to permanently delete, from list_projects'}}}
Input schema
{'type': 'object', 'title': 'delete_styleArguments', 'required': ['style_id'], 'properties': {'style_id': {'type': 'string', 'title': 'Style Id', 'description': 'ID of the style to delete, from list_styles'}}}
Input schema
{'type': 'object', 'title': 'director_noteArguments', 'required': ['message'], 'properties': {'message': {'type': 'string', 'title': 'Message', 'description': 'Natural-language edit note for this scene, e.g. "move the caption to the top" or "calmer motion"'}, 'scene_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Scene Id', 'default': None, 'description': 'ID of the scene to edit, from a FRESH list_scenes call â\x80\x94 scene ids change whenever segments are edited (split/combine/update-content), so never reuse ids saved earlier; prefer project_id + segment_number'}, 'project_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Project Id', 'default': None, 'description': 'Project ID; required (with segment_number) when not passing scene_id'}, 'segment_number': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'title': 'Segment Number', 'default': None, 'description': '1-based segment number of the scene to edit (from list_scenes or get_segments) â\x80\x94 preferred over scene_id because it is resolved to the current scene at call time'}, 'conversation_history': {'anyOf': [{'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, {'type': 'null'}], 'title': 'Conversation History', 'default': None, 'description': 'Prior chat turns as [{"role": ..., "content": ...}] to continue an editing conversation on this scene; omit to start fresh'}}}
Input schema
{'type': 'object', 'title': 'export_videoArguments', 'required': ['project_id'], 'properties': {'project_id': {'type': 'string', 'title': 'Project Id', 'description': 'Project ID, as returned by create_project or list_projects'}}}
Input schema
{'type': 'object', 'title': 'generate_asset_referenceArguments', 'required': ['asset_id'], 'properties': {'model': {'type': 'string', 'title': 'Model', 'default': '', 'description': "Image model ID; empty uses the asset's saved drawer choice, else the account default, else the server default"}, 'asset_id': {'type': 'string', 'title': 'Asset Id', 'description': 'ID of the asset to render a reference image for, from list_assets'}, 'settings': {'anyOf': [{'type': 'object', 'additionalProperties': True}, {'type': 'null'}], 'title': 'Settings', 'default': None, 'description': "Model-specific settings (e.g. image quality/orientation); valid keys come from the model's settings_schema in list_models"}, 'editable_sections': {'anyOf': [{'type': 'object', 'additionalProperties': True}, {'type': 'null'}], 'title': 'Editable Sections', 'default': None, 'description': 'Per-call prompt section overrides, keyed by section name; see get_section_template for the reference-image job'}}}
Input schema
{'type': 'object', 'title': 'generate_scriptArguments', 'required': ['project_id'], 'properties': {'model': {'type': 'string', 'title': 'Model', 'default': '', 'description': 'Model ID to generate with; empty uses the default (see list_models("script"))'}, 'settings': {'anyOf': [{'type': 'object', 'additionalProperties': True}, {'type': 'null'}], 'title': 'Settings', 'default': None, 'description': 'Model-specific settings; valid keys come from the model\'s settings_schema in list_models("script")'}, 'project_id': {'type': 'string', 'title': 'Project Id', 'description': 'Project ID, as returned by create_project or list_projects'}, 'editable_sections': {'anyOf': [{'type': 'object', 'additionalProperties': True}, {'type': 'null'}], 'title': 'Editable Sections', 'default': None, 'description': 'Per-call prompt section overrides, keyed by section name; see get_section_template("script") for the sections this job exposes'}}}
Input schema
{'type': 'object', 'title': 'generate_segmentsArguments', 'required': ['project_id'], 'properties': {'dry_run': {'type': 'boolean', 'title': 'Dry Run', 'default': False, 'description': 'True returns the credit-cost estimate without rendering anything; ALWAYS run true first and get user approval before the real run'}, 'project_id': {'type': 'string', 'title': 'Project Id', 'description': 'Project ID, as returned by create_project or list_projects'}, 'asset_scope': {'type': 'string', 'title': 'Asset Scope', 'default': '', 'description': '"" renders everything actionable; "no_clips" is the cheap base pass (images, overlays, fetched b-roll â\x80\x94 no generated video clips); "clips_only" renders just the generated clips'}, 'segment_numbers': {'anyOf': [{'type': 'array', 'items': {'type': 'integer'}}, {'type': 'null'}], 'title': 'Segment Numbers', 'default': None, 'description': '1-based segment numbers (from get_segments) to render only a subset; omit to render every actionable asset in the project'}}}
Input schema
{'type': 'object', 'title': 'generate_storyboardArguments', 'required': ['project_id'], 'properties': {'model': {'type': 'string', 'title': 'Model', 'default': '', 'description': 'Model ID to plan with; empty uses the default (see list_models("storyboard"))'}, 'settings': {'anyOf': [{'type': 'object', 'additionalProperties': True}, {'type': 'null'}], 'title': 'Settings', 'default': None, 'description': 'Model-specific settings; valid keys come from the model\'s settings_schema in list_models("storyboard")'}, 'project_id': {'type': 'string', 'title': 'Project Id', 'description': 'Project ID, as returned by create_project or list_projects'}, 'editable_sections': {'anyOf': [{'type': 'object', 'additionalProperties': True}, {'type': 'null'}], 'title': 'Editable Sections', 'default': None, 'description': 'Per-call prompt section overrides, keyed by section name; see get_section_template("storyboard")'}}}
Input schema
{'type': 'object', 'title': 'generate_style_templateArguments', 'required': ['style_id', 'template_type'], 'properties': {'model': {'type': 'string', 'title': 'Model', 'default': '', 'description': "Image model ID; empty uses the template job's default (see list_models)"}, 'replace': {'type': 'boolean', 'title': 'Replace', 'default': False, 'description': 'Set True ONLY to deliberately overwrite an existing template of this type â\x80\x94 the user must have asked for a new one. Leave False and the call refuses rather than clobbering a template the style already has'}, 'style_id': {'type': 'string', 'title': 'Style Id', 'description': 'Style ID, as returned by create_style or list_styles'}, 'template_type': {'type': 'string', 'title': 'Template Type', 'description': 'Which of the style\'s two template images to render: "character" or "environment" â\x80\x94 run once for each'}, 'editable_sections': {'anyOf': [{'type': 'object', 'additionalProperties': True}, {'type': 'null'}], 'title': 'Editable Sections', 'default': None, 'description': 'Per-call prompt section overrides, keyed by section name; see get_section_template for the template job'}}}
Input schema
{'type': 'object', 'title': 'generate_voiceoverArguments', 'required': ['project_id'], 'properties': {'model': {'type': 'string', 'title': 'Model', 'default': '', 'description': 'TTS model ID; empty uses the default for the project\'s TTS provider. If set, it must belong to that provider â\x80\x94 see list_models("voice_block") for each model\'s provider'}, 'settings': {'anyOf': [{'type': 'object', 'additionalProperties': True}, {'type': 'null'}], 'title': 'Settings', 'default': None, 'description': 'Model-specific TTS settings applied to every selected block; valid keys come from the model\'s settings_schema in list_models("voice_block")'}, 'project_id': {'type': 'string', 'title': 'Project Id', 'description': 'Project ID, as returned by create_project or list_projects'}, 'voice_block_ids': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'title': 'Voice Block Ids', 'default': None, 'description': 'Block IDs (from list_voice_blocks) to explicitly REgenerate; omit to fill gaps â\x80\x94 only blocks with no audio yet run'}, 'editable_sections': {'anyOf': [{'type': 'object', 'additionalProperties': True}, {'type': 'null'}], 'title': 'Editable Sections', 'default': None, 'description': 'Per-call prompt section overrides applied to every selected block; see get_section_template("voice_block")'}}}
Input schema
{'type': 'object', 'title': 'get_credit_balanceArguments', 'properties': {}}
Input schema
{'type': 'object', 'title': 'get_pipeline_progressArguments', 'required': ['project_id'], 'properties': {'project_id': {'type': 'string', 'title': 'Project Id', 'description': 'Project ID, as returned by create_project or list_projects'}}}
Input schema
{'type': 'object', 'title': 'get_projectArguments', 'required': ['project_id'], 'properties': {'project_id': {'type': 'string', 'title': 'Project Id', 'description': 'Project ID, as returned by create_project or list_projects'}}}
Input schema
{'type': 'object', 'title': 'get_scriptArguments', 'required': ['project_id'], 'properties': {'project_id': {'type': 'string', 'title': 'Project Id', 'description': 'Project ID, as returned by create_project or list_projects'}}}
Input schema
{'type': 'object', 'title': 'get_section_templateArguments', 'required': ['job'], 'properties': {'job': {'type': 'string', 'title': 'Job', 'description': 'Generation job name, e.g. "script", "script_scan", "storyboard", "segment_image", "segment_video", "voice_block"'}}}
Input schema
{'type': 'object', 'title': 'get_segment_assetsArguments', 'required': ['project_id', 'segment_number'], 'properties': {'project_id': {'type': 'string', 'title': 'Project Id', 'description': 'Project ID, as returned by create_project or list_projects'}, 'segment_number': {'type': 'integer', 'title': 'Segment Number', 'description': '1-based segment number, as reported by get_segments'}}}
Input schema
{'type': 'object', 'title': 'get_segmentsArguments', 'required': ['project_id'], 'properties': {'limit': {'type': 'integer', 'title': 'Limit', 'default': 0, 'description': 'Maximum segments to return; 0 returns all. Long-form projects can hold 100+ segments â\x80\x94 page with offset/limit instead of pulling everything at once.'}, 'offset': {'type': 'integer', 'title': 'Offset', 'default': 0, 'description': '0-based index of the first segment to return (pagination)'}, 'project_id': {'type': 'string', 'title': 'Project Id', 'description': 'Project ID, as returned by create_project or list_projects'}}}
Input schema
{'type': 'object', 'title': 'get_styleArguments', 'required': ['style_id'], 'properties': {'style_id': {'type': 'string', 'title': 'Style Id', 'description': 'Style ID, as returned by create_style or list_styles'}}}
Input schema
{'type': 'object', 'title': 'get_video_urlArguments', 'required': ['project_id'], 'properties': {'project_id': {'type': 'string', 'title': 'Project Id', 'description': 'Project ID, as returned by create_project or list_projects'}}}
Input schema
{'type': 'object', 'title': 'get_workflow_statusArguments', 'properties': {'style_id': {'type': 'string', 'title': 'Style Id', 'default': '', 'description': 'Style ID to scope jobs to (style analysis); pass exactly one of project_id or style_id'}, 'project_id': {'type': 'string', 'title': 'Project Id', 'default': '', 'description': 'Project ID to scope jobs to; pass exactly one of project_id or style_id'}}}
Input schema
{'type': 'object', 'title': 'list_assetsArguments', 'required': ['project_id'], 'properties': {'asset_type': {'type': 'string', 'title': 'Asset Type', 'default': '', 'description': 'Optional filter: "character", "environment", or "object"; empty lists all asset types'}, 'project_id': {'type': 'string', 'title': 'Project Id', 'description': 'Project ID, as returned by create_project or list_projects'}}}
Input schema
{'type': 'object', 'title': 'list_channelsArguments', 'properties': {}}
Input schema
{'type': 'object', 'title': 'list_modelsArguments', 'required': ['job'], 'properties': {'job': {'type': 'string', 'title': 'Job', 'description': 'Generation job whose allowed models to list, e.g. "script", "storyboard", "segment_image", "segment_video", "voice_block"'}, 'lip_sync': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'title': 'Lip Sync', 'default': None, 'description': "segment_video only: whether the shot is lip-synced to the narration (the asset's config.lip_sync). Video models split on it, so pass it to get that family's list and the account default for it."}, 'provider': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Provider', 'default': None, 'description': 'voice_block only: the project\'s voice_tts_provider ("minimax" or "elevenlabs"). Voice models split by provider, so pass it to get that family\'s list and the account default for it.'}}}
Input schema
{'type': 'object', 'title': 'list_music_tracksArguments', 'required': ['project_id'], 'properties': {'project_id': {'type': 'string', 'title': 'Project Id', 'description': 'Project ID, as returned by create_project or list_projects'}}}
Input schema
{'type': 'object', 'title': 'list_projectsArguments', 'required': ['channel_id'], 'properties': {'channel_id': {'type': 'string', 'title': 'Channel Id', 'description': 'ID of the channel whose projects to list, from list_channels or create_channel'}}}
Input schema
{'type': 'object', 'title': 'list_provider_keysArguments', 'properties': {}}
Input schema
{'type': 'object', 'title': 'list_scenesArguments', 'required': ['project_id'], 'properties': {'limit': {'type': 'integer', 'title': 'Limit', 'default': 0, 'description': 'Maximum scenes to return; 0 returns all'}, 'offset': {'type': 'integer', 'title': 'Offset', 'default': 0, 'description': '0-based index of the first scene to return (pagination)'}, 'project_id': {'type': 'string', 'title': 'Project Id', 'description': 'Project ID, as returned by create_project or list_projects'}, 'include_composition': {'type': 'boolean', 'title': 'Include Composition', 'default': False, 'description': "Include each scene's full composition JSON (layers, layout) â\x80\x94 kilobytes per scene, so page with offset/limit when True; the default summary rows are enough for ids and director notes"}}}
Input schema
{'type': 'object', 'title': 'list_style_presetsArguments', 'properties': {}}
Input schema
{'type': 'object', 'title': 'list_stylesArguments', 'required': ['channel_id'], 'properties': {'channel_id': {'type': 'string', 'title': 'Channel Id', 'description': 'ID of the channel that owns the styles, from list_channels'}}}
Input schema
{'type': 'object', 'title': 'list_voice_blocksArguments', 'required': ['project_id'], 'properties': {'project_id': {'type': 'string', 'title': 'Project Id', 'description': 'Project ID, as returned by create_project or list_projects'}, 'include_subtitle_data': {'type': 'boolean', 'title': 'Include Subtitle Data', 'default': False, 'description': 'Include each block\'s word-level subtitle timings â\x80\x94 bulky and rarely needed; omitted by default (subtitle_data reports "omitted" when present but stripped)'}}}
Input schema
{'type': 'object', 'title': 'list_voicesArguments', 'properties': {'group': {'type': 'string', 'title': 'Group', 'default': '', 'description': 'Return only this catalogue group (case-insensitive; e.g. "Narration", "Characters"). Empty returns every group â\x80\x94 the ElevenLabs catalogue is 150+ voices, so filter it by group; the response\'s `groups` lists the valid names with counts.'}, 'provider': {'type': 'string', 'title': 'Provider', 'default': 'minimax', 'description': 'TTS engine to list voices for: "minimax" (default engine) or "elevenlabs"; match the project\'s voice_tts_provider'}}}
Input schema
{'type': 'object', 'title': 'project_director_noteArguments', 'required': ['project_id', 'message'], 'properties': {'message': {'type': 'string', 'title': 'Message', 'description': 'Project-wide director note in natural language, e.g. "make the intro punchier" or "all captions bigger"'}, 'project_id': {'type': 'string', 'title': 'Project Id', 'description': 'Project ID, as returned by create_project or list_projects'}}}
Input schema
{'type': 'object', 'title': 'regenerate_segment_assetArguments', 'required': ['project_id', 'segment_number', 'asset_type'], 'properties': {'model': {'type': 'string', 'title': 'Model', 'default': '', 'description': 'Model ID to render with; empty uses the job\'s default (see list_models("segment_image") / list_models("segment_video"))'}, 'settings': {'anyOf': [{'type': 'object', 'additionalProperties': True}, {'type': 'null'}], 'title': 'Settings', 'default': None, 'description': "Model-specific settings (e.g. image quality, video duration); valid keys come from the model's settings_schema in list_models"}, 'asset_type': {'type': 'string', 'title': 'Asset Type', 'description': '"image" or "video"; for a video segment, "image" targets its start frame'}, 'project_id': {'type': 'string', 'title': 'Project Id', 'description': 'Project ID, as returned by create_project or list_projects'}, 'segment_number': {'type': 'integer', 'title': 'Segment Number', 'description': '1-based segment number, as reported by get_segments'}, 'editable_sections': {'anyOf': [{'type': 'object', 'additionalProperties': True}, {'type': 'null'}], 'title': 'Editable Sections', 'default': None, 'description': 'Per-call prompt section overrides, keyed by section name; see get_section_template("segment_image") or ("segment_video")'}}}
Input schema
{'type': 'object', 'title': 'remove_music_trackArguments', 'required': ['track_id'], 'properties': {'track_id': {'type': 'string', 'title': 'Track Id', 'description': 'ID of the music track to remove, from list_music_tracks'}}}
Input schema
{'type': 'object', 'title': 'remove_segment_assetArguments', 'required': ['project_id', 'segment_number'], 'properties': {'asset_id': {'type': 'string', 'title': 'Asset Id', 'default': '', 'description': 'ID of the SFX or overlay asset, from get_segment_assets; needed only when the segment has more than one of them'}, 'project_id': {'type': 'string', 'title': 'Project Id', 'description': 'Project ID, as returned by create_project or list_projects'}, 'segment_number': {'type': 'integer', 'title': 'Segment Number', 'description': '1-based segment number, as reported by get_segments'}}}
Input schema
{'type': 'object', 'title': 'rescan_voice_blocksArguments', 'required': ['project_id'], 'properties': {'project_id': {'type': 'string', 'title': 'Project Id', 'description': 'Project ID, as returned by create_project or list_projects'}}}
Input schema
{'type': 'object', 'title': 'revise_scriptArguments', 'required': ['project_id', 'instruction'], 'properties': {'project_id': {'type': 'string', 'title': 'Project Id', 'description': 'Project ID, as returned by create_project or list_projects'}, 'instruction': {'type': 'string', 'title': 'Instruction', 'description': 'Natural-language edit instruction, e.g. "make the intro punchier"'}, 'selected_text': {'type': 'string', 'title': 'Selected Text', 'default': '', 'description': 'Exact passage to rewrite; must appear verbatim in the active script. Omit to revise the whole script'}}}
Input schema
{'type': 'object', 'title': 'rollback_segment_assetArguments', 'required': ['project_id', 'segment_number', 'asset_type'], 'properties': {'index': {'type': 'integer', 'title': 'Index', 'default': 0, 'description': "Which archived render to restore, 0 = the most recent (each asset's config.history in get_segment_assets lists them)"}, 'asset_type': {'type': 'string', 'title': 'Asset Type', 'description': '"image" or "video" â\x80\x94 which primary to restore; for a video segment, "image" targets its start frame'}, 'project_id': {'type': 'string', 'title': 'Project Id', 'description': 'Project ID, as returned by create_project or list_projects'}, 'segment_number': {'type': 'integer', 'title': 'Segment Number', 'description': '1-based segment number, as reported by get_segments'}}}
Input schema
{'type': 'object', 'title': 'save_scriptArguments', 'required': ['project_id', 'content'], 'properties': {'content': {'type': 'string', 'title': 'Content', 'description': 'Full script text to save as a new version; plain prose narration, optionally with `[SCENE: ...]` direction paragraphs, `<break time="0.5s" />` pauses, and `Name:` speaker prefixes'}, 'project_id': {'type': 'string', 'title': 'Project Id', 'description': 'Project ID, as returned by create_project or list_projects'}}}
Input schema
{'type': 'object', 'title': 'scan_scriptArguments', 'required': ['project_id'], 'properties': {'model': {'type': 'string', 'title': 'Model', 'default': '', 'description': 'Model ID to scan with; empty uses the default (see list_models("script_scan"))'}, 'project_id': {'type': 'string', 'title': 'Project Id', 'description': 'Project ID, as returned by create_project or list_projects'}, 'editable_sections': {'anyOf': [{'type': 'object', 'additionalProperties': True}, {'type': 'null'}], 'title': 'Editable Sections', 'default': None, 'description': 'Per-call prompt section overrides, keyed by section name; see get_section_template("script_scan")'}}}
Input schema
{'type': 'object', 'title': 'set_character_voiceArguments', 'required': ['asset_id', 'voice_id'], 'properties': {'asset_id': {'type': 'string', 'title': 'Asset Id', 'description': 'Character asset ID, from list_assets'}, 'voice_id': {'type': 'string', 'title': 'Voice Id', 'description': "TTS voice ID, from list_voices (use the provider matching the project's voice_tts_provider)"}}}
Input schema
{'type': 'object', 'title': 'set_narrator_voiceArguments', 'required': ['project_id', 'voice_id'], 'properties': {'voice_id': {'type': 'string', 'title': 'Voice Id', 'description': "TTS voice ID for the narrator, from list_voices (use the provider matching the project's voice_tts_provider)"}, 'project_id': {'type': 'string', 'title': 'Project Id', 'description': 'Project ID, as returned by create_project or list_projects'}}}
Input schema
{'type': 'object', 'title': 'set_project_styleArguments', 'required': ['project_id', 'style_id'], 'properties': {'style_id': {'type': 'string', 'title': 'Style Id', 'description': "ID of the style to make the project's default, from create_style or list_styles"}, 'project_id': {'type': 'string', 'title': 'Project Id', 'description': 'Project ID, as returned by create_project or list_projects'}}}
Input schema
{'type': 'object', 'title': 'set_provider_keyArguments', 'required': ['provider', 'key'], 'properties': {'key': {'type': 'string', 'title': 'Key', 'description': 'The provider API key to register; stored encrypted at rest'}, 'provider': {'type': 'string', 'title': 'Provider', 'description': 'Provider the key belongs to: "openai", "gemini", "anthropic", "fal", "elevenlabs", or "minimax"'}}}
Input schema
{'type': 'object', 'title': 'set_segment_continuationArguments', 'required': ['project_id', 'segment_number'], 'properties': {'project_id': {'type': 'string', 'title': 'Project Id', 'description': 'Project ID, as returned by create_project or list_projects'}, 'continues_from': {'type': 'integer', 'title': 'Continues From', 'default': 0, 'description': '1-based number of the EARLIER segment whose frame this one continues; pass 0 to clear the link'}, 'segment_number': {'type': 'integer', 'title': 'Segment Number', 'description': '1-based number of the segment whose image should continue an earlier frame, as reported by get_segments'}}}
Input schema
{'type': 'object', 'title': 'split_segmentArguments', 'required': ['project_id', 'segment_number', 'offsets_ms'], 'properties': {'dry_run': {'type': 'boolean', 'title': 'Dry Run', 'default': False, 'description': 'True previews the consequences without changing anything'}, 'offsets_ms': {'type': 'array', 'items': {'type': 'integer'}, 'title': 'Offsets Ms', 'description': 'Cut points as millisecond offsets from the segment start, ascending; 1-3 cuts producing 2-4 parts'}, 'project_id': {'type': 'string', 'title': 'Project Id', 'description': 'Project ID, as returned by create_project or list_projects'}, 'inherit_index': {'type': 'integer', 'title': 'Inherit Index', 'default': 0, 'description': '0-based index of the resulting part that keeps the original creative data (default: the first part)'}, 'segment_number': {'type': 'integer', 'title': 'Segment Number', 'description': '1-based number of the segment to split, as reported by get_segments'}}}
Input schema
{'type': 'object', 'title': 'update_assetArguments', 'required': ['asset_id'], 'properties': {'name': {'type': 'string', 'title': 'Name', 'default': '', 'description': 'New asset name; empty leaves the name unchanged'}, 'asset_id': {'type': 'string', 'title': 'Asset Id', 'description': 'Asset ID, as returned by list_assets or create_asset'}, 'description': {'type': 'string', 'title': 'Description', 'default': '', 'description': 'New generation-facing look description; empty leaves it unchanged'}}}
Input schema
{'type': 'object', 'title': 'update_caption_configArguments', 'required': ['project_id', 'caption_config'], 'properties': {'project_id': {'type': 'string', 'title': 'Project Id', 'description': 'Project ID, as returned by create_project or list_projects'}, 'caption_config': {'type': 'object', 'title': 'Caption Config', 'description': "Partial caption config to merge (keys like enabled, plus styling); read the current value from get_project's caption_config", 'additionalProperties': True}}}
Input schema
{'type': 'object', 'title': 'update_music_trackArguments', 'required': ['track_id', 'fields'], 'properties': {'fields': {'type': 'object', 'title': 'Fields', 'description': 'Partial dict of track fields to patch; allowed keys: name, volume (0-1), loop, start_frame, duration_frames, position, trim_start_frame, trim_end_frame', 'additionalProperties': True}, 'track_id': {'type': 'string', 'title': 'Track Id', 'description': 'Music track ID, from list_music_tracks or add_music_track'}}}
Input schema
{'type': 'object', 'title': 'update_projectArguments', 'required': ['project_id', 'fields'], 'properties': {'fields': {'type': 'object', 'title': 'Fields', 'description': "Partial dict of fields to patch; allowed keys: title, description, sfx_level ('none'|'minimal'|'frequent'), video_concept, voice_mix ('narrator_only'|'narrator_led'|'balanced'|'character_led'), voice_tts_provider ('minimax'|'elevenlabs'), script_target_minutes, narrator_speed, video_format", 'additionalProperties': True}, 'project_id': {'type': 'string', 'title': 'Project Id', 'description': 'Project ID, as returned by create_project or list_projects'}}}
Input schema
{'type': 'object', 'title': 'update_segment_contentArguments', 'required': ['project_id', 'segment_number', 'user_input'], 'properties': {'dry_run': {'type': 'boolean', 'title': 'Dry Run', 'default': False, 'description': 'True previews the consequences (assets recreated, rendered assets lost) without changing anything'}, 'project_id': {'type': 'string', 'title': 'Project Id', 'description': 'Project ID, as returned by create_project or list_projects'}, 'user_input': {'type': 'string', 'title': 'User Input', 'description': 'Natural-language feedback describing the change to this shot, e.g. "make this a close-up" or "show the machine from above"'}, 'segment_number': {'type': 'integer', 'title': 'Segment Number', 'description': '1-based segment number, as reported by get_segments'}}}
Input schema
{'type': 'object', 'title': 'update_segment_promptsArguments', 'required': ['project_id', 'segment_number'], 'properties': {'project_id': {'type': 'string', 'title': 'Project Id', 'description': 'Project ID, as returned by create_project or list_projects'}, 'image_prompt': {'type': 'string', 'title': 'Image Prompt', 'default': '', 'description': 'New scene-image prompt (image segments; also the retrieval-miss fallback on real-photo segments). Empty leaves it unchanged.'}, 'video_prompt': {'type': 'string', 'title': 'Video Prompt', 'default': '', 'description': 'New motion/video prompt (video segments; also the retrieval-miss fallback on real b-roll). Empty leaves it unchanged.'}, 'media_queries': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'title': 'Media Queries', 'default': None, 'description': 'New stock-search queries for a fetched-media segment (real b-roll / real photo). Replaces the search text verbatim; re-fetch an already-fetched clip with regenerate_segment_asset. Omit to leave the search unchanged.'}, 'segment_number': {'type': 'integer', 'title': 'Segment Number', 'description': '1-based segment number, as reported by get_segments'}, 'start_frame_prompt': {'type': 'string', 'title': 'Start Frame Prompt', 'default': '', 'description': 'New start-frame prompt (generated video segments). Empty leaves it unchanged.'}}}
Input schema
{'type': 'object', 'title': 'update_style_fieldsArguments', 'required': ['style_id', 'fields'], 'properties': {'fields': {'type': 'object', 'title': 'Fields', 'description': 'Sparse patch of style fields, shaped {key: {"value": str, "applies_to": [...]}} â\x80\x94 send ONLY the keys you are changing; unlisted keys keep their current value', 'additionalProperties': True}, 'style_id': {'type': 'string', 'title': 'Style Id', 'description': 'Style ID, as returned by create_style or list_styles'}}}
Input schema
{'type': 'object', 'title': 'update_style_referencesArguments', 'required': ['style_id', 'inputs'], 'properties': {'inputs': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}, 'title': 'Inputs', 'description': 'The COMPLETE reference list the style should have after this call, in display order: [{"input_type": "youtube" | "text" | "image" | "video", "value": "<url or text>", "contributes_to": ["art_style", ...]?}]. Include every existing entry you are keeping (copy them from get_style verbatim â\x80\x94 public URL values are fine); anything left out is removed'}, 'style_id': {'type': 'string', 'title': 'Style Id', 'description': 'Style ID, as returned by create_style or list_styles'}}}
Input schema
{'type': 'object', 'title': 'update_voice_blockArguments', 'required': ['voice_block_id'], 'properties': {'volume': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'title': 'Volume', 'default': None, 'description': 'Playback volume for this block, 0-1; omit to leave unchanged'}, 'voice_id': {'type': 'string', 'title': 'Voice Id', 'default': '', 'description': 'New TTS voice ID for this block, from list_voices; empty leaves the voice unchanged'}, 'voice_block_id': {'type': 'string', 'title': 'Voice Block Id', 'description': 'Voice block ID, from list_voice_blocks'}}}
Input schema
{'type': 'object', 'title': 'view_imageArguments', 'required': ['url'], 'properties': {'url': {'type': 'string', 'title': 'Url', 'description': 'Public Framesail media URL to fetch â\x80\x94 a public_url from get_segment_assets, a file_path from list_assets, or a template/preset image URL from get_style / list_style_presets; other hosts are rejected'}}}
Input schema
{'type': 'object', 'title': 'whoamiArguments', 'properties': {}}
Recent tool changes
Similar MCP servers
MiOffice — AI-Powered Workspace Studio
Provides browser-based tools for processing PDFs, images, video, and audio, including generation, enhancement, conversion, transc…
BlitzReels Video Editor
Creates and edits short-form videos, including timelines, captions, transitions, AI-generated visuals, music, voiceovers, sound e…
Morpha
Enables creating, animating, and exporting layered short-form video projects.
switch
Enables management and exploration of an account-scoped library of AI-generated images and videos.
Magnific
Provides image enhancement and design tools, AI image and audio generation, text-to-speech, creation management, and reusable cre…
Uwear
Supports AI fashion photoshoot production with garments, outfits, avatars, locations, art direction, image generation, backdrops,…
Creative Claw
Generates and edits branded images, video, audio, speech, and 3D-related creative assets, with media processing and reusable them…
RegiAI
Generates and edits images, videos, audio, music, speech, subtitles, avatars, and related media asynchronously.