Social media post
Skill peturgeorgievv-factory/postfast-mcp/skills/social-media-post
Create, schedule, and manage social media posts using PostFast. Use when the user wants to publish, schedule, or manage posts on Facebook, Instagram, X (Twitter), TikTok, LinkedIn, YouTube, BlueSky, Threads, Pinterest, Telegram, or Google Business Profile.From its SKILL.md
npx -y skills add peturgeorgievv-factory/postfast-mcp --skill social-media-postAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 5 stars5 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
11.1 KB, as published. Nobody here has run it
Social Media Post via PostFast
You have access to PostFast MCP tools for social media scheduling and management.
Setup Check
If any PostFast tool call fails with an authentication/401 error, tell the user:
- Go to https://app.postfa.st/dashboard, click API in the sidebar, and generate a key
- Set the
POSTFAST_API_KEYenvironment variable with the key
Posting Workflow
-
List accounts — Call
list_accountsto see connected social media accounts. Each account has anid,platform,platformUsername,displayName, and aconnectionStatus(CONNECTEDorDISABLED) with an optionaldisabledReason. IfconnectionStatusisDISABLED, the account won't publish until the user reconnects it — warn the user and don't schedule to it. -
Prepare media (if needed) — If the user has images or videos to attach:
- Use
upload_mediawith the local file path — it handles getting a signed URL, uploading, and returning akeyandtype(IMAGE or VIDEO) - Supported formats: JPEG, PNG, GIF, WebP (images), MP4, WebM, MOV (video)
- Size limits: 10MB images, 250MB video, 60MB documents (PDF/DOC/DOCX/PPT/PPTX)
- Use
-
Create posts — Call
create_postswith:socialMediaId: account ID from step 1content: the post text/captionscheduledAt: ISO 8601 datetime (required unless status is DRAFT)mediaItems: array of{key, type, sortOrder}from uploaded mediastatus: SCHEDULED (default) or DRAFTfirstComment: optional first comment text, posted automatically after publishing (supported on X, Instagram, Facebook, YouTube, Threads, and TikTok — TikTok: max 1,200 chars, requires a Business API connection)controls: platform-specific settings (see below)- You can batch up to 15 posts in a single call — great for content calendars
- Don't schedule to a
DISABLEDaccount — the API rejects it with HTTP 400socialMediaDisconnected. Saving as DRAFT is still allowed. CheckconnectionStatusfrom step 1 first.
-
Confirm — Show the user a summary: which accounts, what content, when scheduled.
Platform-Specific Controls
X (Twitter)
xRetweetUrl: URL of tweet to retweet (ignores content/media)
instagramPublishType: TIMELINE (default), STORY, or REELinstagramTrialReelStrategy: MANUAL or SS_PERFORMANCE — publishes a trial reel, shown only to non-followers until it graduates. MANUAL = the user graduates it in the Instagram app; SS_PERFORMANCE = Instagram graduates it automatically if it performs well. RequiresinstagramPublishType: REELand can't be combined withinstagramCollaborators(both rejected with HTTP 400 at create time). Omit for a normal reelinstagramPostToGrid: boolean, default true (for Reels)instagramCollaborators: array of usernames to invite as collaboratorsinstagramIsAiGenerated: boolean, default false — adds Instagram's "AI info" label. Covers images, reels, stories and carousels (on a carousel it labels the whole post, not individual slides). Set at creation only; the label can't be added or removed after publishing
facebookContentType: POST (default), REEL, or STORY- POST: up to 10 photos OR 1 video
- REEL: 1 video only
- STORY: 1 image OR 1 video
facebookReelsCollaborators: array of usernames (for Reels)
TikTok
tiktokPrivacy: deprecated — TikTok videos use the account default privacy (no per-post control) and photos default to public; usetiktokIsDraftfor private poststiktokIsDraft: boolean, default falsetiktokAllowComments: boolean, default truetiktokAllowDuet: boolean, default truetiktokAllowStitch: boolean, default truetiktokBrandOrganic: boolean, default falsetiktokBrandContent: boolean, default falsetiktokAutoAddMusic: boolean, default falsetiktokIsAigc: boolean, default false (declare the post as AI-generated content — videos and photo posts)tiktokTitle: title for photo posts (max 90 chars; photo posts only) — when set, the full content becomes the description; without it, content auto-splits on the first newline into title + descriptiontiktokMusicSoundId+tiktokMusicSoundName: attach a pre-cleared Commercial Music Library sound to a photo/carousel post — find sounds withlist_tiktok_sounds(the list rotates daily). Mutually exclusive withtiktokAutoAddMusic; not applied whentiktokIsDraftis true. Always set the name alongside the id
YouTube
youtubeTitle: defaults to first 100 chars of contentyoutubePrivacy: PUBLIC (default), PRIVATE, or UNLISTEDyoutubeTags: array of tag stringsyoutubeCategoryId: YouTube category IDyoutubeIsShort: boolean, default trueyoutubeMadeForKids: boolean, default false (COPPA compliance)youtubeContainsSyntheticMedia: boolean, default false — discloses that the video contains realistic altered or synthetic (AI) content. Sent to YouTube only when true; set at creation onlyyoutubePlaylistId: playlist ID (uselist_youtube_playliststo find it)youtubeThumbnailKey: S3 media key for custom video thumbnail (upload viaupload_mediaorget_upload_urls; JPEG/PNG recommended, max 2MB, min 640px wide, 1280x720 ideal; requires phone-verified YouTube channel)
pinterestBoardId: required — uselist_pinterest_boardsto get theboardIdpinterestLink: destination URL when pin is clicked- Content is parsed as: first line = pin title (max 100 chars), remaining lines = description (max 800 chars)
- Carousel: 2-5 static images (no videos)
Google Business Profile
gbpLocationId: required — uselist_gbp_locationsto get thelocationIdgbpTopicType: STANDARD (default), EVENT, or OFFERgbpCallToActionType: BOOK, ORDER, LEARN_MORE, SIGN_UP, CALL, or SHOPgbpCallToActionUrl: URL for the CTA button (not needed for CALL, ignored for OFFER)gbpEventTitle: title for EVENT/OFFER posts (max 58 chars)gbpEventStartDate: start date (ISO 8601, required for EVENT/OFFER)gbpEventEndDate: end date (ISO 8601, required for EVENT/OFFER)gbpOfferCouponCode: coupon code (OFFER only)gbpOfferRedeemUrl: redemption URL (OFFER only)gbpOfferTerms: terms and conditions (OFFER only)- Content max: 1,500 chars. Media: up to 5 images or 1 video. Standard posts expire after 6 months; EVENT/OFFER posts expire at end date.
linkedinAttachmentKey: S3 key for document attachment (for document posts)linkedinAttachmentTitle: display title for the document (default "Document")- Cannot mix documents with regular image/video media
- Supported document formats: PDF, DOC, DOCX, PPT, PPTX (max 60MB)
Other Actions
- View posts:
list_posts— filter byplatforms(comma-separated),statuses(DRAFT, SCHEDULED, PUBLISHED, FAILED),from/todates, with pagination (page,limitup to 50). Failed or missed posts include alastErrorwith acode— e.g.MISSED_DISCONNECTED(the account was disconnected when the post was due) orMISSED_NOT_PUBLISHED(missed its slot by more than the 2h grace window) - Post analytics:
get_post_analytics— fetch published posts with performance metrics. RequiresstartDateandendDate(ISO 8601). Optional filters:platforms,socialMediaIds. Returns impressions, reach, likes, comments, shares, totalInteractions, plus anextrasobject with platform-specific metrics. Supported: Instagram, Facebook, TikTok, Threads, YouTube, LinkedIn (company pages), Pinterest (Business accounts). Pinterestextrasincludepin_clicks,outbound_clicks,saves_90d,save_rate_90d; video pins also surfacemrc_views,views_10s,avg_watch_time,v50_watch_time,video_starts,quartile_95_views. Video posts also include normalized watch-time onlatestMetric:avgWatchTimeSeconds,totalWatchTimeSeconds,videoViews(Facebook, Instagram Reels, YouTube, Pinterest, LinkedIn company pages, TikTok); Instagram posts also includesaveRateonlatestMetric(saves / reach as a percentage, rounded to 2 decimals; feed posts, reels, and carousels), and Instagram Reels additionally includereelsSkipRate(percentage of viewers who skipped the reel in the first 3 seconds, rounded to 2 decimals; may be absent on low-view reels or until metrics refresh); TikTok also exposestotal_time_watched,average_time_watched, andfull_video_watched_rateinmetric.extras. Note: LinkedIn personal accounts are excluded; Pinterest saves are reported as a rolling 90-day window because Pinterest's API does not expose lifetime save totals (all other Pinterest metrics are lifetime);latestMetricis null if metrics haven't been fetched yet; metric values are strings (bigint). Keep date ranges reasonable as there's no pagination. - Follower history:
get_follower_history— daily follower-count snapshots for one account (socialMediaId), pluscurrentFollowerCountand a signeddeltaover the range. Optionalfrom/to(ISO 8601); defaults to the last 90 days, capped at 365. Tracking is forward-only —trackingStartedAtmarks when recording began, with no data before it; counts are strings (bigint). Coverage: Facebook Pages, Instagram, YouTube, Pinterest, Threads, Bluesky, Telegram, LinkedIn company pages, and TikTok (not X or personal Facebook) - Delete a post:
delete_postwith the post ID - Connect new accounts:
generate_connect_link— creates a secure URL to share with clients/collaborators to connect their accounts. SetexpiryDays(1-30) and optionallysendEmailwith anemailaddress - Pinterest boards:
list_pinterest_boards— get board IDs before creating Pinterest posts - YouTube playlists:
list_youtube_playlists— get playlist IDs for adding videos to playlists - GBP locations:
list_gbp_locations— get location IDs before creating Google Business Profile posts
Tips
- Always confirm schedule time and target accounts with the user before creating posts.
- If
list_accountsshows an account asDISABLED, tell the user to reconnect it before scheduling — scheduled posts to disconnected accounts are rejected, and posts already due get marked missed. - For content calendars, batch multiple posts in one
create_postscall (up to 15). - When posting to Pinterest, always fetch boards first —
pinterestBoardIdis required. - When posting to Google Business Profile, always fetch locations first —
gbpLocationIdis required. - Use DRAFT status if the user wants to review posts in the PostFast dashboard before they go live.
- The
firstCommentfeature is useful for adding hashtags on Instagram without cluttering the caption. - For AI-generated media, set the disclosure control for that platform:
instagramIsAiGenerated,youtubeContainsSyntheticMedia, ortiktokIsAigc. All three are set at creation time only — there's no way to add or remove the label after publishing, so ask before scheduling. The other platforms expose no AI flag.