Ravenpost
Server Details
Schedule and publish posts to Instagram, TikTok, X, LinkedIn, YouTube, Pinterest, Facebook & more.
- Status
- Healthy
- Uptime
- 100.0% over the last 24 hours
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- target1m/ravenpost-mcp
- GitHub Stars
- 1
- Server Listing
- Ravenpost MCP server
- ChatGPT
- –
- Claude
- Ravenpost
TDQS
Scored across 27 tools
The core lifecycle tools (create_post, preview_post, update_post, schedule_post, publish_post, confirm_publish, delete_post, get_post, list_posts) have clearly separated purposes, and the media pipeline (create_media_upload → attach_media) is spelled out step by step. The weak spots are three routes to getting an image into the library (upload_media, create_media_upload/attach_media, create_variants) and mild overlap between image_formats and platform_limits, both of which resolve into dimension guidance.
Nearly everything follows verb_noun snake_case (create_post, get_video, list_boards, delete_post, update_post, import_app_screenshots). The only deviations are two noun-phrase lookups, image_formats and platform_limits, plus the slightly awkward three-word create_media_upload — readable, but not perfectly uniform.
27 tools is above the comfortable range and a few could be consolidated (three upload entry points, image_formats foldable into platform_limits, platform_limits a static reference). That said, the domain genuinely spans multi-platform publishing, media rendering, video, analytics, Pinterest boards and Instagram audio, so most tools do earn their place.
Post coverage is essentially full — create, read, list, update, schedule, publish, delete, preview, plus analytics, accounts, queue slots, templates and platform limits. The notable gap is the media library: assets can be uploaded, listed and transformed but never deleted or renamed, and there is no way to manage published post comments.
Available Tools
27 toolsattach_mediaAttach an uploaded fileADestructiveInspect
Save an already-uploaded object (from create_media_upload) to the media library and return a media id. Works for images and videos (mp4/mov/webm). Images can optionally be reformatted to a publishing format first: the server reads the upload back from storage, stores the reformatted image as a new file and deletes the raw upload at storageKey, which cannot be undone. Videos are always recorded as-is. Omit format (or use "original") to record it unchanged — recording as-is deletes nothing. Pass the SAME workspaceId you gave create_media_upload — a storage key belongs to the workspace it was minted in and is refused anywhere else.
Inputs: storageKey (required), fit, crop, format, +1 more. Returns: ok, note, media
capture_screenshotScreenshot a websiteAInspect
Take screenshots of a web page — the workspace's own site, usually — with a headless browser, as a desktop (1440×900 at 2×) and/or a mobile (390×844 at 3×) capture, and save them to the media library as images: shots for create_video, or pictures for a post. Each device costs 2 credits; when the month's credits cover fewer devices than asked, it captures what they cover and says so, and once they are spent it is refused with the balance — tell the user, do not retry. The server fetches whatever public https address is given, so point it only at pages the user named; private and internal addresses are refused. fullPage captures the whole page (as a JPEG) rather than the first screen (PNG). Waits up to wait seconds (default 40) for the capture; a page that takes longer is finished with get_video.
Inputs: url (required), wait, devices, fullPage, +1 more. Returns: ok, next, media, render, +3 more
confirm_publishPublish a post you confirmedADestructiveInspect
Release a publish the user has just confirmed on the post card. The card calls this when the person presses its Publish button; it is hidden from models and is not for one to call — confirmation is a code only the card is given, and any other value is refused. The code is tied to the request the card shows: an edit, a newer request, or a day without an answer makes it lapse, and the card then sends the person to Ravenpost. Released, the post publishes now — or at the time that was asked for, while that is still ahead — on every target account, where it is public. That cannot be undone from here: delete_post removes only Ravenpost's copy, and a post on Instagram, TikTok, Threads and YouTube cannot be taken down through Ravenpost at all.
Inputs: postId (required), confirmation (required). Returns: ok, post, preview, awaitingConfirmation
create_media_uploadStart a direct media uploadAInspect
Get a presigned URL to upload a file straight to storage — no base64 through this channel, no third-party host. Best for large files and production. The URL grants write access to this workspace’s own private storage for 10 minutes; it replaces nothing, and the file joins the media library only when attach_media records it. Flow: (1) call this with the contentType; (2) HTTP PUT the raw file bytes to the returned uploadUrl (e.g. curl -X PUT --data-binary @file -H "Content-Type: <type>" "<uploadUrl>"); (3) call attach_media with the returned storageKey to save it to the media library.
Inputs: contentType (required), filename, workspaceId. Returns: next, uploadUrl, storageKey, expiresInSec
create_postCreate a postADestructiveInspect
Create a post and either publish it now, schedule it, queue it, or save it as a draft. action "now" — and a schedule less than 15 minutes ahead, which is a publish under another name — does NOT publish by itself: the post is saved as a draft that waits for the user, who confirms it with the Publish button on the post card or on Ravenpost (the result says where), and nothing goes out until they do. A schedule further ahead, and the posting queue, go out at their time with no further step. Once it goes out the post is public on the selected networks, and that cannot be undone from here: delete_post removes only Ravenpost's copy, and a post on Instagram, TikTok, Threads and YouTube cannot be taken down through Ravenpost at all. Only a draft stays private. Each call creates a new post, so never repeat a call that succeeded — one waiting for the user's confirmation included. With more than one workspace, ASK THE USER which one to post to and give workspaceId — the connected accounts differ per workspace and posting to the wrong one is not undoable. Accounts, media and queue slots must all come from that same workspace. action="queue" schedules at the workspace's next free posting-queue slot (see list_queue_slots) — no scheduledAt needed; it errors if the workspace has no slots defined. Targets are account ids from list_accounts (cross-posting to several is allowed — but one X account per post: every X account publishes the same text, and X forbids the same post on several accounts). Caption limit is the tightest selected account — each account's captionMax in list_accounts. X's depends on the account: 280 characters, or 25,000 with X Premium, counted as X counts (every link is 23, each emoji or symbol such as → − • … is 2); a caption over it is rejected, naming the account. X refuses two more things a caption can hold, and so does this tool, before anything is written: more than one $cashtag in a post (each reply of a thread is a post of its own — write other tickers without the $), and, in a thread reply, an @mention of anybody the first post did not mention. For media, first upload with upload_media and pass the returned media ids. type is Instagram’s format model (IMAGE/CAROUSEL/REEL/STORY) reused as the shared vocabulary. Instagram honors all four, and Instagram video must be posted as REEL (or STORY) — an IMAGE/CAROUSEL post with a video will be rejected at publish time. Facebook honors STORY (published to Page Stories, which have NO caption — the text is dropped) and treats every other type as a normal feed post. TikTok, X, and Telegram ignore type entirely. See platform_limits.formats for which types each platform honors. thread: extra posts published as replies after the main one, forming a chain. Supported on X, Bluesky, Mastodon, Threads, Telegram and Discord; a platform without a thread model publishes just the caption. The caption is post 1 and carries the media. Limits come from the strictest selected platform (X is tightest at 280 chars per post, or 25,000 for an account on X Premium, and 25 follow-ups) and going over is rejected, not truncated. replyTo (X only): reply to an existing tweet — pass the tweet id or its URL (x.com//status/) and the post is published as a reply under it instead of a standalone tweet (a thread then continues under that reply). X takes a reply from an app only when the post it answers is the account's own, or @mentions the account, or quotes one of its posts; a reply to anybody else's post fails at publish time. Non-X targets ignore it and publish a normal post, so for a pure reply target only the X account. quote (X only): quote-tweet an existing tweet — pass the tweet id or its URL and it is embedded as a card under this post. X takes it on the same terms as a reply: the account's own post, or one that @mentions it — quoting anybody else's post fails at publish time. Can be combined with replyTo. Non-X targets ignore it. Telegram renders a markdown subset in captions (text links, bold, italic, code, strikethrough) as native formatting; every other platform publishes the caption as plain text, so markdown would show literally there — only use it when all targets are Telegram (see platform_limits.captionFormatting). Threads takes text-only posts, one image/video, or a carousel of up to 20 items, and ignores type. Its 500-character limit is the tightest after X, so a mixed X+Threads selection is still capped at 280 (unless the X account has X Premium). LinkedIn publishes the caption as plain text — its reserved characters are escaped for you, so write normal prose; markdown is not rendered and a bare link does NOT produce a preview card. LinkedIn ignores type, allows text-only posts, and takes either one video or up to 20 images. audio attaches a track from Instagram’s catalog to a reel (find one with list_audio). It applies only to type="REEL" on Instagram accounts connected via Facebook — other platforms and other types ignore it, and the worker logs that it was dropped rather than failing. TikTok and Facebook have NO music API at all: for them the audio has to already be part of the video file. reelCover and trialReel are an Instagram reel’s own options: its cover (a library JPEG, or a frame of the video) and a trial — a reel shown to non-followers first. Both apply only to type="REEL" on Instagram, on either connection; anywhere else they are dropped. firstComment is posted as a comment on the Instagram post right after it goes out — Instagram only and never on a STORY; every other network ignores it, and the result warns when it reaches none of the selected accounts. tiktok carries TikTok’s required per-post choices, keyed by account id — most importantly privacyLevel, which TikTok makes mandatory. Leave it out and TikTok targets publish privately. Pinterest needs a board: set board (a board name or an id from list_boards) whenever a Pinterest account is targeted — a pin belongs to a board and there is no default, so without it the post is created but fails to publish. link is the pin’s destination URL, which is the point of a pin, and title is its headline (the caption becomes the description, max 800 chars).
Inputs: action (required), caption (required), accountIds (required), link, +19 more. Returns: ok, post, preview, awaitingConfirmation
create_variantsResize an image for other platformsAInspect
Reshape ONE image already in the media library into several platform canvases at once, and return the new asset ids: feed_portrait (1080×1350, 4:5), feed_square (1080×1080), landscape (1080×566, 1.91:1) and story (1080×1920, 9:16 — also what a reel or a TikTok photo wants). Cropping is saliency-based by default: sharp scores regions by saturation, luminance and skin tone and keeps the strongest, so an off-centre subject survives a 4:5 → 9:16 cut. Use crop="centre" for images composed around their middle (posters, screenshots, flat graphics), where a predictable crop beats a guessed one. fit="contain" pads instead of cropping — use it when nothing may be cut off at all. Images only; video is not re-encoded. The source image is left unchanged and every canvas is a new asset. Variants inherit the source’s alt text and folder, and asking for two formats with the same dimensions produces one file, not two. Typical use: upload once, call this with the formats the selected platforms want, then pass the right variant id per post.
Inputs: formats (required), mediaId (required), fit, crop, +1 more. Returns: sourceId, variants
create_videoMake a videoAInspect
Render a short branded video (9:16 vertical by default; also square and landscape) and save it to the media library as an mp4 — returning a media id create_post takes as mediaIds. Either a storyboard (template storyboard: the scenes given in scenes, in order, with an optional music bed) or one of the fixed, silent templates in list_video_templates. Pick the canvas by where it goes: vertical for Reels, TikTok, Shorts and Stories (every word is kept clear of the buttons and captions those apps draw over a video, and inside the feed's 4:5 crop), square for X, LinkedIn and other feeds, landscape only for YouTube or a website. Fewer, shorter lines read better: three features beat five. It lays out the user's own pictures, clips and words — no generative model draws anything. It costs 25 of the workspace's monthly credits, taken before rendering and handed back if the render fails; once the month's credits are spent it is refused with the balance — tell the user, do not retry. Render only what the user asked for: confirm the template, the headline and the pictures first when they have not said. Pictures come from the media library: upload_media for a file, capture_screenshot for the website, import_app_screenshots for the App Store or Google Play listing. A shot given by mediaId must be an image. The brand name, tagline and icon are filled in from the brand profile and the workspace unless overridden here; set accent to a #rrggbb colour to give the video the brand's colour. Rendering takes one to five minutes on a shared box, a 30-second storyboard the most. The call waits up to wait seconds (default 40) reporting progress, then returns the finished video — or the render's id and status when it needs longer, in which case call get_video with the id. The result names any field the template leaves out. Nothing is posted anywhere: the video sits in the private library until a post carrying it is published.
Inputs: headline (required), template (required), cta, body, +15 more. Returns: ok, next, media, render, +3 more
delete_postDelete a postADestructiveIdempotentInspect
Permanently delete Ravenpost’s copy of a post and cancel any scheduled publish — the post cannot be restored. Use this to remove drafts or duplicate/obsolete scheduled posts. It never takes a post down from a network: a post already published stays live on the platform. The dashboard offers a separate "delete everywhere" on the networks Ravenpost can delete from (a post on Instagram, TikTok, Threads and YouTube cannot be taken down through Ravenpost at all); this tool does not.
Inputs: postId (required). Returns: ok, deleted
get_analyticsGet analyticsARead-onlyIdempotentInspect
Get one workspace's analytics overview: follower counts per connected account (plus a daily follower series for the last 30 days) and engagement on recent posts. A post's source says where it came from: "ravenpost" for one published from here, "platform" for one already on the account and imported so its engagement counts too. An account's followers is null when we collect none for its platform — today TikTok, X, Telegram, LinkedIn, Threads and YouTube, whose APIs either expose no insights or need a permission that is not approved yet (or, for X, charge for every read, so we read none and its numbers are in its own app) — so null means "unknown", never zero. Likewise a post metric that is absent was not collected rather than being 0.
Inputs: workspaceId. Returns: posts, accounts, collectedAt, trackedPosts, +1 more
get_postGet a postARead-onlyIdempotentInspect
Get one post by id, including its media, per-account targets and publish status — and, when a publish asked for through an assistant is waiting for the user to confirm it, what it would do and where they can confirm it (publishRequest). Clients that render MCP Apps also show it as it looks on each destination platform, with the Publish button for a waiting publish.
Inputs: postId (required). Returns: post, preview, awaitingConfirmation
get_videoCheck a video renderARead-onlyIdempotentInspect
Check a render create_video or capture_screenshot started: its status (queued, rendering, ready, failed), progress and, once ready, the media ids and URLs. Reads one row; nothing is changed. Set wait (seconds, up to 45) to hold the call until it settles or the time is up — one call like that beats polling every second.
Inputs: renderId (required), wait. Returns: ok, next, media, render, +3 more
image_formatsList image formatsARead-onlyIdempotentInspect
List the supported image formats and their target dimensions (for choosing a format in upload_media).
Inputs: no named parameters. Returns: formats
import_app_screenshotsImport app store screenshotsAInspect
Copy an app's store listing pictures — its phone screenshots and its icon — from the App Store or Google Play into the media library, returning media ids: the screenshots become shots for create_video (app_showcase especially) and the icon its brand mark (iconMediaId). Reads the listing the workspace's brand profile holds when no url is given. Costs no credits; a picture already imported is reused rather than copied again. Apple's listing is read through its lookup API; Google Play's from its page, best effort.
Inputs: url, limit, store, workspaceId. Returns: ok, icon, name, next, +3 more
list_accountsList connected accountsARead-onlyIdempotentInspect
List the social accounts connected to one workspace (Instagram, TikTok, X, Telegram, LinkedIn, Threads, Bluesky, YouTube and Pinterest; an account connected before its network was withdrawn still lists under its own platform). Returns each account id, platform, username, status, connection and captionMax — that account's own caption budget, which create_post holds its caption to. For X it depends on the account: xPremium true means X Premium and 25,000 characters, false means 280; X counts every link as 23 and each emoji or symbol such as → − • … as 2. Use an account id as a target when creating a post. Accounts belong to a single workspace, so with several workspaces give workspaceId (see list_workspaces) — an account id from one workspace is rejected by a post created in another. connection is only meaningful for Instagram: "FACEBOOK_LOGIN" accounts were connected through a Facebook Page and are the only ones that can browse and attach reel audio (list_audio) or invite collaborators; "INSTAGRAM_LOGIN" accounts — the way Instagram connects today — publish normally but can do neither.
Inputs: workspaceId. Returns: accounts
list_audioSearch reel audioARead-onlyIdempotentInspect
Search Instagram’s audio catalog for tracks that can be attached to a reel, then pass the chosen track’s id as create_post/update_post audio.audioId. Call it WITHOUT a query to get what is currently trending — that is the featured list. accountId must be an Instagram account connected through a Facebook Page ("FACEBOOK_LOGIN" in list_accounts); a directly-connected one cannot reach the catalog and gets an error saying so. Instagram connects directly today, so only an account connected through Facebook earlier can use this. Meta only exposes tracks licensed for third-party use, so this catalog is narrower than the one in the Instagram app — a track the user can pick on their phone may legitimately be missing here. The catalog is Meta’s, shared by every Instagram account — licensed tracks plus original sounds from other creators’ reels — not the user’s own data; searching it only reads and attaches nothing. This is Instagram-only. TikTok and Facebook expose no music API, so there is nothing to list for them.
Inputs: accountId (required), kind, limit, query. Returns: tracks
list_boardsList Pinterest boardsARead-onlyIdempotentInspect
List the boards on one of the user's own connected Pinterest accounts, read live from Pinterest's API with that account's token. It reads that one account only: nothing on Pinterest is created, changed or published, and nothing becomes visible to anyone. Every pin belongs to a board and Pinterest has no default, so a post targeting Pinterest must name one — pass the board name or id as board on create_post/update_post. accountId is a Pinterest account id from list_accounts; other platforms have no boards and are rejected.
Inputs: accountId (required). Returns: boards
list_mediaList mediaARead-onlyIdempotentInspect
List recent media assets in one workspace (id, url, type, dimensions) — reuse an existing asset id in create_post instead of re-uploading. The library is per workspace, like the accounts.
Inputs: workspaceId. Returns: media
list_postsList postsARead-onlyIdempotentInspect
List the posts in one workspace, 50 at a time: newest first, or soonest first when filtered to SCHEDULED. Optionally filtered by status (DRAFT, SCHEDULED, PUBLISHING, PUBLISHED, FAILED). total says how many posts match and totalPages how many pages there are; set page to read further back.
Inputs: page, status, workspaceId. Returns: page, posts, total, totalPages
list_queue_slotsList posting queue slotsARead-onlyIdempotentInspect
List the workspace posting schedule: the recurring weekly queue slots (weekday + local time) that action="queue" publishes into, plus nextFreeSlot — the next slot no post is booked into, which is where action="queue" would put a post now (null when there are no slots, or none is free in the weeks ahead). Slots are defined in dashboard Settings and are workspace-wide (shared by every connected account), so each workspace has its own schedule. weekday 0 = Sunday … 6 = Saturday, in the workspace timezone.
Inputs: workspaceId. Returns: slots, nextFreeSlot
list_video_templatesList video templatesARead-onlyIdempotentInspect
List the video templates create_video can render, with what each one is for, the fields it reads and the ones it cannot do without, plus the canvases (9:16, 1:1, 16:9) and what a video and a screenshot cost in credits. Reads a fixed catalogue; nothing is created. Call it once before the first create_video of a conversation, then choose the template whose when matches what the user asked for. Every template takes the same flat fields — headline, subheadline, body, shots, features, cta, stat — and ignores the ones it does not use; the brand (name, tagline, icon, accent colour) is filled in from the workspace unless overridden.
Inputs: no named parameters. Returns: fields, credits, canvases, templates
list_workspacesList workspacesARead-onlyIdempotentInspect
List every workspace this account can act in, with its id and the caller's role. Call this FIRST when more than one may exist: every other tool takes an optional workspaceId, and once there are several it becomes required — the connected social accounts, media library, posting queue and analytics are all per workspace. When there is more than one, ASK THE USER which workspace to post to rather than choosing for them.
Inputs: no named parameters. Returns: workspaces
platform_limitsGet platform limitsARead-onlyIdempotentInspect
Return per-platform caption limits, media rules, thread limits, and recommended media specs (dimensions, container formats, size/duration caps). Consult this BEFORE generating or picking media for a post so images/videos match what the platform renders best (e.g. X images at 1600×900 16:9, X video as MP4 H.264 up to 20 minutes). threadMax is the max follow-up posts a thread can carry after the caption; null means the platform has no thread model. captionFormatting describes the rich-text markup the platform renders in captions (e.g. Telegram accepts a markdown subset); null means captions publish as plain text. formats lists the post.type values the platform honors; null means it ignores type and just consumes the media set. supportsAudio means a track from the platform’s own catalog can be attached through the API (see list_audio) — only Instagram reels can. For every other platform the audio must already be baked into the video file. postingRules lists what the platform refuses beyond length and media (X: one $cashtag per post, replies and quotes only where the target post names the account, thread replies that @mention only people already in the conversation, one X account per post); empty means nothing beyond the numbers.
Inputs: no named parameters. Returns: platforms
preview_postPreview a postARead-onlyIdempotentInspect
Render a post as each destination platform will show it — WITHOUT creating anything. Nothing is written, scheduled or published; call create_post afterwards with the same arguments to actually post it. Takes the same arguments as create_post (caption, hashtags, accountIds, mediaIds, type, thread, replyTo, quote, audio, collaborators, reelCover, trialReel, firstComment), and returns the same preview a client with MCP Apps renders as an interactive card, one tab per platform. Use this before create_post whenever the user is composing rather than dictating: it is the cheapest way to show them what goes out, and it reports what would be rejected or silently dropped — a caption over the tightest platform's budget, a platform that requires media when there is none, a thread longer than the strictest limit, audio on a platform with no music API, Instagram collaborators on an account that cannot invite them, a reel cover or trial on a post that is not a reel (or a cover create_post would refuse), a first comment on a story, on a post with no Instagram account, or beside networks that get none, media Bluesky leaves behind (it takes up to four images or one video), and X's own rules — more than one $cashtag in a post, a thread reply @mentioning somebody new to the conversation, the same post on two X accounts, a reply or quote X only takes from an account the target post names, media X leaves behind. The character counts it returns are per platform and authoritative: they are the same ones create_post enforces. For Pinterest, include board (and link/title) too — the preview warns when a Pinterest target has no board, which is the way a Pinterest post most often fails. The board name is taken as given: create_post checks it against the account's boards (see list_boards) and refuses an unknown one before writing anything. A preview reads only this workspace's own accounts and media and calls no social network, so nothing outside Ravenpost is touched or shown to anyone.
Inputs: caption (required), accountIds (required), link, type, +13 more. Returns: type, audio, media, postId, +13 more
publish_postPublish a post nowADestructiveInspect
Publish an existing post (e.g. a draft) once the user confirms it, without editing its content. It does NOT publish by itself: the post waits for the user, who confirms it with the Publish button on the post card or on Ravenpost (the result says where); until then nothing goes out and the post stays exactly as it was — a draft stays a draft, a post on the calendar keeps its time. Call it only on the user's explicit instruction, and once: a second call only asks them again. A post that has already been published, or is publishing right now, is refused rather than sent twice. Once confirmed it goes public on every target account at once, and that cannot be undone from here: delete_post removes only Ravenpost's copy, and a post on Instagram, TikTok, Threads and YouTube cannot be taken down through Ravenpost at all.
Inputs: postId (required). Returns: ok, post, preview, awaitingConfirmation
schedule_postSchedule a postADestructiveIdempotentInspect
Schedule (or reschedule) an existing post for a future time, without editing its content. Give scheduledAt as an absolute ISO 8601 datetime (include the offset, e.g. 2026-07-05T09:00:00+03:00). Rescheduling replaces the previous time, which is not kept. At that time the post is published to its target accounts, where it is public — tell the user the accounts and the time. A time less than 15 minutes ahead is a publish under another name, so it waits for the user to confirm it — with the Publish button on the post card or on Ravenpost — and the post stays as it was until they do. A time in the past is refused rather than published immediately; use publish_post for that, and only on an explicit instruction.
Inputs: postId (required), scheduledAt (required). Returns: ok, post, preview, warnings, +1 more
update_postEdit a postADestructiveInspect
Edit an existing post (draft or scheduled) — caption, hashtags, format, media or target accounts. A published/publishing post can no longer be edited. IMPORTANT: editing resets the post to a DRAFT. To keep it going out, also send action="schedule" + scheduledAt (or action="now" to publish it). Omit action to leave it as a draft (i.e. to unschedule). action "now", and a schedule less than 15 minutes ahead, do NOT publish by themselves: the edit is saved and the post waits as a draft for the user to confirm it, with the Publish button on the post card or on Ravenpost (the result says where). A schedule further ahead, and the queue, go out at their time with no further step. The edit overwrites the stored post — no earlier version is kept — and any publish that was waiting for the user lapses with it. Once the post goes out it is public on its networks. The schedule is the only thing an edit drops on its own: anything else you leave out stays exactly as it was, so to REMOVE something pass its empty form ("", [], null or {} — each argument says which) rather than leaving it out. tiktok and board belong to specific accounts, so when accountIds adds a TikTok or Pinterest account, pass them again for it — a new TikTok target without options publishes privately, and a new Pinterest target without a board fails to publish. caption replaces the whole caption; use hashtags to append them. Telegram targets render a markdown subset in the caption (text, bold, italic, code, strikethrough); other platforms publish it as plain text. replySettings (who may reply) and community (the Community it posts into) are X only, like replyTo and quote; use "" to either to go back to X’s default — everyone may reply, and the post goes to the timeline. audio replaces the Instagram reel track (see list_audio); use null to remove it. reelCover replaces the Instagram reel cover; use null to go back to the first frame. trialReel changes how a trial reel graduates; use "" to make it a normal reel. firstComment replaces the Instagram first comment; use "" to remove it. It reaches Instagram only, never a STORY, and the result warns when none of the post’s accounts would get it. collaborators replaces the Instagram co-authors; use [] to remove them. They reach only an Instagram account whose connection is "FACEBOOK_LOGIN" (see list_accounts) and never a STORY — anywhere else they are dropped and the post publishes without them. tiktok replaces TikTok’s per-account posting options (privacyLevel, allow*, brand toggles); use {} to clear them, which makes TikTok targets publish privately again. board moves a Pinterest pin to another board (name or id from list_boards); title replaces the pin title. link replaces the URL the post points at — Facebook’s link preview card, Pinterest’s pin destination; use "" to remove it.
Inputs: postId (required), link, type, audio, +19 more. Returns: ok, post, preview, awaitingConfirmation
upload_mediaUpload mediaAInspect
Upload an image or a video (mp4/mov/webm) to the media library, returning a media id for create_post. Each call adds a new asset to this workspace’s private library; nothing already there is replaced, and nothing is posted anywhere. Images are reformatted to the requested publishing format; videos are stored as-is (format/fit are ignored — upload the video pre-edited). Give the file as ONE of: url (preferred when it is already online — the server downloads it from whatever public address you give) or base64 (fallback for small images; avoid for video). For a large local file in production, prefer create_media_upload (direct upload, no base64 through this channel). format: feed_square (1:1), feed_portrait (4:5), landscape (1.91:1), story or reel (9:16), or original (no resize). fit: "cover" crops to fill (default), "contain" fits the whole image and pads.
Inputs: format (required), fit, url, crop, +2 more. Returns: ok, note, media
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
Related MCP Connectors
Schedule and publish posts to Instagram, TikTok, YouTube, Facebook, X, LinkedIn and Pinterest.
Schedule and publish social media posts to Instagram, Facebook, TikTok, X, LinkedIn and more.
Schedule and publish social posts to Instagram, TikTok, X, LinkedIn, YouTube and five more networks.
Schedule and publish posts to Facebook, Instagram, LinkedIn, Google Business, X, YouTube and TikTok.
Related MCP Servers
AlicenseAqualityBmaintenanceSchedule, publish, and measure social posts on Facebook, Instagram, TikTok, LinkedIn, Threads, Pinterest, and X for one brand or many.34MIT- FlicenseAqualityCmaintenanceSchedule and manage social media posts across Facebook, Instagram, Twitter/X, LinkedIn, YouTube, TikTok, and Pinterest directly from Claude.10-

AdaptlyPostofficial
AlicenseAqualityBmaintenanceGives AI agents the ability to schedule and publish social media posts to Instagram, TikTok, YouTube, X, LinkedIn, Facebook, Pinterest, Threads, and Bluesky. Create, schedule, and bulk-plan posts with per-platform captions, then check per-platform results and retry failures.12MIT- AlicenseNot gradedqualityCmaintenanceLets AI agents schedule posts to Instagram, TikTok, YouTube, Facebook, X, LinkedIn and Pinterest pages, move or cancel planned posts, and read engagement statistics.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.