Upload video
upload_videoPublish a video to multiple social platforms with per-platform settings and return a request ID for status tracking.
Instructions
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. 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.). 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. Needs the user's approval: call it first without confirmed to get a preview (nothing is sent), show the user exactly what will go out, and repeat the call with confirmed: true only after they approve.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| user | Yes | Profile name (Upload-Post user). | |
| title | No | Caption / title. | |
| timezone | No | IANA timezone for scheduled date, e.g. 'Europe/Madrid'. | |
| confirmed | No | Set to true only after the user has seen the preview this tool returns without it and approved it. Without it nothing is sent. | |
| platforms | Yes | Required array of platform identifiers, e.g. ['instagram']. Never pass a single string. | |
| addToQueue | No | Insert into the user's posting queue instead of publishing now. | |
| asyncUpload | No | Return immediately with request_id (default true). | |
| description | No | Description for the platforms that take one, unless a per-platform override is set. TikTok ignores it: set `platformOptions.tiktokDescription` for the TikTok description; the TikTok title comes from `platformOptions.tiktokTitle`, or `title`. | |
| videoBase64 | No | Video bytes as base64 (or a data: URI). Provide this OR videoPathOrUrl. The server writes it to a temp file, uploads, then deletes it. Capped by UPLOAD_POST_MAX_INLINE_MB (default 100); over HTTP the whole request is also capped by UPLOAD_POST_MCP_MAX_BODY_MB (default 10), so use videoPathOrUrl for anything larger. | |
| firstComment | No | Comment auto-posted under the post right after publishing. Supported on every platform that has comments, TikTok included. Use `platformOptions.<platform>FirstComment` to override it for one platform. X: links can be removed from X posts and first comments, depending on the account, so a 'link in the first comment' may go out without the URL; check `warnings` in get_status after publishing. | |
| scheduledDate | No | ISO 8601 date for scheduled publishing, e.g. '2026-12-25T10:00:00Z'. Omit for immediate post. | |
| videoFilename | No | Optional filename (e.g. 'clip.mp4') used only to pick the temp file extension when videoBase64 is given. Defaults to .mp4. | |
| videoPathOrUrl | No | Public/signed HTTPS URL of the video (a staged `media_url` from complete_media_upload also works). Absolute local paths are supported only for local/self-hosted MCP clients sharing the same filesystem. Never pass `/mnt/data`, sandbox, or other mounted attachment paths: the server cannot read them. | |
| maxPostsPerSlot | No | ||
| platformOptions | No | Platform-specific overrides as a flat object (camelCase keys), e.g. { tiktokPrivacyLevel: 'PUBLIC_TO_EVERYONE', youtubePrivacyStatus: 'public', youtubePlaylistId: 'PLxxxxxxxxxxxx', facebookPageId: '123' }. `youtubePlaylistId` may also be an array or a comma-separated list of playlist IDs to add the uploaded video to. The `tiktokMusic*`, `tiktokLocation*`, and `tiktokCoverImageUrl` keys depend on the TikTok connection's `capabilities` (see list_users); discover valid values with tiktok_music_trending and tiktok_location_search. tiktokPostMode=MEDIA_UPLOAD and tiktokUploadToDraft=true are the same draft/inbox flag for every TikTok account. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| result | No |