Content Tools
framesail.com
Manages channels and projects with reusable styles and voice configuration.
ENDPOINT 1
https://api.framesail.com/mcp
MCP server metadata
- Name
- framesail
- Version
- 1.27.2
Framesail turns a script into a finished long-form video: script -> asset scan -> reference images -> voiceover -> storyboard -> segment assets (images/video/ overlays) -> scenes -> rendered MP4. Step order is ENFORCED server-side. A step called before its prerequisites are done fails with a 409 step_not_ready error whose next_action names the exact tool to run instead — do that, don't retry the same call. Double-submits are also handled server-side: single-run steps (generate_script, scan_script, generate_storyboard, export_video) refuse to start while already running (job_already_running — await_jobs and re-check), and batch steps (generate_asset_reference, generate_voiceover, generate_segments) skip items already generated or in flight, so re-calling them never duplicates work or double-bills. On a fresh connection, whoami confirms which account and plan you're on (free, instant). If ANY tool returns 401, the key is invalid or revoked — tell the user to reconnect (OAuth clients) or create a new key on the account page; don't retry. A 403 means the account's plan lacks API access. Typical end-to-end run: 1. list_channels (or create_channel), then create_project(channel_id, title, description=the video concept). Pass video_format="portrait" when the user wants a vertical video (Shorts / Reels / TikTok) — it is fixed once the storyboard exists. A brand-new channel has no style yet — create_style (+ await_jobs(style_id=...)) and set_project_style before generating anything. When asking the user what style they want, offer two real options — never invent style choices: (a) reference matching (best): YouTube URLs of their channel or any video whose look they like (create_style inputs) — analysis extracts the art/narrative/director style from the footage; (b) curated presets: list_style_presets and let the user pick one per axis (instant, no analysis). Creating a style has a second half: generate_style_template for BOTH "character" and "environment" — a style isn't finished until both template images are rendered (skip any it already has — get_style's `templates` shows the rendered ones). 2. generate_script (or save_script with your own), await_jobs, then get_script — review/iterate with your user (save_script / revise_script) before moving on. 3. scan_script — extracts characters/environments/objects + voice blocks. 4. Review assets: list_assets, fix descriptions (update_asset), then generate_asset_reference for EVERY character, environment, and object — reference images keep them visually identical across every shot, and voiceover won't start until each of these assets has one. References render AGAINST the style's template images — make sure both templates are done (step 1) before generating any. 5. Voices: set_narrator_voice binds the narrator (browse with list_voices), set_character_voice for any character with dialogue, then generate_voiceover (word-level timing drives captions). 6. BEFORE generate_storyboard, ask the user for the asset mix — what share of segments to plan as still images vs animated video clips (percents totaling 100, default {"image": 70, "video": 30}; set via update_project(fields={"asset_mix": {"image": ..., "video": ...}})). This is the biggest cost lever in the whole pipeline: video clips cost far more to render than stills, and the storyboard plans against the mix, so it must be set first. Then generate_storyboard — plans every segment + its assets, honoring the channel's director/art/narrative styles. Review with get_segments — note each segment's continues_from_segment, which chains a shot off an earlier segment's frame for visual continuity (carry the frame, change only the delta). Fix surgically via update_segment_content / split_segment / combine_segments / change_segment_type / set_segment_continuation. 7. generate_segments — the HARD checkpoint (see Pace & spending): dry_run first, show the estimate, and wait for a fresh go-ahead before running for real. Inspect renders with get_segment_assets + view_image; re-render one with regenerate_segment_asset. 8. Optional polish: add_music_track (find tracks via browse_audio_library), add_segment_sfx, update_caption_config. 9. build_scenes, then export_video; await_jobs until the video_export job completes, then get_video_url. Pace & spending: content-creating tools (generate_*, scan_script, rescan_voice_blocks, revise_script, create_style, analyze_style, update_segment_content, director notes) bill platform credits — or the user's own provider keys on the BYOK plan. Read-only tools (list_*/get_*, view_image, await_jobs) and export_video are free. DEFAULT to checkpoint pacing: run ONE pipeline step, show your user what it produced — with that step's web_url from get_pipeline_progress so they can open it in the app — and what the next step costs, then wait for their go-ahead. Run multiple steps unprompted only when the user explicitly asked for an end-to-end run ("do the whole thing"); even then, report progress after each step. generate_segments is the one HARD stop: it is by far the most expensive step (often hundreds to thousands of credits). ALWAYS dry_run it and show the estimate next to get_credit_balance, then STOP and wait for a fresh yes given after the user has seen that estimate. A prior "do the whole thing" does NOT cover this spend — do not reason your way to approval from earlier permission or from the balance looking sufficient. The only exception: the user explicitly pre-authorized the render cost in so many words ("render without asking me"). Never regenerate work that already exists (script, references, voiceover, renders) unless asked — retrying a step that ERRORED is fine, "just to be safe" re-runs waste the user's money. All generation tools return {job_id} immediately. Call await_jobs(project_id=...) after each step — it blocks server-side until the step's jobs finish (or ~50s passes; call it again while done=false). Long steps are NORMAL: a storyboard takes 3-5 minutes, a full segment render can take longer. Jobs flow pending -> running -> complete|error. Resuming or unsure what's next? get_pipeline_progress(project_id) returns every step's state + the exact next action — state lives server-side, so you can stop for hours, reconnect in a new session, and pick up where the project left off (list_channels -> list_projects -> get_pipeline_progress). Never re-run a step just because you don't remember running it. Generation runs on the channel's configured styles by default — override per-call via editable_sections (see get_section_template for what each job exposes) and model (see list_models for alternates + each model's settings schema). Style fields support @variable references resolved at generation time. New visual identities: create_style with YouTube/text reference inputs, await_jobs(style_id=...), then set_project_style to put it into effect. Pitfalls: scan_script DELETES and recreates assets on re-run — after editing the script once assets are curated, use rescan_voice_blocks instead (assets untouched); voiceover requires every speaker to resolve to a voice first; after editing segments, regenerating assets, or changing music/captions, re-run build_scenes before export_video. Billing: on the BYOK plan, jobs run on your own provider API keys (0 credits) when a key for that model's provider is registered via set_provider_key; otherwise they bill platform credits (get_credit_balance shows the balance).
Known tools 68
create_channelCreate a new channel — the container for projects and their reusable styles.
Potential side effectsget_projectFetch a project row — settings, voice config, default style, export URL.
Inferred read-onlydelete_projectPermanently delete a project and everything in it (script versions, assets, voiceover, segments, renders).
Potential side effectsset_project_styleSet the project's default style — the style whose art/narrative/director fields drive its generations.
Inferred read-onlyupdate_caption_configMerge a patch into the project's burned-in caption config (keys like enabled, plus styling).
Inferred read-onlyget_pipeline_progressTHE resume/orientation tool: one call returns every pipeline step's state (script -> scan -> reference_images -> voices -> voiceover -> style_templates -> storyboard -> segment_assets -> scenes -> export), any running jobs, and a next_action telling you exactly what to do next.
Inferred read-onlyget_workflow_statusPoll this between steps: returns active + recently-finished AI jobs (scope by project_id, or style_id for style analysis), plus per-segment- asset render statuses for projects.
Inferred read-onlyawait_jobsBlock (server-side) until the scope has no pending/running jobs, or the timeout passes — use this instead of polling get_workflow_status yourself.
Inferred read-onlyget_section_templateInspect the prompt sections a generation job exposes for per-call override via editable_sections (jobs: script, script_scan, storyboard, segment_image, segment_video, voice_block, .
Inferred read-onlylist_modelsList the models allowed for a generation job, with display names, credit estimates, and each model's settings_schema — the valid keys for that tool's `settings` param (e.
Inferred read-onlygenerate_scriptGenerate the project's script from its description/concept and the channel's narrative style.
Inferred read-onlysave_scriptSave script text (your own draft, or an edited version of the generated one — saving creates a new version, old versions are kept).
Inferred read-onlyrevise_scriptAI-rewrite a passage of the active script in the project's narrative voice (the same in-editor revise the UI offers).
Inferred read-onlyactivate_script_versionSwitch the project's active script to another saved version (ids come from get_script's version list — every save_script creates one).
Inferred read-onlyscan_scriptAnalyze the active script: extracts character/environment/object assets and splits narration into voice blocks.
Inferred read-onlylist_assetsList the project's assets extracted by scan_script — characters, environments, objects.
Inferred read-onlygenerate_asset_referenceRender an asset's reference image in the channel's art style — the visual anchor that keeps a character/environment looking identical across every shot.
Inferred read-onlyset_character_voiceBind a TTS voice to a character asset — required before generate_voiceover for every character with dialogue (the narrator's voice is separate: set_narrator_voice).
Inferred read-onlylist_voicesList available TTS voices (id, label, preview audio URL) for a provider: "minimax" (default engine) or "elevenlabs".
Inferred read-onlyset_narrator_voiceSet the project's narrator TTS voice — required before generate_voiceover whenever the script has narration.
Inferred read-onlylist_voice_blocksList the project's voice blocks (per-speaker narration chunks) with their audio status and assigned voices.
Inferred read-onlyupdate_voice_blockOverride one voice block's voice or playback volume (block ids from list_voice_blocks).
Inferred read-onlyrescan_voice_blocksRe-extract voice blocks from the active script WITHOUT touching assets or their reference images — the non-destructive alternative to scan_script after a script edit.
Potential side effectsgenerate_storyboardPlan the full visual storyboard: segments, shot pacing, image/video prompts, overlays, continuation chains — driven by the channel's director and art styles.
Inferred read-onlyget_segmentsList the storyboard's segments (narration span, type, duration, creative direction).
Inferred read-onlyget_segment_assetsList one segment's assets (images/video/overlays) including their status, config (prompts, model), and public URLs of rendered files — pass an image's public_url to view_image to actually look at it.
Inferred read-onlyregenerate_segment_assetRegenerate a segment's primary image or video with optional overrides — the API equivalent of the editor's expert drawer.
Inferred read-onlychange_segment_typeChange a segment's visual type: "image" | "video" | "overlay_scene".
Inferred read-onlyupdate_segment_contentRewrite one segment's creative direction from feedback ("make this shot a close-up", "show the machine from above") — an LLM rewrites the shot's prompts; continuation links, SFX, and overlays are preserved.
Inferred read-onlysplit_segmentSplit a segment at the given time offsets (ms, 1-3 cuts → 2-4 parts).
Inferred read-onlycombine_segmentsMerge a segment with an adjacent one (segment numbers must be neighbors).
Inferred read-onlyset_segment_continuationMake a segment's image render as a continuation of an EARLIER segment's frame (same composition evolving — the storyboard's continues_from_segment, settable after the fact).
Inferred read-onlyadd_segment_sfxAttach a sound effect from the audio library to a segment (find track ids via browse_audio_library with category="sfx").
Inferred read-onlygenerate_segmentsRender every actionable segment asset (images, video clips, overlays) across the project, in dependency order.
Inferred read-onlybuild_scenesCompile segments + assets + voiceover into the editor/render timeline (scenes).
Inferred read-onlydirector_noteEdit ONE scene with a natural-language note (the same director chat the editor UI uses): move/restyle/add/remove layers and overlays, retime, etc.
Potential side effectsproject_director_noteApply a project-WIDE director note ("make the intro punchier", "all captions bigger", "tighten pacing in the back half").
Inferred read-onlyget_styleFetch one style row — its inputs (reference material), analyzed fields (art_style, narrative_style, director_style, script_prompt, .
Inferred read-onlyupdate_style_fieldsHand-edit a style's analyzed fields after reviewing them — e.
Potential side effectslist_style_presetsThe curated preset catalog for the no-AI style creation path, grouped by axis (art_style / narrative_style / director_style).
Inferred read-onlygenerate_style_templateRender one of a style's two template images — a REAL step of style setup, not an optional extra: a style isn't finished until both its character and environment templates are rendered (the app shows them on the style card).
Inferred read-onlyset_provider_keyRegister a BYOK provider API key (encrypted at rest, BYOK plan only).
Inferred read-onlylist_provider_keysList registered BYOK providers (masked — only the last 4 characters).
Inferred read-onlywhoamiVerify the connection: the account email and plan behind the current credential.
Potential side effectsbrowse_audio_libraryBrowse the audio library for background music and sound effects.
Inferred read-onlylist_music_tracksList the project's background music tracks (volume, loop, timing).
Inferred read-onlyadd_music_trackAdd background music to the project from the audio library (find track ids with browse_audio_library, category="music").
Inferred read-onlyview_imageFetch a rendered Framesail image so you (and your user) can SEE it — pass a URL from get_segment_assets, get_style, or asset endpoints.
Inferred read-onlyCONNECT WITH APPROVAL
Client installation
Review this server and its permissions before adding it. Secret placeholders must be set locally.
Codex
~/.codex/config.toml
[mcp_servers.framesail]
url = "https://api.framesail.com/mcp"
enabled = true
Claude Code
.mcp.json
{
"mcpServers": {
"framesail": {
"type": "http",
"url": "https://api.framesail.com/mcp"
}
}
}
Claude Desktop
Settings → Connectors → Add custom connector
Name: framesail
Remote MCP URL: https://api.framesail.com/mcp
Add this remote URL as a custom connector in Claude Desktop. Availability depends on the user plan and workspace policy.
Cursor
.cursor/mcp.json
{
"mcpServers": {
"framesail": {
"url": "https://api.framesail.com/mcp"
}
}
}
Visual Studio Code
.vscode/mcp.json
Add to Visual Studio Code{
"servers": {
"framesail": {
"type": "http",
"url": "https://api.framesail.com/mcp"
}
}
}
Generic MCP
Client-specific MCP configuration
{
"name": "framesail",
"transport": "streamable-http",
"url": "https://api.framesail.com/mcp"
}
MCP Inspector
Run the official MCP Inspector locally and enter the indexed Streamable HTTP endpoint.
TRUST AND VERIFICATION EVIDENCE
Trust Data Available
BuiltWith Trust API v2 evidence for framesail.com was fetched 2026-07-28T07:06:34.003Z and is being refreshed.
framesail.com is assessed as Trusted: Domain runs a meaningful technology spend, consistent with a real business.
Evidence is source-attributed and does not guarantee that a third-party server is safe. Risk labels are conservative metadata heuristics.