@omnisocials/mcp-server 1.1.0 → 1.2.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 CHANGED
@@ -75,6 +75,24 @@ Add to your `~/.codeium/windsurf/mcp_config.json`:
75
75
  }
76
76
  ```
77
77
 
78
+ ## Supported Channels
79
+
80
+ OmniSocials accepts the following channel IDs in `create_post`, `create_and_publish_post`, and related tools. Use `list_accounts` to see which channels a workspace currently has connected.
81
+
82
+ | Channel ID | Platform | Notes |
83
+ |------------|----------|-------|
84
+ | `instagram` | Instagram | Posts, stories, reels |
85
+ | `facebook` | Facebook | Posts, stories, reels |
86
+ | `linkedin` | LinkedIn Profile | Personal profile posts |
87
+ | `linkedin_page` | LinkedIn Page | Company page posts. Independent from `linkedin`; a workspace can have both connected at once |
88
+ | `youtube` | YouTube | Shorts |
89
+ | `tiktok` | TikTok | Posts and reels |
90
+ | `pinterest` | Pinterest | Pins (requires `board_id`) |
91
+ | `x` | X (Twitter) | Posts |
92
+ | `threads` | Threads | Posts |
93
+ | `bluesky` | Bluesky | Posts |
94
+ | `mastodon` | Mastodon | Posts |
95
+
78
96
  ## Available Tools
79
97
 
80
98
  ### Posts (7 tools)
package/build/client.d.ts CHANGED
@@ -27,6 +27,7 @@ export declare class OmniSocialsClient {
27
27
  media_ids?: string[] | Record<string, string[]>;
28
28
  media_urls?: string[] | Record<string, string[]>;
29
29
  type?: string;
30
+ source?: string;
30
31
  pinterest?: Record<string, unknown>;
31
32
  youtube?: Record<string, unknown>;
32
33
  instagram?: Record<string, unknown>;
@@ -39,6 +40,7 @@ export declare class OmniSocialsClient {
39
40
  media_ids?: string[] | Record<string, string[]>;
40
41
  media_urls?: string[] | Record<string, string[]>;
41
42
  type?: string;
43
+ source?: string;
42
44
  pinterest?: Record<string, unknown>;
43
45
  youtube?: Record<string, unknown>;
44
46
  instagram?: Record<string, unknown>;
@@ -1,7 +1,7 @@
1
1
  import { z } from "zod";
2
2
  import { fetchImageAsBase64, capitalize } from "../client.js";
3
3
  export function registerAccountTools(server, client) {
4
- server.tool("list_accounts", "List all connected social media accounts in the workspace. Each account includes its platform, display name, channel ID (used for create_post), and supported content_types (post, story, reel). Pinterest accounts also include a `boards` array with `{id, name}` — use the board `id` as `board_id` when creating Pinterest posts. X accounts with Premium include `platform_details` with `subscription_type` (e.g. \"Premium\", \"PremiumPlus\"). Call this to help users pick which platforms to post to.", {}, async () => {
4
+ server.tool("list_accounts", "List all connected social media accounts in the workspace. Each account includes its platform, display name, channel ID (used for create_post), and supported content_types (post, story, reel). Pinterest accounts also include a `boards` array with `{id, name}` — use the board `id` as `board_id` when creating Pinterest posts. X accounts with Premium include `platform_details` with `subscription_type` (e.g. \"Premium\", \"PremiumPlus\"). LinkedIn appears as two independent platforms: `linkedin` for a personal profile and `linkedin_page` for a company page. A workspace can have both connected at the same time and post to each separately. Call this to help users pick which platforms to post to.", {}, async () => {
5
5
  const result = await client.listAccounts();
6
6
  if (result.error) {
7
7
  return {
@@ -86,7 +86,7 @@ IMPORTANT — Before calling this tool, make sure you have all required informat
86
86
  - Instagram posts: ALWAYS require at least one image or video.
87
87
  - TikTok posts: ALWAYS require at least one image or video.
88
88
  - Pinterest posts: ALWAYS require an image AND a board_id.
89
- - Other platforms (LinkedIn, X, Bluesky, etc.): Media is optional.
89
+ - Other platforms (LinkedIn, LinkedIn Page, X, Bluesky, etc.): Media is optional.
90
90
  5. **Platform-specific options** (ask only when relevant):
91
91
  - Pinterest: Which board? Any link to attach?
92
92
  - YouTube: Title, privacy status, tags?
@@ -94,7 +94,7 @@ IMPORTANT — Before calling this tool, make sure you have all required informat
94
94
 
95
95
  Do NOT call this tool without media when creating stories, reels, Instagram posts, TikTok posts, or Pinterest posts — it will fail.`, {
96
96
  content: z.string().describe("The post content/caption text"),
97
- channels: z.array(z.string()).optional().describe("Array of channel IDs to post to"),
97
+ channels: z.array(z.string()).optional().describe("Array of channel IDs to post to. Get the available channel IDs from list_accounts. Note: `linkedin` (personal profile) and `linkedin_page` (company page) are independent channels. A workspace can have both connected and post to each separately."),
98
98
  scheduled_at: z.string().optional().describe("ISO 8601 date for scheduled publishing"),
99
99
  media_ids: z.union([
100
100
  z.array(z.string()),
@@ -137,7 +137,7 @@ Do NOT call this tool without media when creating stories, reels, Instagram post
137
137
  reply_settings: z.enum(["", "following", "mentionedUsers"]).optional(),
138
138
  }).optional().describe("X (Twitter) options"),
139
139
  }, async (params) => {
140
- const result = await client.createPost(params);
140
+ const result = await client.createPost({ ...params, source: "mcp" });
141
141
  if (result.error) {
142
142
  return {
143
143
  content: [{ type: "text", text: `Error: ${result.error.message}` }],
@@ -173,7 +173,7 @@ IMPORTANT — Before calling this tool, make sure you have all required informat
173
173
 
174
174
  Do NOT call without required media — it will fail.`, {
175
175
  content: z.string().describe("The post content/caption text"),
176
- channels: z.array(z.string()).optional().describe("Array of channel IDs to post to"),
176
+ channels: z.array(z.string()).optional().describe("Array of channel IDs to post to. Get the available channel IDs from list_accounts. Note: `linkedin` (personal profile) and `linkedin_page` (company page) are independent channels. A workspace can have both connected and post to each separately."),
177
177
  media_ids: z.union([
178
178
  z.array(z.string()),
179
179
  z.record(z.string(), z.array(z.string())),
@@ -197,7 +197,7 @@ Do NOT call without required media — it will fail.`, {
197
197
  privacy_level: z.enum(["PUBLIC_TO_EVERYONE", "MUTUAL_FOLLOW_FRIENDS", "FOLLOWER_OF_CREATOR", "SELF_ONLY"]).optional(),
198
198
  }).optional().describe("TikTok options"),
199
199
  }, async (params) => {
200
- const result = await client.createAndPublishPost(params);
200
+ const result = await client.createAndPublishPost({ ...params, source: "mcp" });
201
201
  if (result.error) {
202
202
  return {
203
203
  content: [{ type: "text", text: `Error: ${result.error.message}` }],
@@ -220,7 +220,7 @@ Do NOT call without required media — it will fail.`, {
220
220
  id: z.string().describe("The post ID to update"),
221
221
  content: z.string().optional().describe("Updated post content"),
222
222
  scheduled_at: z.string().optional().describe("Updated scheduled date (ISO 8601)"),
223
- channels: z.array(z.string()).optional().describe("Updated channel IDs"),
223
+ channels: z.array(z.string()).optional().describe("Updated channel IDs. Note: `linkedin` (personal profile) and `linkedin_page` (company page) are independent channels."),
224
224
  media_ids: z.union([
225
225
  z.array(z.string()),
226
226
  z.record(z.string(), z.array(z.string())),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@omnisocials/mcp-server",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "MCP server for OmniSocials API - manage social media posts, media, accounts, analytics, and webhooks",
5
5
  "type": "module",
6
6
  "main": "build/index.js",