PostRite

Schedule and publish to 12+ social media platforms from one dashboard.

Community: Submitted by a user or imported; check the owner before granting accessOnlineNo sign-inGlobalFreeCan modify data

What it can do

  • List Posts: List the organization's posts, newest first. Use this to find a post's ID before getting, updating, rescheduling, cancelling, or retrying it. Filter by status or a scheduled-time window. R
  • Get Post: Fetch a single post by ID, including its per-platform targets and status, platform options (metadata), and media (referenced by ID).
  • Validate Post: Run every validation create_post would run — platform rules, media checks, scheduling, connections, metadata shape — without saving anything. Takes the exact same input as create_post a

What data it sees

Do you need an account

No: the server works without sign-in

Schedule and publish to 12+ social media platforms from one dashboard.

How to connect

How to connect PostRite to Claude

The server address to paste into Claude settings:

https://postrite.run.tools

  1. Open Claude (claude.ai or the desktop app).
  2. Go to Settings → Connectors.
  3. Click Add custom connector.
  4. Paste the server address copied below into Remote MCP server URL and click Add.
  5. In a chat, click + → Connectors and switch the new connector on.

Custom connectors are available on Free, Pro, Max, Team and Enterprise plans (Free is limited to one). On Team and Enterprise an organization Owner adds the connector first under Organization settings → Connectors.

Authorization

After you click Add, a sign-in window for the service opens. Sign in with your own account and approve access. Claude never sees your password.

How to connect PostRite to ChatGPT

The server address to paste into ChatGPT settings:

https://postrite.run.tools

  1. Open ChatGPT in a browser (chatgpt.com). A Plus, Pro, Business, Enterprise or Edu plan is required.
  2. Turn on developer mode once: Settings → Apps → Advanced settings → Developer mode.
  3. Open Settings → Connectors and click Create.
  4. Fill in the form: Name (anything), Description (one line about what the service does), MCP server URL (copy it below).
  5. Under Authentication choose OAuth if the service requires sign-in, otherwise None. Click Create.
  6. In a new chat open + → Apps/Connectors and enable the connector.

OpenAI has renamed this section before (Connectors → Apps/Plugins). If the label differs, search settings for "developer mode". On Business/Enterprise workspaces an admin must allow custom connectors first.

Authorization

On first use ChatGPT opens the service's sign-in window. Sign in and approve access.

How to connect PostRite to Cursor

The server address to paste into Cursor settings:

https://postrite.run.tools

Fastest: click Open in Cursor below and confirm the prompt.

Manually:

  1. In Cursor open Settings → Cursor Settings → MCP and click Add new global MCP server.
  2. Paste the JSON copied below into ~/.cursor/mcp.json (per project: .cursor/mcp.json in the repo root).
  3. Save the file. The server appears in the MCP list; authorize it there if asked.

Authorization

If the service needs sign-in, an authorize button appears next to the server in the MCP list.

Server tool list (27)

Raw names from tools/list. Only developers need these.

list_postsList the organization's posts, newest first. Use this to find a post's ID before getting, updating, rescheduling, cancelling, or retrying it. Filter by status or a scheduled-time window. Returns compact post summaries (draft posts have scheduledAt: null; use get_post for full detail).
get_postFetch a single post by ID, including its per-platform targets and status, platform options (metadata), and media (referenced by ID).
validate_postRun every validation create_post would run — platform rules, media checks, scheduling, connections, metadata shape — without saving anything. Takes the exact same input as create_post and returns { valid, submissionIntent, errors, warnings }; each entry has field/message/errorKey/platform. Call this first when unsure a payload is publishable: you get the full problem list in one call instead of leaving broken drafts behind. Platform rules (enforced by the API — validate_post checks all of them): - Facebook: ≤63206 chars, ≤10 images, ≤1 videos, video 1–14400s, supports first comment - Instagram: ≤2200 chars, media REQUIRED, ≤10 images, ≤1 videos, video 3–90s, supports first comment - Threads: ≤500 chars, ≤10 images, ≤1 videos, video 0–300s, supports first comment - X (Twitter): ≤280 chars (25000 premium), ≤4 images, ≤1 videos, supports first comment - LinkedIn: ≤3000 chars, ≤9 images, ≤1 videos, video 3–1800s - TikTok: ≤2200 chars, media REQUIRED, ≤35 images, ≤1 videos, video 3–600s - YouTube: ≤5000 chars, VIDEO REQUIRED, ≤1 images, ≤1 videos - Telegram: ≤4096 chars, ≤10 images, ≤1 videos - WhatsApp: ≤65536 chars, ≤1 images, ≤1 videos - Pinterest: ≤500 chars, media REQUIRED, ≤5 images, ≤1 videos, video 4–900s - Google Business: ≤1500 chars, ≤10 images, ≤1 videos - Discord: ≤2000 chars, ≤10 images, ≤1 videos - Bluesky: ≤300 chars, ≤4 images, ≤1 videos, video 0–180s - Mastodon: ≤500 chars, ≤4 images, ≤1 videos - Pinterest: requires metadata.pinterest.boardId - Discord bot connections: require metadata.discord.channels (map of platformConnectionId -> channelId) - WhatsApp: requires metadata.whatsappRecipient (phone number) - TikTok photo carousels: metadata.tiktokOptions.photoTitle is an optional headline of ≤90 chars (derived from the caption's first line when omitted); the caption itself is sent as the description (≤4000) - Instagram contentType REEL: exactly 1 video, 3–900s - Instagram contentType STORY: exactly 1 media, video 1–60s, no caption
create_postCreate a post targeting one or more connected platform accounts. Control what happens with submissionIntent: 'draft' (save only — the response then carries advisory validationWarnings listing anything that must be fixed before scheduling), 'publish-now', or 'schedule' with a future ISO-8601 scheduledAt. platformConnectionIds come from list_platform_connections; the API assigns each connection its platform's canonical posting destination. Attach media with mediaIds (stable library IDs from list_media / import_media_from_url — preferred over URLs). Set platform-specific options via metadata (first comment, YouTube/TikTok/Instagram settings), override text per platform with platformContents, and set requiresApproval + approvalEmail to route the post through external approval. When unsure the payload is valid, call validate_post first with the same input. Platform rules (enforced by the API — validate_post checks all of them): - Facebook: ≤63206 chars, ≤10 images, ≤1 videos, video 1–14400s, supports first comment - Instagram: ≤2200 chars, media REQUIRED, ≤10 images, ≤1 videos, video 3–90s, supports first comment - Threads: ≤500 chars, ≤10 images, ≤1 videos, video 0–300s, supports first comment - X (Twitter): ≤280 chars (25000 premium), ≤4 images, ≤1 videos, supports first comment - LinkedIn: ≤3000 chars, ≤9 images, ≤1 videos, video 3–1800s - TikTok: ≤2200 chars, media REQUIRED, ≤35 images, ≤1 videos, video 3–600s - YouTube: ≤5000 chars, VIDEO REQUIRED, ≤1 images, ≤1 videos - Telegram: ≤4096 chars, ≤10 images, ≤1 videos - WhatsApp: ≤65536 chars, ≤1 images, ≤1 videos - Pinterest: ≤500 chars, media REQUIRED, ≤5 images, ≤1 videos, video 4–900s - Google Business: ≤1500 chars, ≤10 images, ≤1 videos - Discord: ≤2000 chars, ≤10 images, ≤1 videos - Bluesky: ≤300 chars, ≤4 images, ≤1 videos, video 0–180s - Mastodon: ≤500 chars, ≤4 images, ≤1 videos - Pinterest: requires metadata.pinterest.boardId - Discord bot connections: require metadata.discord.channels (map of platformConnectionId -> channelId) - WhatsApp: requires metadata.whatsappRecipient (phone number) - TikTok photo carousels: metadata.tiktokOptions.photoTitle is an optional headline of ≤90 chars (derived from the caption's first line when omitted); the caption itself is sent as the description (≤4000) - Instagram contentType REEL: exactly 1 video, 3–900s - Instagram contentType STORY: exactly 1 media, video 1–60s, no caption
update_postUpdate a draft or scheduled post's content, targets, media (prefer mediaIds), schedule/intent (submissionIntent), platform-specific options (metadata), per-platform text/media overrides, or approval settings. Draft saves return advisory validationWarnings instead of blocking. Use validate_post to pre-check a payload. Platform rules (enforced by the API — validate_post checks all of them): - Facebook: ≤63206 chars, ≤10 images, ≤1 videos, video 1–14400s, supports first comment - Instagram: ≤2200 chars, media REQUIRED, ≤10 images, ≤1 videos, video 3–90s, supports first comment - Threads: ≤500 chars, ≤10 images, ≤1 videos, video 0–300s, supports first comment - X (Twitter): ≤280 chars (25000 premium), ≤4 images, ≤1 videos, supports first comment - LinkedIn: ≤3000 chars, ≤9 images, ≤1 videos, video 3–1800s - TikTok: ≤2200 chars, media REQUIRED, ≤35 images, ≤1 videos, video 3–600s - YouTube: ≤5000 chars, VIDEO REQUIRED, ≤1 images, ≤1 videos - Telegram: ≤4096 chars, ≤10 images, ≤1 videos - WhatsApp: ≤65536 chars, ≤1 images, ≤1 videos - Pinterest: ≤500 chars, media REQUIRED, ≤5 images, ≤1 videos, video 4–900s - Google Business: ≤1500 chars, ≤10 images, ≤1 videos - Discord: ≤2000 chars, ≤10 images, ≤1 videos - Bluesky: ≤300 chars, ≤4 images, ≤1 videos, video 0–180s - Mastodon: ≤500 chars, ≤4 images, ≤1 videos - Pinterest: requires metadata.pinterest.boardId - Discord bot connections: require metadata.discord.channels (map of platformConnectionId -> channelId) - WhatsApp: requires metadata.whatsappRecipient (phone number) - TikTok photo carousels: metadata.tiktokOptions.photoTitle is an optional headline of ≤90 chars (derived from the caption's first line when omitted); the caption itself is sent as the description (≤4000) - Instagram contentType REEL: exactly 1 video, 3–900s - Instagram contentType STORY: exactly 1 media, video 1–60s, no caption
delete_postArchive a post. This is reversible from the app but removes it from the active list.
cancel_postCancel a scheduled post so it will not publish. Only works on SCHEDULED posts.
reschedule_postMove a scheduled post to a new time. Only works on SCHEDULED posts.
retry_postRetry publishing a FAILED or PARTIALLY_PUBLISHED post to the platforms that did not succeed.
resend_approvalRe-send the external approval email for a post to its approver(s) — works while it is PENDING_APPROVAL, or after the link expired (mints a fresh link). To list posts awaiting approval, use list_posts with status PENDING_APPROVAL.
get_approval_eventsReturn the approval timeline of a post (requested / resent / reminded / approved / rejected / changes-requested / expired), each with the actor email, optional note, and timestamp.
list_templatesList the organization's reusable content templates. Use this to find a template ID.
get_templateFetch a single template by ID, including its per-network text and media overrides and its network options.
create_templateCreate a reusable content blueprint. Beyond the shared text and media, a template can target specific networks (platforms) and carry a different body or different media per network (platformContent), plus the portable network options (metadata) such as a YouTube title or Instagram collaborators. Attach media with mediaIds from list_media / import_media_from_url. Account-bound settings — Pinterest board, Discord channel, WhatsApp recipient, TikTok privacy — are NOT part of a template; set those on the post or automation that publishes it. Platform rules (enforced by the API — validate_post checks all of them): - Facebook: ≤63206 chars, ≤10 images, ≤1 videos, video 1–14400s, supports first comment - Instagram: ≤2200 chars, media REQUIRED, ≤10 images, ≤1 videos, video 3–90s, supports first comment - Threads: ≤500 chars, ≤10 images, ≤1 videos, video 0–300s, supports first comment - X (Twitter): ≤280 chars (25000 premium), ≤4 images, ≤1 videos, supports first comment - LinkedIn: ≤3000 chars, ≤9 images, ≤1 videos, video 3–1800s - TikTok: ≤2200 chars, media REQUIRED, ≤35 images, ≤1 videos, video 3–600s - YouTube: ≤5000 chars, VIDEO REQUIRED, ≤1 images, ≤1 videos - Telegram: ≤4096 chars, ≤10 images, ≤1 videos - WhatsApp: ≤65536 chars, ≤1 images, ≤1 videos - Pinterest: ≤500 chars, media REQUIRED, ≤5 images, ≤1 videos, video 4–900s - Google Business: ≤1500 chars, ≤10 images, ≤1 videos - Discord: ≤2000 chars, ≤10 images, ≤1 videos - Bluesky: ≤300 chars, ≤4 images, ≤1 videos, video 0–180s - Mastodon: ≤500 chars, ≤4 images, ≤1 videos - Pinterest: requires metadata.pinterest.boardId - Discord bot connections: require metadata.discord.channels (map of platformConnectionId -> channelId) - WhatsApp: requires metadata.whatsappRecipient (phone number) - TikTok photo carousels: metadata.tiktokOptions.photoTitle is an optional headline of ≤90 chars (derived from the caption's first line when omitted); the caption itself is sent as the description (≤4000) - Instagram contentType REEL: exactly 1 video, 3–900s - Instagram contentType STORY: exactly 1 media, video 1–60s, no caption
update_templateUpdate a template's name, description, shared content or media, targeted networks, per-network overrides (platformContent), network options (metadata), or Instagram contentType. Only the fields you pass change. Pass platformContent as null to clear every per-network override, or metadata as null to clear the network options. Platform rules (enforced by the API — validate_post checks all of them): - Facebook: ≤63206 chars, ≤10 images, ≤1 videos, video 1–14400s, supports first comment - Instagram: ≤2200 chars, media REQUIRED, ≤10 images, ≤1 videos, video 3–90s, supports first comment - Threads: ≤500 chars, ≤10 images, ≤1 videos, video 0–300s, supports first comment - X (Twitter): ≤280 chars (25000 premium), ≤4 images, ≤1 videos, supports first comment - LinkedIn: ≤3000 chars, ≤9 images, ≤1 videos, video 3–1800s - TikTok: ≤2200 chars, media REQUIRED, ≤35 images, ≤1 videos, video 3–600s - YouTube: ≤5000 chars, VIDEO REQUIRED, ≤1 images, ≤1 videos - Telegram: ≤4096 chars, ≤10 images, ≤1 videos - WhatsApp: ≤65536 chars, ≤1 images, ≤1 videos - Pinterest: ≤500 chars, media REQUIRED, ≤5 images, ≤1 videos, video 4–900s - Google Business: ≤1500 chars, ≤10 images, ≤1 videos - Discord: ≤2000 chars, ≤10 images, ≤1 videos - Bluesky: ≤300 chars, ≤4 images, ≤1 videos, video 0–180s - Mastodon: ≤500 chars, ≤4 images, ≤1 videos - Pinterest: requires metadata.pinterest.boardId - Discord bot connections: require metadata.discord.channels (map of platformConnectionId -> channelId) - WhatsApp: requires metadata.whatsappRecipient (phone number) - TikTok photo carousels: metadata.tiktokOptions.photoTitle is an optional headline of ≤90 chars (derived from the caption's first line when omitted); the caption itself is sent as the description (≤4000) - Instagram contentType REEL: exactly 1 video, 3–900s - Instagram contentType STORY: exactly 1 media, video 1–60s, no caption
delete_templatePermanently delete a template.
list_platform_connectionsList the organization's connected social accounts. Use the returned connection IDs as platformConnectionIds when creating or updating a post.
get_platform_availabilityReport which platforms are currently disabled or under maintenance. Check this if publishing to a platform is failing unexpectedly.
get_billing_statusFetch the organization's plan, subscription status, post usage, and limits. Requires the organization owner role.
get_media_usageFetch the organization's media storage usage and quota.
list_mediaList the organization's media library (images/videos), newest first. Use the returned `id` values as mediaIds when creating or updating a post.
import_media_from_urlDownload an image or video from a public http(s) URL into the media library. The API validates the file type and size and blocks internal/private addresses. Returns the new media record (use its `id` as a mediaId on a post).
delete_mediaPermanently delete a media file from the library. Fails if the media is still attached to a post that has not published yet.
get_post_analyticsFetch per-platform engagement metrics for a post (views, likes, comments, shares, saves, clicks, impressions — whatever each platform exposes), including the daily snapshot series. Find post IDs with list_posts.
get_analytics_summaryFetch aggregated engagement for the organization's published posts in a period: metric totals, per-platform breakdown, and an engagement-gained-per-day series.
get_analytics_insightsInsights computed from the organization's own posting history over the last 12 months, in the organization's timezone: best day/time slots to post (by average lifetime engagement per publication), engagement by content type (text/image/video), weekly posting cadence vs engagement, and org averages. Sample counts are included — treat thin buckets as hints. Optionally restrict every block to one platform.
get_top_postsRank the organization's posts by an engagement metric over a period. Defaults to overall engagement (sum of all metrics).