@post-ripple/mcp 0.13.0 → 0.14.0

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.
Files changed (2) hide show
  1. package/dist/index.js +17 -2
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -364,13 +364,16 @@ const clipTrimSchema = z.object({
364
364
  .optional()
365
365
  .describe("Out-point, ms into the source clip (omit = clip end)"),
366
366
  });
367
- register("create_video", "Render a short-form (9:16) video from library ingredients. Two types: 'hook_demo' takes a hook clip (list_hooks) and either stitches it in front of your demo/product video (a completed library video via demoVideoId, or a raw upload via demoFileId from get_video_upload_url) or — when BOTH demo params are omitted — renders the hook clip ALONE with the caption and/or hookTrim applied (at least one required in that mode; useful for posting a library clip with on-video text or a shortened cut). Both clips can be trimmed to a window of the source via hookTrim/demoTrim. Optional background music via musicId from list_music. 'green_screen_meme' composites a green-screen clip (list_green_screens) over a background image (list_backgrounds). Both take an optional caption with styling. Rendering is asynchronous — poll get_creation with the returned creationId until 'completed', then publish resultVideoId with schedule_post. Uses one 'creations' credit from the plan.", {
367
+ register("create_video", "Render a short-form (9:16) video from library ingredients. Two types: 'hook_demo' takes a hook clip (list_hooks) and either stitches it in front of your demo/product video (a completed library video via demoVideoId, or a raw upload via demoFileId from get_video_upload_url) or — when BOTH demo params are omitted — renders the hook clip ALONE with the caption and/or hookTrim applied (at least one required in that mode; useful for posting a library clip with on-video text or a shortened cut). Both clips can be trimmed via hookTrim/demoTrim, and captionWindow selects exactly when text is visible on the final video (including the whole video). Optional background music via musicId from list_music. 'green_screen_meme' composites a green-screen clip (list_green_screens) over a background image (list_backgrounds). Both take an optional caption with styling. Rendering is asynchronous — poll get_creation with the returned creationId until 'completed', then publish resultVideoId with schedule_post. Uses one 'creations' credit from the plan.", {
368
368
  ...orgParam,
369
369
  type: z.enum(["hook_demo", "green_screen_meme"]),
370
370
  title: z.string().optional().describe("Library title for the finished video"),
371
- caption: z.string().optional().describe("Text overlaid on the video (over the hook part when a demo follows; over the whole clip in hook-only mode, where it is required)"),
371
+ caption: z.string().optional().describe("Text overlaid on the video. For hook_demo, captionWindow controls when it is visible; omitting captionWindow preserves hook-only visibility."),
372
372
  captionPosition: z.enum(["top", "middle", "bottom"]).optional(),
373
373
  captionStyle: captionStyleSchema.optional(),
374
+ captionWindow: clipTrimSchema
375
+ .optional()
376
+ .describe("hook_demo: visibility window in ms on the FINAL stitched video timeline. Omit for legacy hook-only visibility; use {startMs: 0} for the whole video, or set both bounds for any interval."),
374
377
  hookId: z.string().optional().describe("hook_demo: hook clip id from list_hooks (required)"),
375
378
  demoVideoId: z
376
379
  .string()
@@ -393,6 +396,18 @@ register("create_video", "Render a short-form (9:16) video from library ingredie
393
396
  .min(0)
394
397
  .optional()
395
398
  .describe("hook_demo: start the background track this many ms in (default 0). The played length always equals the video's duration; clamped so the window fits the track."),
399
+ audioVolume: z
400
+ .number()
401
+ .min(0)
402
+ .max(1)
403
+ .optional()
404
+ .describe("hook_demo: mix level of the background track, 0..1 (default 0.3). Requires musicId/soundId."),
405
+ originalVolume: z
406
+ .number()
407
+ .min(0)
408
+ .max(1)
409
+ .optional()
410
+ .describe("hook_demo: mix level of the clips' own audio, 0..1 (default 1). Use 0 to replace the original sound with the background track entirely."),
396
411
  greenScreenId: z.string().optional().describe("green_screen_meme: clip id from list_green_screens (required)"),
397
412
  backgroundId: z.string().optional().describe("green_screen_meme: image id from list_backgrounds (required)"),
398
413
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@post-ripple/mcp",
3
- "version": "0.13.0",
3
+ "version": "0.14.0",
4
4
  "description": "MCP server that lets AI agents (Claude Code, Codex, opencode) manage a Post Ripple workspace: content, scheduling, publishing, and analytics.",
5
5
  "type": "module",
6
6
  "bin": {