@post-ripple/mcp 0.9.0 → 0.11.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.
- package/README.md +2 -2
- package/dist/index.js +5 -5
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -60,7 +60,7 @@ env = { POSTRIPPLE_API_KEY = "pr_..." }
|
|
|
60
60
|
| `list_slideshows` | read | Photo-carousel slideshows |
|
|
61
61
|
| `list_slideshow_templates` | read | Slideshow layout templates, fonts, and text treatments |
|
|
62
62
|
| `get_slideshow` | read | One slideshow with per-slide render state and progress |
|
|
63
|
-
| `list_posts` | read | Posts with status, approval state, schedule, and errors |
|
|
63
|
+
| `list_posts` | read | Posts with status, approval state (including rejection), schedule, and errors |
|
|
64
64
|
| `list_reviews` | read | Posts waiting for team approval or changes |
|
|
65
65
|
| `get_post_metrics` | read | Per-post engagement time series |
|
|
66
66
|
| `get_account_metrics` | read | Follower growth history |
|
|
@@ -80,7 +80,7 @@ env = { POSTRIPPLE_API_KEY = "pr_..." }
|
|
|
80
80
|
|
|
81
81
|
Notes for agents:
|
|
82
82
|
|
|
83
|
-
- `schedule_post` and `publish_slideshow` publish to **real** social accounts when the workspace allows direct publishing. If the team has enabled approval, these tools submit review items instead and return `submittedForReview: true`; use `list_reviews` to inspect them, and have an owner/admin approve
|
|
83
|
+
- `schedule_post` and `publish_slideshow` publish to **real** social accounts when the workspace allows direct publishing. If the team has enabled approval, these tools submit review items instead and return `submittedForReview: true`; use `list_reviews` to inspect them, and have an owner/admin approve, reject, or request changes from the Post Ripple Review page. Always pass `idempotencyKey`, and pass `tiktokSettings` if the post should be public on TikTok (the default is private/`SELF_ONLY`).
|
|
84
84
|
- The typical slideshow flow: `import_image_from_url` (or `get_image_upload_url` + PUT) per image → `create_slideshow` → poll `get_slideshow` until `ready` (template slides render server-side) → `publish_slideshow`. Pre-rendered JPEG slideshows are ready instantly.
|
|
85
85
|
- TikTok `settings.postMode: "inbox"` sends the photo post to the account's TikTok app drafts inbox instead of publishing directly — useful when a human finishes posts from a real device.
|
|
86
86
|
- Imports and publishes are asynchronous. Poll `list_videos` / `list_posts` to observe progress.
|
package/dist/index.js
CHANGED
|
@@ -223,13 +223,13 @@ register("get_creation", "Get the render status of a video created with create_v
|
|
|
223
223
|
register("list_slideshows", "List photo-carousel slideshows with status ('draft' = still being composed, 'ready' = publishable) and a signed coverUrl thumbnail (first rendered slide, or a background for drafts).", { ...orgParam, limit: z.number().min(1).max(200).optional() });
|
|
224
224
|
register("list_slideshow_templates", "List the slideshow layout templates: canvas size, each template's text slots with exact geometry (x/y anchor, maxWidth, fontSize, lineHeight — all normalized to the canvas) and defaults (font, color, treatment), the template's default overlay scrim, available fonts and text treatments, and the max slide count. Call before create_slideshow when composing template-based slides — use the slot geometry rather than inventing your own placement.", {});
|
|
225
225
|
register("get_slideshow", "Get one slideshow in full detail: per-slide render state, each text field's text AND its style overrides (font, color, treatment, fontScale, x/y position, maxWidth, align, rotation — null style means the template slot defaults apply), the slide's overlay scrim, and signed image URLs (renderedUrl = the finished slide, backgroundUrl = the photo behind it; both expire in ~1h). Use it to study how existing slides are actually styled before composing new ones, or poll it after create_slideshow returns status 'rendering' — publish once status is 'ready'.", { ...orgParam, slideshowId: z.string() });
|
|
226
|
-
register("list_posts", "List posts (including review drafts, scheduled, publishing, published, failed, and canceled), newest first. Review posts include approvalStatus, submittedByName, and reviewNote; scheduled posts include scheduledFor; published posts include platformPostId and publishedAt.", {
|
|
226
|
+
register("list_posts", "List posts (including review drafts, rejected posts, scheduled, publishing, published, failed, and canceled), newest first. Review posts include approvalStatus, submittedByName, and reviewNote; scheduled posts include scheduledFor; published posts include platformPostId and publishedAt.", {
|
|
227
227
|
...orgParam,
|
|
228
228
|
status: postStatusEnum.optional(),
|
|
229
229
|
platform: platformEnum.optional(),
|
|
230
230
|
limit: z.number().min(1).max(200).optional(),
|
|
231
231
|
});
|
|
232
|
-
register("list_reviews", "List posts waiting for team review. When approval is required, schedule_post and publish_slideshow submit work here instead of publishing or scheduling it. Use this to see approvalStatus, reviewer notes, target account, planned publish time, and a preview URL.
|
|
232
|
+
register("list_reviews", "List posts waiting for team review. When approval is required, schedule_post and publish_slideshow submit work here instead of publishing or scheduling it. Use this to see approvalStatus, reviewer notes, target account, planned publish time, and a preview URL. Owners and admins approve, reject, or request changes from Post Ripple's Review page; terminal decisions remain visible through list_posts.", {
|
|
233
233
|
...orgParam,
|
|
234
234
|
status: z
|
|
235
235
|
.enum(["in_review", "changes_requested"])
|
|
@@ -352,18 +352,18 @@ const captionStyleSchema = z
|
|
|
352
352
|
y: z.number().min(0).max(1).optional(),
|
|
353
353
|
})
|
|
354
354
|
.describe("Caption styling; defaults to white TikTok-bold text with a black outline");
|
|
355
|
-
register("create_video", "Render a short-form (9:16) video from library ingredients. Two types: 'hook_demo'
|
|
355
|
+
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 burned onto it (caption required in that mode; useful for posting a library clip with on-video text). 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.", {
|
|
356
356
|
...orgParam,
|
|
357
357
|
type: z.enum(["hook_demo", "green_screen_meme"]),
|
|
358
358
|
title: z.string().optional().describe("Library title for the finished video"),
|
|
359
|
-
caption: z.string().optional().describe("Text overlaid on the video (hook part only
|
|
359
|
+
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)"),
|
|
360
360
|
captionPosition: z.enum(["top", "middle", "bottom"]).optional(),
|
|
361
361
|
captionStyle: captionStyleSchema.optional(),
|
|
362
362
|
hookId: z.string().optional().describe("hook_demo: hook clip id from list_hooks (required)"),
|
|
363
363
|
demoVideoId: z
|
|
364
364
|
.string()
|
|
365
365
|
.optional()
|
|
366
|
-
.describe("hook_demo: a COMPLETED library video id (list_videos) to play after the hook.
|
|
366
|
+
.describe("hook_demo: a COMPLETED library video id (list_videos) to play after the hook. At most one of demoVideoId/demoFileId; omit both for a hook-only caption-burn render."),
|
|
367
367
|
demoFileId: z
|
|
368
368
|
.string()
|
|
369
369
|
.optional()
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@post-ripple/mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.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": {
|