Claude + Squall MCP

Connect Claude to Squall Studio

Squall Studio has a built-in MCP server. Connect it once and Claude can read your projects - scripts, scenes, shots, characters, locations, generated assets - edit your shots and locations, and start image, video, and music generation from a chat window.

It talks to your account only. A key sees exactly the projects you own in the web app, and every call goes through the same ownership and billing checks the app itself uses.

Transport
Streamable HTTP
Auth
Bearer API key
Tools
25 available

Before you start

You'll need:

  • A Squall Studio account with at least one project.
  • Claude Code (npm install -g @anthropic-ai/claude-code) or Claude Desktop.
  • Credits in your account if you want Claude to generate media. Check your balance.

Step 1 - Create an API key

Go to squallstudio.com/api-keys, give the key a name you'll recognise later, and pick its permissions.

PermissionWhat Claude can do
Read onlyRead your projects, scripts, shots, characters, locations, and job history. Cannot change anything.
Read + edit scriptsAlso lets Claude rewrite dialogue, shot details, and locations. Edits overwrite in place and cannot be undone. Does not spend credits.
Read + generate mediaAlso lets Claude start image, video, and music generation. These calls spend real credits.

Start with Read only. Create a second key with editing or generation access once you know how you want to use it. Editing and generation are independent permissions: editing costs nothing, and generating changes no text.

Press Create key and copy the token. It starts with sw_live_ and is shown exactly once. If you lose it, revoke the key and create a new one.

Treat the key like a password
Anyone holding it can read your projects and, if it has generation permission, spend your credits. It can't be used to sign in to the web app, change your account, or create more keys.

Step 2 - Connect Claude

Claude Code

Run this in your terminal, pasting your key at the end:

bash
claude mcp add --transport http squall-studio \
  https://squallstudio.com/api/mcp \
  --header "Authorization: Bearer sw_live_your_key_here"

Then start Claude Code and check the connection:

bash
claude
/mcp

You should see squall-studio listed as connected, with 25 tools available.

Claude Desktop

Claude Desktop doesn't accept custom headers directly yet, so bridge the connection with mcp-remote. Open Settings - Developer - Edit Config and add:

json
{
  "mcpServers": {
    "squall-studio": {
      "command": "npx",
      "args": [
        "-y", "mcp-remote",
        "https://squallstudio.com/api/mcp",
        "--header", "Authorization: Bearer sw_live_your_key_here"
      ]
    }
  }
}

Restart Claude Desktop. Squall Studio appears in the tools menu.

Using Codex instead?
Codex uses its own MCP configuration with codex mcp add or ~/.codex/config.toml. Open the Codex setup guide.

Step 3 - Try it

You don't call tools by name. Describe what you want, using the project and episode names you already use in the app. If two projects share a title, Claude should ask which one you meant rather than guess.

Getting oriented
List my Squall Studio projects.
Show me episode 2 of Ashes of Identity and summarise the scenes.
Which shots in episode 1 of The Genesis Block still need regeneration?
Reviewing your work
Read the script for episode 1 and tell me which scenes have dialogue but no blocking.
List the characters in this project and which ones don't have a reference image yet.
Show me every failed generation job in this project and what went wrong.
Editing

Needs a Read + edit scripts key.

In episode 1 scene 3, Elena's second line is too on-the-nose - tighten it and keep the length.
Shot 4 has two characters but no camera movement. Read it and add a slow push-in.
Fix the typo in the third short shot's dialogue.
The Thorne Gala Ballroom description reads too modern - make the set dressing older money, and tell me which scenes use it before you change it.
Generating

Needs a Read + generate media key.

Generate a background plate for short shot 1 of the first shot in episode 1.
Generate reference images for every character in this project that doesn't have one, then tell me the job ids.
Generate a music track for episode 2.

How editing works

There is no draft state and no undo. When Claude edits a shot, the change is saved the moment the tool returns - the same as if you'd typed it into the app and it autosaved.

  • Ask to see before you ask to change. Ask Claude to read shot 4 and show you the dialogue, then tighten Elena's second line after you confirm.
  • Claude sends only the fields it changed. Everything it doesn't mention is left alone.
  • Editing is free. No credits are involved, so a key can edit without being able to spend anything.
  • Your safety net is the app. Open the shot in the web editor to see the result.
Editing text does not re-render video
If a shot has already been generated, changing its dialogue or blocking leaves the existing clip in place. The video and text will disagree until you regenerate the shot yourself.

Locations are shared

A location is usually used by several scenes, often across episodes. Editing one changes every scene that uses it. Ask Claude which scenes use a location before changing it; if the change belongs to one scene only, that scene needs its own location, which you create in the app.

Locations track staleness. Editing the name, description, visual prompt, style, or aspect ratio marks the location stale because its generated image no longer matches the words. Editing mood, type, or episode assignments leaves the image alone.

How generation works

