A side-by-side look at the Postfast MCP and Upload Post MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose Postfast MCP for social media work as a local process; choose Upload Post for social media as a local process. You can also run both side by side in one mcpServers block.
POSTFAST_API_KEY, POSTFAST_API_URL.list_accounts, list_posts, create_posts.UPLOAD_POST_API_KEY, UPLOAD_POST_STUDIO_CLIENTS.upload_video, upload_photos, upload_text.Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Social Media | Social Media |
| Quality signal | 64/100 · Good | 64/100 · Good |
| Install command | Confirmed | Confirmed |
| Transport | Local subprocess (stdio) | Local subprocess (stdio) |
| Auth | other | Not declared |
| Pricing | BYOK (pay the provider) | Not declared |
| Required env vars | POSTFAST_API_KEYPOSTFAST_API_URL | UPLOAD_POST_API_KEYUPLOAD_POST_STUDIO_CLIENTS |
| Verified owner | Community listing | Community listing |
| GitHub stars | 6 | 10 |
| Directory activity | 5 views 0 installs 0 upvotes | 1 views 0 installs 0 upvotes |
| Tools | 25 | 57 |
| Full listing | View Postfast MCP | View Upload Post |
list_accountsList connected social media accounts (each with `connectionStatus` — `CONNECTED`/`DISABLED` — `disabledReason`, `followerCount`/`followerCountUpdatedAt`, and `inboxCapable`)list_postsList posts with filters (specific IDs, accounts, platform, status, date range); each post carries its key settings in `controls` (Threads topic, Instagram/Facebook format, TikTok draft flag, YouTube privacy)create_postsCreate and schedule posts (batch, up to 15)delete_postDelete a post from PostFast by ID (does not remove an already-published post from the platform)delete_postsDelete up to 100 posts from PostFast in one call; returns `deletedIds` and `notFoundIds` (does not remove already-published posts from the platform)upload_mediaUpload a local file and get a media key (handles the full flow)get_upload_urlsGet signed URLs to upload media fileslist_pinterest_boardsGet Pinterest boards for an accountlist_youtube_playlistsGet YouTube playlists for an accountlist_gbp_locationsGet Google Business Profile locations for an accountsearch_placesFind a place to tag posts (the `id` works for both `facebookPlaceId` and `instagramLocationId`)generate_connect_linkGenerate a link for clients to connect accounts — optionally scoped to specific platforms, with a `redirectUrl` the user returns to (carrying `status`, `platform`, `accountId` and your own `externalId`, plus `accountIds` after a Facebook or LinkedIn page step)upload_videoPublish a video to one or more platforms. Use `videoPathOrUrl` only for public/signed HTTPS URLs, or for absolute local paths when the MCP server runs on the same machine as the file. `videoBase64` is only for clients that can provide raw bytes directly and is capped by UPLOAD_POST_MAX_INLINE_MB (default 100). Returns a `request_id` you can poll with `get_status`. Supports per-platform overrides (tiktokPrivacyLevel, youtubePrivacyStatus, youtubePlaylistId, youtubeThumbnailUrl, youtubeTags, facebookPageId, instagramMediaType, etc.). Reddit posting is currently unavailable (error_code=reddit_unavailable) until the Reddit app is restored. Do not use reddit as a publish target. A hosted MCP server cannot read files on the user's machine or chat attachments (`/mnt/data`, sandbox paths). To publish a local file: (1) if this client can run HTTP requests itself (for example a coding agent with a shell), stage it with `create_media_upload` (returns `upload_id` + `upload_url`), PUT the raw file bytes to `upload_url` with the same Content-Type, call `complete_media_upload` and pass the returned `media_url` as the media URL; (2) otherwise ask the user for a public HTTPS URL of the file, or tell them to publish it from the dashboard at https://app.upload-post.com. Staged media is deleted after 24 hours.upload_photosPublish one or more photos (single image or carousel). Each item in `photosPathsOrUrls` may be a public URL or a local path. Reddit posting is currently unavailable (error_code=reddit_unavailable) until the Reddit app is restored. Do not use reddit as a publish target.upload_textPublish a text-only post. `linkUrl` (or platform-specific *LinkUrl) attaches a link preview where supported. Reddit posting is currently unavailable (error_code=reddit_unavailable) until the Reddit app is restored. Do not use reddit as a publish target.upload_documentPublish a document (PDF / PPT / PPTX / DOC / DOCX) to LinkedIn. Title is required.get_statusCheck the status of an async upload by `request_id`. Poll this until `status` is 'success' or 'failed'.get_job_statusCheck the status of a scheduled or queued upload by `job_id`. Use this for posts created with `addToQueue` or `scheduledDate`.get_historyPaginated history of uploads across all profiles.get_mediaRetrieve recent media (videos, photos, text posts) pulled directly from a profile's connected social accounts. Supports instagram, tiktok, youtube, linkedin, facebook, x, threads, pinterest, bluesky, reddit. Useful for browsing what already exists on a platform before posting more. Paginated: the response carries `pagination` = { limit, next_cursor, has_more }; pass `next_cursor` back as `cursor` for the next page (the last page returns next_cursor null and has_more false).list_scheduledList all currently scheduled (not-yet-published) posts.cancel_scheduledCancel a scheduled post by its `job_id`.edit_scheduledEdit a pending scheduled post in place, keeping its job ID and media: reschedule it (scheduledDate/timezone) and/or fix its text. `title` and `caption` rewrite the text for EVERY platform of the post; to change only some platforms, send `platformContent` instead, e.g. {"instagram":{"caption":"..."},"tiktok":{"caption":"..."}} — platforms not listed keep their text. First comments cannot be edited on a pending post.get_analyticsAggregated analytics for a profile across selected platforms (followers, views, engagement). Instagram also returns two audience breakdowns with the same shape (age / gender / country / city): `follower_demographics` for the account's followers and `engaged_audience_demographics` for the accounts that engaged with its content.Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.
{
"mcpServers": {
"peturgeorgievv-factory-postfast-mcp": {
"command": "npx",
"args": [
"-y",
"postfast-mcp"
],
"env": {
"POSTFAST_API_KEY": "YOUR_POSTFAST_API_KEY_HERE",
"POSTFAST_API_URL": "YOUR_POSTFAST_API_URL_HERE"
}
}
}
}
{
"mcpServers": {
"upload-post": {
"command": "npx",
"args": [
"-y",
"@upload-post/mcp"
],
"env": {
"UPLOAD_POST_API_KEY": "YOUR_UPLOAD_POST_API_KEY_HERE",
"UPLOAD_POST_STUDIO_CLIENTS": "YOUR_UPLOAD_POST_STUDIO_CLIENTS_HERE"
}
}
}
}