@starreel/mcp 0.1.17 → 0.1.18

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.
@@ -23,7 +23,11 @@ const CONFIRM_HINT = '⚠️ 批量报价确认流程:先调对应的 quote_*
23
23
  // → compose_episode → get_final_cut / get_export
24
24
  // 项目设定随时可 update_project_settings;剧目级资产(色彩脚本/动作模板/世界观图/美术圣经)可选增强。
25
25
  const WORKFLOW_HINT = '照完整工作流按序推进,别跳步:set_script(原始)→ rewrite_script(AI改写)→ extract_assets →' +
26
- ' generate_portraits_and_sheets(定妆图+设定图·镜头一致性根锚,别只出定妆图)→ storyboards → frames → videos → compose。用 get_pipeline_status 查进度。';
26
+ ' generate_portraits_and_sheets(定妆图+设定图·镜头一致性根锚)→ assign_voices(分配音色,否则 generate_tts 无声)→' +
27
+ ' storyboards → frames → videos → generate_tts → compose。' +
28
+ '★广告(ad)另需 add_product 建产品库 + generate_product_sheet(广告主体,不建镜头产品会漂);' +
29
+ 'MV 走 set_mv_lyrics→generate_mv_story→generate_mv_script。' +
30
+ '用 get_pipeline_status 查进度——它按项目类型返回专属步骤(广告有 build_product_library,MV 有歌词/故事)。';
27
31
  const ETHNICITY_CODES = [
28
32
  'east_asian', 'southeast_asian', 'south_asian', 'central_asian',
29
33
  'caucasian', 'middle_eastern', 'african', 'latin_american',
@@ -300,7 +304,10 @@ export function registerProduceTools(server, client) {
300
304
  server.tool('get_cost_estimate', '查一部剧的整体成本预估(点数)。免费。', { drama_id: z.number().int().positive() }, async ({ drama_id }) => jsonResult(await client.produceGet(`/dramas/${drama_id}/cost-estimate`)));
301
305
  server.tool('get_budget_status', '查一部剧的预算状态(预算/已花费/剩余)。免费。', { drama_id: z.number().int().positive() }, async ({ drama_id }) => jsonResult(await client.produceGet(`/dramas/${drama_id}/budget-status`)));
302
306
  // ========== P1 · 整集配音(成片前的强制音频步)==========
303
- server.tool('generate_tts', '给整集所有对白批量配音(TTS)。成片前的音频步——不配音成片会缺对白。后台异步,按用量后付不欠费。', { episode_id: z.number().int().positive() }, async ({ episode_id }) => jsonResult(await client.producePost(`/episodes/${episode_id}/tts`)));
307
+ server.tool('assign_voices', '★给本集所有角色分配音色(配音导演 agent 按性别/性格/年龄/角色定位+项目语言选)。' +
308
+ 'voiceStyle 不是提取时自动填的——不分配,generate_tts 就没音色。文本步(LLM)后付。' +
309
+ '后台异步,轮询 get_pipeline_status:assign_voices=done 即完成,再 generate_tts。', { episode_id: z.number().int().positive() }, async ({ episode_id }) => jsonResult(await client.producePost(`/episodes/${episode_id}/assign-voices`)));
310
+ server.tool('generate_tts', '给整集所有对白批量配音(TTS)。成片前的音频步——不配音成片会缺对白。前置:先 assign_voices 给角色分配音色。后台异步,按用量后付不欠费。', { episode_id: z.number().int().positive() }, async ({ episode_id }) => jsonResult(await client.producePost(`/episodes/${episode_id}/tts`)));
304
311
  // ========== P1 · MV 子流程(project_type=mv 专用)==========
305
312
  server.tool('set_mv_lyrics', 'MV 项目:设置歌词(整曲音频另在建剧时传)。免费。之后 generate_mv_story → generate_mv_script。', { drama_id: z.number().int().positive(), lyrics: z.string().min(1).describe('歌词全文') }, async ({ drama_id, lyrics }) => jsonResult(await client.producePost(`/dramas/${drama_id}/mv/lyrics`, { lyrics })));
306
313
  server.tool('generate_mv_story', 'MV 项目:据歌词 AI 编一个 MV 故事线。后台/同步,按用量后付。', { drama_id: z.number().int().positive() }, async ({ drama_id }) => jsonResult(await client.producePost(`/dramas/${drama_id}/mv/story`)));
@@ -354,13 +361,15 @@ export function registerProduceTools(server, client) {
354
361
  // ========== P2 · 品牌片交付物 / 广告商品库 ==========
355
362
  server.tool('get_deliverables', '品牌片:读交付物树(海报/母版/分轨/各平台版等)。免费。', { drama_id: z.number().int().positive() }, async ({ drama_id }) => jsonResult(await client.produceGet(`/dramas/${drama_id}/deliverables`)));
356
363
  server.tool('generate_deliverables', '品牌片:一键生成全部交付物。后台异步,按用量后付。', { drama_id: z.number().int().positive() }, async ({ drama_id }) => jsonResult(await client.producePost(`/dramas/${drama_id}/deliverables`)));
357
- server.tool('add_product', '广告项目:往商品库加一个商品(名称/卖点/图),供带货广告露出。免费。', {
364
+ server.tool('add_product', '★广告项目必做:往商品库加一个商品(名称/卖点/图),是广告的**主体**——出视频时按分镜文本匹配产品图当锚,' +
365
+ '不建产品库镜头里的产品会漂移/瞎编。建完用 generate_product_sheet 出设定图(锚更稳)。免费(仅建条目)。', {
358
366
  drama_id: z.number().int().positive(),
359
367
  name: z.string().min(1),
360
368
  description: z.string().optional().describe('卖点/描述'),
361
369
  image_url: z.string().optional().describe('商品图 URL(先 upload_image 拿)'),
362
370
  }, async ({ drama_id, ...fields }) => jsonResult(await client.producePost(`/dramas/${drama_id}/products`, fields)));
363
371
  server.tool('list_products', '广告项目:列出商品库。免费。', { drama_id: z.number().int().positive() }, async ({ drama_id }) => jsonResult(await client.produceGet(`/dramas/${drama_id}/products`)));
372
+ server.tool('generate_product_sheet', '★广告项目:给商品库里某商品 AI 出设定图(广告露出锚)。商品无设定图 → 出视频时按分镜 grep 产品名取图当锚会落空、产品漂移。图片步,按用量后付不欠费。', { product_id: z.number().int().positive() }, async ({ product_id }) => jsonResult(await client.producePost(`/products/${product_id}/sheet`)));
364
373
  // ========== AI 声音克隆(voice cloning)==========
365
374
  // 音色是**独立资产**:克隆 → 试听下载,全程不需要角色。绑角色只是「要出片」时的
366
375
  // 可选下游动作。voice_id 形如 `lib:12`,克隆/列表/试听/绑定四处同一命名空间。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@starreel/mcp",
3
- "version": "0.1.17",
3
+ "version": "0.1.18",
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",