Make Renderforest AI videos from your chat
The Renderforest MCP connector lets Claude, ChatGPT and other MCP clients plan, price and generate AI videos in your own Renderforest account: single clips, multi-scene stories with narration, and music videos. You describe the video; the assistant handles the tools and hands you the finished result.
https://mcp.renderforest.com/mcpOverview
Renderforest is an online video, animation and design platform. This connector exposes its generative-AI video and image pipeline over the Model Context Protocol, so an AI assistant can act on your behalf inside your Renderforest account.
Single clips
Text-to-video or image-to-video, up to the chosen model's maximum clip length, in any supported aspect ratio and quality.
Multi-scene stories
Explainers, shorts, animations and ads: the brief is split into scenes with a shared scenario and consistent characters, optionally narrated, then composited into one video.
Music videos
Provide a track and the visuals are cut to it, using the trimmed section you choose.
AI images
Generate one to four stills from a prompt with the image model of your choice, preview them in the chat, and reuse them as first frames or references for a video.
Your own images
Upload reference images from the chat and use them as first frames, last frames or style references.
Everything the connector creates is stored in your Renderforest account and can be opened in the Renderforest editor. Generation uses AI credits from your plan; read-only tools never charge anything, and the assistant always has an exact price available before it starts a generation.
How it works. The connector is a thin gateway in front of Renderforest's own APIs. It holds no video logic and no database of its own: each tool call is forwarded to the Renderforest service that owns that operation, using an access token bound to the signed-in user.
Quick start
You need a Renderforest account (free or paid). Sign up at www.renderforest.com if you do not have one. Connecting takes about a minute.
Claude (web and desktop)
- Open Settings → Connectors and choose Add custom connector (or pick Renderforest from the connector directory if listed).
- Paste the server URL
https://mcp.renderforest.com/mcpand confirm. - Click Connect. A Renderforest page opens: sign in if needed, then choose Allow.
- Back in the chat, enable the connector and ask for a video, for example "Make a 10-second vertical clip of a surfer at sunset."
Claude Code
claude mcp add --transport http renderforest https://mcp.renderforest.com/mcp
# then, inside a session:
/mcp # pick "renderforest" and complete the sign-in in your browser
ChatGPT
- Turn on Developer mode (Settings → Apps & Connectors → Advanced settings). Business and Enterprise workspaces may need an admin to enable it.
- Choose Create under Connectors, give it the name Renderforest and the MCP server URL
https://mcp.renderforest.com/mcp. - Select OAuth as the authentication method. No client ID or secret is needed: the server registers the client automatically.
- Complete the Renderforest sign-in and consent screen, then enable the connector in a chat.
Other MCP clients
Any client that supports Streamable HTTP with OAuth 2.1 discovery works. To inspect the server interactively:
npx @modelcontextprotocol/inspector --transport http --server-url https://mcp.renderforest.com/mcp
The inspector discovers the authorization server from the WWW-Authenticate challenge, registers itself and walks you through the same consent page.
Authentication
Every connection is authorized by the user, for the user. The connector is a standards-compliant OAuth 2.1 authorization server and resource server; there are no API keys to manage and no shared credentials.
Flow
- The client calls
POST https://mcp.renderforest.com/mcpwithout a token and receives401with aWWW-Authenticatechallenge pointing at the protected-resource metadata. - It reads the metadata documents and registers itself with dynamic client registration (RFC 7591). Only public clients are issued; redirect URIs must belong to an allow-listed host.
- It starts the authorization code flow with PKCE (S256). The user signs in to Renderforest (if not already) and sees a consent page listing exactly what will be granted.
- On Allow, a one-time code is returned and exchanged for an access token and a refresh token. Codes and refresh tokens are single-use.
- Tool calls carry the access token as
Authorization: Bearer. Refreshing rotates the refresh token and can only narrow the granted scope, never widen it.
| Endpoint | URL |
|---|---|
| MCP endpoint (resource) | https://mcp.renderforest.com/mcp |
| Authorization server metadata | https://mcp.renderforest.com/.well-known/oauth-authorization-server |
| Protected resource metadata | https://mcp.renderforest.com/.well-known/oauth-protected-resource/mcp |
| Dynamic client registration | https://mcp.renderforest.com/register |
| Authorization | https://mcp.renderforest.com/authorize |
| Token | https://mcp.renderforest.com/token |
| Revocation (RFC 7009) | https://mcp.renderforest.com/revoke |
Scope and lifetimes
renderforest:videos- Generating AI videos in the user's account, spending the user's AI credits when a generation is started, and reading the status and results of those generations.
renderforest:images- Generating AI images in the user's account, spending AI credits when a generation is started, and reading the user's generated images.
- What no scope grants
- Billing details, account settings, other users, or anything outside the tools listed on this page. Both scopes are granted together, whichever subset a client requests; connections authorized before the images scope existed keep working unchanged.
- Access token
- Opaque, valid for 1 hour.
- Refresh token
- Valid for 30 days of inactivity; rotated on every use.
- Registered clients
- Kept for 90 days after last use, then expire automatically.
Disconnecting
Remove or disconnect the connector in your assistant's settings. Compliant clients call the revocation endpoint, which invalidates the token immediately; otherwise the access token lapses within the hour and the refresh token is never used again. Generated videos stay in your Renderforest account.
Tools reference
The connector exposes 23 tools to the assistant. Every tool carries a title and access annotations, so hosts can run read-only tools without a prompt and always confirm write tools with you. The table and the details below are generated from the live tool definitions of this server. Internal widget-only tools (hidden from the assistant by the host) are not listed.
| Tool | Access | Cost | Purpose |
|---|---|---|---|
analyze_prompt | Read-only | No charge | Turn a video idea into recommended settings (type, style, duration, aspect ratio, voiceover) with an exact cost estimate. |
list_video_models | Read-only | No charge | List the AI video models, their durations, qualities, costs and capabilities. |
list_tts_voices | Read-only | No charge | List voiceover languages and voices for narrated videos. |
get_credit_balance | Read-only | No charge | Read the user's current AI credit balance. |
estimate_video_cost | Read-only | No charge | Price a single clip before generating it. Charges nothing. |
generate_video | Write | Spends AI credits | Generate one AI video clip from text, or animate an image. |
get_video_status | Read-only | No charge | Wait on a running generation job and return its progress or result. |
show_video | Read-only | No charge | Show a finished video in an inline player (hosts with interactive widgets). |
submit_feedback | Write | No charge | Send the user's own feedback about a finished video to the Renderforest team. |
estimate_story_cost | Read-only | No charge | Price a multi-scene story before generating it. Charges nothing. |
generate_video_story | Write | Spends AI credits | Generate a multi-scene story, explainer, animation or music video and render it as one video. |
get_video_project | Read-only | No charge | Inspect a generated project's scenes to pick one to edit or extend. |
export_video | Write | Plan-gated | Re-render an existing story at a different quality. No AI credits; 1080p+ needs a paid plan. |
add_scene | Write | Spends AI credits | Generate an additional scene clip for an existing project. |
edit_scene | Write · replaces content | Spends AI credits | Regenerate one scene of an existing project from a new prompt (replaces that scene). |
upload_media | Read-only | No charge | Open the in-chat upload widget so the user can add their own images and audio to their Renderforest library. |
get_uploaded_media | Read-only | No charge | Check whether the user finished uploading and fetch the resulting image URLs. |
list_image_models | Read-only | No charge | List AI image models, their per-image cost, aspect ratios and the available styles. |
generate_image | Write | Spends AI credits | Generate 1–4 AI images from a prompt (optionally with reference images). Also the "preview a still before the video" step. |
get_image_project | Read-only | No charge | Read one image generation and its image URLs. |
list_ai_images | Read-only | No charge | Browse the user's previously generated AI images. |
list_videos | Read-only | No charge | Browse the user's short AI clips or long story / editor projects (the assistant asks which). |
show_media | Read-only | No charge | Show images or videos in an inline gallery (hosts with interactive widgets). |
Plan and estimate
Read-only. Nothing here spends credits — these tools exist so the assistant can quote a price and confirm settings before anything is generated.
analyze_promptAnalyze video idea
Read-onlyNo charge
Turn a video idea into recommended settings (type, style, duration, aspect ratio, voiceover) with an exact cost estimate.
Description shown to the assistant
Analyze a video idea and suggest a video type (creative direction), style, duration (seconds), aspect ratio and whether voiceover fits, plus per-second pricing. START HERE for any longer, multi-scene, narrative, or animated video (a story/short/explainer/animation of more than a single short clip). The response is designed to be ALL you need before generating: costEstimate (exact credits + the user's balance + affordability for the suggested parameters), videoModelInfo, and modelOptions — so in the standard flow you do NOT need list_video_models, get_credit_balance or estimate_story_cost. IMPORTANT — the model and style choices belong to the user: videoModel is only the platform default (modelOptions lists every story-capable model with best-for text, indicative Standard-generation credits — estimatedCredits, with includedInPlan:true and no video credits where the user’s plan includes the model — and the Priority-generation price, fastTrackEstimatedCredits), and suggestedStyle is only the analyzer's pick (styleOptions lists EVERY available visual style, the pick marked isSuggested). Present both choices in this exact pattern before generating: (1) as TEXT, list ALL styles by name with a one-line description each, and the 2-4 fitting models with credits, so the user sees the complete catalogs; (2) if your host supports clickable options (a question/choice UI), ALSO offer buttons — style: the suggested one + the 2-3 best fits for this brief; model: those 2-4 fitting options with the default marked — relying on the host's free-text 'Other' for anything else from the printed lists (style is accepted by NAME, case-insensitively). If there is no choice UI, ask in text. The detected suggestedVideoType (e.g. ugc / product-promo / whiteboard) steers the whole scenario's direction — mention it alongside the style ask and pass it (or the user's pick from videoTypeOptions) as videoType to the story tools. generate_video_story rejects calls without a chosen style; if the user picks a non-default model, re-check the exact cost with estimate_story_cost. For a MUSIC VIDEO pass audioUrl (the user's track): the suggested style is tailored to the song and the response includes audioDurationSeconds + suggestedSoundWindow (pass its soundEnd to the follow-up calls) + maxMusicClipSeconds (the longest clip this track can become here). Pass referenceImageUrls to let uploaded images steer the suggested style. Also returned: freeGift (the free seconds a non-subscriber can generate — offer it as the web does), webSearchRecommended (the brief cites a URL and the user can use web grounding), styleOptions[].recommendedForVideoType (the styles the detected video type is tuned for — list those first), and modelOptions[].requiresPaidPlan / supportsAudio.
Parameters
| Parameter | Type | Description |
|---|---|---|
promptoptional | string | The video idea / brief. Optional when audioUrl is given (a music clip). |
videoTypeoptional | string | Optional creative-direction hint (e.g. 'ugc', 'product-promo', 'whiteboard'): the analyzer then suggests a style from that type's mapped styles and echoes the type back. Omit to auto-detect — the response's suggestedVideoType + videoTypeOptions list what was detected and every selectable type. |
audioUrloptional | string | The user's audio track for a music video (mp3/wav/…). Makes the analysis music-aware and returns the detected duration + suggested trim window. |
soundStartoptional | number | Music clip only: start of the audio section, seconds (default 0). |
soundEndoptional | number | Music clip only: end of the audio section, seconds. Omit to auto-detect the full track. |
referenceImageUrlsoptional | array of string | Optional user image URLs (up to 15) to influence the suggested style. |
estimate_video_costEstimate video cost
Read-onlyNo charge
Price a single clip before generating it. Charges nothing.
Description shown to the assistant
Dry-run cost estimate for generate_video with the same parameters. Returns the credit cost of the requested lane (generation.mode: standard by default, fastTrack when fastTrack:true) and the current balance WITHOUT charging or generating anything. ALWAYS call this and tell the user the cost before calling generate_video. When generation.includedInPlan is true the clip is included in the user’s plan (0 credits with standard generation) — say so instead of quoting a price. If the response carries fastTrack (Priority generation, ready in minutes) or standardGeneration (low-priority queue), present that other lane with its estimatedCredits so the user can choose between speed and credits. If affordable is false, tell the user to top up credits or upgrade on the returned subscriptionUrl (the Renderforest subscription page).
Parameters
| Parameter | Type | Description |
|---|---|---|
promptoptional | string | What the video should show. Required for text-to-video; optional only when imageUrl is provided. |
imageUrloptional | string | Optional image URL (jpg/png/webp) to animate — image-to-video. When set, prompt becomes optional. |
aspectRatiooptional | 16:9 | 1:1 | 9:16 | Video aspect ratio. Required for text-to-video (e.g. 9:16 for TikTok/Reels UGC). |
videoModeloptional | string | Model id from list_video_models. Omit to use the platform default model. |
videoDurationSecondsoptional | integer | Must be one of the durations the chosen model offers (see list_video_models). Omit for the model default. |
qualityoptional | integer | Video quality, e.g. 720 or 1080. Omit for the model default. |
fastTrackoptional | boolean | Priority generation (the website’s Power mode): skips the standard queue and is usually ready in minutes, charged at fastTrackCredits (creditMultiplier × the list price) even when the user’s plan includes the model. Omitted/false = Standard generation: queued at low priority (may take a while; a model may cap how many standard generations run at once per user — standardConcurrentLimit), 0 credits for qualities marked includedInPlan in list_video_models, otherwise the listed credits. Only allowed when the model supports it. |
referenceMediasoptional | object | Reference images for the model. Only types listed in list_video_models.referenceInputs are allowed. |
estimate_story_costEstimate story cost
Read-onlyNo charge
Price a multi-scene story before generating it. Charges nothing.
Description shown to the assistant
Dry-run credit cost for a long AI video (generate_video_story) with the same parameters. Charges nothing. NOTE: analyze_prompt already returns this as costEstimate for its suggested parameters — only call this tool when the parameters differ from that suggestion (changed duration/model/quality/fastTrack, or no analysis was run). The estimate is computed from the requested duration; for narrated stories the final charge is recomputed after the voiceover is generated (scenes are sized to the actual narration length) and is always capped at the user’s balance — so present it as "about N credits", not an exact invoice. estimatedCredits is for the requested lane (generation.mode); when generation.includedInPlan is true the user’s plan covers the video credits and only the flat production cost remains — say so. The other lane rides along as fastTrack.estimatedCredits (Priority generation: ready in minutes) or standardGeneration.estimatedCredits (Standard generation: low-priority queue, could take a few hours) — present both when the model offers them so the user can choose. If affordable is false, tell the user to top up credits or upgrade on the returned subscriptionUrl (the Renderforest subscription page). For a music clip pass audioUrl (+ optional soundStart/soundEnd) instead of durationSeconds.
Parameters
| Parameter | Type | Description |
|---|---|---|
promptoptional | string | The video brief. Required for a normal story; optional for a music clip (audioUrl), where the song lyrics drive the scenes. |
durationSecondsoptional | integer | Total video length in seconds (5–300). Required for a normal story. OMIT for a music clip (audioUrl) — the length comes from the audio trim window (soundStart/soundEnd). |
keepScriptVerbatimoptional | boolean | Use the prompt as the exact script instead of letting Renderforest enhance/expand it. Set true when the user wrote (or approved) the precise narration; default false (enhanced, like the web flow). |
includeSubtitlesoptional | boolean | Burn the narration into the video as editable subtitle text layers (for a music clip: the transcribed lyrics). Needs voiceover on, or a music clip — otherwise rejected before any charge. Default false. |
aspectRatiorequired | 16:9 | 1:1 | 9:16 | |
stylerequired | object,string | The visual style of the video — the STYLE CHOICE BELONGS TO THE USER: before generating, show them ALL styles from analyze_prompt.styleOptions as a text list (name + one-line description, marking the suggested one); if your host can present clickable options, ALSO offer the suggested style plus the 2-3 best fits for the brief as buttons — the free-text 'Other' choice covers any other style from the list, since style can be passed simply by NAME (case-insensitive, e.g. 'Anime') as well as by the option's `style` object. Never silently use the suggestion. A call without a valid style is rejected together with the full style catalog. |
storyTypeoptional | video | Story type. Only video (animated scenes) is currently supported via MCP; still-image stories are not yet available here. Default video. |
videoTypeoptional | string | The video's creative direction (scenario director): one of the codes from analyze_prompt.videoTypeOptions (e.g. 'ugc', 'product-promo', 'app-promo', 'cinematic', 'cartoon', 'whiteboard', 'anime', 'comic-book'). analyze_prompt returns suggestedVideoType — pass it (or the user's pick) here so scenes are directed for that format. Omit to use the default cinematic story direction. Ignored for music clips. |
videoModeloptional | string | Video model id (video storyType). |
qualityoptional | integer | Video quality, e.g. 720 or 1080. Omit to use the model default. |
voiceoverEnabledoptional | boolean | Whether to add voiceover narration. Default true. Ignored for a music clip (audioUrl) — voiceover is always off there. |
speakerIdoptional | integer | Optional TTS voice id from list_tts_voices (voices[].speakerId). Omit to auto-select a voice matching the script language. |
languageoptional | string | Voiceover/script language — an ISO code ('hy') or English name ('Armenian'). The script is written in this language and a NATIVE voice for it is picked automatically when one exists (multilingual voices are only the fallback); pass speakerId from list_tts_voices to choose a specific voice/gender instead. Omit to use the language the brief is written in. |
voiceGenderoptional | male | female | Preferred narrator gender when the user has not named a speakerId; a native voice of that gender is picked for the script language. Omit to let the platform choose. |
fastTrackoptional | boolean | Priority generation (the website’s “Priority generation”): ready in minutes (up to about an hour for long videos), charged the multiplied video credits (list_video_models fastTrack.creditMultiplier) even when the user’s plan includes the model. Omitted/false = Standard generation: low-priority queue, could take a few hours; models the plan includes charge no video credits there. estimate_story_cost returns both prices (estimatedCredits for the requested lane, fastTrack.estimatedCredits or standardGeneration.estimatedCredits for the other) — present the choice when the model supports it. |
useWebSearchoptional | boolean | Ground the scenario on live web search results (useful for briefs about real products, brands, places or current events). SUBSCRIBERS ONLY — a free account gets a validation error, so only pass it when the user asks for up-to-date/factual grounding and drop it if rejected. |
audioUrloptional | string | Turn this into a MUSIC VIDEO synced to the user's audio (the Renderforest AI music flow): the song is transcribed, beat/lyric-timed into scenes, and the track is laid under the render. Pass the direct audio URL (mp3/wav/…). When set, this is a music clip: OMIT durationSeconds, and voiceover is off. Optionally narrow the section with soundStart/soundEnd. |
soundStartoptional | number | Music clip only: start of the audio section to use, in seconds (default 0). |
soundEndoptional | number | Music clip only: end of the audio section to use, in seconds. Omit to use the whole track (auto-detected; capped at analyze_prompt.maxMusicClipSeconds — up to 12 minutes, less when the model cannot schedule that many scenes). soundEnd − soundStart is the final video length. |
audioTitleoptional | string | Music clip only: optional display title for the track. |
referenceImageUrlsoptional | array of string | Optional user image URLs (up to 15) to steer the story: used as character/identity references, style guidance, and per-scene source imagery across the whole video (works for both normal and music-clip stories). These are NOT per-scene first/last frames — the model decides how each image is used. Plain image URLs (jpg/png/webp). |
list_video_modelsList AI video models
Read-onlyNo charge
List the AI video models, their durations, qualities, costs and capabilities.
Description shown to the assistant
List available Renderforest AI video models PRICED FOR THIS USER: per duration and quality, `credits` is the Standard-generation price (0 with includedInPlan:true where the user’s plan includes the model — tell the user those are included in their plan, never quote the list price) and `fastTrackCredits` the Priority-generation price; plus reference-image inputs, fast-track support (with standardConcurrentLimit = how many standard generations may run at once), the platform default model, allowed aspect ratios and generationModes (what the two lanes mean). Each model carries a name, a description of what it's best for (speed, cinematic quality, social content, storytelling…) and a storyCapable flag (whether generate_video_story accepts it) — when the user hasn't named a model and the choice materially affects the result or cost, present 2-3 fitting options with a one-line summary each and let the user pick instead of silently using the default. Models with fastTrack.supported generate much faster for fastTrackCredits (Priority generation) — offer that when the user is in a hurry or hits the concurrency limit. The listed durations are the max length of a SINGLE clip per model — a request longer than that is not a reason to stitch clips, it's a reason to use generate_video_story (which composites multiple scenes into one video, and accepts any of these models as its videoModel). Call this when the user cares about model choice, duration, quality, or cost details.
Parameters
No parameters.
list_image_modelsList image models
Read-onlyNo charge
List AI image models, their per-image cost, aspect ratios and the available styles.
Description shown to the assistant
List the AI image models (code, credit cost per image for THIS user — 0 with includedInPlan:true when the user’s plan includes the model —, supported aspect ratios, how many reference images each accepts), the image styles the user can pick by name, and the user's current AI credit balance. Read-only. ALWAYS call it before the first generate_image of a conversation: the model choice belongs to the user — present the models by name with their price (default marked; say “included in your plan” instead of a price for includedInPlan models) and ask which one to use, unless the user already named a model. Also quote the charge (creditsPerImage × count) and the balance before generating.
Parameters
No parameters.
list_tts_voicesList TTS voices
Read-onlyNo charge
List voiceover languages and voices for narrated videos.
Description shown to the assistant
List the voiceover (TTS) languages and voices available for narrated videos, grouped by language, plus multilingual voices that can narrate any language. Use this to answer 'do you support <language> narration?' (e.g. Armenian → yes) and to pick a speakerId when the user wants a specific voice. For a specific narration language, set `language` on the story tools — the script is then written in that language and a fitting voice is auto-selected.
Parameters
No parameters.
get_credit_balanceGet credit balance
Read-onlyNo charge
Read the user's current AI credit balance.
Description shown to the assistant
Get the user's current Renderforest AI credit balance. Rarely needed: analyze_prompt (costEstimate) and the estimate tools already return availableCredits — call this only when the user asks for their balance outright. ALWAYS state the exact availableCredits number in your reply — the user cannot see this tool's raw response. The response includes subscriptionUrl — the Renderforest subscription page where the user can top up credits or upgrade their plan; point them there when credits run short.
Parameters
No parameters.
Generate
Write tools. Each starts an asynchronous generation job in the user’s Renderforest account and spends AI credits from their balance. Claude and ChatGPT ask for confirmation before running them.
generate_videoGenerate AI video
WriteSpends AI credits
Generate one AI video clip from text, or animate an image.
Description shown to the assistant
Start a SINGLE AI video generation on Renderforest — one clip, up to the chosen model's max clip length (see list_video_models; e.g. some models cap at 15s). Do NOT use this for longer videos by stitching multiple clips yourself: if the request is longer than one clip, has multiple scenes, or is a narrative/animation/story, use generate_video_story instead (it splits the brief into scenes and composites them into one continuous rendered video). Charges the user's AI credits — except in the standard lane for models the plan includes (0 credits). LANES: fastTrack omitted = Standard generation (queued at low priority, may take a while); fastTrack:true = Priority generation (minutes, always charged). Returns a jobId immediately — then poll get_video_status in a loop with waitSeconds: 45 (the server holds each call) until completed or failed — do not stop polling and never ask the user to check status themselves. Call estimate_video_cost first and confirm the cost with the user.
Parameters
| Parameter | Type | Description |
|---|---|---|
promptoptional | string | What the video should show. Required for text-to-video; optional only when imageUrl is provided. |
imageUrloptional | string | Optional image URL (jpg/png/webp) to animate — image-to-video. When set, prompt becomes optional. |
aspectRatiooptional | 16:9 | 1:1 | 9:16 | Video aspect ratio. Required for text-to-video (e.g. 9:16 for TikTok/Reels UGC). |
videoModeloptional | string | Model id from list_video_models. Omit to use the platform default model. |
videoDurationSecondsoptional | integer | Must be one of the durations the chosen model offers (see list_video_models). Omit for the model default. |
qualityoptional | integer | Video quality, e.g. 720 or 1080. Omit for the model default. |
fastTrackoptional | boolean | Priority generation (the website’s Power mode): skips the standard queue and is usually ready in minutes, charged at fastTrackCredits (creditMultiplier × the list price) even when the user’s plan includes the model. Omitted/false = Standard generation: queued at low priority (may take a while; a model may cap how many standard generations run at once per user — standardConcurrentLimit), 0 credits for qualities marked includedInPlan in list_video_models, otherwise the listed credits. Only allowed when the model supports it. |
referenceMediasoptional | object | Reference images for the model. Only types listed in list_video_models.referenceInputs are allowed. |
generate_video_storyGenerate AI video story
WriteSpends AI credits
Generate a multi-scene story, explainer, animation or music video and render it as one video.
Description shown to the assistant
Generate a long, multi-scene AI video (a story / short / explainer / animation / MUSIC VIDEO) from a brief and render it into ONE continuous watchable video. This is the right tool whenever the requested length exceeds a single model's max clip, or the content spans multiple shots/scenes — it automatically breaks the brief into scenes, generates each (using the chosen videoModel, so naming a specific model is fine), keeps a shared scenario + consistent characters across scenes (subscribers get dedicated upfront character reference images), and composites + renders everything into a single video. Pass videoType (from analyze_prompt's suggestedVideoType / videoTypeOptions) to direct the scenario for a specific format — UGC, product promo, app promo, whiteboard, comic book, cinematic… You do NOT stitch clips yourself — prefer this over generate_video for anything longer than one clip. durationSeconds is the TOTAL length (5–300 seconds). MUSIC VIDEO: pass audioUrl to build a clip synced to the user's song (lyrics/beats drive the scenes and the track is laid under the render) — then OMIT durationSeconds (length comes from soundStart/soundEnd, whole track by default) and voiceover is off. REFERENCE IMAGES: pass referenceImageUrls to reuse the user's images as characters/style/source imagery across scenes (works with or without audio). Charges the user's AI credits. Returns a jobId immediately; then poll get_video_status in a loop with waitSeconds: 45 (the server holds each call) until completed or failed — do not stop polling and never ask the user to check status themselves. The job completes only when the video is generated AND rendered. LANES: fastTrack omitted = Standard generation (low-priority queue, could take a few hours; models the plan includes charge no video credits); fastTrack:true = Priority generation (minutes, the multiplied video credits are always charged). Call analyze_prompt then estimate_story_cost first and confirm the cost. FAILURES: if a story job fails, do NOT call this tool again to retry on your own — each run charges credits (failed work is auto-refunded); report the failure and wait for the user to explicitly ask for a retry. STYLE: the user must explicitly choose the visual style — present all analyze_prompt.styleOptions and pass the user's pick as `style`; a missing or unknown style is rejected along with the full catalog (ask the user, then retry).
Parameters
| Parameter | Type | Description |
|---|---|---|
promptoptional | string | The video brief. Required for a normal story; optional for a music clip (audioUrl), where the song lyrics drive the scenes. |
durationSecondsoptional | integer | Total video length in seconds (5–300). Required for a normal story. OMIT for a music clip (audioUrl) — the length comes from the audio trim window (soundStart/soundEnd). |
keepScriptVerbatimoptional | boolean | Use the prompt as the exact script instead of letting Renderforest enhance/expand it. Set true when the user wrote (or approved) the precise narration; default false (enhanced, like the web flow). |
includeSubtitlesoptional | boolean | Burn the narration into the video as editable subtitle text layers (for a music clip: the transcribed lyrics). Needs voiceover on, or a music clip — otherwise rejected before any charge. Default false. |
aspectRatiorequired | 16:9 | 1:1 | 9:16 | |
stylerequired | object,string | The visual style of the video — the STYLE CHOICE BELONGS TO THE USER: before generating, show them ALL styles from analyze_prompt.styleOptions as a text list (name + one-line description, marking the suggested one); if your host can present clickable options, ALSO offer the suggested style plus the 2-3 best fits for the brief as buttons — the free-text 'Other' choice covers any other style from the list, since style can be passed simply by NAME (case-insensitive, e.g. 'Anime') as well as by the option's `style` object. Never silently use the suggestion. A call without a valid style is rejected together with the full style catalog. |
storyTypeoptional | video | Story type. Only video (animated scenes) is currently supported via MCP; still-image stories are not yet available here. Default video. |
videoTypeoptional | string | The video's creative direction (scenario director): one of the codes from analyze_prompt.videoTypeOptions (e.g. 'ugc', 'product-promo', 'app-promo', 'cinematic', 'cartoon', 'whiteboard', 'anime', 'comic-book'). analyze_prompt returns suggestedVideoType — pass it (or the user's pick) here so scenes are directed for that format. Omit to use the default cinematic story direction. Ignored for music clips. |
videoModeloptional | string | Video model id (video storyType). |
qualityoptional | integer | Video quality, e.g. 720 or 1080. Omit to use the model default. |
voiceoverEnabledoptional | boolean | Whether to add voiceover narration. Default true. Ignored for a music clip (audioUrl) — voiceover is always off there. |
speakerIdoptional | integer | Optional TTS voice id from list_tts_voices (voices[].speakerId). Omit to auto-select a voice matching the script language. |
languageoptional | string | Voiceover/script language — an ISO code ('hy') or English name ('Armenian'). The script is written in this language and a NATIVE voice for it is picked automatically when one exists (multilingual voices are only the fallback); pass speakerId from list_tts_voices to choose a specific voice/gender instead. Omit to use the language the brief is written in. |
voiceGenderoptional | male | female | Preferred narrator gender when the user has not named a speakerId; a native voice of that gender is picked for the script language. Omit to let the platform choose. |
fastTrackoptional | boolean | Priority generation (the website’s “Priority generation”): ready in minutes (up to about an hour for long videos), charged the multiplied video credits (list_video_models fastTrack.creditMultiplier) even when the user’s plan includes the model. Omitted/false = Standard generation: low-priority queue, could take a few hours; models the plan includes charge no video credits there. estimate_story_cost returns both prices (estimatedCredits for the requested lane, fastTrack.estimatedCredits or standardGeneration.estimatedCredits for the other) — present the choice when the model supports it. |
useWebSearchoptional | boolean | Ground the scenario on live web search results (useful for briefs about real products, brands, places or current events). SUBSCRIBERS ONLY — a free account gets a validation error, so only pass it when the user asks for up-to-date/factual grounding and drop it if rejected. |
audioUrloptional | string | Turn this into a MUSIC VIDEO synced to the user's audio (the Renderforest AI music flow): the song is transcribed, beat/lyric-timed into scenes, and the track is laid under the render. Pass the direct audio URL (mp3/wav/…). When set, this is a music clip: OMIT durationSeconds, and voiceover is off. Optionally narrow the section with soundStart/soundEnd. |
soundStartoptional | number | Music clip only: start of the audio section to use, in seconds (default 0). |
soundEndoptional | number | Music clip only: end of the audio section to use, in seconds. Omit to use the whole track (auto-detected; capped at analyze_prompt.maxMusicClipSeconds — up to 12 minutes, less when the model cannot schedule that many scenes). soundEnd − soundStart is the final video length. |
audioTitleoptional | string | Music clip only: optional display title for the track. |
referenceImageUrlsoptional | array of string | Optional user image URLs (up to 15) to steer the story: used as character/identity references, style guidance, and per-scene source imagery across the whole video (works for both normal and music-clip stories). These are NOT per-scene first/last frames — the model decides how each image is used. Plain image URLs (jpg/png/webp). |
add_sceneAdd scene
WriteSpends AI credits
Generate an additional scene clip for an existing project.
Description shown to the assistant
Smart add: generate a NEW scene clip for an existing gen-AI video project, consistent with its scenario and style. Charges the user's AI credits. NOTE: the output is a STANDALONE clip — the project's already-rendered story video is NOT re-composited/re-rendered with it; the user downloads the clip or places it into the story in the Renderforest editor. Say this to the user up front. Returns a jobId immediately; then poll get_video_status in a loop with waitSeconds: 45 (the server holds each call) until completed or failed — do not stop polling and never ask the user to check status themselves. Call get_video_project first if you need to see the current scenes.
Parameters
| Parameter | Type | Description |
|---|---|---|
projectIdrequired | integer | The gen-AI project id to add the scene to (from get_video_project). |
promptrequired | string | What the new scene should show. |
referenceMediasoptional | object | Reference images for the model. Only types listed in list_video_models.referenceInputs are allowed. |
videoDurationSecondsoptional | integer | Must be one of the durations the chosen model offers (see list_video_models). Omit for the model default. |
videoModeloptional | string | Model id from list_video_models. Omit to use the platform default model. |
aspectRatiooptional | 16:9 | 1:1 | 9:16 | Video aspect ratio. Required for text-to-video (e.g. 9:16 for TikTok/Reels UGC). |
qualityoptional | integer | Video quality, e.g. 720 or 1080. Omit for the model default. |
fastTrackoptional | boolean | Priority generation (the website’s Power mode): skips the standard queue and is usually ready in minutes, charged at fastTrackCredits (creditMultiplier × the list price) even when the user’s plan includes the model. Omitted/false = Standard generation: queued at low priority (may take a while; a model may cap how many standard generations run at once per user — standardConcurrentLimit), 0 credits for qualities marked includedInPlan in list_video_models, otherwise the listed credits. Only allowed when the model supports it. |
edit_sceneEdit scene
Write · replaces contentSpends AI credits
Regenerate one scene of an existing project from a new prompt (replaces that scene).
Description shown to the assistant
Smart edit: regenerate one scene of a gen-AI video project from a new prompt, consistent with its scenario and style. Charges the user's AI credits. NOTE: the output is a STANDALONE replacement clip — the project's already-rendered story video is NOT re-composited/re-rendered with it; the user downloads the clip or places it into the story in the Renderforest editor. Say this to the user up front. Returns a jobId immediately; then poll get_video_status in a loop with waitSeconds: 45 (the server holds each call) until completed or failed — do not stop polling and never ask the user to check status themselves. Call get_video_project first to get a valid sceneIndex.
Parameters
| Parameter | Type | Description |
|---|---|---|
projectIdrequired | integer | The gen-AI project id containing the scene to edit (from get_video_project). |
sceneIndexrequired | integer | Index of the scene to edit, from get_video_project.scenes[].sceneIndex. |
promptrequired | string | What the edited scene should show. |
referenceMediasoptional | object | Reference images for the model. Only types listed in list_video_models.referenceInputs are allowed. |
videoDurationSecondsoptional | integer | Must be one of the durations the chosen model offers (see list_video_models). Omit for the model default. |
videoModeloptional | string | Model id from list_video_models. Omit to use the platform default model. |
aspectRatiooptional | 16:9 | 1:1 | 9:16 | Video aspect ratio. Required for text-to-video (e.g. 9:16 for TikTok/Reels UGC). |
qualityoptional | integer | Video quality, e.g. 720 or 1080. Omit for the model default. |
fastTrackoptional | boolean | Priority generation (the website’s Power mode): skips the standard queue and is usually ready in minutes, charged at fastTrackCredits (creditMultiplier × the list price) even when the user’s plan includes the model. Omitted/false = Standard generation: queued at low priority (may take a while; a model may cap how many standard generations run at once per user — standardConcurrentLimit), 0 credits for qualities marked includedInPlan in list_video_models, otherwise the listed credits. Only allowed when the model supports it. |
generate_imageGenerate AI image
WriteSpends AI credits
Generate 1–4 AI images from a prompt (optionally with reference images). Also the "preview a still before the video" step.
Description shown to the assistant
Generate 1–4 AI images from a text prompt in the user's Renderforest account. Charges AI credits (creditsPerImage × count from list_image_models; nothing for a model marked includedInPlan). NEVER choose the model for the user: unless they named one, first call list_image_models and ask which model to use, and tell them the exact charge and their current balance before calling this. When the images are ready, report the charge and the availableCredits the result returns (do not subtract yourself). Optional: model (code), aspectRatio (must be one the model supports, default 1:1), style (a style name from list_image_models), referenceImageUrls (the user's own images from get_uploaded_media, up to the model's referenceImagesMax). The call waits up to ~40 s and usually returns the finished images; if it returns status processing, call get_image_project with the imageProjectId a few seconds later. PREVIEW A STILL BEFORE A VIDEO: when the user wants to see how a video would look before spending video credits, generate one image with the same prompt, style and aspect ratio, show it with show_media, and once approved pass its url as referenceMedias.images[0] (type firstFrame) to generate_video or in referenceImageUrls to generate_video_story. Never fetch, open or describe the image yourself.
Parameters
| Parameter | Type | Description |
|---|---|---|
promptrequired | string | What to draw. Be concrete: subject, setting, lighting, mood. |
modeloptional | string | Image model code from list_image_models — the one the user picked. Omit only when the user explicitly asked for the default. |
aspectRatiooptional | string | One of the model’s supported ratios, e.g. 1:1, 16:9, 9:16. Default 1:1. |
styleoptional | string | Style name from list_image_models (optional). |
countoptional | integer | How many images (1–4). Default 1. |
referenceImageUrlsoptional | array of string | Optional user image URLs (from get_uploaded_media) to steer the result; the model must accept references. |
Track and deliver
Read-only. Follow a job to completion and hand the finished video to the user.
get_video_statusCheck video status
Read-onlyNo charge
Wait on a running generation job and return its progress or result.
Description shown to the assistant
Wait on / check a generation job from any of the async tools. ALWAYS pass waitSeconds: 45 — the server HOLDS the call and returns as soon as the job finishes or the window elapses, so one call replaces many instant polls; calling it in a loop IS how you wait. Keep looping until status is completed or failed — never stop mid-job and never ask the user to request status checks themselves; they expect the finished video, delivered by you, unprompted. If your host forces the turn to end (a hard tool-call limit), tell the user the video keeps generating server-side and any short reply resumes tracking — then resume the loop immediately next turn. Returns status (submitted | processing | completed | failed), progress percent, and — once completed — videoUrl (the MP4 file) plus, for story jobs, previewUrl (a shareable Renderforest watch page; prefer showing the user this link).
Parameters
| Parameter | Type | Description |
|---|---|---|
jobIdrequired | string | The jobId returned by the generation tool. |
waitSecondsoptional | integer | Long-poll window in seconds (max 45). ALWAYS pass 45 for an in-flight job: the server holds the call and returns early on completion. Omit only for a one-off instant check. |
show_videoShow video player
Read-onlyNo charge
Show a finished video in an inline player (hosts with interactive widgets).
Description shown to the assistant
Display the finished video in an inline player widget. Call at most ONCE per job, and ONLY after get_video_status reports status: completed — it rejects jobs that are still processing. Skip it entirely if your host does not render interactive widgets; in that case the videoUrl link from get_video_status is the deliverable.
Parameters
| Parameter | Type | Description |
|---|---|---|
jobIdrequired | string | The jobId of a COMPLETED generation job. |
submit_feedbackSubmit feedback
WriteNo charge
Send the user's own feedback about a finished video to the Renderforest team.
Description shown to the assistant
Send feedback the USER typed about a generated video (or about the Renderforest experience) to the Renderforest team. Call it ONLY after the user has written feedback themselves — normally in reply to the one feedback question you ask when get_video_status reports a video completed — and pass their words verbatim in message (never your paraphrase, never text they did not write). Pass the jobId of the video the feedback is about when there is one. At most one call per piece of user feedback; nothing is charged.
Parameters
| Parameter | Type | Description |
|---|---|---|
messagerequired | string | The user's feedback, verbatim. |
jobIdoptional | string | jobId of the generation the feedback is about, when it concerns a specific video. |
get_video_projectView video project
Read-onlyNo charge
Inspect a generated project's scenes to pick one to edit or extend.
Description shown to the assistant
Get a curated view of a generated video project: status, aspect ratio, video model, and each scene indexed with its (truncated) prompt, duration in seconds, and whether it already has a rendered video. Use this to pick a sceneIndex before editing or adding scenes.
Parameters
| Parameter | Type | Description |
|---|---|---|
projectIdrequired | integer | The gen-AI project id. |
export_videoRe-export video
WritePlan-gated
Re-render an existing story at a different quality. No AI credits; 1080p+ needs a paid plan.
Description shown to the assistant
Re-export (re-render) an already-generated story project at a DIFFERENT quality — e.g. the user generated/exported at 720 and now wants 1080. This does NOT regenerate the video: no scenes are recreated, no AI credits are charged; it just re-renders the existing composited project at the new resolution. Use this (NOT generate_video_story) when the user asks for the same video in another quality — only on request; never offer higher resolutions unprompted after a generation. Allowed qualities: 360, 720, 1080, 2160 — 1080 and 2160 are paid-plan only (free exports cap at 720; a free user gets an upgrade message). Call get_video_project first to see which qualities already exist in `exports`. Returns a jobId immediately; then poll get_video_status in a loop with waitSeconds: 45 until completed — the completed videoUrl is the new-quality file. projectId is the gen-AI project id (from get_video_project / analyze_prompt flow).
Parameters
| Parameter | Type | Description |
|---|---|---|
projectIdrequired | integer | The gen-AI project id to re-export (from get_video_project). |
qualityrequired | integer | Target export quality in pixels: one of 360, 720, 1080, 2160. 1080/2160 require a paid plan. |
Your library
Read-only. Browse what the user already made — AI images, short clips and long projects — and show them in the inline gallery. "Show my latest videos" makes the assistant ask whether you mean short clips or long projects.
list_ai_imagesList AI images
Read-onlyNo charge
Browse the user's previously generated AI images.
Description shown to the assistant
List the user's previously generated AI images (newest first; every Renderforest surface, not only this chat). Each entry is one generation with its prompt, model and images. Then call show_media with { kind: 'image', ids: [imageProjectIds] } to display them — do not paste URLs. Page with offset.
Parameters
| Parameter | Type | Description |
|---|---|---|
limitoptional | integer | Page size, default 12. |
offsetoptional | integer | Skip this many generations (paging). |
modeloptional | string | Only this image model code. |
aspectRatiooptional | string | Only this aspect ratio. |
get_image_projectGet image project
Read-onlyNo charge
Read one image generation and its image URLs.
Description shown to the assistant
Read one image generation (an image project) by imageProjectId: status (processing / completed / failed) and each image’s url + thumbnailUrl. Use it to finish a generate_image that returned processing, or to fetch an older generation before show_media.
Parameters
| Parameter | Type | Description |
|---|---|---|
imageProjectIdrequired | integer | The imageProjectId returned by generate_image or list_ai_images. |
list_videosList videos
Read-onlyNo charge
Browse the user's short AI clips or long story / editor projects (the assistant asks which).
Description shown to the assistant
List the user's videos. kind is REQUIRED: 'short' = single AI clips generated from a prompt or an image (a few seconds long, made with generate_video / add_scene / edit_scene or the website's AI video generator); 'long' = multi-scene projects (AI stories from generate_video_story and Renderforest editor projects) rendered into one video. If the user's request does not make clear which they mean (e.g. 'show my latest videos'), ASK in one line before calling. Newest first. Then call show_media with the same kind and the ids to display them; drafts (long) have no video yet and open in the editor via editorUrl.
Parameters
| Parameter | Type | Description |
|---|---|---|
kindrequired | short | long | 'short' single AI clips · 'long' multi-scene story / editor projects. |
limitoptional | integer | Page size (default 12; long is capped at 12). |
offsetoptional | integer | Skip this many items (paging). |
modeloptional | string | short only: filter by video model code. |
aspectRatiooptional | string | short only: 16:9, 9:16 or 1:1. |
includeProcessingoptional | boolean | short only: also list clips still generating. |
stateoptional | draft | exported | exporting | failed | long only: filter by project state. |
searchoptional | string | long only: filter by project name. |
show_mediaShow media gallery
Read-onlyNo charge
Show images or videos in an inline gallery (hosts with interactive widgets).
Description shown to the assistant
Display images or videos in an inline gallery widget. kind is REQUIRED and must match the ids: 'image' → imageProjectIds from generate_image / list_ai_images (every image of each generation is shown); 'short' → ids from list_videos({ kind: 'short' }) or a completed generate_video; 'long' → ids from list_videos({ kind: 'long' }) (the rendered video is resolved for each). Up to 12 ids, newest first. Call it ONCE per set; skip it if the host does not render widgets and give links instead. Never mix kinds in one call.
Parameters
| Parameter | Type | Description |
|---|---|---|
kindrequired | image | short | long | What the ids are. |
idsrequired | array of integer | Ids of that kind, in display order. |
Your own media
MCP has no file transfer, so reference images and audio are added in a short-lived, single-user in-chat upload widget and then referenced by URL.
upload_mediaUpload media
Read-onlyNo charge
Open the in-chat upload widget so the user can add their own images and audio to their Renderforest library.
Description shown to the assistant
Open the in-chat upload widget so the USER can add their own IMAGES (png/jpg/webp) and AUDIO (mp3/wav/m4a — their own or licensed track for a music video) to their Renderforest media library. The widget rendered with this result is the ONLY way to add files: there is no upload link or upload page, so never invent one or send the user to a browser. Returns { uploadId }. The widget is EMPTY when this returns, so do NOT call get_uploaded_media yet and NEVER poll it: in ONE short line ask the user to add the files in the widget above and say "done" when finished, then END your turn and wait. Only after they confirm, call get_uploaded_media once with the uploadId; its hint says how to pass each file: images as referenceImageUrls (story tools) or typed referenceMedias.images per list_video_models.referenceInputs; audio as audioUrl (+ audioTitle) to analyze_prompt / generate_video_story for a MUSIC VIDEO (soundStart/soundEnd cut a shorter clip). Files attached to the chat cannot be forwarded: the user must add them through the widget.
Parameters
| Parameter | Type | Description |
|---|---|---|
purposeoptional | string | ALWAYS pass this: one short line saying what the images are for (e.g. "Reference images for the Seedance product clip"). Shown to the user in the permission prompt and as the upload widget subtitle. Max 140 characters. |
get_uploaded_mediaCheck uploaded media
Read-onlyNo charge
Check whether the user finished uploading and fetch the resulting image URLs.
Description shown to the assistant
Read the media the user uploaded in upload_media's in-chat widget. Call it ONCE, after the user says they have finished uploading — never right after upload_media and never in a polling loop (the widget is empty until the user acts, and each call may need their approval). Returns status 'pending' when nothing has arrived yet — then tell the user in one line that no files were received and wait for them — or 'ready' with images (URLs), audios ([{ url, name }]) and mediaUrls (all). NEVER fetch, open or view these URLs yourself — they are opaque inputs for the video tools and the user already sees the files in the widget; acknowledge the upload in one line and continue. The result also carries a hint on how to pass each: images as referenceImageUrls (story tools) or typed referenceMedias.images per list_video_models.referenceInputs (generate_video / add_scene / edit_scene); audio as audioUrl (+ audioTitle) to analyze_prompt / generate_video_story for a music video.
Parameters
| Parameter | Type | Description |
|---|---|---|
uploadIdrequired | string | The uploadId returned by upload_media. |
Workflows
A few things people ask for, and which tools the assistant uses to deliver them. You never call tools yourself; you describe the outcome.
A short clip
"Make a 10-second 9:16 clip of a golden retriever running through autumn leaves, cinematic."estimate_video_cost → confirm price → generate_video → get_video_status (repeated while it renders) → show_video or a download link.
list_image_models → generate_image → show_media (kind image). Preview a still before a video: generate one image with the video's prompt and style, approve it, then generate_video with it as the first frame or generate_video_story with it as a reference.
list_ai_images / list_videos (short or long) → show_media with the same kind.
An explainer with narration
"Create a 60-second explainer about our new recycling program, friendly tone, with a female English voiceover."analyze_prompt suggests type, style, duration and price → you approve → generate_video_story → get_video_status → finished video.
A music video
"Turn this track into a dreamy animated music video: https://…/song.mp3, use 0:30 to 1:30."analyze_prompt with the audio URL and trim window → generate_video_story (visuals are cut to the music, no voiceover) → get_video_status.
Using your own images
"Animate our product photos into a 15-second ad."upload_media opens an in-chat dropzone → get_uploaded_media waits for the upload → the image URLs become reference images for generate_video or generate_video_story.
Changing a finished video
"Redo scene 3 with a night-time city instead." "Export the same video in 1080p."get_video_project → edit_scene or add_scene (new standalone clips you can place in the Renderforest editor) · export_video re-renders the existing project at another quality without regenerating anything.
Long generations. Videos take from under a minute to several minutes. The assistant keeps checking status server-side; if your host ends the turn first, the job keeps running and any short reply resumes tracking it.
Credits and billing
Generation is paid with the AI credits included in your Renderforest plan. The connector never bills anything itself and never touches payment details.
- Read-only tools are free. Analysis, estimates, model lists, voice lists, balance, status checks, project views and the video player never spend credits.
- You see the price first. The estimate tools return the exact credit cost and whether your balance covers it, and the assistant is instructed to tell you before starting.
- Charges happen when a generation starts (
generate_video,generate_video_story,add_scene,edit_scene,generate_image). Stories are charged up front for the requested length; scenes and images that fail to generate are refunded automatically. - Two generation lanes, as on the website. By default a generation runs as Standard generation: queued at low priority, so it can take a while, and free for the models your plan includes. Priority generation (the website’s Power mode,
fastTrack) skips the queue and is charged at a multiplied credit price even on included models; the assistant only uses it when you ask for it, and the estimates show both prices. - Plan-included models cost nothing in the standard lane. Models your subscription lists as unlimited are marked
includedInPlanin the model lists and estimates and charge 0 credits with standard generation. - Re-exports are not generations.
export_videore-renders an existing story and spends no AI credits. Exporting at 1080p or 2160p requires a paid plan; 360p and 720p are available to everyone. - Free accounts receive a gift allowance and may get a trial version of a longer story (the first scenes) when the balance does not cover the whole request.
Top up credits or change plans on your Renderforest subscription page. When a tool fails for lack of credits, it says so and points there.
Data and privacy
The connector receives only the arguments of the tool calls the assistant makes. It has no access to your conversation, your other chats, files you shared with the assistant, or the assistant's memory.
What is sent to Renderforest
- The video brief (prompt) and generation settings you or the assistant chose.
- Optional URLs of images or audio you asked to use, and files you add in the upload widget, which are stored in your Renderforest media library.
- The identity of your Renderforest account, established by the OAuth sign-in. The user id is taken only from the token, never from tool arguments.
Prompts and media are processed by Renderforest's AI video pipeline, which uses third-party AI model providers under contract to Renderforest, as described in the Renderforest Privacy Policy. Generated projects and videos are stored in your Renderforest account like any other project you create on the website, under the same policy and retention rules.
What the gateway itself stores
| Data | Purpose | Retention |
|---|---|---|
| OAuth access and refresh tokens (opaque, stored hashed) | Authenticate your client | 1 hour / 30 days, deleted on revocation |
| Registered OAuth client records | Bind tokens to your client and its redirect URI | 90 days after last use |
| Generation job status (job id, state, progress, result URL) | Answer status checks | 48 hours |
| Upload sessions (upload id, your user id, uploaded file URLs) | Hand uploaded files back to the assistant | 30 minutes |
| Operational logs and error reports | Reliability and security monitoring | Per Renderforest's internal logging policy |
- No conversation content is collected beyond the tool arguments needed to perform each call.
- No advertising, sponsored content or product placement is ever returned by any tool.
- No personal health data is requested, processed or stored.
- Media URLs you supply are validated before being fetched (public https only) and reference images must come from your own Renderforest library or explicitly allowed hosts.
Full details: Privacy Policy · Terms and Conditions.
Enterprise setup
For IT administrators enabling the connector for a Claude Team/Enterprise organization or a ChatGPT Business/Enterprise workspace.
Authentication model
- Per-user OAuth 2.1. Each member authorizes the connector with their own Renderforest account. There is no organization-level credential, API key or service account to provision, and nothing for an admin to store on Renderforest's side.
- Dynamic client registration. Claude and ChatGPT register themselves automatically. If your platform requires a pre-registered client ID (Anthropic-held or client-ID-metadata modes), contact support and we will provision one.
- Redirect hosts are allow-listed on the server (Claude and ChatGPT callback hosts). Additional MCP clients can be allow-listed on request.
- Scopes are fixed to
renderforest:videosandrenderforest:images, both shown on the consent screen.
Enabling in Claude (Team/Enterprise)
- In Admin settings → Connectors, add the connector from the directory or as a custom connector with the URL
https://mcp.renderforest.com/mcp. - Choose which members or groups may use it. No credentials are needed at this step.
- Each member connects once from Settings → Connectors, signing in to their own Renderforest account.
Enabling in ChatGPT (Business/Enterprise)
- An admin enables Developer mode (or publishes the connector to the workspace) and creates the connector with the URL
https://mcp.renderforest.com/mcpand authentication set to OAuth. - Members complete the Renderforest sign-in the first time they use it.
Network and account requirements
- Members must be able to reach
https://mcp.renderforest.comandhttps://www.renderforest.comfrom their browser to complete the consent flow. - Members need a Renderforest account. Teams that centralize billing can use Renderforest team plans; credits are consumed from the account that authorized the connector.
- To offboard a member, disconnect the connector in the assistant (revokes the token) and/or deactivate their Renderforest account.
Limits and reliability
| Limit | Value |
|---|---|
| Requests to the MCP endpoint | 240 per minute per client address (429 with a JSON-RPC error when exceeded) |
| OAuth endpoints | 30 per minute per client address |
| Status long-poll | Up to 45 seconds per get_video_status call; the assistant loops until the job finishes |
| Job status retention | 48 hours after the job is created |
| Clip length and quality | Per model, see list_video_models |
| Story length | Returned by analyze_prompt for the chosen model; longer requests are split into more scenes |
| Uploads | In-chat widget only, up to 10 files per batch, 50 files per upload session; sessions expire after 30 minutes |
- The transport is stateless: every request is independent, so the service scales horizontally and a restart never loses a running generation.
- Errors are specific and actionable. Validation, credit and moderation problems return the exact reason; unexpected internal failures return a generic message and are reported to our on-call monitoring.
- Health:
https://mcp.renderforest.com/healthreturnsOKwhen the service is up.
Troubleshooting
- "Couldn't connect" or the connector never asks me to sign in
- Check the URL is exactly
https://mcp.renderforest.com/mcp(https, no trailing slash aftermcp). Corporate proxies that strip theWWW-Authenticateheader break OAuth discovery; try from another network to confirm. - The consent page keeps redirecting to sign-in
- Sign in to renderforest.com in the same browser first, then retry the connection. Third-party cookie blockers can prevent the session from being read; allow cookies for renderforest.com.
- "Not enough credits"
- The estimate exceeded your balance. Top up or upgrade on the subscription page, or ask for a shorter or lower-quality video.
- The video seems stuck in processing
- Long stories can take several minutes. Ask the assistant to check the status again; the job keeps running server-side. If a job fails, credits for scenes that were not generated are refunded.
- I only got a link, not an inline player
- Inline widgets render only in hosts that support MCP Apps. The link opens the video on Renderforest and also offers a download.
- "Rate limit exceeded"
- Wait a minute and try again. Status checks already wait server-side, so rapid repeated calls are unnecessary.
- My upload widget says the session expired
- Upload sessions are valid for 30 minutes. Ask the assistant to start a new upload.
Support and legal
Help center
help.renderforest.com for guides and to contact the support team, including questions about this connector.
Privacy policy
Terms and conditions
Security
Report a vulnerability through the help center marked "Security". We acknowledge reports promptly and fix confirmed issues as a priority.
Renderforest owns and operates both this connector and the APIs it calls. The connector is maintained by the Renderforest engineering team; documentation on this page is versioned with the server and always reflects the deployment you are connected to.