@starreel/mcp 0.1.257 → 0.1.258

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/SKILL.md CHANGED
@@ -94,6 +94,7 @@ announces a condensed version as MCP `instructions` at connect time.
94
94
  | Their own portraits / scene / prop / shot images | `upload_image` · `set_character_portrait` · `upload_scene_image` · `upload_prop_sheet` · `upload_shot_frame` — **check the image before uploading** (see *Customer-supplied images* below); after a portrait swap, `generate_character_sheet` for that character (the old sheet is invalidated and **not** regenerated automatically) | rendering a "fix" elsewhere and uploading it — use `generate_shot_frame`; uploading a group photo, a captioned/watermarked image, or a multi-view sheet as a portrait; uploading a scene photo with people in it |
95
95
  | Their own **footage** for a shot (screen recording, product b-roll, an existing clip) | `upload_shot_footage` → that shot is no longer AI-generated (frames/video skipped, final cut uses the clip as-is, duration written back from the clip); **it overwrites whatever AI video that shot already had**, and afterwards every AI video call on it (including `edit_video_shot`) is refused with **409** until you `clear_shot_footage` or pass `replace_user_footage: true` | pasting an externally AI-generated clip to "fix" a shot — it carries none of this film's identity / style anchors; use `regenerate_shot_video` instead |
96
96
  | A **greybox / 3D previs** or any clip whose motion, camera move and blocking a shot should be **generated from** | `create_motion_reference` (greybox: `kind` = `greybox_coarse` / `greybox_fine`) → `attach_motion_reference` — with several proxies pass `greybox_bindings` (which coloured proxy is which character) → `quote_videos` / `generate_videos` as usual; the shot's first/last frames are not sent and identity comes from the character references. Coarse greyboxes built from simple primitives work best; keep trail lines / axes / camera frustums out of fine greyboxes | `upload_shot_footage` (that makes the clip the finished shot); a greybox with several characters and no bindings — identities get swapped |
97
+ | Shot size / camera move / blocking keep coming out wrong and the client has **no greybox** | `generate_greybox_previs` (`dry_run=true` first to see which fields and fallbacks it uses; fix fields with `update_shot`) — the platform renders a coarse greybox from the storyboard fields and fills `greybox_bindings` → `get_greybox_previs` → `review_frames` → `quote_videos` / `generate_videos`. Tell the client first: first/last frames are not sent and the video quote rises by about 20% | Using it on insert shots, shots with no on-screen character, shots over 15 s or state-change shots (it returns the reason instead) |
97
98
  | A clip that should **drive the motion** of an AI shot (a blocking/previz pass, a dance or action reference) | `edit_video_shot` with `reference_video_urls` — the shot keeps its AI video and borrows the clip's movement. To make the clip itself the source and restyle it in place, `upload_shot_footage` it first, then `edit_video_shot` with `replace_user_footage: true` | `upload_shot_footage` alone — that registers the clip as the finished shot, so nothing gets restyled and every later AI call on it returns 409 |
98
99
  | A clip whose **motion should be kept while the people / outfits are redrawn** (video repaint) — their own footage or a shot already generated here | `get_repaint_capabilities` (is it enabled for this drama; `relayMaxSegments`) → for their own clip, `upload_shot_footage` it onto a shot first → `quote_repaint_shot_video` → `repaint_shot_video` (prompt + reference image; with no `reference_image_url` the shot's character portrait is used — without any reference the person is redrawn too) **or** `quote_reskin_shot_video` → `reskin_shot_video` (`first_frame_url` = an already-reskinned first frame that matches the original first frame's composition, pose and props exactly) → `get_repaint_status` with the returned id until `completed` → `restore_repaint_original` to switch back (free). Motion, lip timing and camera move follow the source and its audio is carried over. ≤5 s is one charge (billed as 5 s); with long-shot relay enabled, 5–~14 s is split into ≤3 relayed segments, one charge each, and the quote is the total and the charge cap. A quote is tied to the shot's current video — if that video changes, generating returns 409; re-quote (free) | `edit_video_shot` to swap the whole cast or wardrobe (it edits by instruction); clips longer than ~14 s (`split_shot` first) |
