@starreel/mcp 0.1.121 → 0.1.123

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
@@ -91,8 +91,9 @@ announces a condensed version as MCP `instructions` at connect time.
91
91
  | **No sample** — just an idea of the voice (a narrator, a character that deserves its own voice) | `design_voice` (one-sentence description, free) → `get_voice_design` until `done` (candidates arrive as local wav files — let the customer listen) → `save_designed_voice` (pick one; billed like a clone) → `set_character_voice` | generating every line straight from the description — each generation is a different person; naming a real person to imitate their voice |
92
92
  | A song + lyrics | `create_drama` (`project_type: "mv"`) → `set_mv_lyrics` → `generate_mv_story` → `generate_mv_script` | `rewrite_script` (blocked for MV) |
93
93
  | A product / brand | `create_drama` (`project_type: "ad"` or `"brand_film"`) → `add_product` → `generate_product_sheet` | writing brand copy as dialogue (it gets spoken) |
94
- | Generated shots / a cut that needs changes | `scan_dialogue_coverage` / `scan_intra_shot_cuts` first, then `get_shot_prompts` · `update_shot` · `replace_shot_dialogue` · `repair_episode_dialogue` · `split_shot` · `trim_shot` · `regenerate_shot_video` · `edit_video_shot` → `rerender_episode` | re-composing to fix what a clip *says* |
94
+ | Generated shots / a cut that needs changes | `scan_dialogue_coverage` / `scan_intra_shot_cuts` first, then `get_shot_prompts` · `update_shot` · `replace_shot_dialogue` · `repair_episode_dialogue` · `split_shot` · `trim_shot` · `regenerate_shot_video` · `edit_video_shot` → `rerender_episode`. To retry **one shot on a different video engine**, pass `model` to `quote_regenerate_shot_video` (that shot, that regeneration only — the drama's `video_engine` is untouched; the quote pins the engine, so changing it means re-quoting) | re-composing to fix what a clip *says*; switching the whole drama's `video_engine` just to fix one shot |
95
95
  | Wants old portraits / sheets / a shot's old tail frame "deleted" | `set_character_portrait` (old assets listed in `old_assets`) · `clear_shot_frame` (old tail frame) → `regenerate_shot_video`; `list_unlinked_assets` lists the drama's unlinked old assets (a history list, not proof of ownership). Both only **unlink** — files are not deleted (`physically_deleted` is always empty; `in_history: false` means the platform kept no record, so save that URL if it matters). Tell the customer exactly that | telling the customer the old image was deleted; writing `last_frame_image: null` through the internal API |
96
+ | Wants an old image **permanently** deleted from storage (not just unlinked) | `preview_delete_asset` → show the customer exactly what it says (blocking references, history that will break, copies) → only after an explicit "confirm delete" → `delete_asset` with the `confirm_token`. Irreversible; only the drama owner; only files with trusted provenance (generated for this drama, or uploaded through the platform with a grant record) | deleting without showing the preview; retrying automatically; treating `list_unlinked_assets` as proof the file is unused |
96
97
  | Cross-era drama (scenes in different periods) — checking props fit their period | `get_props` → read each prop's `era_audit` (`form_consistent`, `conflicting_scopes`, `violations`); `audit_prop_era` to re-check after a new sheet. On a conflict: `update_prop` with a precise `era_lock` (dynasty + physical form) → `generate_prop_sheet`, or bind a different prop to those shots. `run_precheck` also lists shots whose bound prop conflicts (`prop-era-conflict`) | trusting the prop's name or description alone; regenerating shot frames before the prop sheet is fixed |
97
98
  | Wants to assemble the cut themselves | `export_handoff_pack` → `get_handoff_toolchain` → **`register_external_delivery`** when the cut is final | `compose_episode` (pick one); delivering a cut the platform has no record of |
98
99
  | A multi-language release | `translate_subtitles` · `subtitle_secondary_lang` in project settings | — |
package/dist/client.js CHANGED
@@ -119,6 +119,31 @@ export class StarReelClient {
119
119
  throw new Error(body?.message ?? body?.error ?? `HTTP ${res.status} on ${path}`);
120
120
  return (body?.data ?? body); // StarReel 信封 {code,data,message}
121
121
  }
122
+ /**
123
+ * 非 2xx 也不抛错:把状态码和完整响应体原样返回。给那些失败响应本身带结构化回执的端点用
124
+ * (如真删除的部分失败 502 回执——produce() 抛错只留 message,回执会被丢掉)。
125
+ */
126
+ async producePostRaw(path, body) {
127
+ let res;
128
+ try {
129
+ res = await this.authedFetch(`${AUTH_BASE}/v1/produce${path}`, {
130
+ method: 'POST', headers: { 'content-type': 'application/json' },
131
+ body: body !== undefined ? JSON.stringify(body) : undefined,
132
+ });
133
+ }
134
+ catch (e) {
135
+ throw new Error(`StarReel production pipeline unreachable (${AUTH_BASE}): ${e?.cause?.code ?? e?.message ?? e}. Retry later or check with StarReel.`);
136
+ }
137
+ const text = await res.text();
138
+ let parsed;
139
+ try {
140
+ parsed = JSON.parse(text);
141
+ }
142
+ catch {
143
+ parsed = { raw: text.slice(0, 300) };
144
+ }
145
+ return { http_status: res.status, ok: res.ok, body: parsed };
146
+ }
122
147
  produceGet(path) {
123
148
  return this.produce(path, { method: 'GET' });
124
149
  }
@@ -232,13 +232,14 @@ const PROJECT_SETTINGS_FIELDS = {
232
232
  'gpt-image-2.5-flare(默认·基础11点+每张参考图18点)/gpt-image-2.5-sunburst(同价·中文字形与细节更准·慢约5秒)/' +
233
233
  'gemini-3.1-flash-image(香蕉2·71点)/gemini-3-pro-image(香蕉Pro·精细·175点)/gemini-3.1-flash-lite-image(香蕉2 Lite·31点)/' +
234
234
  'doubao-seedream-5-0-260128(Seedream 5.0)。建剧即定、整剧统一;generate_frames 可临时覆盖某次出图。★各模型实测优劣(一次过率/手部结构/安全拒绝率/画风稳定度)与选型步骤见 get_capabilities_guide(section=model_guide)'),
235
- // drama 级视频引擎(整剧统一,单镜/批量/场景组/重生全走它)
235
+ // drama 级视频引擎(整剧统一,单镜/批量/场景组/重生全走它;单镜例外入口:quote_regenerate_shot_video 的 model / edit_video_shot 的 model)
236
236
  video_engine: z.enum(VIDEO_ENGINES).optional().describe('视频引擎(★drama级·整剧统一·AI必须按剧选型主动引导:写实真人剧→seedance-2.5 或降本 hailuo-3;风格化/动画/3D卡通/空镜/产品镜→wan3.0(赶交付 wan3.0-prime);写实真人剧绝不选 wan——720p+ 真人脸被厂商审核一致拒):' +
237
237
  'seedance-2.5(默认·全能力:帧链/场景组/就地编辑/延长/参考图锚·720p约212点/秒) / ' +
238
238
  'hailuo-3(MiniMax H3:约1/3成本 720p 70点/秒·原生对白与音效·支持2K·单镜约6分钟·支持就地编辑(强保真)与成片续写·关键帧组/时间戳区间暂不可用;编辑/续写输入视频另按秒计费) / ' +
239
239
  'wan3.0(WAN 3.0:约4折成本 720p 84点/秒·原生对白与音效·支持1080P·单次最长30秒·最短2秒计费·支持就地编辑(强语义)与成片续写·关键帧组/时间戳区间暂不可用;★写实真人720p+可能被厂商审核拒绝,风格化/动画剧适用;★★会在单个分镜片内自行换机位硬切(实测11/12镜)→叙事剧慎用,详见选型决策树④) / ' +
240
240
  'wan3.0-prime(WAN 3.0 高速版:能力同wan3.0·出片约2×·费率1.5×=720p 126点/秒;镜内自剪同 wan3.0)。' +
241
- '★必须在出视频**前**设置——切换不回溯已生成的镜头,同剧混用引擎会有画风/身份漂移风险'),
241
+ '★必须在出视频**前**设置——切换不回溯已生成的镜头,同剧混用引擎会有画风/身份漂移风险。' +
242
+ '只想给个别镜换引擎别改这里:用 quote_regenerate_shot_video 的 model(只作用于那一镜那一次)'),
242
243
  // 整剧视觉一致性锚(注入所有出图/视频 prompt,决定跨镜一致)
