# Squall Studio (remote · squallstudio.com)

Read, edit and generate AI microdrama scripts, shots, characters and video in Squall Studio

- Trust score: 74/100 (medium)
- Change this week: +4
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-09-26

## Components

- remote · `squallstudio.com`: 74/100 (this document), [markdown](https://verifymcp.io/servers/com-squallstudio-squall-studio/api-mcp.md), [page](https://verifymcp.io/servers/com-squallstudio-squall-studio/api-mcp)

## Channel facts

- Endpoint: `https://squallstudio.com/api/mcp`
- Transports: `streamable-http`
- Auth: `required`
- Version: `1.0.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-09-26.

- **Endpoint Security**: 57/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation check failed: no authorisation is required to call this server, and it exposes a tool marked destructive (update_shot).
  - HTTPS is enforced; there's no plaintext access path.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 78/100
  - AI-judged instruction clarity (excellent).
  - Tool/resource definitions use about 2789 tokens (~92/item across 30 items; 30 tools + 0 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 63/100
  - Stability observed for 19 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 98/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 95% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - All 3 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
  - An AI judge read all 30 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the Squall Studio MCP server?

Squall Studio is a hosted endpoint at https://squallstudio.com/api/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http com-squallstudio-squall-studio 'https://squallstudio.com/api/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "com-squallstudio-squall-studio": {
      "url": "https://squallstudio.com/api/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "com-squallstudio-squall-studio": {
      "type": "http",
      "url": "https://squallstudio.com/api/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.com-squallstudio-squall-studio]
url = "https://squallstudio.com/api/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-squallstudio-squall-studio": {
      "type": "remote",
      "url": "https://squallstudio.com/api/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add com-squallstudio-squall-studio --url 'https://squallstudio.com/api/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  com-squallstudio-squall-studio:
    url: "https://squallstudio.com/api/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "com-squallstudio-squall-studio": {
      "Transport": "http",
      "Url": "https://squallstudio.com/api/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add com-squallstudio-squall-studio -t streamable-http -u 'https://squallstudio.com/api/mcp'
```

### Other

```json
{
  "mcpServers": {
    "com-squallstudio-squall-studio": {
      "type": "http",
      "url": "https://squallstudio.com/api/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-09-26 (score 74, +1)

No change was recorded against any check on this day. Stability & Change Management went from 60 to 63. That category is still filling its 30-day observation window: 18 days of observed history at the previous scan, 19 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-25 (score 73, 0)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-09-24 (score 73, +1)

No change was recorded against any check on this day. Stability & Change Management went from 53 to 57. That category is still filling its 30-day observation window: 16 days of observed history at the previous scan, 17 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-22 (score 72, +1)

No change was recorded against any check on this day. Stability & Change Management went from 47 to 50. That category is still filling its 30-day observation window: 14 days of observed history at the previous scan, 15 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-20 (score 71, +1)

No change was recorded against any check on this day. Stability & Change Management went from 40 to 43. That category is still filling its 30-day observation window: 12 days of observed history at the previous scan, 13 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-18 (score 70, +1)

No change was recorded against any check on this day. Stability & Change Management went from 33 to 37. That category is still filling its 30-day observation window: 10 days of observed history at the previous scan, 11 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-16 (score 69, +1)

No change was recorded against any check on this day. Stability & Change Management went from 27 to 30. That category is still filling its 30-day observation window: 8 days of observed history at the previous scan, 9 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-15 (score 68, 0)

- [security] Tool “list_shot_continuity_references” rewrote its description, which is the text the model reads
- [functional regression] Schema quality: 2531 → 2789
- [functional] New tool “update_shot_continuity_reference”
- [cosmetic] “attach_shot_continuity_reference” added an optional parameter “guidance”
- [cosmetic] “upload_shot_continuity_reference” added an optional parameter “guidance”

## MCP tools (30)

### `list_projects` (~17 tokens)

List projects

List all projects owned by the authenticated user.

### `get_project` (~27 tokens)

Get project

Get one project's summary and current workflow step.

Input parameters:

- `project_id` (string, required): Project id.

### `get_project_episodes` (~27 tokens)

List episodes

List the episodes in a project.

Input parameters:

- `project_id` (string, required): Project id.

### `get_episode` (~23 tokens)

Get episode

Get one episode record.

Input parameters:

- `episode_id` (string, required): Episode id.

### `get_episode_editor` (~65 tokens)

Get full episode

Get the full episode tree in one call: project, episode, outline, script, segments, shots, characters, looks, locations and jobs. Prefer this over several narrower calls.

Input parameters:

- `episode_id` (string, required): Episode id.
- `project_id` (string, required): Project id.

### `get_episode_shots` (~27 tokens)

List shots

List the shots in an episode.

Input parameters:

- `episode_id` (string, required): Episode id.

### `list_episode_segments` (~27 tokens)

List segments

List the video segments in an episode.

Input parameters:

- `episode_id` (string, required): Episode id.

### `get_scene_assets` (~53 tokens)

Get scene

Get one scene with its shots, characters, locations and continuity references.

Input parameters:

- `episode_id` (string, required): Episode id.
- `project_id` (string, required): Project id.
- `scene_number` (integer, required): Scene number.

### `get_project_script` (~26 tokens)

Get script

Get a project's full script package.

Input parameters:

- `project_id` (string, required): Project id.

### `get_project_characters` (~25 tokens)

List characters

List a project's characters.

Input parameters:

- `project_id` (string, required): Project id.

### `get_character` (~23 tokens)

Get character

Get one character record.

Input parameters:

- `character_id` (string, required): Character id.

### `get_character_looks` (~26 tokens)

List character looks

List a character's looks.

Input parameters:

- `character_id` (string, required): Character id.

### `get_project_locations` (~24 tokens)

List locations

List a project's locations.

Input parameters:

- `project_id` (string, required): Project id.

### `get_location` (~23 tokens)

Get location

Get one location record.

Input parameters:

- `location_id` (string, required): Location id.

### `get_asset_library` (~27 tokens)

List assets

List generated assets available to a project.

Input parameters:

- `project_id` (string, required): Project id.

### `get_job` (~40 tokens)

Get job status

Get one generation job's status and output. Use this to poll a job returned by a generate_* tool.

Input parameters:

- `job_id` (string, required): Job id.

### `list_project_jobs` (~29 tokens)

List jobs

List generation jobs for a project, newest first.

Input parameters:

- `project_id` (string, required): Project id.

### `list_shot_continuity_references` (~86 tokens)

List continuity references

List the continuity reference images attached to one shot. get_scene_assets also returns these, but only for a whole scene — use this when you need the asset ids, for example to remove one or update its guidance. Each reference's saved guidance is in metadata.continuityGuidance.

Input parameters:

- `shot_id` (string, required): Shot id (episode_shots row).

### `generate_script` (~258 tokens)

Generate script

Write a full multi-episode script from a story premise. This CREATES A NEW PROJECT — it does not edit an existing one, and it takes no project_id. While the job runs, job.output carries live progress (phase, completedEpisodes, totalEpisodes). On success the new project also has its characters, locations, episodes, shots and segments seeded, ready for the other tools. Spends credits. Returns a job id — poll it with get_job.

Input parameters:

- `episode_count` (integer): How many episodes to write.
- `episode_length_seconds` (integer, required): Target length of each episode, in seconds.
- `genre` (string): Genre label.
- `idempotency_key` (string, required): Stable key identifying this generation request. Reuse the SAME key when retrying the same request — the original job is returned and no second charge is made. Use a NEW key when you deliberately want…
- `language` (string): Language to write in.
- `screen_ratio` (string): Aspect ratio.
- `story_idea` (string, required): The story premise to write from.
- `target_platform` (string): Platform the episodes are cut for.
- `visual_style` (string): Visual style. Defaults to Realistic TV Drama.

### `generate_shot_clip` (~125 tokens)

Generate shot clip

Generate a video clip for a single shot (episode_shots row). Spends credits. Returns a job id — poll it with get_job.

Input parameters:

- `idempotency_key` (string, required): Stable key identifying this generation request. Reuse the SAME key when retrying the same request — the original job is returned and no second charge is made. Use a NEW key when you deliberately want…
- `model` (string): Video model override.
- `short_shot_number` (integer): Target a specific short shot.
- `shot_id` (string, required): Shot id.

### `generate_character_image` (~141 tokens)

Generate character image

Generate a reference image for a character. Spends credits. Returns a job id — poll it with get_job.

Input parameters:

- `character_id` (string, required): Character id.
- `character_look_id` (string): Specific look; defaults to the base look.
- `idempotency_key` (string, required): Stable key identifying this generation request. Reuse the SAME key when retrying the same request — the original job is returned and no second charge is made. Use a NEW key when you deliberately want…
- `reference_image_asset_ids` (array): Existing asset ids to use as references.
- `user_notes` (string): Extra direction for the image.

### `generate_location_image` (~111 tokens)

Generate location image

Generate a reference image for a location. Spends credits. Returns a job id — poll it with get_job.

Input parameters:

- `idempotency_key` (string, required): Stable key identifying this generation request. Reuse the SAME key when retrying the same request — the original job is returned and no second charge is made. Use a NEW key when you deliberately want…
- `location_id` (string, required): Location id.
- `reference_image_asset_ids` (array)
- `user_notes` (string)

### `generate_shot_background_image` (~305 tokens)

Generate background plate

Generate an empty background plate for one short shot. Both reference inputs steer what the plate itself looks like — layout, prop identity, materials and lighting — and are unrelated to upload_shot_continuity_reference, which guides clip generation instead. Use reference_image_asset_ids for images already in this project (find them with get_asset_library) and reference_images_base64 to send bytes you produced locally, for example a frame lifted from an earlier scene so a prop matches what is already on screen. Uploaded bytes are used for this one generation and are not kept as project assets. The location's own reference images are always included on top of both. Spends credits. Returns a job id — poll it with get_job.

Input parameters:

- `idempotency_key` (string, required): Stable key identifying this generation request. Reuse the SAME key when retrying the same request — the original job is returned and no second charge is made. Use a NEW key when you deliberately want…
- `reference_image_asset_ids` (array)
- `reference_images_base64` (array): Images to send as bytes. PNG, JPEG and WebP only; the bytes are sniffed, so the filename extension alone will not get a non-image through. Keep them small — a 720x1280 JPEG is roughly 40-130KB of bas…
- `short_shot_number` (integer, required): Short shot number within the shot.
- `shot_id` (string, required): Shot id.

### `generate_episode_music` (~104 tokens)

Generate episode music

Generate a background music track for an episode. Requires the episode to already have an assembled video. Spends credits. Returns a job id — poll it with get_job.

Input parameters:

- `episode_id` (string, required): Episode id.
- `idempotency_key` (string, required): Stable key identifying this generation request. Reuse the SAME key when retrying the same request — the original job is returned and no second charge is made. Use a NEW key when you deliberately want…

### `update_shot` (~146 tokens)

Update shot

Overwrite fields on one shot. Read the shot first (get_episode_shots or get_episode_editor), decide the change yourself, then send ONLY the fields you changed — omitted fields are left untouched. To change dialogue, edit camera_setup.short_shots[].dialogue_covered; never send the deprecated `dialogue` field, which can duplicate or resurrect lines. This writes immediately and cannot be undone.

Input parameters:

- `patch` (object, required): Fields to change. Send only what you are changing. Edit dialogue via camera_setup.short_shots[].dialogue_covered, not the deprecated `dialogue`.
- `shot_id` (string, required): Shot id (episode_shots row) to update.

### `update_location` (~266 tokens)

Update location

Overwrite fields on one location. Read it first (get_project_locations or get_location), then send ONLY the fields you changed — omitted fields are left untouched. IMPORTANT: a location is usually shared by several scenes across episodes, so this edit changes every scene that uses it. Check where it is used first; if the change is meant for one scene only, it needs a NEW location rather than an edit to this one. Editing name, short_description, visual_prompt, user_prompt, visual_style, aspect_ratio or spatial_layout marks the location stale, because its existing generated image no longer matches the description — regenerate the image if you want them back in sync. Editing mood, location_type, recurring or appears_in_episodes does not affect the image and leaves the stale flag alone. spatial_layout is the set bible: the named zones of the set and the fixed zone and height of each prop. Scenes must draw their spatial_geometry zones from it instead of inventing labels, so correcting it here fixes prop placement for every scene at once. Keep descriptions consistent with the owning character's status and the project's tone. This writes immediately and cannot be undone.

Input parameters:

- `location_id` (string, required): Location id to update.
- `patch` (object, required): Fields to change. Send only what you are changing.

### `upload_shot_continuity_reference` (~268 tokens)

Upload continuity reference

Attach an image you produced locally to a shot as a continuity reference. A continuity reference is fed into this shot's next clip generation as a layout, prop, wardrobe and screen-direction guide — it is NOT used as the shot's opening frame or exact composition. Attaching one changes nothing until the clip is generated again. Send the image as base64 — keep it small (a 720x1280 JPEG is roughly 40-130KB of base64). PNG, JPEG and WebP only; the bytes are sniffed, so the filename extension alone will not get a non-image through. If the image is already an asset in this project, use attach_shot_continuity_reference instead and send no bytes.

Input parameters:

- `filename` (string, required): File name to store it under, e.g. scene-1-last-frame.jpg.
- `guidance` (string): How the video model should use this reference, e.g. which positions or props to match and what to ignore. Saved on the reference and sent with every later generation of the shot.
- `image_base64` (string, required): The image bytes, base64-encoded. No data: URI prefix.
- `shot_id` (string, required): Shot id (episode_shots row) to attach the reference to.

### `attach_shot_continuity_reference` (~219 tokens)

Attach continuity reference

Attach an image that already exists in this project to a shot as a continuity reference. A continuity reference is fed into this shot's next clip generation as a layout, prop, wardrobe and screen-direction guide — it is NOT used as the shot's opening frame or exact composition. Attaching one changes nothing until the clip is generated again. Find asset ids with get_asset_library. A shot's own thumbnail is its clip's last frame, so attaching the previous scene's thumbnail is the cheapest way to carry continuity forward. To use an image that is not yet an asset here, use upload_shot_continuity_reference instead.

Input parameters:

- `asset_id` (string, required): Id of an existing image asset in this project.
- `guidance` (string): How the video model should use this reference, e.g. which positions or props to match and what to ignore. Saved on the reference and sent with every later generation of the shot.
- `shot_id` (string, required): Shot id (episode_shots row) to attach the reference to.

### `update_shot_continuity_reference` (~154 tokens)

Update continuity reference

Set or clear the guidance on one continuity reference already attached to a shot — the note telling the video model how to use that image. List references first with list_shot_continuity_references to get the asset id. Like attaching, this changes nothing until the clip is generated again.

Input parameters:

- `asset_id` (string, required): Id of the continuity reference to update, from list_shot_continuity_references.
- `guidance` (required): How the video model should use this reference, e.g. which positions or props to match and what to ignore. Send null or an empty string to clear it.
- `shot_id` (string, required): Shot id (episode_shots row) the reference is attached to.

### `remove_shot_continuity_reference` (~97 tokens)

Remove continuity reference

Detach one continuity reference from a shot. List them first with list_shot_continuity_references to get the asset id. This deletes the reference asset permanently and cannot be undone.

Input parameters:

- `asset_id` (string, required): Id of the continuity reference to remove, from list_shot_continuity_references.
- `shot_id` (string, required): Shot id (episode_shots row) the reference is attached to.

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/com-squallstudio-squall-studio/api-mcp#diagnostics

## Score history

- 2026-09-26: 74
- 2026-09-25: 73
- 2026-09-24: 73
- 2026-09-23: 72
- 2026-09-22: 72
- 2026-09-21: 71
- 2026-09-20: 71
- 2026-09-19: 70
- 2026-09-18: 70
- 2026-09-17: 69
- 2026-09-16: 69
- 2026-09-15: 68
- 2026-09-14: 68
- 2026-09-13: 67
- 2026-09-12: 67
- 2026-09-11: 67
- 2026-09-10: 66
- 2026-09-09: 66
- 2026-09-08: 65
- 2026-09-07: 65

## Common questions

### What is the Squall Studio MCP server?

Squall Studio is an MCP server listed in the public MCP registry as com.squallstudio/squall-studio. Read, edit and generate AI microdrama scripts, shots, characters and video in Squall Studio. This page covers its hosted endpoint (https://squallstudio.com/api/mcp).

### Is the Squall Studio MCP server safe to use?

Squall Studio scores 74 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the Squall Studio MCP server expose?

Squall Studio exposes 30 tools: list_projects, get_project, get_project_episodes, get_episode, get_episode_editor, and 25 more. Their descriptions and schemas cost roughly 2,789 tokens of context every time the server is loaded.

### Does the Squall Studio MCP server require authentication?

No. We connected to Squall Studio without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

### Is the Squall Studio MCP server still maintained?

Squall Studio is still listed as active in the MCP registry. We last reached this channel on 26 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://squallstudio.com/api/mcp
- Authorisation metadata: https://squallstudio.com/.well-known/oauth-protected-resource/api/mcp
- Website: https://squallstudio.com/docs/mcp
- Changelog RSS feed: https://verifymcp.io/servers/com-squallstudio-squall-studio/api-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/com-squallstudio-squall-studio/api-mcp.json
- HTML version of this page: https://verifymcp.io/servers/com-squallstudio-squall-studio/api-mcp