99
100
  | `review_storyboards` reports `forbidden_term` (light / color-temperature / BGM wording in the shot text) | every hit is listed at once in the finding's `hits` (`shot`, `field`, `term`) → `get_shot_prompts` to read that field (`description` is returned there too) → `update_shot` to remove the term from that field; if the intent is lighting, move it to `update_shot`'s `lighting` field (not scanned, and video / image generation read it); a hit with `field=sound_effect` is fixed with `update_shot`'s `sound_effect` field (its current value is in `get_shot_prompts` too) → `review_storyboards` again | rewriting the whole shot blind, or putting the lighting back into `description` / prompts in other words |
@@ -281,5 +281,7 @@
281
281
  "create_motion_reference": "Register a **motion / camera reference clip** in your own motion reference library (free), then attach it to a shot with attach_motion_reference — the AI video for that shot is regenerated following the clip's motion, camera move and blocking. ★**Greybox (3D previs) goes here**: set kind to greybox_coarse / greybox_fine and the platform tells the model to use the greybox only for camera movement, rhythm, shot size, motion paths and blocking — never its proxy shapes or untextured look. Greybox tips: coarse works best — build people/objects from simple primitives; model only the torso, or if you model limbs/wings animate them fully, otherwise limbs come out stiff; one clip ≤30 s (Seedance 2.5), 1–5 subjects work best. ⚠️ Not the same as upload_shot_footage: that one says \"this clip IS the finished shot\"; this one says \"regenerate the shot following this clip\".",
282
282
  "list_motion_references": "List the clips in your own motion reference library (greyboxes included), free. Returns id / name / kind / video_url; pass the id to attach_motion_reference.",
283
283
  "get_shot_motion_reference": "Show the motion reference / greybox attached to a shot and its proxy-to-character bindings (free). greybox_gray_on=false means greybox rendering is not enabled for this drama yet and a greybox is treated as a plain motion reference.",
284
- "attach_motion_reference": "Attach a motion reference / greybox to a shot (free); asset_id=null detaches it (bindings are cleared too). Then quote_videos / generate_videos as usual: the shot switches to the reference-video path — motion, camera move, blocking and shot size follow the clip, first/last frames are not sent (the vendor treats the two as mutually exclusive), identity comes from the character reference images, and review_frames is still required before video. ★**When the greybox has several proxies, always pass greybox_bindings** saying which proxy is which character (e.g. [{proxy:\"red model\",character_id:12},{proxy:\"blue model\",character_id:15}]); the platform writes each character's reference image number into the prompt — without bindings, multi-character shots tend to swap identities. Write proxy exactly as the colour/number in the client's greybox; character_id must be a character of this drama (get_characters). Bound characters not on the shot's cast list get their reference images added automatically. Omitting greybox_bindings keeps the existing bindings for the same clip and clears them when the clip changes."
284
+ "attach_motion_reference": "Attach a motion reference / greybox to a shot (free); asset_id=null detaches it (bindings are cleared too). Then quote_videos / generate_videos as usual: the shot switches to the reference-video path — motion, camera move, blocking and shot size follow the clip, first/last frames are not sent (the vendor treats the two as mutually exclusive), identity comes from the character reference images, and review_frames is still required before video. ★**When the greybox has several proxies, always pass greybox_bindings** saying which proxy is which character (e.g. [{proxy:\"red model\",character_id:12},{proxy:\"blue model\",character_id:15}]); the platform writes each character's reference image number into the prompt — without bindings, multi-character shots tend to swap identities. Write proxy exactly as the colour/number in the client's greybox; character_id must be a character of this drama (get_characters). Bound characters not on the shot's cast list get their reference images added automatically. Omitting greybox_bindings keeps the existing bindings for the same clip and clears them when the clip changes.",
285
+ "generate_greybox_previs": "**Auto-generate a coarse greybox** for a shot from the fields the storyboard already has and attach it (free): shot size, camera height and side, camera move (push/pull/pan/tilt/track/crane/arc), blocking, facing, duration and action (approach, back away, turn, sit down…). The platform renders a primitive-geometry greybox clip (one colour per character, torso only), registers it as greybox_coarse and **fills greybox_bindings automatically** — the client does not have to build a greybox. The point is to turn shot size / camera move / blocking from text hints into pixel constraints when shots ignore the staging. ★Once attached the shot uses the reference-video path: **first/last frames are no longer sent** (identity comes from the character references) and **the video quote rises by roughly 20%** (reference video is billed per second) — tell the client both before generating. ★Run dry_run=true first to see which fields were used and what was assumed (assumptions = fallbacks for missing fields); fix fields with update_shot before generating. Shots it does not apply to come back with a reason: insert shots, no on-screen character, longer than 15 s, state-change shots (they rely on the end-frame state; pass include_state_change=true to force). A motion reference the client attached themselves is never overwritten (409) unless replace_existing=true. Pass episode_id without storyboard_id for a whole episode (≤40 shots per call; pick shots with storyboard_ids). Returns 409 while the drama is not enabled (gradual rollout). Afterwards review_frames → quote_videos → generate_videos as usual.",
286
+ "get_greybox_previs": "Inspect a shot's auto greybox (free): attached = whether the attached motion reference is a platform-generated greybox; stale=true means the shot fields changed since and the greybox is outdated — run generate_greybox_previs again; current is the plan and assumptions the current fields would produce; skip is the reason when the shot does not apply."
285
287
  }
