Synter Ads vs Upload Post
A side-by-side look at the Synter Ads 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 Synter Ads 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.
Which MCP server should you choose?
Choose Synter Ads when
- You need dedicated capabilities in the Social Media domain.
- You prefer a local stdio subprocess transport.
- You have the keys it needs:
SYNTER_API_KEY. - You want tools like
list_campaigns, create_search_campaign, create_display_campaign.
Choose Upload Post when
- You need dedicated capabilities in the Social Media domain.
- You prefer a local stdio subprocess transport.
- Its auth model fits you: API key required.
- You have the keys it needs:
UPLOAD_POST_API_KEY, UPLOAD_POST_MAX_INLINE_MB. - You want tools like
upload_video, upload_photos, upload_text.
Feature & specification comparison
Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Social Media | Social Media |
| Quality signal | 64/100 · Good | 65/100 · Great |
| Install command | Confirmed | Confirmed |
| Transport | Local subprocess (stdio) | Local subprocess (stdio) |
| Auth | Not declared | API key required |
| Pricing | Not declared | BYOK (pay the provider) |
| Required env vars | SYNTER_API_KEY | UPLOAD_POST_API_KEYUPLOAD_POST_MAX_INLINE_MB |
| Verified owner | Community listing | Community listing |
| GitHub stars | 21 | 11 |
| Directory activity | 1 views 0 installs 0 upvotes | 3 views 0 installs 0 upvotes |
| Tools | 56 | 57 |
| Full listing | View Synter Ads | View Upload Post |
Tools & capabilities
Synter Ads tools 56
list_campaignsList campaigns for ONE ad platform across all 16 ad platforms. `platform` is required -- this tool does not aggregate across platforms. Returns campaign name, status, budget, and performance metrics. 100% Free to Read ($0.00 / 0 credits — works out-of-the-box with zero configuration or API key; live write execution starts on the $20/month Solo plan).create_search_campaignCreate a Google Ads Search campaign with an ad group, responsive search ad, and keywords — all in one atomic request. Supports `dry_run: true` ($0.00 / 0 credits, zero credentials required) to preview payload and policy checks. Live execution passes the server-side Agent Shield safety gate (daily spend caps, paused-on-create default, human approval mode, and immutable workspace audit log) on the $20/month Solo plan ($20.00 included monthly credits, 0% ad-spend markup). IMPORTANT — creative floor: supply 11-15 headlines (15 recommended, max 30 chars each) and 4 descriptions (max 90 chars each), echoing your target keywords across at least 5 headlines. The API accepts as few as 3 headlines / 2 descriptions, but ads built near that minimum score 'Poor' on Google Ad Strength, get throttled in the auction, and may be rejected by the platform — treat 11 headlines / 4 descriptions as the real minimum. Fewer than 3 headlines or fewer than 2 descriptions will cause the campaign to be rejected before any API call is made.create_display_campaignCreate a Google Ads Display campaign with responsive display ads. Supports image uploads from URLs, `dry_run: true` ($0.00 / 0 credits, zero credentials required), and server-side safety gates (daily spend caps, paused-on-create default, approval mode, and audit log).create_pmax_campaignCreate a Google Ads Performance Max campaign. Requires images, headlines, descriptions, and a business name. Supports `dry_run: true` ($0.00 / 0 credits, zero credentials required) and server-side safety gates (daily spend caps, paused-on-create default, approval mode, and audit log).pause_campaignPause a campaign by ID across all 16 connected ad platforms. Supports `dry_run: true` ($0.00 / 0 credits, zero credentials required). Live execution is audited in the workspace audit log ($0.05 / 2 credits on Solo $20/mo plan).update_campaign_budgetUpdate the daily budget for a campaign across all 16 connected ad platforms. Supports `dry_run: true` ($0.00 / 0 credits, zero credentials required). Live execution passes the server-side Agent Shield safety gate (daily spend ceiling, max 2x budget-change multiplier, approval mode, and immutable audit log).get_performanceGet performance metrics (impressions, clicks, spend, conversions, ROAS) for campaigns across any of the 16 ad platforms. Free read-only tool ($0.00 / 0 credits).get_daily_spendGet daily spend breakdown for ONE ad platform across any of the 16 ad platforms. `platform` is required -- this tool does not aggregate across platforms. Free read-only tool ($0.00 / 0 credits).pacing_reportReturn a deterministic budget-pacing snapshot for the current workspace across every connected ad platform and the overall portfolio (month-to-date spend, today's spend, expected spend to date, pacing percent, projected end-of-period spend, on_track/underspending/overspending/critical status, and off-pace warnings). Free read-only tool ($0.00 / 0 credits).user_budget_pacing_reportReturn a deterministic per-user/trader budget ownership and pacing snapshot from saved workspace assignments (target budget, actual spend, expected spend, projected spend, variance, and pacing status). Free read-only tool ($0.00 / 0 credits).optimize_budgetRecommend a cross-channel budget allocation across connected ad platforms using diminishing-returns modeling. Recommend-only (dry_run defaults to true); apply approved changes with update_campaign_budget. Free read-only recommendation tool ($0.00 / 0 credits).add_keywordsAdd keywords to a Google Ads campaign or ad group.- +44 more on the listing page
Upload Post tools 57
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.- +45 more on the listing page
Ready-to-paste client configs
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.
Synter Ads
{
"mcpServers": {
"synter-ads-2": {
"command": "npx",
"args": [
"-y",
"@synterai/mcp-server"
],
"env": {
"SYNTER_API_KEY": "YOUR_SYNTER_API_KEY_HERE"
}
}
}
}
Upload Post
{
"mcpServers": {
"upload-post": {
"command": "npx",
"args": [
"-y",
"@upload-post/mcp"
],
"env": {
"UPLOAD_POST_API_KEY": "YOUR_UPLOAD_POST_API_KEY_HERE",
"UPLOAD_POST_MAX_INLINE_MB": "YOUR_UPLOAD_POST_MAX_INLINE_MB_HERE"
}
}
}
}
Frequently asked questions
Synter Ads is categorized under Social Media and uses a local stdio subprocess. Upload Post belongs to Social Media and uses a local stdio subprocess. Pick Synter Ads for social media work and Upload Post for social media.
Copy the mcpServers block from the config section on this page into your client's config (for example claude_desktop_config.json or ~/.cursor/mcp.json), then fully restart the client.
Synter Ads has no declared pricing — check the project's own site. Upload Post is bring-your-own-key: usage is billed by the API provider you supply a key for. Auth: api key required. If a server needs environment variables such as API keys, define them under the env key in your client's MCP config.
Yes. MCP clients support multiple servers: add synter-ads-2 and upload-post as separate keys in the same mcpServers object, and your assistant will call tools from either one.
On AllMCPs, Synter Ads has a quality signal of 64/100 (Good) with 1 views, 0 installs and 21 GitHub stars. Upload Post has 65/100 (Great) with 3 views, 0 installs and 11 GitHub stars.