@starreel/mcp 0.1.90 → 0.1.91
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 +5 -1
- package/dist/tools/produce.js +8 -3
- package/openapi.json +5 -5
- package/package.json +1 -1
- package/server.json +2 -2
package/SKILL.md
CHANGED
|
@@ -709,7 +709,11 @@ the mouth isn't readable (back turned, wide, off-screen) that is invisible; on
|
|
|
709
709
|
sustained close-ups, regenerate instead. Reach for `regenerate_shot_video` when
|
|
710
710
|
the shot is a close-up, or when the picture itself is also wrong.
|
|
711
711
|
`repair_episode_dialogue` runs in the background — poll it with
|
|
712
|
-
`get_dialogue_repair_status`.
|
|
712
|
+
`get_dialogue_repair_status`. If the status carries `aborted`, the batch stopped
|
|
713
|
+
early on an account-level failure (`credits` = out of points; `account_overdue` =
|
|
714
|
+
the platform's upstream vendor account, not yours) and the `remaining` shots never
|
|
715
|
+
ran. Resubmitting unchanged will fail the same way — top up for `credits`; for
|
|
716
|
+
`account_overdue`, tell the user and retry later instead of looping.
|
|
713
717
|
Either way, `compose_episode` afterwards — the final cut still holds the old audio until you do.
|
|
714
718
|
|
|
715
719
|
Four distinct causes; they need **opposite** fixes, so identify the family first.
|
package/dist/tools/produce.js
CHANGED
|
@@ -1274,7 +1274,10 @@ export function registerProduceTools(server, client) {
|
|
|
1274
1274
|
})));
|
|
1275
1275
|
server.tool('get_dialogue_repair_status', '查台词修复的进度(免费)。repair_episode_dialogue 是后台异步串行跑的,用这个轮询。'
|
|
1276
1276
|
+ '\n★这个工具此前**不存在**,而 repair_episode_dialogue 的描述里却写着「进度用 '
|
|
1277
|
-
+ 'dialogue-repair-status 查」——第三方照着找会扑空(2026-09-21 由 MCP 覆盖闸抓出)。'
|
|
1277
|
+
+ 'dialogue-repair-status 查」——第三方照着找会扑空(2026-09-21 由 MCP 覆盖闸抓出)。'
|
|
1278
|
+
+ '\n★返回里带 **aborted** = 上一批因整账户级失败被提前中止(kind=account_overdue 平台上游账户欠费 / '
|
|
1279
|
+
+ 'credits 点数不足),remaining 镜未执行。此时**原样重提必然同因失败**:credits 先充值;'
|
|
1280
|
+
+ 'account_overdue 不是你的点数问题,停下告知用户稍后再试,别反复重提。', { episode_id: z.number().int().positive() }, async ({ episode_id }) => jsonResult(await client.produceGet(`/episodes/${episode_id}/dialogue-repair-status`)));
|
|
1278
1281
|
server.tool('get_shot_name_card', '读这一镜的**人物名片**现值(免费):名字、头衔、显示位置那些。'
|
|
1279
1282
|
+ '\n★改之前先读一遍——set_shot_name_card 是**整体覆盖**,不读就改会把没打算动的字段清掉。', { storyboard_id: z.number().int().positive() }, async ({ storyboard_id }) => jsonResult(await client.produceGet(`/storyboards/${storyboard_id}/name-card`)));
|
|
1280
1283
|
server.tool('generate_bgm', '给整集生成/更换 AI 配乐(按情绪弧线)。后台异步,按用量后付不欠费。返回情绪弧线段数与预估耗时;' +
|
|
@@ -1502,8 +1505,10 @@ export function registerProduceTools(server, client) {
|
|
|
1502
1505
|
aspects: z.array(z.enum(['9:16', '16:9', '1:1', '4:5'])).optional().describe('目标画幅集'),
|
|
1503
1506
|
}, async ({ episode_id, aspects }) => jsonResult(await client.producePost(`/episodes/${episode_id}/render-multi-aspect`, aspects ? { aspects } : {})));
|
|
1504
1507
|
// ========== P2 · 口型 / 海报封面 ==========
|
|
1505
|
-
|
|
1506
|
-
|
|
1508
|
+
const LIPSYNC_UNAVAILABLE_HINT = '\n★收到 **503 code=lipsync.unavailable** = 平台当前没有可用的口型服务,本次未提交、未扣费,重试无用;' +
|
|
1509
|
+
'按返回的 alternatives 改走别的路(重生该镜视频 / 定向编辑 / 只换音频——最后一个不改嘴型)。';
|
|
1510
|
+
server.tool('lipsync_shot', '给单镜做口型同步(对白与人物嘴型对齐)。按用量后付。' + LIPSYNC_UNAVAILABLE_HINT, { storyboard_id: z.number().int().positive() }, async ({ storyboard_id }) => jsonResult(await client.producePost(`/storyboards/${storyboard_id}/lipsync`)));
|
|
1511
|
+
server.tool('lipsync_episode', '给整集批量口型同步。后台异步,按用量后付。用 get_lipsync_status 查进度。' + LIPSYNC_UNAVAILABLE_HINT, { episode_id: z.number().int().positive() }, async ({ episode_id }) => jsonResult(await client.producePost(`/episodes/${episode_id}/lipsync-batch`)));
|
|
1507
1512
|
server.tool('get_lipsync_status', '查整集口型同步进度。免费。', { episode_id: z.number().int().positive() }, async ({ episode_id }) => jsonResult(await client.produceGet(`/episodes/${episode_id}/lipsync-status`)));
|
|
1508
1513
|
server.tool('generate_episode_poster', '给某一集生成海报图。图片步,按用量后付。', { episode_id: z.number().int().positive() }, async ({ episode_id }) => jsonResult(await client.producePost(`/episodes/${episode_id}/poster`)));
|
|
1509
1514
|
server.tool('generate_drama_poster', '给整部剧生成海报图(KV)。图片步,按用量后付。', { drama_id: z.number().int().positive() }, async ({ drama_id }) => jsonResult(await client.producePost(`/dramas/${drama_id}/poster`)));
|
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.
|
|
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.
|
|
5
|
+
"version": "0.1.91",
|
|
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.91 tool surface (operationIds match MCP tool names 1:1)."
|
|
7
7
|
},
|
|
8
8
|
"servers": [
|
|
9
9
|
{
|
|
@@ -3543,7 +3543,7 @@
|
|
|
3543
3543
|
"get": {
|
|
3544
3544
|
"operationId": "get_dialogue_repair_status",
|
|
3545
3545
|
"summary": "查台词修复的进度(免费)",
|
|
3546
|
-
"description": "查台词修复的进度(免费)。repair_episode_dialogue 是后台异步串行跑的,用这个轮询。\n★这个工具此前**不存在**,而 repair_episode_dialogue 的描述里却写着「进度用 dialogue-repair-status 查」——第三方照着找会扑空(2026-09-21 由 MCP 覆盖闸抓出)
|
|
3546
|
+
"description": "查台词修复的进度(免费)。repair_episode_dialogue 是后台异步串行跑的,用这个轮询。\n★这个工具此前**不存在**,而 repair_episode_dialogue 的描述里却写着「进度用 dialogue-repair-status 查」——第三方照着找会扑空(2026-09-21 由 MCP 覆盖闸抓出)。\n★返回里带 **aborted** = 上一批因整账户级失败被提前中止(kind=account_overdue 平台上游账户欠费 / credits 点数不足),remaining 镜未执行。此时**原样重提必然同因失败**:credits 先充值;account_overdue 不是你的点数问题,停下告知用户稍后再试,别反复重提。",
|
|
3547
3547
|
"tags": [
|
|
3548
3548
|
"episodes"
|
|
3549
3549
|
],
|
|
@@ -4629,7 +4629,7 @@
|
|
|
4629
4629
|
"post": {
|
|
4630
4630
|
"operationId": "lipsync_episode",
|
|
4631
4631
|
"summary": "给整集批量口型同步",
|
|
4632
|
-
"description": "给整集批量口型同步。后台异步,按用量后付。用 get_lipsync_status
|
|
4632
|
+
"description": "给整集批量口型同步。后台异步,按用量后付。用 get_lipsync_status 查进度。\n★收到 **503 code=lipsync.unavailable** = 平台当前没有可用的口型服务,本次未提交、未扣费,重试无用;按返回的 alternatives 改走别的路(重生该镜视频 / 定向编辑 / 只换音频——最后一个不改嘴型)。",
|
|
4633
4633
|
"tags": [
|
|
4634
4634
|
"episodes"
|
|
4635
4635
|
],
|
|
@@ -9093,7 +9093,7 @@
|
|
|
9093
9093
|
"post": {
|
|
9094
9094
|
"operationId": "lipsync_shot",
|
|
9095
9095
|
"summary": "给单镜做口型同步(对白与人物嘴型对齐)",
|
|
9096
|
-
"description": "给单镜做口型同步(对白与人物嘴型对齐)
|
|
9096
|
+
"description": "给单镜做口型同步(对白与人物嘴型对齐)。按用量后付。\n★收到 **503 code=lipsync.unavailable** = 平台当前没有可用的口型服务,本次未提交、未扣费,重试无用;按返回的 alternatives 改走别的路(重生该镜视频 / 定向编辑 / 只换音频——最后一个不改嘴型)。",
|
|
9097
9097
|
"tags": [
|
|
9098
9098
|
"storyboards"
|
|
9099
9099
|
],
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@starreel/mcp",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.91",
|
|
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.
|
|
5
|
+
"version": "0.1.91",
|
|
6
6
|
"websiteUrl": "https://starreel.ai",
|
|
7
7
|
"packages": [
|
|
8
8
|
{
|
|
9
9
|
"registryType": "npm",
|
|
10
10
|
"identifier": "@starreel/mcp",
|
|
11
|
-
"version": "0.1.
|
|
11
|
+
"version": "0.1.91",
|
|
12
12
|
"transport": {
|
|
13
13
|
"type": "stdio"
|
|
14
14
|
},
|