@@ -288,5 +288,7 @@
288
288
  "create_motion_reference": "把一段**动作 / 运镜参考视频**登记进本人运动参考库(免费),之后用 attach_motion_reference 挂到某镜,AI 出视频时照它的动作、运镜、站位重新生成。★**白模(3D 预演)走这里**:kind 选 greybox_coarse / greybox_fine,平台会告诉模型「白模只作运镜 / 节奏 / 景别 / 运动轨迹 / 站位参考,不参考几何体外形和灰模材质」。白模建议:粗粒度最好,只用简单几何体拼人物 / 物体;身体只建躯干即可,建了四肢 / 翅膀就把动作补全,否则成片四肢僵硬;单段 ≤30 秒(Seedance 2.5),主体 1~5 个效果最好。⚠️ 与 upload_shot_footage 的区别:那个是「这段视频**就是**成片」,本工具是「照这段视频**重新生成**」。",
289
289
  "list_motion_references": "列出本人运动参考库里的素材(含白模),免费。返回 id / name / kind / video_url;id 给 attach_motion_reference 用。",
290
290
  "get_shot_motion_reference": "看某镜当前挂的运动参考 / 白模与「色块 → 角色」绑定(免费)。greybox_gray_on=false 表示本剧还没开放白模渲染,白模按普通运动参考处理。",
291
- "attach_motion_reference": "把运动参考 / 白模挂到某镜(免费),asset_id=null 解除挂载(绑定一并清掉)。挂好后照常 quote_videos / generate_videos:该镜改走参考视频路径——动作、运镜、站位、景别跟参考视频走,首尾帧不送(厂商规定两者互斥),身份靠角色参考图,出视频前仍要过 review_frames。★**白模有多个模型时务必传 greybox_bindings**,写明白模里「哪个色块是哪个角色」(如 [{proxy:\"红色模型\",character_id:12},{proxy:\"蓝色模型\",character_id:15}]);平台会把对应角色的参考图编号写进提示词,不绑定的话多人镜容易串身份。proxy 按客户白模里的真实颜色 / 编号写,character_id 必须是本剧角色(get_characters)。绑定了但不在本镜出镜名单里的角色,参考图也会自动带上。不传 greybox_bindings = 同一素材保留原绑定、换了素材就清空。"
291
+ "attach_motion_reference": "把运动参考 / 白模挂到某镜(免费),asset_id=null 解除挂载(绑定一并清掉)。挂好后照常 quote_videos / generate_videos:该镜改走参考视频路径——动作、运镜、站位、景别跟参考视频走,首尾帧不送(厂商规定两者互斥),身份靠角色参考图,出视频前仍要过 review_frames。★**白模有多个模型时务必传 greybox_bindings**,写明白模里「哪个色块是哪个角色」(如 [{proxy:\"红色模型\",character_id:12},{proxy:\"蓝色模型\",character_id:15}]);平台会把对应角色的参考图编号写进提示词,不绑定的话多人镜容易串身份。proxy 按客户白模里的真实颜色 / 编号写,character_id 必须是本剧角色(get_characters)。绑定了但不在本镜出镜名单里的角色,参考图也会自动带上。不传 greybox_bindings = 同一素材保留原绑定、换了素材就清空。",
292
+ "generate_greybox_previs": "按分镜已有字段**自动生成粗粒度白模**并挂到镜上(免费):景别 / 机位高度与方位 / 运镜(推拉摇移跟升降环绕) / 站位 / 朝向 / 时长 / 动作(走近、后退、转身、坐下等)→ 平台本机渲成几何体白模视频(每个角色一种颜色、只建躯干),登记成 greybox_coarse 并**自动写好 greybox_bindings**,不用客户自己建白模。目的是把景别 / 运镜 / 站位从文字约束变成像素约束,治「镜头调度不听话」。★挂上后该镜改走参考视频路径:**首尾帧不再送达**(身份靠角色参考图),**视频报价会上涨约两成**(参考视频按秒计费)——生成前把这两点讲给客户。★先 dry_run=true 看平台按哪些字段、做了哪些假设(assumptions:缺失字段的兜底),字段不对先 update_shot 改再生成。不适用的镜会返回原因:插入镜、没有出镜角色、超过 15 秒、状态变化镜(依赖尾帧终态,确需生成传 include_state_change=true)。镜上已挂客户自己的运动参考时不覆盖(409),确要替换传 replace_existing=true。传 episode_id 不传 storyboard_id = 整集批量(一次 ≤40 镜,可用 storyboard_ids 选镜)。本剧未开放时回 409(灰度中)。生成后照常 review_frames → quote_videos → generate_videos。",
293
+ "get_greybox_previs": "看某镜的自动白模(免费):attached=当前挂的是不是平台自动生成的白模;stale=true 表示镜头字段改过、白模已过时,需要重新 generate_greybox_previs;current 是按当前字段会生成的规格与假设;skip 是不适用的原因。"
292
294
  }