Generation is asynchronous. When Claude starts a job it gets back a job id immediately, not a finished file.

  1. Claude calls a generate_* tool and gets { jobId, status: "queued" }.
  2. Credits are reserved at that moment.
  3. Claude polls the job with get_job until it reads succeeded or failed.
  4. A succeeded job carries a link to the finished asset, which also appears in your project library in the web app.
Retries never double-charge
Every generation tool takes an idempotency key. If a call fails halfway, retrying with the same key returns the original job instead of starting and billing a second one.

What Claude can and can't do

It can read

Projects and episodes, the full script, scenes and shots, characters and looks, locations, generated assets, and job history.

It can edit

Shots and locations with a script:write key, including dialogue, blocking, camera details, and location descriptions.

It can generate

Shot clips, character images, location images, shot background plates, and episode music.

It can't touch your account

Keys can't create or revoke other keys, change billing, sign in to the web app, or reach another user's data.

Tool reference

Useful if you're debugging a call or writing your own client.

Read tools

Read the production state an agent needs before planning edits or generation.

projects:read
ToolReturns
list_projects
Project summaries.
get_project
Project summary.
get_project_episodes
Episode records.
get_episode
Episode record.
get_episode_editor
Episode editor payload.
Prefer this before multi-step episode review because it reduces lookup drift.
get_episode_shots
Shot records.
list_episode_segments
Episode segment records.
get_scene_assets
Scene asset payload.
get_project_script
Project script payload.
get_project_characters
Character records.
get_character
Character record.
get_character_looks
Character look records.
get_project_locations
Location records.
get_location
Location record.
get_asset_library
Asset library payload.
get_job
Generation job status and output.
Use this to poll jobs returned by generation tools.
list_project_jobs
Generation job records.

Edit tools

Patch authored production data after reading it first.

script:write
ToolDoes
update_shot
Overwrite selected fields on one shot.
Send only changed fields. Dialogue edits go through camera_setup.short_shots[].dialogue_covered. Writes immediately and cannot be undone.
update_location
Overwrite selected fields on one location.
Locations are shared across scenes. Text/image-affecting edits mark the existing location image stale; mood and episode assignment edits do not.

Generation tools

Start billed async generation jobs and poll them with get_job.

generation:write
ToolStarts
generate_script
Write a full multi-episode script from a premise, as a new project.
Creates a new project rather than acting on an existing one. The longest job in the system — poll get_job for phase and completedEpisodes.
generate_shot_clip
Generate a video clip for a single episode shot.
Idempotency keys prevent duplicate billed jobs on retries.
generate_character_image
Generate a reference image for a character.
generate_location_image
Generate a reference image for a location.
generate_shot_background_image
Generate an empty background plate for one short shot.
generate_episode_music
Generate a background music track for an episode.
Requires the episode to already have an assembled video.

Credits and billing

Generation through Claude costs exactly what the same generation costs in the web app and draws on the same balance. Credits are reserved when the job starts and settled when it finishes; a failed job doesn't keep your credits.

Every job Claude starts shows up in your normal job history and billing records. There is no separate MCP bill and no separate quota.

Watch open-ended requests
"Generate images for every character that's missing one" can be a dozen jobs. Ask Claude to tell you how many jobs it is about to start if you want a checkpoint first.

Troubleshooting

[403] This endpoint requires an API key.

The key is missing, mistyped, or revoked. Check that the header is exactly Authorization: Bearer sw_live_..., and confirm the key still shows as active on the API keys page.

[403] This API key does not have the required scope: generation:write

The key can't spend credits. Create a new key with Read + generate media and reconnect. Permissions can't be added to an existing key.

[403] This API key does not have the required scope: script:write

The key can't edit. Create a new key with Read + edit scripts and reconnect.

[404] Project not found. / Episode not found.

Either the id is wrong or it belongs to another account. Ask Claude to list your projects and work from that list.

[400] You need more credits to run this generation.

Top up your balance, then ask Claude to retry the generation.

[400] Assemble the episode before generating music.

generate_episode_music scores an existing cut. Assemble the episode in the app first.

[409] Idempotency key has already been used with different generation parameters.

A retry reused a key but changed the request. Ask for a fresh generation and Claude will use a new key.

[409] This request is already being processed. Retry in a moment.

An identical job is in flight. Wait a few seconds and try again.

Claude Code says the server is disconnected

Re-add it and check the URL and header:

bash
claude mcp remove squall-studio
claude mcp add --transport http squall-studio \
  https://squallstudio.com/api/mcp \
  --header "Authorization: Bearer sw_live_your_key_here"

Technical details

Endpointhttps://squallstudio.com/api/mcp
TransportStreamable HTTP (MCP)
AuthAuthorization: Bearer sw_live_...
Scopesprojects:read, script:write, generation:write
Tools25 total

Any MCP-capable client that supports Streamable HTTP with a custom header can connect, not just Claude.