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.
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.
| Permission | What Claude can do |
|---|---|
| Read only | Read your projects, scripts, shots, characters, locations, and job history. Cannot change anything. |
| Read + edit scripts | Also lets Claude rewrite dialogue, shot details, and locations. Edits overwrite in place and cannot be undone. Does not spend credits. |
| Read + generate media | Also 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.
Step 2 - Connect Claude
Claude Code
Run this in your terminal, pasting your key at the end:
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:
claude
/mcpYou 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:
{
"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.
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.
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?
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.
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.
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.
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.
- Claude calls a
generate_*tool and gets{ jobId, status: "queued" }. - Credits are reserved at that moment.
- Claude polls the job with
get_jobuntil it readssucceededorfailed. - A succeeded job carries a link to the finished asset, which also appears in your project library in the web app.
What Claude can and can't do
Projects and episodes, the full script, scenes and shots, characters and looks, locations, generated assets, and job history.
Shots and locations with a script:write key, including dialogue, blocking, camera details, and location descriptions.
Shot clips, character images, location images, shot background plates, and episode music.
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.
| Tool | Returns |
|---|---|
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.
| Tool | Does |
|---|---|
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.
| Tool | Starts |
|---|---|
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.
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:writeThe 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:writeThe 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:
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
| Endpoint | https://squallstudio.com/api/mcp |
|---|---|
| Transport | Streamable HTTP (MCP) |
| Auth | Authorization: Bearer sw_live_... |
| Scopes | projects:read, script:write, generation:write |
| Tools | 25 total |
Any MCP-capable client that supports Streamable HTTP with a custom header can connect, not just Claude.
