com.framesail/framesail
REMOTE · API.FRAMESAIL.COM · SCANNED AUG 3
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 →
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 Usability73
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 9752 tokens (~143/item across 68 items; 68 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 Management27
- Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
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
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.
remote · api.framesail.com
claude mcp add --transport http com-framesail-framesail 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": {
"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.
- 2 Aug 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.
- 31 Jul 26 +5
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 29 Jul 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.
- 28 Jul 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.
- 27 Jul 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
- 26 Jul 26 73
First indexed and scored.
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 3 Aug 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=YE2,O=Let's Encrypt,C=US | 20 Jun 2026 | 18 Sept 2026 | ECDSA 256 | ECDSA-SHA384 | 5c6b1cef4a9c696c389c6d9edab9fff5d2e |
| SANs: api.framesail.com | ||||||
| CN=YE2,O=Let's Encrypt,C=US (CA) | CN=Root YE,O=ISRG,C=US | 3 Sept 2025 | 2 Sept 2028 | ECDSA 384 | ECDSA-SHA384 | 4df3b15dd6c0784c507cd37b58e6f115 |
| 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 |
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 |
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.
revise_script Revise script ~160
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. 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.
save_script Save script ~98
Save script text (your own draft, or an edited version of the generated one — saving creates a new version, old versions are kept). Run scan_script afterwards so assets and voice blocks reflect the new text.
| Name | Type | Req | Description |
|---|---|---|---|
| content | string | yes | Full script text to save as a new version; plain prose narration, optionally with scene headings |
| 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 ~141
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). 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 ~160
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. Later segments renumber — re-check get_segments before further edits.
| Name | Type | Req | Description |
|---|---|---|---|
| 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 ~132
Patch project fields. Updatable: title, description, asset_mix, sfx_level, video_concept, voice_mix, voice_tts_provider, script_target_minutes, narrator_speed. (The narrator's TTS voice is NOT here — use set_narrator_voice.)
| Name | Type | Req | Description |
|---|---|---|---|
| fields | object | yes | Partial dict of fields to patch; allowed keys: title, description, asset_mix, sfx_level, video_concept, voice_mix, voice_tts_provider, script_target_minutes, narrator_speed |
| 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 ~174
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). For a precise prompt tweak with no rewrite, use regenerate_segment_asset with editable_sections instead.
| Name | Type | Req | Description |
|---|---|---|---|
| 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_style_fields Update style fields ~156
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 the FULL flat dict to write: {key: {"value": str, "applies_to": [...]}} (fetch with get_style, modify, send back). Editing fields does NOT trigger re-analysis, so your edits stick.
| Name | Type | Req | Description |
|---|---|---|---|
| fields | object | yes | FULL flat dict of analyzed fields to write, shaped {key: {"value": str, "applies_to": [...]}} — fetch with get_style, modify, send the whole dict back |
| 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.