Skip to main content
Glama

Create Post

create_post
Destructive

Create one post for one or more platforms: publish now, schedule, or save a draft. Omit scheduledAt to publish immediately; a future scheduledAt sets status SCHEDULED; saveAsDraft stores it as DRAFT and defers validation to publish_draft. Publishing runs asynchronously per platform, so the response ({ postId, queuedPlatforms, isScheduled, scheduledAt }) is not the outcome; read list_post_results, where each platform succeeds or fails on its own. Call list_accounts first: each platform in platforms needs its connection-id array (linkedinConnectionIds, pageIds for Facebook, and so on), one account per platform. TikTok needs tiktokConfigs with privacyLevel; Pinterest needs pinterestConfigs with boardId. For a LinkedIn document (PDF, slides or Word file) use contentType DOCUMENT with the one file in mediaUrls and only LINKEDIN in platforms. mediaUrls must come from upload_media, or the call fails with "Media file(s) not found in storage". Pass recurrence with a future scheduledAt to repeat the post daily, weekly or monthly; the response then adds recurringPostId and postId is the first occurrence. Use bulk_schedule_posts for many posts on the same accounts, and update_post or publish_draft for an existing post. This publishes publicly to the user's social accounts: unless saveAsDraft is set, show the user the final text, media, accounts and time or repeat schedule, and get their confirmation before calling. Each call creates a new post, so calling again after an error or timeout can publish a duplicate; check list_posts first.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
textNoDefault post text shared across platforms
pageIdsNoFacebook page account ids from list_accounts (the account id; its pageId value is also accepted). Facebook has no connection-id array
timezoneNoIANA timezone stored with the post for display (e.g. "America/New_York"); it does not shift scheduledAtUTC
mediaUrlsNoMedia URLs to attach. Use publicUrl values from upload_media or get_upload_urls; the same publicUrl may be reused across posts. Do not reuse mediaUrls read back from a published post, which may be expiring platform links
platformsYesTarget platforms (e.g. ["LINKEDIN", "TWITTER"]). Each one needs its matching connection-id array (pageIds for FACEBOOK) filled with ids from list_accounts
recurrenceNoRepeat the post on a schedule. Needs a future scheduledAt, which becomes the first post and sets the time of day in timezone. Cannot be combined with saveAsDraft or TIKTOK. Missed slots, for example while paused, are skipped and never published late. X and LinkedIn reject identical text, so use spintax such as {Hi|Hello} to vary each post. Manage the series with list_recurring_posts, pause_recurring_post, resume_recurring_post and delete_recurring_post
contentTypeYesContent type: TEXT, IMAGE, VIDEO, CAROUSEL, or DOCUMENT. Must match mediaUrls (CAROUSEL needs several). DOCUMENT publishes one PDF, PPT, PPTX, DOC or DOCX file (max 100 MB, 300 pages) as a LinkedIn document post and is LinkedIn only: put exactly that one file in mediaUrls, target only LINKEDIN, and set the title with linkedinConfigs
saveAsDraftNoSave as DRAFT instead of publishing or scheduling; publish later with publish_draft
scheduledAtNoAbsolute ISO 8601 instant to schedule (e.g. "2026-03-15T10:00:00Z"). Omit to post immediately; a past time also posts immediately
workspaceIdNoWorkspace to act in: an id from list_workspaces. Omit to act in the workspace list_workspaces marks current. Use the same workspaceId for every call about the same workspace, since ids from one workspace (accounts, posts, uploads) do not exist in another
thumbnailUrlNoCustom thumbnail image URL for video posts
mediaAltTextsNoAlt text per image, in the same order as mediaUrls (max 1000 characters each; use "" to skip an image). Sent to X, Bluesky, Mastodon, LinkedIn, Facebook, Instagram and Threads; Pinterest uses the first one (cut to 500). TikTok, YouTube and videos ignore it
platformTextsNoPer-platform caption overrides
tiktokConfigsNoTikTok per-connection config. Each entry needs connectionId + privacyLevel at minimum
youtubeConfigsNoYouTube per-connection config with video title, tags, privacy, etc.
facebookConfigsNoFacebook per-page config with post type and video title. pageId must match an entry in pageIds
linkedinConfigsNoLinkedIn per-connection config: documentTitle names a DOCUMENT post. connectionId must match an entry in linkedinConnectionIds
instagramConfigsNoInstagram per-connection config to set post type (FEED, REEL, STORY) and publish a reel as a trial reel
pinterestConfigsNoPinterest per-connection config. Each entry needs connectionId + boardId; there is no API to list boards, so ask the user for the board id
tiktokConnectionIdsNoTikTok account connection IDs to post from
blueskyConnectionIdsNoBluesky account connection IDs to post from
threadsConnectionIdsNoThreads account connection IDs to post from
thumbnailTimestampMsNoGenerate thumbnail from video at this timestamp (milliseconds)
twitterConnectionIdsNoX (Twitter) account connection IDs to post from
youtubeConnectionIdsNoYouTube channel connection IDs to post from
linkedinConnectionIdsNoLinkedIn account connection IDs to post from
mastodonConnectionIdsNoMastodon account connection IDs to post from
instagramConnectionIdsNoInstagram account connection IDs to post from
pinterestConnectionIdsNoPinterest account connection IDs to post from

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultNoAn object with postId, queuedPlatforms (platforms whose publishing job was queued; empty for scheduled posts and drafts), skippedPlatforms, isScheduled, and scheduledAt, plus recurringPostId when recurrence was sent. Publishing is asynchronous: check list_post_results for outcomes.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • removedInput schema / $schema
      Removed value: -"http://json-schema.org/draft-07/schema#"
    • removedOutput schema / $schema
      Removed value: -"http://json-schema.org/draft-07/schema#"
  2. Changed4 schema fields changed
    • changedInput schema / properties / facebookConfigs / items / properties / postType / description
      Previous value: -"Facebook post type — FEED, REEL, or STORY"New value: +"Where the post goes: FEED works with every content type, REEL needs contentType VIDEO, STORY needs IMAGE or VIDEO. Any other combination is refused with 400"
    • changedInput schema / properties / instagramConfigs / items / properties / postType / description
      Previous value: -"Instagram post type — FEED, REEL, or STORY"New value: +"Where the post goes: FEED works with every content type, REEL needs contentType VIDEO, STORY needs IMAGE or VIDEO. Any other combination is refused with 400"
    • addedInput schema / properties / recurrence / properties / weekdays / maxItems
      Added value: +7
    • changedInput schema / properties / workspaceId / description
      Previous value: -"Workspace to act in: an id from list_workspaces. Omit to use the default workspace. Use the same workspaceId for every call about the same workspace, since ids from one workspace (accounts, posts, uploads) do not exist in another"New value: +"Workspace to act in: an id from list_workspaces. Omit to act in the workspace list_workspaces marks current. Use the same workspaceId for every call about the same workspace, since ids from one workspace (accounts, posts, uploads) do not exist in another"
  3. Changed1 schema field changed
    • addedInput schema / properties / workspaceId
      Added value: +{
      +  "description": "Workspace to act in: an id from list_workspaces. Omit to use the default workspace. Use the same workspaceId for every call about the same workspace, since ids from one workspace (accounts, posts, uploads) do not exist in another",
      +  "type": "string"
      +}
  4. Changed2 schema fields changed
    • changedInput schema / properties / instagramConfigs / description
      Previous value: -"Instagram per-connection config to set post type (FEED, REEL, STORY)"New value: +"Instagram per-connection config to set post type (FEED, REEL, STORY) and publish a reel as a trial reel"
    • addedInput schema / properties / instagramConfigs / items / properties / trialGraduation
      Added value: +{
      +  "description": "Publish a video reel as a trial reel: Instagram shows it to non-followers first and keeps it off followers' feeds and the profile grid until it is shared. MANUAL means the account owner shares it from the Instagram app; SS_PERFORMANCE means Instagram shares it if it performs well. Only for a single video posted as a reel or feed video, never a story, image or carousel (400 otherwise). Needs a professional account Instagram has enabled for trial reels; otherwise that platform fails with a message saying so",
      +  "enum": [
      +    "MANUAL",
      +    "SS_PERFORMANCE"
      +  ],
      +  "type": "string"
      +}
  5. Changed2 schema fields changed
    • addedInput schema / properties / recurrence
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Repeat the post on a schedule. Needs a future scheduledAt, which becomes the first post and sets the time of day in timezone. Cannot be combined with saveAsDraft or TIKTOK. Missed slots, for example while paused, are skipped and never published late. X and LinkedIn reject identical text, so use spintax such as {Hi|Hello} to vary each post. Manage the series with list_recurring_posts, pause_recurring_post, resume_recurring_post and delete_recurring_post",
      +  "properties": {
      +    "endsOn": {
      +      "description": "Last day an occurrence may go out on, as YYYY-MM-DD (inclusive). Must be on or after the day of the first post. Cannot be combined with maxOccurrences",
      +      "type": "string"
      +    },
      +    "frequency": {
      +      "description": "How often the post repeats: DAILY, WEEKLY, or MONTHLY",
      +      "enum": [
      +        "DAILY",
      +        "WEEKLY",
      +        "MONTHLY"
      +      ],
      +      "type": "string"
      +    },
      +    "interval": {
      +      "description": "Repeat every N days, weeks or months, 1 to 30 (default 1)",
      +      "maximum": 30,
      +      "minimum": 1,
      +      "type": "integer"
      +    },
      +    "maxOccurrences": {
      +      "description": "Total number of posts the series publishes, 2 to 365. Cannot be combined with endsOn; omit both to repeat until paused or deleted",
      +      "maximum": 365,
      +      "minimum": 2,
      +      "type": "integer"
      +    },
      +    "weekdays": {
      +      "description": "WEEKLY only: the weekdays it goes out on (e.g. [\"MONDAY\", \"THURSDAY\"]). The weekday of scheduledAt is always included",
      +      "items": {
      +        "enum": [
      +          "MONDAY",
      +          "TUESDAY",
      +          "WEDNESDAY",
      +          "THURSDAY",
      +          "FRIDAY",
      +          "SATURDAY",
      +          "SUNDAY"
      +        ],
      +        "type": "string"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "frequency"
      +  ],
      +  "type": "object"
      +}
    • changedOutput schema / properties / result / description
      Previous value: -"An object with postId, queuedPlatforms (platforms whose publishing job was queued; empty for scheduled posts and drafts), skippedPlatforms, isScheduled, and scheduledAt. Publishing is asynchronous: check list_post_results for outcomes."New value: +"An object with postId, queuedPlatforms (platforms whose publishing job was queued; empty for scheduled posts and drafts), skippedPlatforms, isScheduled, and scheduledAt, plus recurringPostId when recurrence was sent. Publishing is asynchronous: check list_post_results for outcomes."
  6. Changed3 schema fields changed
    • changedInput schema / properties / contentType / description
      Previous value: -"Content type: TEXT, IMAGE, VIDEO, or CAROUSEL. Must match mediaUrls (CAROUSEL needs several)"New value: +"Content type: TEXT, IMAGE, VIDEO, CAROUSEL, or DOCUMENT. Must match mediaUrls (CAROUSEL needs several). DOCUMENT publishes one PDF, PPT, PPTX, DOC or DOCX file (max 100 MB, 300 pages) as a LinkedIn document post and is LinkedIn only: put exactly that one file in mediaUrls, target only LINKEDIN, and set the title with linkedinConfigs"
    • changedInput schema / properties / contentType / enum
      Previous value: -[
      -  "TEXT",
      -  "IMAGE",
      -  "VIDEO",
      -  "CAROUSEL"
      -]New value: +[
      +  "TEXT",
      +  "IMAGE",
      +  "VIDEO",
      +  "CAROUSEL",
      +  "DOCUMENT"
      +]
    • addedInput schema / properties / linkedinConfigs
      Added value: +{
      +  "description": "LinkedIn per-connection config: documentTitle names a DOCUMENT post. connectionId must match an entry in linkedinConnectionIds",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "connectionId": {
      +        "description": "LinkedIn connection ID from list_accounts",
      +        "type": "string"
      +      },
      +      "documentTitle": {
      +        "description": "Title LinkedIn shows on a DOCUMENT post (max 100 chars). Defaults to the file name; ignored for other content types",
      +        "maxLength": 100,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "connectionId"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  7. Changed1 schema field changed
    • changedInput schema / properties / mediaUrls / description
      Previous value: -"Media URLs to attach. Use publicUrl values from upload_media or get_upload_urls"New value: +"Media URLs to attach. Use publicUrl values from upload_media or get_upload_urls; the same publicUrl may be reused across posts. Do not reuse mediaUrls read back from a published post, which may be expiring platform links"
  8. Changed3 schema fields changed
    • addedInput schema / properties / mastodonConnectionIds
      Added value: +{
      +  "description": "Mastodon account connection IDs to post from",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • changedInput schema / properties / mediaAltTexts / description
      Previous value: -"Alt text per image, in the same order as mediaUrls (max 1000 characters each; use \"\" to skip an image). Sent to X, Bluesky, LinkedIn, Facebook, Instagram and Threads; Pinterest uses the first one (cut to 500). TikTok, YouTube and videos ignore it"New value: +"Alt text per image, in the same order as mediaUrls (max 1000 characters each; use \"\" to skip an image). Sent to X, Bluesky, Mastodon, LinkedIn, Facebook, Instagram and Threads; Pinterest uses the first one (cut to 500). TikTok, YouTube and videos ignore it"
    • changedInput schema / properties / platforms / items / enum
      Previous value: -[
      -  "LINKEDIN",
      -  "YOUTUBE",
      -  "INSTAGRAM",
      -  "FACEBOOK",
      -  "TIKTOK",
      -  "PINTEREST",
      -  "THREADS",
      -  "BLUESKY",
      -  "TWITTER"
      -]New value: +[
      +  "LINKEDIN",
      +  "YOUTUBE",
      +  "INSTAGRAM",
      +  "FACEBOOK",
      +  "TIKTOK",
      +  "PINTEREST",
      +  "THREADS",
      +  "BLUESKY",
      +  "TWITTER",
      +  "MASTODON"
      +]
  9. Changed1 schema field changed
    • addedInput schema / properties / mediaAltTexts
      Added value: +{
      +  "description": "Alt text per image, in the same order as mediaUrls (max 1000 characters each; use \"\" to skip an image). Sent to X, Bluesky, LinkedIn, Facebook, Instagram and Threads; Pinterest uses the first one (cut to 500). TikTok, YouTube and videos ignore it",
      +  "items": {
      +    "maxLength": 1000,
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  10. Changed9 schema fields changed
    • changedInput schema / properties / contentType / description
      Previous value: -"Content type: TEXT, IMAGE, VIDEO, or CAROUSEL"New value: +"Content type: TEXT, IMAGE, VIDEO, or CAROUSEL. Must match mediaUrls (CAROUSEL needs several)"
    • changedInput schema / properties / facebookConfigs / description
      Previous value: -"Facebook per-page config with post type and video title"New value: +"Facebook per-page config with post type and video title. pageId must match an entry in pageIds"
    • changedInput schema / properties / pageIds / description
      Previous value: -"Facebook page IDs"New value: +"Facebook page account ids from list_accounts (the account id; its pageId value is also accepted). Facebook has no connection-id array"
    • changedInput schema / properties / pinterestConfigs / description
      Previous value: -"Pinterest per-connection config. boardId is required for Pinterest posts"New value: +"Pinterest per-connection config. Each entry needs connectionId + boardId; there is no API to list boards, so ask the user for the board id"
    • changedInput schema / properties / platforms / description
      Previous value: -"Target platforms (e.g. [\"LINKEDIN\", \"TWITTER\"])"New value: +"Target platforms (e.g. [\"LINKEDIN\", \"TWITTER\"]). Each one needs its matching connection-id array (pageIds for FACEBOOK) filled with ids from list_accounts"
    • changedInput schema / properties / saveAsDraft / description
      Previous value: -"Save as draft instead of publishing"New value: +"Save as DRAFT instead of publishing or scheduling; publish later with publish_draft"
    • changedInput schema / properties / scheduledAt / description
      Previous value: -"ISO 8601 datetime to schedule (e.g. \"2026-03-15T10:00:00Z\"). Omit to post immediately"New value: +"Absolute ISO 8601 instant to schedule (e.g. \"2026-03-15T10:00:00Z\"). Omit to post immediately; a past time also posts immediately"
    • changedInput schema / properties / timezone / description
      Previous value: -"IANA timezone (e.g. \"America/New_York\")"New value: +"IANA timezone stored with the post for display (e.g. \"America/New_York\"); it does not shift scheduledAt"
    • changedOutput schema / properties / result / description
      Previous value: -"The created post record including its id, status, and scheduled time as returned by the AdaptlyPost API."New value: +"An object with postId, queuedPlatforms (platforms whose publishing job was queued; empty for scheduled posts and drafts), skippedPlatforms, isScheduled, and scheduledAt. Publishing is asynchronous: check list_post_results for outcomes."
  11. First observed

TDQS

Score is being calculated.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources