Upload photos / carousel
upload_photosPublishes one or more photos as single posts or carousels to multiple social platforms, with per-platform captions and a required preview confirmation before anything is sent.
Instructions
Publish one or more photos (single image or carousel; items are published in array order). Each item in photosPathsOrUrls must be a public/signed HTTPS URL (a staged media_url from complete_media_upload works), or an absolute local path only when the MCP server runs on the same machine as the file. One call can carry a different caption per platform: title is the default and platformOptions.facebookTitle, platformOptions.instagramTitle, platformOptions.linkedinTitle, platformOptions.xTitle, … override it for that platform. 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 | ||
| title | No | ||
| altText | No | ||
| 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. | |
| 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`. | |
| 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. | |
| maxPostsPerSlot | No | ||
| platformOptions | No | Flat platform-specific override object with camelCase keys. Per-platform text overrides (instagramTitle, xFirstComment, …) are also accepted. Keys the upload-post SDK does not support are silently ignored upstream. | |
| photosPathsOrUrls | Yes | Photo URLs (or same-machine local paths), in carousel order. Never `/mnt/data` or sandbox attachment paths. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| result | No |