243
244
  cinematography_prompt: z.string().optional().describe('摄影DNA:镜头/镜片/光圈/调色一揽子,注入所有出图/视频prompt,整剧镜头一致。' +
244
245
  '★★写**单镜**摄影规格,不要写整部剧的镜头序列:本字段会被原样注入**每一个分镜**,' +
@@ -1148,6 +1149,23 @@ export function registerProduceTools(server, client) {
1148
1149
  server.tool('list_unlinked_assets', '列出本剧「已解除引用」的旧资产(免费):清尾帧、换定妆图时被摘下来的旧尾帧/旧定妆图/旧设定图/发型·身体参考/视频锚,每个 URL 一条。' +
1149
1150
  '这些文件仍然存在于存储里。清单会尽量排除已被重新用上的图,但不保证完全排除——某张图是否还在别处被引用,' +
1150
1151
  '以平台的全库检查为准。客户问「旧图还在不在」时用它。', { drama_id: z.number().int().positive() }, async ({ drama_id }) => jsonResult(await client.produceGet(`/dramas/${drama_id}/unlinked-assets`)));
1152
+ server.tool('preview_delete_asset', '预览「真删除」某个旧资产文件(免费、只读)。真删除会从存储里**永久删除**这张图的全部版本,不可撤销。' +
1153
+ '返回 deletable(能不能删)、reasons(不能删的原因,如 still-referenced 仍被引用 / no-trusted-provenance 无法证明归属 / not-drama-owner 不是剧主)、' +
1154
+ 'blocking(还在引用它的位置)、history(会失效的历史记录条数)、copies(各存储桶里的版本数),能删时附 confirm_token(10 分钟内有效、只能用一次)。' +
1155
+ '★必须把预览结果原样告诉客户,客户明确说「确认删除」后才能调 delete_asset;不要替客户做决定。' +
1156
+ '只有剧主能删;只能删能证明归属的文件——平台为本剧生成的图,或客户通过平台上传(上传时有签发记录)的图;更早上传、没有签发记录的图删不了,只能解除引用。', { drama_id: z.number().int().positive(), url: z.string().describe('要删除的图片地址(通常来自 list_unlinked_assets 或解除引用回执)') }, async ({ drama_id, url }) => jsonResult(await client.producePost(`/dramas/${drama_id}/asset-delete/preview`, { url })));
1157
+ server.tool('delete_asset', '★不可撤销:永久删除某个旧资产文件的全部版本(两个存储桶)。必须先 preview_delete_asset,把结果给客户看,客户明确确认后,' +
1158
+ '带上同一个 url 与预览返回的 confirm_token 调用。执行前平台会重跑全部检查,影响范围和预览时不一致会拒绝(409),需要重新预览。' +
1159
+ '部分副本删除失败会返回 502 与回执,文件可能还在,可重新预览后重试。不要自动重试、不要批量删除客户没逐个确认过的文件。', {
1160
+ drama_id: z.number().int().positive(),
1161
+ url: z.string(),
1162
+ confirm_token: z.string().describe('preview_delete_asset 返回的一次性确认凭证'),
1163
+ },
1164
+ // 失败响应自带结构化回执(哪个桶删了几个版本、哪些失败)——用不抛错的调用原样交给 agent(#684 review)
1165
+ async ({ drama_id, url, confirm_token }) => {
1166
+ const r = await client.producePostRaw(`/dramas/${drama_id}/asset-delete`, { url, confirm_token });
1167
+ return jsonResult(r.ok ? (r.body?.data ?? r.body) : { http_status: r.http_status, ...r.body });
1168
+ });
1151
1169
  server.tool('clear_shot_frame', '清除某镜的尾帧(解除引用,免费)。用于换了定妆图/改了剧情后,旧尾帧会把旧人物/旧画面带进重生的视频时,先清掉它再 regenerate_shot_video。' +
1152
1170
  '只能清尾帧:首帧是出视频的起点,要换首帧用 generate_shot_frame 重生或 upload_shot_frame 替换。' +
1153
1171
  '★这是解除引用,不是删除:文件不会被删,响应里 unlinked[].in_history=true 的可在 get_asset_versions 找回,physically_deleted 恒为空——如实告诉客户。' +
@@ -1206,7 +1224,16 @@ export function registerProduceTools(server, client) {
1206
1224
  replace_user_footage: z.boolean().optional().describe('本镜是实拍素材镜(upload_shot_footage 传过)时,显式允许以它为源做编辑并用 AI 产物覆盖它。' +
1207
1225
  '不传则被守卫拒(409,带中文出路)。想保留素材就别传,改用 clear_shot_footage 换回 AI 生成。'),
1208
1226
  }, async ({ storyboard_id, ...rest }) => jsonResult(await client.producePost(`/storyboards/${storyboard_id}/edit/generate`, rest)));
1209
- server.tool('quote_regenerate_shot_video', '报价:重生某镜视频要多少点。返回 quote_id。零扣费。', { storyboard_id: z.number().int().positive() }, async ({ storyboard_id }) => jsonResult(await client.producePost(`/storyboards/${storyboard_id}/regen/quote`)));
1227
+ server.tool('quote_regenerate_shot_video', '报价:重生某镜视频要多少点。返回 quote_id。零扣费。' +
1228
+ '\n★**按镜指定视频引擎**:传 model 即只为这一镜这一次重生换引擎(不改剧级 video_engine,其它镜照旧);' +
1229
+ '报价按该引擎计价,quote_id 把引擎钉死,regenerate_shot_video 派发的就是它——要换引擎必须重新报价,生成时再传引擎无效。' +
1230
+ '回执 video_engine = 实际派发的引擎,engine_overridden=true 表示盖过了剧引擎。' +
1231
+ '★所选引擎必须支持本剧分辨率(seedance-2.5 只有 480p/720p;hailuo-3 只有 720p/1080p;wan3.0/wan3.0-prime 480p~1080p),不支持则 400 并列出可选引擎——不会悄悄换成别的引擎出片。' +
1232
+ '适用:某镜在本剧引擎上反复失败/被厂商审核拒/镜内自剪,单独换一个引擎试。' +
1233
+ '★同剧混用引擎有画风/身份漂移风险,换完先看这一镜再决定要不要推广;写实真人镜别换 wan3.0/wan3.0-prime(真人脸 720p+ 常被厂商拒)。', {
1234
+ storyboard_id: z.number().int().positive(),
1235
+ model: z.enum(VIDEO_ENGINES).optional().describe('本镜本次重生的视频引擎(缺省=跟随剧 video_engine)。seedance-2.5 / hailuo-3 / wan3.0 / wan3.0-prime,能力与单价见 update_project_settings 的 video_engine'),
1236
+ }, async ({ storyboard_id, model }) => jsonResult(await client.producePost(`/storyboards/${storyboard_id}/regen/quote`, model ? { model } : {})));
1210
1237
  server.tool('regenerate_shot_video', '确认后重生某镜视频(可选新 prompt)。' +
1211
1238
  '\n★收到 **409「本镜是用户上传的实拍素材」** = 该镜被 upload_shot_footage 登记成实拍素材镜,不是模型问题,换引擎无用;' +
1212
1239
  '要用 AI 视频覆盖它就带 replace_user_footage=true,要保留素材就别重生。' +
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.121",
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.121 tool surface (operationIds match MCP tool names 1:1)."
5
+ "version": "0.1.123",
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.123 tool surface (operationIds match MCP tool names 1:1)."
7
7
  },
8
8
  "servers": [
9
9
  {
@@ -1358,6 +1358,142 @@
1358
1358
  }
1359
1359
  }
1360
1360
  },
1361
+ "/dramas/{drama_id}/asset-delete": {
1362
+ "post": {
1363
+ "operationId": "delete_asset",
1364
+ "summary": "★不可撤销:永久删除某个旧资产文件的全部版本(两个存储桶)",
1365
+ "description": "★不可撤销:永久删除某个旧资产文件的全部版本(两个存储桶)。必须先 preview_delete_asset,把结果给客户看,客户明确确认后,带上同一个 url 与预览返回的 confirm_token 调用。执行前平台会重跑全部检查,影响范围和预览时不一致会拒绝(409),需要重新预览。部分副本删除失败会返回 502 与回执,文件可能还在,可重新预览后重试。不要自动重试、不要批量删除客户没逐个确认过的文件。",
1366
+ "tags": [
1367
+ "dramas"
1368
+ ],
1369
+ "parameters": [
1370
+ {
1371
+ "name": "drama_id",
1372
+ "in": "path",
1373
+ "required": true,
1374
+ "schema": {
1375
+ "type": "integer",
1376
+ "exclusiveMinimum": 0
1377
+ }
1378
+ }
1379
+ ],
1380
+ "requestBody": {
1381
+ "required": true,
1382
+ "content": {
1383
+ "application/json": {
1384
+ "schema": {
1385
+ "type": "object",
1386
+ "properties": {
1387
+ "url": {
1388
+ "type": "string"
1389
+ },
1390
+ "confirm_token": {
1391
+ "type": "string",
1392
+ "description": "preview_delete_asset 返回的一次性确认凭证"
1393
+ }
1394
+ },
1395
+ "required": [
1396
+ "url",
1397
+ "confirm_token"
1398
+ ]
1399
+ }
1400
+ }
1401
+ }
1402
+ },
1403
+ "responses": {
1404
+ "200": {
1405
+ "description": "StarReel envelope",
1406
+ "content": {
1407
+ "application/json": {
1408
+ "schema": {
1409
+ "type": "object",
1410
+ "properties": {
1411
+ "code": {
1412
+ "type": "integer"
1413
+ },
1414
+ "message": {
1415
+ "type": "string"
1416
+ },
1417
+ "data": {
1418
+ "description": "Operation result payload"
1419
+ }
1420
+ }
1421
+ }
1422
+ }
1423
+ }
1424
+ },
1425
+ "402": {
1426
+ "description": "Insufficient prepaid balance (never overdrafts); response carries `needed` points"
1427
+ }
1428
+ }
1429
+ }
1430
+ },
1431
+ "/dramas/{drama_id}/asset-delete/preview": {
1432
+ "post": {
1433
+ "operationId": "preview_delete_asset",
1434
+ "summary": "预览「真删除」某个旧资产文件(免费、只读)",
1435
+ "description": "预览「真删除」某个旧资产文件(免费、只读)。真删除会从存储里**永久删除**这张图的全部版本,不可撤销。返回 deletable(能不能删)、reasons(不能删的原因,如 still-referenced 仍被引用 / no-trusted-provenance 无法证明归属 / not-drama-owner 不是剧主)、blocking(还在引用它的位置)、history(会失效的历史记录条数)、copies(各存储桶里的版本数),能删时附 confirm_token(10 分钟内有效、只能用一次)。★必须把预览结果原样告诉客户,客户明确说「确认删除」后才能调 delete_asset;不要替客户做决定。只有剧主能删;只能删能证明归属的文件——平台为本剧生成的图,或客户通过平台上传(上传时有签发记录)的图;更早上传、没有签发记录的图删不了,只能解除引用。",
1436
+ "tags": [
1437
+ "dramas"
1438
+ ],
1439
+ "parameters": [
1440
+ {
1441
+ "name": "drama_id",
1442
+ "in": "path",
1443
+ "required": true,
1444
+ "schema": {
1445
+ "type": "integer",
1446
+ "exclusiveMinimum": 0
1447
+ }
1448
+ }
1449
+ ],
1450
+ "requestBody": {
1451
+ "required": true,
1452
+ "content": {
1453
+ "application/json": {
1454
+ "schema": {
1455
+ "type": "object",
1456
+ "properties": {
1457
+ "url": {
1458
+ "type": "string",
1459
+ "description": "要删除的图片地址(通常来自 list_unlinked_assets 或解除引用回执)"
1460
+ }
1461
+ },
1462
+ "required": [
1463
+ "url"
1464
+ ]
1465
+ }
1466
+ }
1467
+ }
1468
+ },
1469
+ "responses": {
1470
+ "200": {
1471
+ "description": "StarReel envelope",
1472
+ "content": {
1473
+ "application/json": {
1474
+ "schema": {
1475
+ "type": "object",
1476
+ "properties": {
1477
+ "code": {
1478
+ "type": "integer"
1479
+ },
1480
+ "message": {
1481
+ "type": "string"
1482
+ },
1483
+ "data": {
1484
+ "description": "Operation result payload"
1485
+ }
1486
+ }
1487
+ }
1488
+ }
1489
+ }
1490
+ },
1491
+ "402": {
1492
+ "description": "Insufficient prepaid balance (never overdrafts); response carries `needed` points"
1493
+ }
1494
+ }
1495
+ }
1496
+ },
1361
1497
  "/dramas/{drama_id}/assets": {
1362
1498
  "get": {
1363
1499
  "operationId": "get_assets",
@@ -11176,7 +11312,7 @@
11176
11312
  "post": {
11177
11313
  "operationId": "quote_regenerate_shot_video",
11178
11314
  "summary": "报价:重生某镜视频要多少点",
11179
- "description": "报价:重生某镜视频要多少点。返回 quote_id。零扣费。",
11315
+ "description": "报价:重生某镜视频要多少点。返回 quote_id。零扣费。\n★**按镜指定视频引擎**:传 model 即只为这一镜这一次重生换引擎(不改剧级 video_engine,其它镜照旧);报价按该引擎计价,quote_id 把引擎钉死,regenerate_shot_video 派发的就是它——要换引擎必须重新报价,生成时再传引擎无效。回执 video_engine = 实际派发的引擎,engine_overridden=true 表示盖过了剧引擎。★所选引擎必须支持本剧分辨率(seedance-2.5 只有 480p/720p;hailuo-3 只有 720p/1080p;wan3.0/wan3.0-prime 480p~1080p),不支持则 400 并列出可选引擎——不会悄悄换成别的引擎出片。适用:某镜在本剧引擎上反复失败/被厂商审核拒/镜内自剪,单独换一个引擎试。★同剧混用引擎有画风/身份漂移风险,换完先看这一镜再决定要不要推广;写实真人镜别换 wan3.0/wan3.0-prime(真人脸 720p+ 常被厂商拒)。",
11180
11316
  "tags": [
11181
11317
  "storyboards"
11182
11318
  ],
@@ -11191,6 +11327,27 @@
11191
11327
  }
11192
11328
  }
11193
11329
  ],
11330
+ "requestBody": {
11331
+ "required": false,
11332
+ "content": {
11333
+ "application/json": {
11334
+ "schema": {
11335
+ "type": "object",
11336
+ "properties": {
11337
+ "model": {
11338
+ "type": "string",
11339
+ "enum": [
11340
+ "seedance-2.5",
11341
+ "hailuo-3",
11342
+ "wan3.0",
11343
+ "wan3.0-prime"
11344
+ ]
11345
+ }
11346
+ }
11347
+ }
11348
+ }
11349
+ }
11350
+ },
11194
11351
  "responses": {
11195
11352
  "200": {
11196
11353
  "description": "StarReel envelope",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@starreel/mcp",
3
- "version": "0.1.121",
3
+ "version": "0.1.123",
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.121",
5
+ "version": "0.1.123",
6
6
  "websiteUrl": "https://starreel.ai",
7
7
  "packages": [
8
8
  {
9
9
  "registryType": "npm",
10
10
  "identifier": "@starreel/mcp",
11
- "version": "0.1.121",
11
+ "version": "0.1.123",
12
12
  "transport": {
13
13
  "type": "stdio"
14
14
  },