@@ -382,6 +382,7 @@ export const COMMON_REQUESTS = [
382
382
  { customer_says: '我想自己剪', do: '`export_handoff_pack` + `build_av_timing_contract`(音画时长契约) + `get_handoff_toolchain`,不走 `compose_episode`。' },
383
383
  { customer_says: '做动作片 / 打斗 / 技能展示 / 这条参考动作片我们能不能做', do: '先 `get_capabilities_guide` section=action_film:资产照常走 `rewrite_script` → `review_script` → `extract_assets`,分镜改用自己写的表(`import_storyboard_table`)而不是 AI 拆镜,首帧停在起势,拖沓尾段用 `trim_shot` 剪;平台不支持镜内分段变速。' },
384
384
  { customer_says: '我有白模 / 3D 预演视频 / 想让某镜照一段视频的动作和运镜重新生成', do: '`create_motion_reference`(白模选 kind=greybox_coarse / greybox_fine)→ `attach_motion_reference`(多个色块传 greybox_bindings 写明哪个色块是哪个角色)→ `get_shot_motion_reference` 核对 → 照常 `review_frames` → `quote_videos` → `generate_videos`。别用 `upload_shot_footage`(那是把视频直接当成片);白模别带轨迹线 / 坐标轴 / 相机锥,四肢不建或建全动作。' },
385
+ { customer_says: '镜头景别 / 运镜 / 站位总是不听话、想先做白模预演但手上没有白模', do: '`generate_greybox_previs`(先 `dry_run=true` 看平台用了哪些字段、做了哪些假设,字段不对先 `update_shot`)→ 平台按分镜字段自动渲粗粒度白模并写好色块绑定 → `get_greybox_previs` 核对 → 照常 `review_frames` → `quote_videos` → `generate_videos`。先告诉客户:白模镜不送首尾帧、视频报价约贵两成;插入镜 / 无角色 / 超 15 秒 / 状态变化镜不适用。' },
385
386
  { customer_says: '要配音 / 不要视频原声', do: '`update_project_settings` use_clip_audio=false → `assign_voices` → `generate_tts` → `compose_episode`。' },
386
387
  ];
