com.framesail/framesail
REMOTE · API.FRAMESAIL.COM · SCANNED SEP 20
Create long-form YouTube videos end to end: script, storyboard, voiceover, final MP4.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security94
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token. View diagnostics → Pass
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
- The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents. View diagnostics → Partial
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability71
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 13576 tokens (~188/item across 72 items; 72 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management98
- Stability check failed: schema churn in the 30 days we've observed: 1 tool removals, 0 breaking changes, 0 auth/transport breaks, 5 additions. See how to fix → Fail
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 7 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 73 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
How do I install the com.framesail/framesail MCP server?
com.framesail/framesail is a hosted endpoint at https://api.framesail.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · api.framesail.com
claude mcp add --transport http com-framesail-framesail 'https://api.framesail.com/mcp'
{
"mcpServers": {
"com-framesail-framesail": {
"url": "https://api.framesail.com/mcp"
}
}
} {
"servers": {
"com-framesail-framesail": {
"type": "http",
"url": "https://api.framesail.com/mcp"
}
}
} [mcp_servers.com-framesail-framesail] url = "https://api.framesail.com/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"com-framesail-framesail": {
"type": "remote",
"url": "https://api.framesail.com/mcp",
"enabled": true
}
}
} openclaw mcp add com-framesail-framesail --url 'https://api.framesail.com/mcp' --transport streamable-http
mcp_servers:
com-framesail-framesail:
url: "https://api.framesail.com/mcp" {
"McpServers": {
"com-framesail-framesail": {
"Transport": "http",
"Url": "https://api.framesail.com/mcp"
}
}
} assistant mcp add com-framesail-framesail -t streamable-http -u 'https://api.framesail.com/mcp'
{
"mcpServers": {
"com-framesail-framesail": {
"type": "http",
"url": "https://api.framesail.com/mcp"
}
}
} The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 18 Sept 26 −1
- Stability: pass → fail ▼ security
- A breaking change shipped without a version bump: still 1.27.2 ▼ security
- Tool “remove_segment_sfx” was removed ▼ security
- New tool “remove_segment_asset”, which the server declares destructive security
- Tool “add_segment_sfx” rewrote its description, which is the text the model reads security
- Tool “director_note” rewrote its description, which is the text the model reads security
- Tool “get_segments” rewrote its description, which is the text the model reads security
- Tool “project_director_note” rewrote its description, which is the text the model reads security
- Tool “save_script” rewrote its description, which is the text the model reads security
- “director_note” reworded the description of “message” cosmetic
- 10 Sept 26 0
- Tool “generate_voiceover” rewrote its description, which is the text the model reads security
- 1 Sept 26 0
- The server rewrote its instructions, which are the text every model session reads security
- New tool “update_style_references”, which the server declares destructive security
- Tool “activate_script_version” rewrote its description, which is the text the model reads security
- Tool “browse_audio_library” rewrote its description, which is the text the model reads security
- Tool “build_scenes” rewrote its description, which is the text the model reads security
- Tool “change_segment_type” rewrote its description, which is the text the model reads security
- Tool “combine_segments” rewrote its description, which is the text the model reads security
- Tool “create_asset” rewrote its description, which is the text the model reads security
- Tool “generate_segments” rewrote its description, which is the text the model reads security
- Tool “generate_storyboard” rewrote its description, which is the text the model reads security
- Tool “get_segments” rewrote its description, which is the text the model reads security
- Tool “get_style” rewrote its description, which is the text the model reads security
- Tool “list_models” rewrote its description, which is the text the model reads security
- Tool “list_provider_keys” rewrote its description, which is the text the model reads security
- Tool “list_scenes” rewrote its description, which is the text the model reads security
- Tool “list_voice_blocks” rewrote its description, which is the text the model reads security
- Tool “list_voices” rewrote its description, which is the text the model reads security
- Tool “rescan_voice_blocks” rewrote its description, which is the text the model reads security
- Tool “revise_script” rewrote its description, which is the text the model reads security
- Tool “save_script” rewrote its description, which is the text the model reads security
- Tool “scan_script” rewrote its description, which is the text the model reads security
- Tool “split_segment” rewrote its description, which is the text the model reads security
- Tool “update_project” rewrote its description, which is the text the model reads security
- Tool “update_segment_content” rewrote its description, which is the text the model reads security
- Tool “update_style_fields” rewrote its description, which is the text the model reads security
- Schema quality: 152 → 188 ▼ functional
- New tool “animate_segment” functional
- New tool “rollback_segment_asset” functional
- New tool “update_segment_prompts” functional
- “change_segment_type” added an optional parameter “dry_run” cosmetic
- “change_segment_type” added an optional parameter “media_source” cosmetic
- “combine_segments” added an optional parameter “dry_run” cosmetic
- “generate_segments” added an optional parameter “asset_scope” cosmetic
- “get_segments” added an optional parameter “limit” cosmetic
- “get_segments” added an optional parameter “offset” cosmetic
- “list_scenes” added an optional parameter “include_composition” cosmetic
- “list_scenes” added an optional parameter “limit” cosmetic
- “list_scenes” added an optional parameter “offset” cosmetic
- “list_voice_blocks” added an optional parameter “include_subtitle_data” cosmetic
- “list_voices” added an optional parameter “group” cosmetic
- “split_segment” added an optional parameter “dry_run” cosmetic
- “update_segment_content” added an optional parameter “dry_run” cosmetic
- “change_segment_type” reworded the description of “segment_type” cosmetic
- “save_script” reworded the description of “content” cosmetic
- “update_project” reworded the description of “fields” cosmetic
- “update_style_fields” reworded the description of “fields” cosmetic
- “rescan_voice_blocks” dropped the optional parameter “model” cosmetic
- 26 Aug 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 25 Aug 26 +1
- Stability: 0.97 → pass security
- 23 Aug 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.
- 17 Aug 26 0
- Tool “director_note” rewrote its description, which is the text the model reads security
- “director_note” added an optional parameter “project_id” cosmetic
- “director_note” added an optional parameter “segment_number” cosmetic
- “director_note” reworded the description of “scene_id” cosmetic
- “director_note” made “scene_id” optional cosmetic
- 16 Aug 26 0
- Tool “list_models” rewrote its description, which is the text the model reads security
- “generate_voiceover” reworded the description of “model” cosmetic
- “update_project” reworded the description of “fields” cosmetic
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 20 Sept 2026 · Probed https://api.framesail.com/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=api.framesail.com | CN=YE1,O=Let's Encrypt,C=US | 19 Aug 2026 | 17 Nov 2026 | ECDSA 256 | ECDSA-SHA384 | 6c30faf009f53b8303de16181953decf929 |
| SANs: api.framesail.com | ||||||
| CN=YE1,O=Let's Encrypt,C=US (CA) | CN=Root YE,O=ISRG,C=US | 3 Sept 2025 | 2 Sept 2028 | ECDSA 384 | ECDSA-SHA384 | 5ddd70dd31f801c85c186a7a04b80afe |
| CN=Root YE,O=ISRG,C=US (CA) | CN=ISRG Root X2,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | ECDSA-SHA384 | 872165fc34b6e5fba8add5b3705fb53a |
| CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) | CN=ISRG Root X1,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | SHA256-RSA | 6c8f1dc727c7117f7baf853ac980f9cd |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of api.framesail.com. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| com. | present | 19718 | 13 | Verified |
| framesail.com. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication Enforced and verified
The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.
| Result | Enforced and verified |
|---|---|
| Enforced | On tool calls |
| HTTP status | 200 |
WWW-Authenticate challenge Bearer resource_metadata="https://api.framesail.com/.well-known/oauth-protected-resource/mcp"
Bearer resource_metadata="https://api.framesail.com/.well-known/oauth-protected-resource/mcp" | Header | Value |
|---|---|
| strict-transport-security | max-age=63072000; includeSubDomains; preload |
| content-security-policy | default-src 'none'; frame-ancestors 'none' |
| x-content-type-options | nosniff |
| x-frame-options | DENY |
| referrer-policy | no-referrer |
Protected resource metadata
| Document | https://api.framesail.com/.well-known/oauth-protected-resource/mcp |
|---|---|
| Retrieved | Yes |
| Resource | https://api.framesail.com/mcp |
| Authorisation server | https://api.framesail.com |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://api.framesail.com/mcp | Verified | 200 | |
| http (plaintext) | http://api.framesail.com/mcp | HTTPS enforced | 301 | https://api.framesail.com/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
rescan_voice_blocks Rescan voice blocks ~113
Re-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. Blocks whose spoken text is unchanged keep their audio; only edited blocks come back empty, so a follow-up generate_voiceover fills just the gaps. Synchronous and free — the split is deterministic. Returns {block_count}.
| Name | Type | Req | Description |
|---|---|---|---|
| project_id | string | yes | Project ID, as returned by create_project or list_projects |
No output schema declared.
No examples provided.
revise_script Revise script ~188
AI-rewrite a passage of the active script in the project's narrative voice (the same in-editor revise the UI offers). selected_text must appear verbatim in the script; omit it to revise the whole script. `[SCENE: ...]` directions in range are preserved exactly, in place, unless the instruction asks to change them. Synchronous — returns {revised_text}, which is NOT saved: splice it over selected_text (or replace the full script) and call save_script to keep it.
| Name | Type | Req | Description |
|---|---|---|---|
| instruction | string | yes | Natural-language edit instruction, e.g. "make the intro punchier" |
| project_id | string | yes | Project ID, as returned by create_project or list_projects |
| selected_text | string | – | Exact passage to rewrite; must appear verbatim in the active script. Omit to revise the whole script |
No output schema declared.
No examples provided.
rollback_segment_asset Restore previous render ~194
Restore a previously rendered version of a segment's image or video — every regeneration archives the render it replaces (last 5), so a regen that came out worse is reversible for free. The current render is archived in its place, making the rollback itself reversible. The frame/clip pair restales as usual: rolling the image back marks a rendered clip out of date.
| Name | Type | Req | Description |
|---|---|---|---|
| asset_type | string | yes | "image" or "video" — which primary to restore; for a video segment, "image" targets its start frame |
| index | integer | – | Which archived render to restore, 0 = the most recent (each asset's config.history in get_segment_assets lists them) |
| project_id | string | yes | Project ID, as returned by create_project or list_projects |
| segment_number | integer | yes | 1-based segment number, as reported by get_segments |
No output schema declared.
No examples provided.
save_script Save script ~474
Save script text (your own draft, or an edited version of the generated one). Saving UPDATES the active version in place — the previous text is not kept, so show the user the current script (get_script) before overwriting it. New versions are created by generate_script runs, and activate_script_version switches between those. Run scan_script afterwards so assets and voice blocks reflect the new text. Three notations the script text carries, none of them ever spoken: SCENE DIRECTIONS — `[SCENE: <visual direction>]` as its OWN paragraph (blank line before and after; brackets inside a narration paragraph are never matched). It directs the storyboard for the narration that follows, until the next direction, and for that span OUTRANKS the director style's shot choices — say what is on screen, who is in frame, and any on-screen text to bake in verbatim. It does not constrain how many segments the span is cut into. scan_script extracts characters/places named only inside a direction too, under the exact name used. PAUSES — `<break time="1.5s" />` is the ONLY thing that makes the voice pause; ellipses, dashes and paragraph breaks produce no silence. Use ~0.5s between thoughts, ~1.0s at act seams, longer where a card needs reading time; write ONE tag with the total ("4.0s"), never two back to back. narrator_speed changes how fast words are said; breaks add the silence between them. SPEAKERS — a paragraph starting `Name: "..."` assigns that line to a character, who gets their own voice (set_character_voice) and their own shot. Narration with no prefix is the narrator's.
| Name | Type | Req | Description |
|---|---|---|---|
| content | string | yes | 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 | string | yes | Project ID, as returned by create_project or list_projects |
No output schema declared.
No examples provided.
scan_script Scan script ~223
Analyze the active script: extracts character/environment/object assets and splits narration into voice blocks. DESTRUCTIVE on re-run (assets are recreated, not merged — curated descriptions, reference images, and voices are lost; prefer rescan_voice_blocks after script edits). Extraction reads the narration AND any `[SCENE: ...]` directions — a character or place named only inside a direction is still extracted, under the exact name the direction uses. Directions never leak into voice blocks (they ride onto the blocks they govern as staging instead). Review list_assets afterwards and create_asset anything the video needs that neither narration nor directions ever name. Async — returns {job_id}.
| Name | Type | Req | Description |
|---|---|---|---|
| editable_sections | – | – | Per-call prompt section overrides, keyed by section name; see get_section_template("script_scan") |
| model | string | – | Model ID to scan with; empty uses the default (see list_models("script_scan")) |
| project_id | string | yes | Project ID, as returned by create_project or list_projects |
No output schema declared.
No examples provided.
set_character_voice Set character voice ~96
Bind 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). Browse ids with list_voices.
| Name | Type | Req | Description |
|---|---|---|---|
| asset_id | string | yes | Character asset ID, from list_assets |
| voice_id | string | yes | TTS voice ID, from list_voices (use the provider matching the project's voice_tts_provider) |
No output schema declared.
No examples provided.
set_narrator_voice Set narrator voice ~102
Set the project's narrator TTS voice — required before generate_voiceover whenever the script has narration. Browse ids with list_voices. (Character dialogue voices are separate: set_character_voice.)
| Name | Type | Req | Description |
|---|---|---|---|
| project_id | string | yes | Project ID, as returned by create_project or list_projects |
| voice_id | string | yes | TTS voice ID for the narrator, from list_voices (use the provider matching the project's voice_tts_provider) |
No output schema declared.
No examples provided.
set_project_style Set project style ~98
Set the project's default style — the style whose art/narrative/director fields drive its generations. Use after create_style to put a new visual identity into effect, or to switch a project between channel styles.
| Name | Type | Req | Description |
|---|---|---|---|
| project_id | string | yes | Project ID, as returned by create_project or list_projects |
| style_id | string | yes | ID of the style to make the project's default, from create_style or list_styles |
No output schema declared.
No examples provided.
set_provider_key Set provider key ~121
Register a BYOK provider API key (encrypted at rest, BYOK plan only). Jobs whose model belongs to this provider then run on YOUR key and charge 0 credits. Providers: openai, gemini, anthropic, fal, elevenlabs, minimax.
| Name | Type | Req | Description |
|---|---|---|---|
| key | string | yes | The provider API key to register; stored encrypted at rest |
| provider | string | yes | Provider the key belongs to: "openai", "gemini", "anthropic", "fal", "elevenlabs", or "minimax" |
No output schema declared.
No examples provided.
set_segment_continuation Set segment continuation ~163
Make 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). continues_from is that earlier segment's number; pass 0 to clear the link. Regenerate the segment's image afterwards — the reference is applied at generation time.
| Name | Type | Req | Description |
|---|---|---|---|
| continues_from | integer | – | 1-based number of the EARLIER segment whose frame this one continues; pass 0 to clear the link |
| project_id | string | yes | Project ID, as returned by create_project or list_projects |
| segment_number | integer | yes | 1-based number of the segment whose image should continue an earlier frame, as reported by get_segments |
No output schema declared.
No examples provided.
split_segment Split segment ~209
Split a segment at the given time offsets (ms, 1-3 cuts → 2-4 parts). inherit_index picks which resulting part keeps the original creative data — that part keeps its rendered assets, SFX, overlays and continuation links (a rendered clip goes stale; re-render it). The other parts start fresh. Later segments renumber — re-check get_segments before further edits.
| Name | Type | Req | Description |
|---|---|---|---|
| dry_run | boolean | – | True previews the consequences without changing anything |
| inherit_index | integer | – | 0-based index of the resulting part that keeps the original creative data (default: the first part) |
| offsets_ms | array | yes | Cut points as millisecond offsets from the segment start, ascending; 1-3 cuts producing 2-4 parts |
| project_id | string | yes | Project ID, as returned by create_project or list_projects |
| segment_number | integer | yes | 1-based number of the segment to split, as reported by get_segments |
No output schema declared.
No examples provided.
update_asset Update asset ~84
Rename an asset and/or rewrite its description. If the look changed, regenerate its reference image afterwards so renders match.
| Name | Type | Req | Description |
|---|---|---|---|
| asset_id | string | yes | Asset ID, as returned by list_assets or create_asset |
| description | string | – | New generation-facing look description; empty leaves it unchanged |
| name | string | – | New asset name; empty leaves the name unchanged |
No output schema declared.
No examples provided.
update_caption_config Update caption config ~102
Merge a patch into the project's burned-in caption config (keys like enabled, plus styling). Read the current value from get_project (caption_config). Applies at the next export — no rebuild needed.
| Name | Type | Req | Description |
|---|---|---|---|
| caption_config | object | yes | Partial caption config to merge (keys like enabled, plus styling); read the current value from get_project's caption_config |
| project_id | string | yes | Project ID, as returned by create_project or list_projects |
No output schema declared.
No examples provided.
update_music_track Update music track ~108
Tweak a music track. fields keys: name, volume (0-1), loop, start_frame, duration_frames, position, trim_start_frame, trim_end_frame.
| Name | Type | Req | Description |
|---|---|---|---|
| fields | object | yes | 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 |
| track_id | string | yes | Music track ID, from list_music_tracks or add_music_track |
No output schema declared.
No examples provided.
update_project Update project ~301
Patch project fields. Updatable: title, description, sfx_level, video_concept, voice_mix, voice_tts_provider, script_target_minutes, narrator_speed, video_format. (The narrator's TTS voice is NOT here — use set_narrator_voice.) narrator_speed is the narration rate (0.5-2.0, default 1.0; clamped to 0.7-1.2 on ElevenLabs). It changes how fast words are SAID and nothing else — it adds no silence between them, so "slow this down" usually wants `<break>` tags in the script text too (see save_script). video_format ('landscape' | 'portrait') is only changeable until the storyboard exists — after that the shots and overlays are composed for the current frame and the patch 409s. Switch it before generate_storyboard.
| Name | Type | Req | Description |
|---|---|---|---|
| fields | object | yes | 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… |
| project_id | string | yes | Project ID, as returned by create_project or list_projects |
No output schema declared.
No examples provided.
update_segment_content Rewrite segment content ~211
Rewrite 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. The visual assets reset to not_started: re-render them afterwards (generate_segments or regenerate_segment_asset). When you already know the exact prompt text, use update_segment_prompts instead — it writes your words verbatim with no LLM in the loop.
| Name | Type | Req | Description |
|---|---|---|---|
| dry_run | boolean | – | True previews the consequences (assets recreated, rendered assets lost) without changing anything |
| project_id | string | yes | Project ID, as returned by create_project or list_projects |
| segment_number | integer | yes | 1-based segment number, as reported by get_segments |
| user_input | string | yes | Natural-language feedback describing the change to this shot, e.g. "make this a close-up" or "show the machine from above" |
No output schema declared.
No examples provided.
update_segment_prompts Update segment prompts ~324
Set one segment's final prompts VERBATIM — no LLM rewrite. The direct counterpart to update_segment_content: your text is written as-is to the segment's creative direction and to the matching asset configs the renderer reads. Asset statuses are untouched: an already-rendered asset stays complete, and generate_segments skips complete assets — so to see the edit rendered, call regenerate_segment_asset on that segment (the ONLY re-render path after a prompt edit). Continuation links, SFX, and overlays are untouched. Pass only the prompt(s) you want to change; media_queries edits a fetched segment's stock-search text the same way.
| Name | Type | Req | Description |
|---|---|---|---|
| image_prompt | string | – | New scene-image prompt (image segments; also the retrieval-miss fallback on real-photo segments). Empty leaves it unchanged. |
| media_queries | – | – | 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 s… |
| project_id | string | yes | Project ID, as returned by create_project or list_projects |
| segment_number | integer | yes | 1-based segment number, as reported by get_segments |
| start_frame_prompt | string | – | New start-frame prompt (generated video segments). Empty leaves it unchanged. |
| video_prompt | string | – | New motion/video prompt (video segments; also the retrieval-miss fallback on real b-roll). Empty leaves it unchanged. |
No output schema declared.
No examples provided.
update_style_fields Update style fields ~270
Hand-edit a style's analyzed fields after reviewing them — e.g. tighten the art_style wording or adjust the director_style pacing rules. `fields` is a PATCH, merged over what the style already has: send only the keys you are changing and leave the rest out — there is no need to read the whole dict back with get_style and round-trip it. Pass {key: null} to delete a user-added key (the well-known art_style / narrative_style / director_style / script_prompt cannot be deleted, only rewritten, and cannot be set empty). Editing fields does NOT trigger re-analysis, so your edits stick. Real media is switched by the literal `@real-media` tag inside director_style's prose: add the tag plus prose describing when/how/how much real media appears to turn it on; remove the tag (or its passage) to turn it off.
| Name | Type | Req | Description |
|---|---|---|---|
| fields | object | yes | Sparse patch of style fields, shaped {key: {"value": str, "applies_to": [...]}} — send ONLY the keys you are changing; unlisted keys keep their current value |
| style_id | string | yes | Style ID, as returned by create_style or list_styles |
No output schema declared.
No examples provided.
update_style_references Update style references ~296
Replace a style's reference set — add or remove references without touching the analyzed fields. FULL REPLACE: read the current list with get_style first and send every entry you're keeping plus the changes. New entries are youtube (video link, or a channel link/@handle) or text; new image/video FILES can only be added via the multipart REST endpoint PATCH /styles/{id}, but existing ones round-trip fine. Optional `contributes_to` scopes an entry to a subset of the analyzed fields (art_style / narrative_style / director_style); omit it for all three. Saving does NOT re-run analysis: the response's `inputs_stale` flips true and the analyzed fields keep their current text until the user asks for analyze_style (which rewrites them from the new set).
| Name | Type | Req | Description |
|---|---|---|---|
| inputs | array | yes | 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",… |
| style_id | string | yes | Style ID, as returned by create_style or list_styles |
No output schema declared.
No examples provided.
update_voice_block Update voice block ~116
Override one voice block's voice or playback volume (block ids from list_voice_blocks). Re-run generate_voiceover for the block afterwards if you changed its voice — existing audio is not regenerated automatically.
| Name | Type | Req | Description |
|---|---|---|---|
| voice_block_id | string | yes | Voice block ID, from list_voice_blocks |
| voice_id | string | – | New TTS voice ID for this block, from list_voices; empty leaves the voice unchanged |
| volume | – | – | Playback volume for this block, 0-1; omit to leave unchanged |
No output schema declared.
No examples provided.
view_image View image ~106
Fetch a rendered Framesail image so you (and your user) can SEE it — pass a URL from get_segment_assets, get_style, or asset endpoints. Returns the image inline. Only Framesail media URLs are allowed.
| Name | Type | Req | Description |
|---|---|---|---|
| url | string | yes | Public Framesail media URL to fetch — 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 |
No output schema declared.
No examples provided.
whoami Who am I ~46
Verify the connection: the account email and plan behind the current credential. Call once after connecting — before creating anything — to confirm you're on the right account; costs nothing.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
What is the com.framesail/framesail MCP server?
com.framesail/framesail is an MCP server listed in the public MCP registry as com.framesail/framesail. Create long-form YouTube videos end to end: script, storyboard, voiceover, final MP4. This page covers its hosted endpoint (https://api.framesail.com/mcp).
Is the com.framesail/framesail MCP server safe to use?
com.framesail/framesail scores 92 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the com.framesail/framesail MCP server expose?
com.framesail/framesail exposes 72 tools: list_channels, create_channel, list_projects, create_project, get_project, and 67 more. Their descriptions and schemas cost roughly 11,710 tokens of context every time the server is loaded.
Does the com.framesail/framesail MCP server require authentication?
Yes. com.framesail/framesail asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.
Is the com.framesail/framesail MCP server still maintained?
com.framesail/framesail is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.