post_content
Publish or schedule social media posts with text, images, videos, and links across multiple platforms using platform-specific customizations.
Instructions
Post content immediately or schedule it for a future time on a social account
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Social account ID (from social_account_list) | |
| message | Yes | Post content text | |
| schedule_date_time | No | Schedule time in YYYY-MM-DD HH:MM:SS format. Omit for immediate posting. | |
| image_url | No | Array of image URLs to attach | |
| video_url | No | Public video URL to attach | |
| url | No | Website link to include | |
| host_images_on_recurpost | No | Host images on RecurPost (default: true) | |
| fb_message | No | Facebook-specific message override | |
| tw_message | No | Twitter/X-specific message override | |
| ln_message | No | LinkedIn-specific message override | |
| in_message | No | Instagram-specific message override | |
| gmb_message | No | Google Business Profile-specific message override | |
| pi_message | No | Pinterest-specific message override | |
| yt_message | No | YouTube-specific message override | |
| tk_message | No | TikTok-specific message override | |
| th_message | No | Threads-specific message override | |
| bs_message | No | Bluesky-specific message override | |
| fb_post_type | No | Facebook post type | |
| in_post_type | No | Instagram post type | |
| in_reel_share_in_feed | No | Share Instagram reel in feed | |
| first_comment | No | Default first comment | |
| fb_first_comment | No | Facebook first comment | |
| ln_first_comment | No | LinkedIn first comment | |
| in_first_comment | No | Instagram first comment | |
| ln_document | No | LinkedIn document URL (PPT/PDF/DOCX) | |
| ln_document_title | No | LinkedIn document title | |
| pi_title | No | Pinterest pin title | |
| gbp_cta | No | Google Business Profile call to action | |
| gbp_cta_url | No | Google Business Profile CTA URL | |
| yt_title | No | YouTube video title | |
| yt_category | No | YouTube video category | |
| yt_privacy_status | No | YouTube privacy status | |
| yt_user_tags | No | YouTube tags | |
| yt_thumb | No | YouTube custom thumbnail URL | |
| yt_video_made_for_kids | No | Is the YouTube video made for kids | |
| tk_privacy_status | No | TikTok privacy status | |
| tk_allow_comments | No | Allow TikTok comments | |
| tk_allow_duet | No | Allow TikTok duets | |
| tk_allow_stitches | No | Allow TikTok stitches |
Implementation Reference
- src/index.ts:331-492 (handler)The 'post_content' tool is registered using `server.tool` and its handler calls `callAPI("/api/post_content", params)`.
server.tool( "post_content", "Post content immediately or schedule it for a future time on a social account", { id: z .string() .describe("Social account ID (from social_account_list)"), message: z.string().describe("Post content text"), schedule_date_time: z .string() .optional() .describe( "Schedule time in YYYY-MM-DD HH:MM:SS format. Omit for immediate posting." ), image_url: z .array(z.string().url()) .optional() .describe("Array of image URLs to attach"), video_url: z .string() .url() .optional() .describe("Public video URL to attach"), url: z.string().url().optional().describe("Website link to include"), host_images_on_recurpost: z .boolean() .optional() .describe("Host images on RecurPost (default: true)"), fb_message: z .string() .optional() .describe("Facebook-specific message override"), tw_message: z .string() .optional() .describe("Twitter/X-specific message override"), ln_message: z .string() .optional() .describe("LinkedIn-specific message override"), in_message: z .string() .optional() .describe("Instagram-specific message override"), gmb_message: z .string() .optional() .describe("Google Business Profile-specific message override"), pi_message: z .string() .optional() .describe("Pinterest-specific message override"), yt_message: z .string() .optional() .describe("YouTube-specific message override"), tk_message: z .string() .optional() .describe("TikTok-specific message override"), th_message: z .string() .optional() .describe("Threads-specific message override"), bs_message: z .string() .optional() .describe("Bluesky-specific message override"), fb_post_type: z .enum(["feed", "story", "reel"]) .optional() .describe("Facebook post type"), in_post_type: z .enum(["feed", "story", "reel"]) .optional() .describe("Instagram post type"), in_reel_share_in_feed: z .enum(["yes", "no"]) .optional() .describe("Share Instagram reel in feed"), first_comment: z.string().optional().describe("Default first comment"), fb_first_comment: z .string() .optional() .describe("Facebook first comment"), ln_first_comment: z .string() .optional() .describe("LinkedIn first comment"), in_first_comment: z .string() .optional() .describe("Instagram first comment"), ln_document: z .string() .url() .optional() .describe("LinkedIn document URL (PPT/PDF/DOCX)"), ln_document_title: z .string() .optional() .describe("LinkedIn document title"), pi_title: z.string().optional().describe("Pinterest pin title"), gbp_cta: z .enum([ "None", "Learn more", "Sign up", "Buy", "Order online", "Book", "Call now", "Offer", ]) .optional() .describe("Google Business Profile call to action"), gbp_cta_url: z .string() .url() .optional() .describe("Google Business Profile CTA URL"), yt_title: z.string().optional().describe("YouTube video title"), yt_category: z.string().optional().describe("YouTube video category"), yt_privacy_status: z .enum(["Public", "Private", "Unlisted"]) .optional() .describe("YouTube privacy status"), yt_user_tags: z.string().optional().describe("YouTube tags"), yt_thumb: z .string() .url() .optional() .describe("YouTube custom thumbnail URL"), yt_video_made_for_kids: z .enum(["yes", "no"]) .optional() .describe("Is the YouTube video made for kids"), tk_privacy_status: z .enum(["Public to Everyone", "Mutual Follow Friends", "Self Only"]) .optional() .describe("TikTok privacy status"), tk_allow_comments: z .enum(["yes", "no"]) .optional() .describe("Allow TikTok comments"), tk_allow_duet: z .enum(["yes", "no"]) .optional() .describe("Allow TikTok duets"), tk_allow_stitches: z .enum(["yes", "no"]) .optional() .describe("Allow TikTok stitches"), }, async (params) => { try { return toolResult(await callAPI("/api/post_content", params)); } catch (e) { return toolResult({ error: String(e) }, true); } } );