387
388
  /**
@@ -1674,6 +1674,22 @@ export function registerProduceTools(server, client) {
1674
1674
  }, async ({ storyboard_id, asset_id, greybox_bindings }) => jsonResult(await client.producePost(`/storyboards/${storyboard_id}/motion-reference`, {
1675
1675
  asset_id, ...(greybox_bindings !== undefined ? { greybox_bindings } : {}),
1676
1676
  })));
1677
+ server.tool('generate_greybox_previs', '按分镜已有字段**自动生成粗粒度白模**并挂到镜上(免费):景别 / 机位高度与方位 / 运镜(推拉摇移跟升降环绕) / 站位 / 朝向 / 时长 / 动作(走近、后退、转身、坐下等)→ 平台本机渲成几何体白模视频(每个角色一种颜色、只建躯干),登记成 greybox_coarse 并**自动写好 greybox_bindings**,不用客户自己建白模。目的是把景别 / 运镜 / 站位从文字约束变成像素约束,治「镜头调度不听话」。★挂上后该镜改走参考视频路径:**首尾帧不再送达**(身份靠角色参考图),**视频报价会上涨约两成**(参考视频按秒计费)——生成前把这两点讲给客户。★先 dry_run=true 看平台按哪些字段、做了哪些假设(assumptions:缺失字段的兜底),字段不对先 update_shot 改再生成。不适用的镜会返回原因:插入镜、没有出镜角色、超过 15 秒、状态变化镜(依赖尾帧终态,确需生成传 include_state_change=true)。镜上已挂客户自己的运动参考时不覆盖(409),确要替换传 replace_existing=true。传 episode_id 不传 storyboard_id = 整集批量(一次 ≤40 镜,可用 storyboard_ids 选镜)。本剧未开放时回 409(灰度中)。生成后照常 review_frames → quote_videos → generate_videos。', {
1678
+ storyboard_id: z.number().int().positive().optional().describe('单镜;与 episode_id 二选一'),
1679
+ episode_id: z.number().int().positive().optional().describe('整集批量;不传 storyboard_ids = 本集全部镜(≤40)'),
1680
+ storyboard_ids: z.array(z.number().int().positive()).max(40).optional().describe('整集模式下只做这几镜'),
1681
+ dry_run: z.boolean().optional().describe('true = 只回规格与假设,不渲染不挂载'),
1682
+ replace_existing: z.boolean().optional().describe('true = 替换客户自己挂的运动参考'),
1683
+ include_state_change: z.boolean().optional().describe('true = 状态变化镜也生成(会失去尾帧终态约束)'),
1684
+ }, async ({ storyboard_id, episode_id, storyboard_ids, dry_run, replace_existing, include_state_change }) => {
1685
+ const body = { dry_run, replace_existing, include_state_change };
1686
+ if (storyboard_id)
1687
+ return jsonResult(await client.producePost(`/storyboards/${storyboard_id}/greybox-previs`, body));
1688
+ if (episode_id)
1689
+ return jsonResult(await client.producePost(`/episodes/${episode_id}/greybox-previs`, { ...body, ...(storyboard_ids ? { storyboard_ids } : {}) }));
1690
+ return jsonResult({ error: 'storyboard_id 或 episode_id 必须给一个' });
1691
+ });
1692
+ server.tool('get_greybox_previs', '看某镜的自动白模(免费):attached=当前挂的是不是平台自动生成的白模;stale=true 表示镜头字段改过、白模已过时,需要重新 generate_greybox_previs;current 是按当前字段会生成的规格与假设;skip 是不适用的原因。', { storyboard_id: z.number().int().positive() }, async ({ storyboard_id }) => jsonResult(await client.produceGet(`/storyboards/${storyboard_id}/greybox-previs`)));
1677
1693
  server.tool('list_unlinked_assets', '列出本剧「已解除引用」的旧资产(免费):清尾帧、换定妆图时被摘下来的旧尾帧/旧定妆图/旧设定图/发型·身体参考/视频锚,每个 URL 一条。' +
1678
1694
  '这些文件仍然存在于存储里。清单会尽量排除已被重新用上的图,但不保证完全排除——某张图是否还在别处被引用,' +
1679
1695
  '以平台的全库检查为准。客户问「旧图还在不在」时用它。', { drama_id: z.number().int().positive() }, async ({ drama_id }) => jsonResult(await client.produceGet(`/dramas/${drama_id}/unlinked-assets`)));
package/openapi.json CHANGED
@@ -2,8 +2,8 @@
2
2
  "openapi": "3.1.0",
3
3
  "info": {
4
4
  "title": "StarReel Production API",
5
- "version": "0.1.257",
6
- "description": "Turn a script into a finished, downloadable short-drama episode over REST.\n\nPipeline: script → AI rewrite → cast/scenes/props extraction → storyboards → portraits & sheets + scene plates → keyframes → video shots → TTS → final cut (.mp4).\n\n**Billing is prepaid and agent-safe**: big-ticket stages are quote-then-generate (`quote_*` returns a `quote_id`). For video, quote == actual charge. For images the quote is a *range* — models billed per reference image are priced before those are assembled, so `estimated_points` is the upper bound (size the balance by it and a run never dies half-way) and `typical_points` is the usual cost; fixed-price models return the two equal. Insufficient balance returns 402 — nothing half-runs and the account never goes negative.\n\nAuth: exchange your API key at `POST /v1/agent/token` for a 15-minute bearer token.\n\nGenerated from the @starreel/mcp v0.1.257 tool surface (operationIds match MCP tool names 1:1)."
5
+ "version": "0.1.258",
6
+ "description": "Turn a script into a finished, downloadable short-drama episode over REST.\n\nPipeline: script → AI rewrite → cast/scenes/props extraction → storyboards → portraits & sheets + scene plates → keyframes → video shots → TTS → final cut (.mp4).\n\n**Billing is prepaid and agent-safe**: big-ticket stages are quote-then-generate (`quote_*` returns a `quote_id`). For video, quote == actual charge. For images the quote is a *range* — models billed per reference image are priced before those are assembled, so `estimated_points` is the upper bound (size the balance by it and a run never dies half-way) and `typical_points` is the usual cost; fixed-price models return the two equal. Insufficient balance returns 402 — nothing half-runs and the account never goes negative.\n\nAuth: exchange your API key at `POST /v1/agent/token` for a 15-minute bearer token.\n\nGenerated from the @starreel/mcp v0.1.258 tool surface (operationIds match MCP tool names 1:1)."
7
7
  },
8
8
  "servers": [
9
9
  {
@@ -15896,6 +15896,119 @@
15896
15896
  }
15897
15897
  }
15898
15898
  },
15899
+ "/storyboards/{storyboard_id}/greybox-previs": {
15900
+ "post": {
15901
+ "operationId": "generate_greybox_previs",
15902
+ "summary": "按分镜已有字段**自动生成粗粒度白模**并挂到镜上(免费):景别 / 机位高度与方位 / 运镜(推拉摇移跟升降环绕) / 站位 / 朝向 / 时长 / 动作(走近、后退、转身、坐下等)→ 平台本机渲成几何体白模视频(每个角色一种颜色、只建躯",
15903
+ "description": "按分镜已有字段**自动生成粗粒度白模**并挂到镜上(免费):景别 / 机位高度与方位 / 运镜(推拉摇移跟升降环绕) / 站位 / 朝向 / 时长 / 动作(走近、后退、转身、坐下等)→ 平台本机渲成几何体白模视频(每个角色一种颜色、只建躯干),登记成 greybox_coarse 并**自动写好 greybox_bindings**,不用客户自己建白模。目的是把景别 / 运镜 / 站位从文字约束变成像素约束,治「镜头调度不听话」。★挂上后该镜改走参考视频路径:**首尾帧不再送达**(身份靠角色参考图),**视频报价会上涨约两成**(参考视频按秒计费)——生成前把这两点讲给客户。★先 dry_run=true 看平台按哪些字段、做了哪些假设(assumptions:缺失字段的兜底),字段不对先 update_shot 改再生成。不适用的镜会返回原因:插入镜、没有出镜角色、超过 15 秒、状态变化镜(依赖尾帧终态,确需生成传 include_state_change=true)。镜上已挂客户自己的运动参考时不覆盖(409),确要替换传 replace_existing=true。传 episode_id 不传 storyboard_id = 整集批量(一次 ≤40 镜,可用 storyboard_ids 选镜)。本剧未开放时回 409(灰度中)。生成后照常 review_frames → quote_videos → generate_videos。",
15904
+ "tags": [
15905
+ "storyboards"
15906
+ ],
15907
+ "parameters": [
15908
+ {
15909
+ "name": "storyboard_id",
15910
+ "in": "path",
15911
+ "required": true,
15912
+ "schema": {
15913
+ "type": "integer",
15914
+ "exclusiveMinimum": 0
15915
+ }
15916
+ }
15917
+ ],
15918
+ "requestBody": {
15919
+ "required": false,
15920
+ "content": {
15921
+ "application/json": {
15922
+ "schema": {
15923
+ "type": "object",
15924
+ "properties": {
15925
+ "dry_run": {
15926
+ "type": "boolean"
15927
+ },
15928
+ "replace_existing": {
15929
+ "type": "boolean"
15930
+ },
15931
+ "include_state_change": {
15932
+ "type": "boolean"
15933
+ }
15934
+ }
15935
+ }
15936
+ }
15937
+ }
15938
+ },
15939
+ "responses": {
15940
+ "200": {
15941
+ "description": "StarReel envelope",
15942
+ "content": {
15943
+ "application/json": {
15944
+ "schema": {
15945
+ "type": "object",
15946
+ "properties": {
15947
+ "code": {
15948
+ "type": "integer"
15949
+ },
15950
+ "message": {
15951
+ "type": "string"
15952
+ },
15953
+ "data": {
15954
+ "description": "Operation result payload"
15955
+ }
15956
+ }
15957
+ }
15958
+ }
15959
+ }
15960
+ },
15961
+ "402": {
15962
+ "description": "Insufficient prepaid balance (never overdrafts); response carries `needed` points"
15963
+ }
15964
+ }
15965
+ },
15966
+ "get": {
15967
+ "operationId": "get_greybox_previs",
15968
+ "summary": "看某镜的自动白模(免费):attached=当前挂的是不是平台自动生成的白模;stale=true 表示镜头字段改过、白模已过时,需要重新 generate_greybox_previs;current 是按当前字段会生成的规格与假设;sk",
15969
+ "description": "看某镜的自动白模(免费):attached=当前挂的是不是平台自动生成的白模;stale=true 表示镜头字段改过、白模已过时,需要重新 generate_greybox_previs;current 是按当前字段会生成的规格与假设;skip 是不适用的原因。",
15970
+ "tags": [
15971
+ "storyboards"
15972
+ ],
15973
+ "parameters": [
15974
+ {
15975
+ "name": "storyboard_id",
15976
+ "in": "path",
15977
+ "required": true,
15978
+ "schema": {
15979
+ "type": "integer",
15980
+ "exclusiveMinimum": 0
15981
+ }
15982
+ }
15983
+ ],
15984
+ "responses": {
15985
+ "200": {
15986
+ "description": "StarReel envelope",
15987
+ "content": {
15988
+ "application/json": {
15989
+ "schema": {
15990
+ "type": "object",
15991
+ "properties": {
15992
+ "code": {
15993
+ "type": "integer"
15994
+ },
15995
+ "message": {
15996
+ "type": "string"
15997
+ },
15998
+ "data": {
15999
+ "description": "Operation result payload"
16000
+ }
16001
+ }
16002
+ }
16003
+ }
16004
+ }
16005
+ },
16006
+ "402": {
16007
+ "description": "Insufficient prepaid balance (never overdrafts); response carries `needed` points"
16008
+ }
16009
+ }
16010
+ }
16011
+ },
15899
16012
  "/storyboards/{storyboard_id}/keyframes": {
15900
16013
  "get": {
15901
16014
  "operationId": "get_shot_keyframes",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@starreel/mcp",
3
- "version": "0.1.257",
3
+ "version": "0.1.258",
4
4
  "mcpName": "ai.starreel/starreel",
5
5
  "description": "StarReel MCP server — drive the AI short-drama production pipeline (script → storyboards → frames → video → final cut) from Claude, Cursor, or any MCP client",
6
6
  "license": "MIT",
package/server.json CHANGED
@@ -2,13 +2,13 @@
2
2
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-09-29/server.schema.json",
3
3
  "name": "ai.starreel/starreel",
4
4
  "description": "Turn a script into a finished, downloadable short-drama episode — via MCP or REST.",
5
- "version": "0.1.257",
5
+ "version": "0.1.258",
6
6
  "websiteUrl": "https://starreel.ai",
7
7
  "packages": [
8
8
  {
9
9
  "registryType": "npm",
10
10
  "identifier": "@starreel/mcp",
11
- "version": "0.1.257",
11
+ "version": "0.1.258",
12
12
  "transport": {
13
13
  "type": "stdio"
14
14
  },