The Reelrail MCP server
Reelrail speaks the Model Context Protocol, so an assistant can browse video models, price a shot, start a generation and hand you back a playable clip without leaving the chat. Jobs run against your workspace, under the same plan limits, credit ceilings and job history as the web app - they show up in your jobs list either way.
https://api.reelrail.app/mcpBefore you connect
- A Starter plan or higher. MCP access is off on the Free plan; a Free-plan token is refused with an upgrade message. See pricing.
- Credits in the workspace. Generation tools spend the same credits the composer does; read-only tools are free.
- Nothing is anonymous. Every request to /mcp carries either an OAuth access token or an organization API key. An unauthenticated call gets a 401 with the discovery pointer your client needs.
Tools
Everything below is available today: video, speech and captions, storyboards and share links - the same surface the web app has. Image tools are not listed because nothing renders an image yet; they arrive with image generation. Prefer plain HTTPS? The /v1 API reference is at /docs/api.
| Tool | Scope | What it does | Cost |
|---|---|---|---|
| list_video_models | reelrail:read | Every video model Reelrail currently routes to, with resolutions, durations, audio and reference support, plus a price hint. | Free |
| estimate_video | reelrail:read | Price a generation before running it: credits, the upper bound Reelrail will hold, and your balance. | Free |
| generate_video | reelrail:generate:video | Start a generation with a prompt, duration, resolution, optional references and first/last frames. Pass pipeline edit, extend or upscale with parentJobId to work from a clip you already made. Returns a job id immediately. | Spends creditsSpends credits. A hold is placed when the job starts and settled against the provider's real cost when it finishes. An edit or an upscale is priced on the source clip. |
| get_job_status | reelrail:read | Poll a job, optionally waiting up to 60 seconds. Returns a playable link and a poster once the job succeeds. | Free |
| list_jobs | reelrail:read | Page through the workspace's jobs, filtered by status or model. | Free |
| cancel_job | reelrail:generate:video | Stop a queued or running job. | Free. A cancelled job is never charged and its hold is released. |
| upload_reference | reelrail:generate:video | Fetch a public image or video URL into the workspace so a later generate_video call can reference it. | Free. Counts against the workspace's storage retention window. |
| get_credit_balance | reelrail:read | Current balance, plan, per-job ceiling and monthly ceiling. | Free |
| synthesize_speech | reelrail:generate:video | Read a script aloud in one of twelve voices and store it as an audio asset a talking-head generation can use. | Spends creditsSpends credits: $0.015 per 1 000 characters at your plan's markup, never less than 1 credit. Repeat a requestId to retry without paying twice. |
| transcribe_captions | reelrail:generate:video | Transcribe an asset or a finished job's clip to WebVTT and store the captions as a downloadable asset. | Spends creditsSpends credits: billed per audio minute, which is 1 credit for any realistic clip. |
| attest_asset_rights | reelrail:generate:video | Record that the person in an uploaded photo may be used. A talking-head job is refused until its avatar image carries this. | Free. Only call it after the person using the assistant has confirmed the likeness statement themselves. |
| create_sequence | reelrail:generate:video | Create a storyboard: one model, shared references and defaults, and up to 24 shots that each render as their own job. | Free. Nothing renders until run_sequence. |
| get_sequence | reelrail:read | Read a sequence with every shot, its job status and a playable link per finished shot. | Free |
| list_sequences | reelrail:read | Page through the workspace's sequences, newest first. | Free |
| run_sequence | reelrail:generate:video | Submit the sequence's unrendered shots, as many as the plan's concurrency cap allows; the rest come back with the reason they were skipped. | Spends creditsSpends credits: one job per submitted shot, at the same price generate_video would charge. |
| regenerate_shot | reelrail:generate:video | Re-shoot one shot, optionally with a new prompt, preset or parameter overrides. | Spends creditsSpends credits: a fresh job for that shot. Repeat a requestId to retry without paying twice. |
| archive_sequence | reelrail:generate:video | Put a sequence away. It stops appearing in lists and can no longer be run. | Free. The rendered jobs and clips are kept. |
| create_share_link | reelrail:generate:video | Publish a finished job or sequence at a public URL that anyone with the link can watch - prompt, model, parameters and the clip, never your reference files or workspace details. | Free. Optional expiry from 1 hour to 90 days; revocable at any time. |
| list_share_links | reelrail:read | What the workspace has published, with each link's URL and view count. | Free |
| revoke_share_link | reelrail:generate:video | Stop a share link working. The public page 404s from the next request on. | Free |
What you are approving
The first time a client connects, Reelrail asks you to approve its request on https://app.reelrail.app/consent. You can approve a subset, and you can take it back at any time from Connected apps.
| Scope | Means |
|---|---|
| reelrail:read | List available models, read your jobs and their results, and see your credit balance. |
| reelrail:generate:video | Start video generations, upload references and cancel jobs. Spends credits from the workspace below. |
| offline_access | Keep working after you close the browser, without asking you to sign in again. Revoke it any time under Connected apps. |
Connect your client
Claude.ai and Claude Desktop (custom connector)
- Settings -> Connectors -> Add custom connector.
- Paste the server URL and click Connect.
- Sign in to Reelrail in the browser window, approve the request, and you are done.
https://api.reelrail.app/mcpClaude Desktop (JSON config, via mcp-remote)
- Open the Developer settings and edit claude_desktop_config.json.
- Add the entry below, then restart Claude Desktop. A browser window opens for the OAuth flow.
{
"mcpServers": {
"reelrail": {
"command": "npx",
"args": ["mcp-remote", "https://api.reelrail.app/mcp"]
}
}
}Claude Code
- Add the server, then run /mcp inside Claude Code and authenticate in the browser.
- Prefer a headless setup (CI, a shared box)? Skip OAuth and pass an organization API key instead.
claude mcp add --transport http reelrail https://api.reelrail.app/mcpclaude mcp add --transport http reelrail https://api.reelrail.app/mcp \
--header "Authorization: Bearer rr_org_xxxxxxxxxxxxxxxx"ChatGPT
- Settings -> Connectors (developer mode) -> Create.
- Enter the server URL, choose OAuth authentication, then Connect and approve.
https://api.reelrail.app/mcpCursor and Windsurf
- Add the server to the editor's MCP config and reload. Both open the OAuth flow.
{
"mcpServers": {
"reelrail": { "url": "https://api.reelrail.app/mcp" }
}
}{
"mcpServers": {
"reelrail": { "serverUrl": "https://api.reelrail.app/mcp" }
}
}MCP Inspector (for testing)
- Run the inspector, paste the server URL, set the transport to Streamable HTTP.
- Open Auth settings and run Quick OAuth Flow, then call tools/list.
npx @modelcontextprotocol/inspectorWithout OAuth: organization API keys
Scripts, CI jobs and any client that cannot run a browser flow can send an organization key instead. Create one under API keys - it starts with rr_org_, belongs to the workspace rather than to you, and carries whatever permissions you gave it. Treat it like a password: it is shown once and it spends real credits.
curl -sS https://api.reelrail.app/mcp \
-H "Authorization: Bearer rr_org_xxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'Revoking the key stops every client using it on the next request. OAuth grants are revoked separately under Connected apps.