Create long-form YouTube videos end to end: script, storyboard, voiceover, and final MP4.
Do not connect
A critical issue was found. Do not connect this server as-is.
Scanned 7 days ago Due for re-check
A server can change after it's graded. Re-run the automated scan to refresh this report.
This grade is deterministic and reproducible: the same server surface always yields the same grade under a given algorithm version. It is a real automated assessment computed by the MCPGrade engine from what the probe actually observed — not a fabricated or opinion score. It is not a manual human pentest, so it can miss context-specific risks.
Every signal below was measured directly by the automated probe. The grade is derived only from evidence like this — nothing is assumed.
The framesail MCP server exposes 68 tools, focused primarily on AI and developer capabilities. Its published description reads: "Create long-form YouTube videos end to end: script, storyboard, voiceover, and final MP4". It communicates over Streamable HTTP using the 2025-06-18 protocol revision, and does not require authorization to connect. MCPGrade currently rates framesail F — a critical issue was found and the server should not be connected as-is. Its most notable findings include "Cross-tool shadowing" and "Cross-tool shadowing". This report is a deterministic, reproducible automated assessment: the same observed surface always yields the same grade under a given algorithm version, and it is refreshed as new scans arrive and free to read — but it is not a substitute for a manual human security review. Always re-check framesail's advertised tools, transport security, and authorization posture before connecting an autonomous agent or sharing sensitive context with it.
Add framesail to an MCP client using the endpoint below. Review the grade and findings above before granting an autonomous agent access.
MCP endpoint
https://api.framesail.com/mcpStreamable HTTP transport. This is the MCP endpoint, not a website — paste it into your MCP client server list rather than a browser.
Captured passively during the read-only scan. Click any value to find servers that match it.
The tools this server advertises via tools/list — names, purposes, and the parameters each accepts, exactly as enumerated read-only.
List your channels. Every project lives in a channel, which owns the reusable styles (art/narrative/director) that drive generation.
Create a new channel — the container for projects and their reusable styles. Use when the user wants a fresh creative identity rather than adding to an existing channel.
List projects in a channel.
Sorted worst-first. Each finding shows its severity, what it means, its OWASP MCP Top-10 mapping, and a recommended fix — the check id links to the exact methodology row that produced it.
tool: update_project
A tool description tries to alter the model’s use of another tool.
NOT here — use set_narrator_voice.) video_format ('landscape' | 'portrait')RecommendationDescriptions must describe only their own tool.
tool: set_project_style
A tool description tries to alter the model’s use of another tool.
ions. Use after create_style to put a new visual identity into effect, oRecommendationDescriptions must describe only their own tool.
tool: update_caption_config
A tool description tries to alter the model’s use of another tool.
rent value from get_project (caption_config). Applies at the next exporRecommendationDescriptions must describe only their own tool.
tool: get_pipeline_progress
A tool description tries to alter the model’s use of another tool.
ject, after any await_jobs, or whenever you're unsure where a video stRecommendationDescriptions must describe only their own tool.
tool: get_workflow_status
A tool description tries to alter the model’s use of another tool.
tatuses (or get_pipeline_progress), never by counting jobs. Prefer await_jobs oveRecommendationDescriptions must describe only their own tool.
tool: await_jobs
A tool description tries to alter the model’s use of another tool.
f polling get_workflow_status yourself. Returns {done, jobs}. If done=RecommendationDescriptions must describe only their own tool.
tool: get_section_template
A tool description tries to alter the model’s use of another tool.
ions (jobs: script, script_scan, storyboard, segment_image, segment_RecommendationDescriptions must describe only their own tool.
tool: list_models
A tool description tries to alter the model’s use of another tool.
tts_provider or generate_voiceover rejects it.RecommendationDescriptions must describe only their own tool.
tool: generate_script
A tool description tries to alter the model’s use of another tool.
{job_id}; poll get_workflow_status.RecommendationDescriptions must describe only their own tool.
tool: get_script
A tool description tries to alter the model’s use of another tool.
t -> discuss -> save_script) is the expected workflow when the user wanRecommendationDescriptions must describe only their own tool.
tool: save_script
A tool description tries to alter the model’s use of another tool.
are kept). Run scan_script afterwards so assets and voice blocks refleRecommendationDescriptions must describe only their own tool.
tool: revise_script
A tool description tries to alter the model’s use of another tool.
cript) and call save_script to keep it.RecommendationDescriptions must describe only their own tool.
tool: activate_script_version
A tool description tries to alter the model’s use of another tool.
s come from get_script's version list — every save_script creates one)RecommendationDescriptions must describe only their own tool.
tool: scan_script
A tool description tries to alter the model’s use of another tool.
re lost; prefer rescan_voice_blocks after script edits). Async — returns {job_iRecommendationDescriptions must describe only their own tool.
tool: list_assets
A tool description tries to alter the model’s use of another tool.
ts extracted by scan_script — characters, environments, objects. Each hRecommendationDescriptions must describe only their own tool.
tool: generate_asset_reference
A tool description tries to alter the model’s use of another tool.
s, then one await_jobs). Async — the job writes the image onto the assRecommendationDescriptions must describe only their own tool.
tool: set_character_voice
A tool description tries to alter the model’s use of another tool.
Browse ids with list_voices.RecommendationDescriptions must describe only their own tool.
tool: list_voices
A tool description tries to alter the model’s use of another tool.
s_provider (see get_project) so picked ids work with its engine.RecommendationDescriptions must describe only their own tool.
tool: set_narrator_voice
A tool description tries to alter the model’s use of another tool.
s are separate: set_character_voice.)RecommendationDescriptions must describe only their own tool.
tool: update_voice_block
A tool description tries to alter the model’s use of another tool.
ck's voice or playback volume (block ids from list_voice_blocks). ReRecommendationDescriptions must describe only their own tool.
tool: rescan_voice_blocks
A tool description tries to alter the model’s use of another tool.
alternative to scan_script after a script edit. Existing audio is supeRecommendationDescriptions must describe only their own tool.
tool: generate_voiceover
A tool description tries to alter the model’s use of another tool.
block (see get_section_template("voice_block") and list_models("voice_block")).RecommendationDescriptions must describe only their own tool.
tool: generate_storyboard
A tool description tries to alter the model’s use of another tool.
ic percentages, update_project) — the storyboard plans against it and videRecommendationDescriptions must describe only their own tool.
tool: get_segments
A tool description tries to alter the model’s use of another tool.
djust them with set_segment_continuation.RecommendationDescriptions must describe only their own tool.
tool: get_segment_assets
A tool description tries to alter the model’s use of another tool.
s public_url to view_image to actually look at it.RecommendationDescriptions must describe only their own tool.
tool: regenerate_segment_asset
A tool description tries to alter the model’s use of another tool.
get_section_template("segment_image")), or tweak settings (e.g. imageRecommendationDescriptions must describe only their own tool.
tool: change_segment_type
A tool description tries to alter the model’s use of another tool.
.RecommendationDescriptions must describe only their own tool.
tool: update_segment_content
A tool description tries to alter the model’s use of another tool.
segments or regenerate_segment_asset). For a precise prompt tweak with no rewrite,RecommendationDescriptions must describe only their own tool.
tool: split_segment
A tool description tries to alter the model’s use of another tool.
mber — re-check get_segments before further edits.RecommendationDescriptions must describe only their own tool.
tool: combine_segments
A tool description tries to alter the model’s use of another tool.
mber — re-check get_segments before further edits.RecommendationDescriptions must describe only their own tool.
tool: add_segment_sfx
A tool description tries to alter the model’s use of another tool.
="sfx"). Re-run build_scenes to get it onto the timeline.RecommendationDescriptions must describe only their own tool.
tool: remove_segment_sfx
A tool description tries to alter the model’s use of another tool.
me shown by get_segment_assets).RecommendationDescriptions must describe only their own tool.
tool: generate_segments
A tool description tries to alter the model’s use of another tool.
job per asset; await_jobs until all complete.RecommendationDescriptions must describe only their own tool.
tool: generate_segments
The text tells the model WHEN to call this tool relative to others ("always call first", "before any other tool", "chain to X tool") — a toxic-flow injection that hijacks the agent’s orchestration rather than describing the tool.
ering anything; ALWAYS run true first and get user approval before the real run","titRecommendationTool metadata must describe only the tool, never sequence the agent’s calls.
tool: director_note
A tool description tries to alter the model’s use of another tool.
id from a fresh list_scenes call. Scene durations are locked to the narRecommendationDescriptions must describe only their own tool.
tool: project_director_note
A tool description tries to alter the model’s use of another tool.
lts; re-run export_video afterwards to see changes in the final render.RecommendationDescriptions must describe only their own tool.
tool: export_video
A tool description tries to alter the model’s use of another tool.
r. Async — poll get_workflow_status for the video_export job, then call get_vidRecommendationDescriptions must describe only their own tool.
tool: get_style
A tool description tries to alter the model’s use of another tool.
e-tune with update_style_fields.RecommendationDescriptions must describe only their own tool.
tool: update_style_fields
A tool description tries to alter the model’s use of another tool.
(fetch with get_style, modify, send back). Editing fields does NOT trRecommendationDescriptions must describe only their own tool.
tool: list_style_presets
A tool description tries to alter the model’s use of another tool.
the style row (get_style shows it after creation).RecommendationDescriptions must describe only their own tool.
tool: create_style
A tool description tries to alter the model’s use of another tool.
tor fields: await_jobs(style_id=...) before using the style. (Image/viRecommendationDescriptions must describe only their own tool.
tool: analyze_style
A tool description tries to alter the model’s use of another tool.
s). Async — await_jobs(style_id=...) until the style_analysis job compRecommendationDescriptions must describe only their own tool.
tool: generate_style_template
A tool description tries to alter the model’s use of another tool.
render. Async — await_jobs(style_id=...), then get_style.RecommendationDescriptions must describe only their own tool.
tool: delete_style
A tool description tries to alter the model’s use of another tool.
first with set_project_style.RecommendationDescriptions must describe only their own tool.
tool: get_credit_balance
A tool description tries to alter the model’s use of another tool.
ds of credits — generate_segments dry_run gives the estimate). Jobs covered bRecommendationDescriptions must describe only their own tool.
tool: browse_audio_library
A tool description tries to alter the model’s use of another tool.
sic_track / add_segment_sfx.RecommendationDescriptions must describe only their own tool.
tool: add_music_track
A tool description tries to alter the model’s use of another tool.
asked); re-run export_video to hear it.RecommendationDescriptions must describe only their own tool.
tool: view_image
A tool exposes a free-text/webhook/feedback parameter with no honest purpose — a classic exfil channel.
parameter "url"RecommendationRemove side-channel parameters; constrain tool inputs.
tool: view_image
A tool description tries to alter the model’s use of another tool.
pass a URL from get_segment_assets, get_style, or asset endpoints. Returns theRecommendationDescriptions must describe only their own tool.
tool: (server instructions)
A tool exposes a free-text/webhook/feedback parameter with no honest purpose — a classic exfil channel.
ur own provider API keys (0 credits) when a key for that model's provideRecommendationRemove side-channel parameters; constrain tool inputs.
tool: (server instructions)
A tool description tries to alter the model’s use of another tool.
de per-call via editable_sections (see get_section_template for what eacRecommendationDescriptions must describe only their own tool.
The server accepts tool enumeration (and likely invocation) with no authentication.
RecommendationRequire OAuth 2.1 authorization for any server exposing non-public tools.
tool: delete_project
The server advertises open-world / broadly-scoped capabilities.
annotations.destructiveHint = trueRecommendationScope tools to the minimum needed.
tool: scan_script
The server advertises open-world / broadly-scoped capabilities.
annotations.destructiveHint = trueRecommendationScope tools to the minimum needed.
tool: delete_asset
The server advertises open-world / broadly-scoped capabilities.
annotations.destructiveHint = trueRecommendationScope tools to the minimum needed.
tool: rescan_voice_blocks
The server advertises open-world / broadly-scoped capabilities.
annotations.destructiveHint = trueRecommendationScope tools to the minimum needed.
tool: generate_storyboard
The server advertises open-world / broadly-scoped capabilities.
annotations.destructiveHint = trueRecommendationScope tools to the minimum needed.
tool: change_segment_type
The server advertises open-world / broadly-scoped capabilities.
annotations.destructiveHint = trueRecommendationScope tools to the minimum needed.
tool: update_segment_content
The server advertises open-world / broadly-scoped capabilities.
annotations.destructiveHint = trueRecommendationScope tools to the minimum needed.
tool: split_segment
The server advertises open-world / broadly-scoped capabilities.
annotations.destructiveHint = trueRecommendationScope tools to the minimum needed.
tool: combine_segments
The server advertises open-world / broadly-scoped capabilities.
annotations.destructiveHint = trueRecommendationScope tools to the minimum needed.
tool: remove_segment_sfx
The server advertises open-world / broadly-scoped capabilities.
annotations.destructiveHint = trueRecommendationScope tools to the minimum needed.
tool: build_scenes
The server advertises open-world / broadly-scoped capabilities.
annotations.destructiveHint = trueRecommendationScope tools to the minimum needed.
tool: update_style_fields
The server advertises open-world / broadly-scoped capabilities.
annotations.destructiveHint = trueRecommendationScope tools to the minimum needed.
tool: analyze_style
The server advertises open-world / broadly-scoped capabilities.
annotations.destructiveHint = trueRecommendationScope tools to the minimum needed.
tool: delete_style
The server advertises open-world / broadly-scoped capabilities.
annotations.destructiveHint = trueRecommendationScope tools to the minimum needed.
tool: remove_music_track
The server advertises open-world / broadly-scoped capabilities.
annotations.destructiveHint = trueRecommendationScope tools to the minimum needed.
Vantaj uptime monitoring via MCP — manage monitors, heartbeats, incidents, and status pages.
Unified gateway to Algeria's TKAWEN ecosystem: commerce, certification, and AI tools.
Provides access to the Cohereon Doctrine AI safety framework with governance components, tiered access, and agent onboarding.
Agentic rails for complex workflows with receipts, fees, and MCP tool access.
Structural TC39 spec lookup for ECMA-262 and ECMA-402 in AI agents, SHA-pinned and offline-first.
Structural TC39 spec lookup for ECMA-262 and ECMA-402 in AI agents, SHA-pinned and offline-first.
Create a project. The description (the video concept/topic) seeds script generation, so write a meaningful one. Pass video_format='portrait' for a vertical video — every shot, overlay, and the export
Fetch a project row — settings, voice config, default style, export URL.
Patch project fields. Updatable: title, description, asset_mix, sfx_level, video_concept, voice_mix, voice_tts_provider, script_target_minutes, narrator_speed, video_format. (The narrator's TTS voice
Permanently delete a project and everything in it (script versions, assets, voiceover, segments, renders). Irreversible — confirm with your user first.
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 c
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.
THE resume/orientation tool: one call returns every pipeline step's state (script -> scan -> reference_images -> voices -> voiceover -> style_templates -> storyboard -> segment_assets -> scenes -> exp
Poll 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. A step is done when its
Block (server-side) until the scope has no pending/running jobs, or the timeout passes — use this instead of polling get_workflow_status yourself. Returns {done, jobs}. If done=false the work is still
Inspect 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, ...). Sections marke
List 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.g. image quality/orientation,
Generate the project's script from its description/concept and the channel's narrative style. Async — returns {job_id}; poll get_workflow_status.
Read the active script's full text + the version list. Use this to show the script to your user for review/feedback before scan_script — the review-edit-resave loop (get_script -> discuss -> save_scri
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 ne
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 scri
Switch the project's active script to another saved version (ids come from get_script's version list — every save_script creates one). Re-run scan_script / rescan_voice_blocks afterwards if the text d
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, referenc
List the project's assets extracted by scan_script — characters, environments, objects. Each has a description (the spec every shot uses to render it — surfaced top-level here; the raw row nests it at
Manually add a character/environment/object the scan missed. asset_type: "character" | "environment" | "object". The description is the generation-facing spec of its look — be specific.
Rename an asset and/or rewrite its description. If the look changed, regenerate its reference image afterwards so renders match.
Delete a project asset (e.g. one the scan over-extracted).
Render an asset's reference image in the channel's art style — the visual anchor that keeps a character/environment looking identical across every shot. EVERY character, environment, and object asset
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.
List available TTS voices (id, label, preview audio URL) for a provider: "minimax" (default engine) or "elevenlabs". Match the project's voice_tts_provider (see get_project) so picked ids work with it
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.)
List the project's voice blocks (per-speaker narration chunks) with their audio status and assigned voices.
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
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. Existing audio is superseded by t
Generate TTS audio for the project's voice blocks. Without voice_block_ids it fills gaps: only blocks with no audio yet run, so re-calling it is always safe (already-generated and currently-generating
Plan the full visual storyboard: segments, shot pacing, image/video prompts, overlays, continuation chains — driven by the channel's director and art styles. Requires voiceover to exist (timing comes
List the storyboard's segments (narration span, type, duration, creative direction). The 1-based segment_number is the handle every segment tool takes (update/split/combine/continuation/regenerate) —
List 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.
Regenerate a segment's primary image or video with optional overrides — the API equivalent of the editor's expert drawer. asset_type: "image" | "video" (for a video segment, "image" targets its start
Change a segment's visual type: "image" | "video" | "overlay_scene". carry_frame=true reuses the already-rendered image as the video start frame (or vice versa) instead of recreating it.
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 pres
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
Merge a segment with an adjacent one (segment numbers must be neighbors). keep: "this" | "other" — whose creative data survives. Later segments renumber — re-check get_segments before further edits.
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 ear
Attach a sound effect from the audio library to a segment (find track ids via browse_audio_library with category="sfx"). Re-run build_scenes to get it onto the timeline.
Remove a sound effect from a segment. With one SFX attached, no name needed; with several, pass sfx_name (the asset name shown by get_segment_assets).
Render every actionable segment asset (images, video clips, overlays) across the project, in dependency order. THE most expensive call in the pipeline: ALWAYS dry_run=true first, show your user the es
Compile segments + assets + voiceover into the editor/render timeline (scenes). Run after segment assets are complete, before export.
List the project's scenes (composition layers, durations, layout).
Edit ONE scene with a natural-language note (the same director chat the editor UI uses): move/restyle/add/remove layers and overlays, retime, etc. Synchronous — returns the applied mutations + updated
Apply a project-WIDE director note ("make the intro punchier", "all captions bigger", "tighten pacing in the back half"). A routing pass picks only the scenes the note applies to and edits each one. S
Render the final MP4 (Remotion). Fetches the current timeline and queues the render. Async — poll get_workflow_status for the video_export job, then call get_video_url.
Download URL for the most recent completed export.
List the channel's style rows (variable groups). Styles hold the art_style / narrative_style / director_style / script_prompt fields that drive every generation step, plus any custom @variables.
Fetch one style row — its inputs (reference material), analyzed fields (art_style, narrative_style, director_style, script_prompt, ...), and `templates`: {"character": url|null, "environment": url|nul
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, "
The curated preset catalog for the no-AI style creation path, grouped by axis (art_style / narrative_style / director_style). Show the user the labels + descriptions and let THEM pick one per axis — d
Create a style. Two mutually exclusive paths: References (best): inputs=[{"input_type": "youtube" | "text", "value": "<url or description>"}] — YouTube videos are watched (a channel link or @handle re
Re-run style analysis (after changing a style's inputs). Async — await_jobs(style_id=...) until the style_analysis job completes.
Render 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 t
Delete a style (e.g. a failed analysis experiment). Don't delete a style that projects still use as their default — rebind them first with set_project_style.
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, el
List registered BYOK providers (masked — only the last 4 characters).
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.
Current credit balance + plan info. Check before expensive steps (a full segment render can cost hundreds of credits — generate_segments dry_run gives the estimate). Jobs covered by a BYOK provider ke
Browse the audio library for background music and sound effects. category: "music" | "sfx". Returns track ids for add_music_track / add_segment_sfx.
List the project's background music tracks (volume, loop, timing).
Add background music to the project from the audio library (find track ids with browse_audio_library, category="music"). Defaults loop the track under the whole video at bed level (volume 0.12 ≈ -18.4
Tweak a music track. fields keys: name, volume (0-1), loop, start_frame, duration_frames, position, trim_start_frame, trim_end_frame.
Remove a music track from the project.
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.