Upload-Post
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| UPLOAD_POST_API_KEY | No | Your Upload-Post API key. Required for stdio mode; ignored in --http mode. | |
| UPLOAD_POST_BASE_URL | No | Override base URL for the Upload-Post API (default: https://api.upload-post.com/api). | https://api.upload-post.com/api |
| UPLOAD_POST_MCP_PORT | No | Port for HTTP mode (default: 8080). | 8080 |
| OPENAI_APPS_CHALLENGE_TOKEN | No | Optional override for ChatGPT Apps domain verification token. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| upload_videoA | Publish a video to one or more platforms. Use |
| upload_photosA | Publish one or more photos (single image or carousel). Each item in |
| upload_textA | Publish a text-only post. |
| upload_documentA | Publish a document (PDF / PPT / PPTX / DOC / DOCX) to LinkedIn. Title is required. |
| get_statusA | Check the status of an async upload by |
| get_job_statusA | Check the status of a scheduled or queued upload by |
| get_historyB | Paginated history of uploads across all profiles. |
| get_mediaA | Retrieve 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 |
| list_scheduledA | List all currently scheduled (not-yet-published) posts. |
| cancel_scheduledB | Cancel a scheduled post by its |
| edit_scheduledA | Reschedule a post: change date and/or timezone. |
| get_analyticsA | Aggregated analytics for a profile across selected platforms (followers, views, engagement). Instagram also returns two audience breakdowns with the same shape (age / gender / country / city): |
| get_total_impressionsB | Sum of impressions for a profile from daily snapshots. Use |
| get_post_analyticsA | Per-platform metrics for a specific post identified by |
| get_cached_post_analyticsA | Replays per-post metrics Upload-Post already fetched, instead of calling the platforms again. ONLY contains posts previously fetched through |
| get_platform_metricsA | Reference: which metrics are available per platform (impressions, likes, …) and their human labels. |
| get_audienceA | Who follows the profile, when they are online and what they tap on it. One endpoint for every network, chosen with |
| get_suggestionsA | What to write about: the hashtags or the searches a network suggests around a word. One endpoint for both questions, told apart by |
| get_account_infoA | Validate the current API key and return account information. Useful as a first call to confirm credentials before doing real work. |
| list_usersA | List all Upload-Post profiles in the account, with their connected social accounts. The TikTok account object carries a |
| create_userB | Create a new Upload-Post profile (logical container for connected socials). |
| delete_userA | Permanently delete a profile and disconnect its socials. |
| generate_jwtA | Generate a JWT + connection URL so an end-user can connect socials inside an embedded Upload-Post flow (white-label integration). |
| validate_jwtA | Verify a JWT previously issued by |
| get_facebook_pagesC | Facebook pages connected to a profile. |
| get_linkedin_pagesA | LinkedIn company pages connected to a profile. |
| get_pinterest_boardsC | Pinterest boards available to a profile. |
| tiktok_music_trendingA | Trending tracks from the TikTok Commercial Music Library, to soundtrack a TikTok video. Pass the returned track |
| tiktok_music_searchA | Find a TikTok Commercial Music Library track by song title or artist, to soundtrack a TikTok video. Pass the returned track |
| tiktok_location_searchA | Search TikTok places to tag on a post. TikTok needs both parts, so pass the returned |
| tiktok_publishing_settingsA | What the connected TikTok account is allowed to publish. Call this before setting |
| get_google_business_locationsB | Google Business Profile locations the profile can post to. |
| get_google_business_reviewsA | List reviews for a Google Business Profile location. Pass the profile that owns the connected Google Business account; location_id defaults to the account's selected location. |
| reply_to_google_business_reviewA | Create or update the owner reply to a Google Business review. Provide review_name (the full resource path from get_google_business_reviews) or review_id + location_id. |
| get_reddit_detailed_postsC | Reddit posting is currently unavailable (error_code=reddit_unavailable) until the Reddit app is restored. Do not use reddit as a publish target. Recent Reddit posts published from a profile, with the platform-side metadata (subreddit, flair, score, …). |
| get_post_commentsA | List comments on a post. One endpoint for every network, chosen with |
| reply_to_commentA | Send a private DM to the author of an Instagram comment (within Instagram's 7-day reply window). |
| public_reply_to_commentC | Post a public reply visible under the original Instagram comment. |
| create_commentA | Post a top-level comment or a reply on a post. Provide exactly ONE of |
| delete_commentA | Delete a comment by |
| comment_actionA | Moderate or react to a comment on one of the profile's own posts: hide it from other viewers, like it as the account, or pin it to the top. One endpoint for every network, chosen with |
| retry_postB | Retry a failed upload. Identify it by either |
| unpublish_postA | Delete a post already published to a platform. Instagram and TikTok are not supported. |
| send_dmA | Send an Instagram DM to a recipient from a connected Upload-Post profile. Use a recipient_id returned by Instagram comments or DM conversation tools. |
| list_dm_conversationsC | Recent DM conversations for a profile on a given platform. |
| manage_autodmsA | Control Instagram AutoDM monitors. For action='start', provide post_url, reply_message, and profile_username. For stop/pause/resume/delete/logs, provide monitor_id. For status, optionally set include_inactive=true. |
| submit_ffmpeg_jobA | Submit a private FFmpeg processing job through Upload-Post. Provide |
| get_ffmpeg_jobA | Poll the status of an FFmpeg job. When status is 'completed', call |
| download_ffmpeg_resultA | Returns the download URL and metadata for a completed FFmpeg job without streaming the processed file through MCP. |
| get_ffmpeg_consumptionA | Monthly FFmpeg processing minutes used vs. plan allowance. |
| get_queue_settingsC | Posting queue configuration (slots per day, time windows, timezone). |
| update_queue_settingsA | Update posting queue configuration for a profile. Fields are flat, not nested: timezone, slots, days_of_week, and max_posts_per_slot. |
| preview_queueA | Preview the upcoming queue slots and what would land in them. Optionally |
| create_media_uploadA | Step 1 of staging a local file for publishing. Returns |
| complete_media_uploadA | Step 2 of staging a local file. Call it only after the file bytes were actually PUT to the |
| get_media_uploadA | Internal/app staging helper. Get status for a short-lived MCP media upload. Optionally returns a fresh temporary media_url for an already-uploaded staging object. |
| delete_media_uploadA | Internal/app staging helper. Delete a short-lived MCP staging media upload from R2. This does not delete scheduler durable copies created later by upload_video. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 57 tools
Most tools are distinct, but there are several overlapping pairs: get_status vs get_job_status, get_analytics vs get_post_analytics vs get_cached_post_analytics vs get_total_impressions, and reply_to_comment vs public_reply_to_comment vs create_comment vs send_dm. The descriptions help, but an agent could easily pick the wrong analytics or comment tool.
The set mostly follows a verb_noun pattern (upload_photos, list_scheduled, get_analytics, delete_comment, cancel_scheduled). Minor deviations exist: tiktok_music_trending and tiktok_music_search are noun-first rather than verb-first, and get_google_business_locations is a bit verbose, but the overall pattern is consistent and readable.
57 tools is a very large surface for a single MCP server. While the domain is broad (publishing, scheduling, analytics, comments, DMs, FFmpeg processing, user management), the count is heavy and includes internal/app staging helpers (get_media_upload, delete_media_upload) that add clutter. The scope could be split into separate servers.
The publishing lifecycle is well covered: create, schedule, retry, status, history, cancel, edit, unpublish. Analytics, comments, DMs, and queue management are also present. Minor gaps exist: no tool to update a published post, no tool to list failed uploads specifically, and Reddit is explicitly unavailable, but the core workflows are complete.