Skip to main content
Glama
Upload-Post

Upload-Post

Official
by Upload-Post

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
UPLOAD_POST_API_KEYNoYour Upload-Post API key. Required for stdio mode; ignored in --http mode.
UPLOAD_POST_BASE_URLNoOverride base URL for the Upload-Post API (default: https://api.upload-post.com/api).https://api.upload-post.com/api
UPLOAD_POST_MCP_PORTNoPort for HTTP mode (default: 8080).8080
OPENAI_APPS_CHALLENGE_TOKENNoOptional override for ChatGPT Apps domain verification token.

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": true
}
resources
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
upload_videoA

Publish 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. Hosted clients such as ChatGPT and claude.ai cannot publish attached files by passing /mnt/data, sandbox, or mounted local paths; for those files, ALWAYS call open_upload_studio first so the browser stages the video to Upload-Post/R2, then publishes it. 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.).

upload_photosA

Publish one or more photos (single image or carousel). Each item in photosPathsOrUrls may be a public URL or a local path.

upload_textA

Publish a text-only post. Title is required for Reddit. linkUrl (or platform-specific *LinkUrl) attaches a link preview where supported.

upload_documentC

Publish a document (PDF / PPT / PPTX / DOC / DOCX) to LinkedIn. Title is required.

get_statusA

Check the status of an async upload by request_id. Poll this until status is 'success' or 'failed'.

get_job_statusA

Check the status of a scheduled or queued upload by job_id. Use this for posts created with addToQueue or scheduledDate.

get_historyC

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 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_scheduledA

List all currently scheduled (not-yet-published) posts.

cancel_scheduledA

Cancel a scheduled post by its job_id.

edit_scheduledB

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): follower_demographics for the account's followers and engaged_audience_demographics for the accounts that engaged with its content.

get_total_impressionsA

Sum of impressions for a profile from daily snapshots. Use period for presets, or startDate/endDate for custom ranges.

get_post_analyticsB

Per-platform metrics for a specific post identified by request_id.

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_post_analytics; there is no background refresh, so captured_at is the last time that post was read live and a post never queried live will be absent. Unlike get_post_analytics it never hits the platforms, so it is not subject to the live analytics rate limit (100 requests / 5 minutes) — prefer it when scanning many posts or paging through a profile's history. Paginated: pass next_cursor from the response back as cursor until has_more is false.

get_platform_metricsA

Reference: which metrics are available per platform (impressions, likes, …) and their human labels.

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.

create_userB

Create a new Upload-Post profile (logical container for connected socials).

delete_userA

Permanently delete a profile and disconnect its socials.

generate_jwtB

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 generate_jwt. The returned profile object echoes the connection page settings, including language and any ui_labels.

get_facebook_pagesB

Facebook pages connected to a profile.

get_linkedin_pagesB

LinkedIn company pages connected to a profile.

get_pinterest_boardsC

Pinterest boards available to a profile.

get_google_business_locationsC

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_postsA

Recent Reddit posts published from a profile, with the platform-side metadata (subreddit, flair, score, …).

get_post_commentsA

List comments on a post. Identify the post by either postId or postUrl (YouTube: postId=videoId; LinkedIn: postId=the post urn). TikTok is not supported.

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 commentId (reply to a comment), postId, or postUrl (top-level). LinkedIn: postId=the post urn. Instagram requires commentId (replies only).

delete_commentA

Delete a comment by commentId. LinkedIn also requires postId (the post urn).

retry_postA

Retry a failed upload. Identify it by either requestId (async upload) or jobId (scheduled/queued upload).

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 input_url for one input, or files for multiple public URLs. Optionally provide full_command beginning with ffmpeg for explicit trim/transcode/watermark/thumbnail commands. Returns a job_id you can poll with get_ffmpeg_job.

get_ffmpeg_jobA

Poll the status of an FFmpeg job. When status is 'completed', call download_ffmpeg_result to obtain the file.

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_settingsA

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_queueB

Preview the upcoming queue slots and what would land in them. Optionally nextSlot=true returns just the next available slot timestamp.

create_media_uploadA

Internal/app staging helper for clients that can directly PUT file bytes to the returned upload_url. Do NOT use this directly from the ChatGPT/claude.ai model for attached files: the model/server environment cannot read or upload ChatGPT attachment bytes. For ChatGPT attached video uploads, call open_upload_studio first; the Studio browser component will call this tool after the user selects the file. Use this directly only in MCP clients that truly hold the file bytes and can perform the HTTP PUT themselves. Staging media is deleted after 24 hours; scheduled posts are safe because upload_video copies the media into durable scheduler storage.

complete_media_uploadA

Internal/app staging helper. Validate a media upload only after the browser/client has successfully PUT the actual file bytes to upload_url. Do NOT call this immediately after create_media_upload from the model; without the intervening PUT, completion will fail or produce no publishable media. Returns a temporary media_url that can be passed to upload_video/upload_photos immediately.

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.

open_upload_studioA

Open the ChatGPT UI for local/attached video uploads. Use this FIRST when the user attaches a video in ChatGPT or claude.ai and does not provide a public HTTPS URL. Do not try upload_video with /mnt/data, sandbox, or mounted local paths first: hosted MCP servers cannot read those files. The Studio lets the user select the file in the browser, stages it in short-lived Upload-Post/R2 storage, and publishes it through Upload-Post.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription
upload-post-video-upload-studioChatGPT UI for uploading and publishing a video with Upload-Post.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Upload-Post/upload-post-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server