@omnisocials/mcp-server 1.3.5 → 1.3.7
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 +14 -0
- package/build/tools/posts.js +31 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -191,6 +191,20 @@ Full API docs: [docs.omnisocials.com](https://docs.omnisocials.com)
|
|
|
191
191
|
|
|
192
192
|
## Changelog
|
|
193
193
|
|
|
194
|
+
### 1.3.7
|
|
195
|
+
|
|
196
|
+
- **Fixed:** `update_post` now accepts per-platform options (`youtube`, `pinterest`, `instagram`, `tiktok`) — same shape as `create_post`. Previously these were missing from the `update_post` schema, so agents that tried to rename a scheduled YouTube Short via `youtube.title` had the field silently stripped before it reached the server. Renaming a Short, changing privacy, adjusting a Pinterest board, etc. on an existing draft now work.
|
|
197
|
+
- Tool descriptions clarify that `content` is the post caption / body, and for YouTube Shorts becomes the video **description** — **not** the Short's title. To rename a Short, use `youtube.title`.
|
|
198
|
+
|
|
199
|
+
### 1.3.6
|
|
200
|
+
|
|
201
|
+
- Metadata-only republish of 1.3.5 to refresh the README on npmjs.com. No code changes from 1.3.5.
|
|
202
|
+
|
|
203
|
+
### 1.3.5
|
|
204
|
+
|
|
205
|
+
- **Fixed:** YouTube Shorts `title`, `tags`, `privacy_status`, `category_id`, `made_for_kids`, `notify_subscribers`, and `contains_synthetic_media` now actually take effect when publishing through MCP/API. Previously the publisher silently ignored these and every Short went live as "YouTube Short" with default privacy. Companion server fix — clients on 1.3.4 also benefit once the backend deploys; 1.3.5 only refreshes the tool descriptions.
|
|
206
|
+
- Tool descriptions clarify that the `youtube` options block only applies when `type` is `"reel"` and `youtube` is among the selected channels, and that `title` falls back to `"YouTube Short"` when omitted.
|
|
207
|
+
|
|
194
208
|
### 1.3.4
|
|
195
209
|
|
|
196
210
|
- **Prevent accidental publishing.** Tool descriptions now front-load the difference: `create_post` is explicitly the **draft** path, `create_and_publish_post` carries a `STOP` gate listing every phrasing ("draft", "schedule", "review first", "save it", etc.) that should make the agent fall back to `create_post`. Default is "create draft" whenever there's ambiguity.
|
package/build/tools/posts.js
CHANGED
|
@@ -378,9 +378,11 @@ Do NOT call without required media — it will fail.`, {
|
|
|
378
378
|
});
|
|
379
379
|
server.tool("update_post", `Update an existing post. Only draft and scheduled posts can be updated.
|
|
380
380
|
|
|
381
|
+
**Per-platform options (\`youtube\`, \`pinterest\`, \`instagram\`, \`tiktok\`)** are accepted here, same shape as in \`create_post\`. Pass an object — never a JSON-encoded string. For YouTube Shorts, the **title** lives at \`youtube.title\`; the **video description** lives in \`content\` (or \`content.youtube\` for a per-platform override). They are not the same field — changing the caption does NOT rename the Short.
|
|
382
|
+
|
|
381
383
|
**X threads**: To convert an existing draft into a chained X thread, pass \`x.thread_parts\` as a 2–25 entry array of \`{ text }\` objects (each ≤ 280 chars). Pass \`null\` to revert to single-tweet mode. Do NOT shove "1/", "2/" into \`content\` — that's a single tweet, not a thread.`, {
|
|
382
384
|
id: z.string().describe("The post ID to update"),
|
|
383
|
-
content: z.union([z.string(), z.record(z.string(), z.string())]).optional().describe("Updated post
|
|
385
|
+
content: z.union([z.string(), z.record(z.string(), z.string())]).optional().describe("Updated post caption / body text. For YouTube Shorts this becomes the video description, NOT the title — to rename the Short, use `youtube.title`. String or object with platform keys: { \"default\": \"fallback\", \"linkedin\": \"long\" }."),
|
|
384
386
|
scheduled_at: z.string().optional().describe("Updated scheduled date (ISO 8601)"),
|
|
385
387
|
channels: z.array(z.string()).optional().describe("Updated channel IDs. Note: `linkedin` (personal profile) and `linkedin_page` (company page) are independent channels."),
|
|
386
388
|
media_ids: z.union([
|
|
@@ -391,6 +393,34 @@ Do NOT call without required media — it will fail.`, {
|
|
|
391
393
|
z.array(z.string()),
|
|
392
394
|
z.record(z.string(), z.array(z.string())),
|
|
393
395
|
]).optional().describe("External URLs — flat array or per-platform object. Max 10 total. 'default' key is fallback for platforms without their own key. Empty array opts out."),
|
|
396
|
+
youtube: z.object({
|
|
397
|
+
title: z.string().optional().describe("Short title shown on YouTube. To change the Short's title on an existing draft, set this — do NOT use `content` (which is the description)."),
|
|
398
|
+
tags: z.array(z.string()).optional(),
|
|
399
|
+
privacy_status: z.enum(["public", "private", "unlisted"]).optional(),
|
|
400
|
+
category_id: z.string().optional(),
|
|
401
|
+
made_for_kids: z.boolean().optional(),
|
|
402
|
+
notify_subscribers: z.boolean().optional(),
|
|
403
|
+
contains_synthetic_media: z.boolean().optional(),
|
|
404
|
+
}).optional().describe("YouTube Shorts options. Only applies when type is 'reel' and youtube is among the selected channels."),
|
|
405
|
+
pinterest: z.object({
|
|
406
|
+
board_id: z.string().optional(),
|
|
407
|
+
title: z.string().optional(),
|
|
408
|
+
link: z.string().optional(),
|
|
409
|
+
}).optional().describe("Pinterest-specific options"),
|
|
410
|
+
instagram: z.object({
|
|
411
|
+
share_to_feed: z.boolean().optional(),
|
|
412
|
+
thumbnail_type: z.enum(["from-video", "from-library"]).optional(),
|
|
413
|
+
thumb_offset: z.number().optional(),
|
|
414
|
+
cover_url: z.string().optional(),
|
|
415
|
+
}).optional().describe("Instagram Reel options"),
|
|
416
|
+
tiktok: z.object({
|
|
417
|
+
privacy_level: z.enum(["PUBLIC_TO_EVERYONE", "MUTUAL_FOLLOW_FRIENDS", "FOLLOWER_OF_CREATOR", "SELF_ONLY"]).optional(),
|
|
418
|
+
disable_comment: z.boolean().optional(),
|
|
419
|
+
disable_duet: z.boolean().optional(),
|
|
420
|
+
disable_stitch: z.boolean().optional(),
|
|
421
|
+
is_aigc: z.boolean().optional(),
|
|
422
|
+
brand_content_toggle: z.boolean().optional(),
|
|
423
|
+
}).optional().describe("TikTok options"),
|
|
394
424
|
x: z.object({
|
|
395
425
|
reply_settings: z.enum(["", "following", "mentionedUsers"]).optional(),
|
|
396
426
|
paid_partnership: z.boolean().optional(),
|
package/package.json
CHANGED