# post bridge for ChatGPT: how to post to social media

You are an AI agent. This brief tells you how to publish and schedule social media posts for the user through post bridge (https://www.post-bridge.com), a scheduler that exposes an MCP server. Follow it in order.

## 0. Are you connected yet?

Try calling the tool `list_social_accounts`. If it exists and returns accounts, skip to section 2. If the tool is missing, the user has not connected post bridge to ChatGPT yet. Tell them, in one message, to do this:

1. Open post bridge in the ChatGPT plugin directory, or search “post bridge” under Plugins
2. Hit Install plugin and approve access on the post bridge screen
3. Then just ask ChatGPT to post. No config, no API key
   Link: https://chatgpt.com/plugins/plugin_asdk_app_6a6a109fe5ac8191a5329c53684f11e8

Manual alternative (Prefer to add it manually as a custom connector):
1. Enable developer mode: Settings, Apps & Connectors, Advanced, Developer mode
2. Settings, Connectors, Create. Name it post bridge, paste the URL, auth: OAuth `https://www.post-bridge.com/api/mcp/mcp`
3. Sign in and allow when prompted

They also need a post bridge account with at least one social account connected via the dashboard (https://www.post-bridge.com/create-account). You never receive platform passwords; post bridge holds the OAuth tokens.

MCP server URL: https://www.post-bridge.com/api/mcp/mcp

## 1. Rules of engagement

- Call `list_social_accounts` first and use the returned IDs. If the user has several accounts on one platform, ask which one, unless they named the handle.
- Never publish immediately unless the user said "now". Prefer `scheduled_at` (ISO 8601, user's saved timezone) or `use_queue`. Use `is_draft` when they want to review first.
- Post the user's caption unchanged unless they asked you to write it. If you write it, offer drafts.
- If the caption is longer than a platform allows (Bluesky 300, Threads 500, Pinterest 800, Google Business 1,500, Instagram 2,200, TikTok 2,200 for videos and 4,000 for photo posts, LinkedIn 3,000 characters), write a shorter version for that platform in `platform_configurations.<platform>.caption` in the same call instead of letting it be cut. The rest of the platforms keep the full caption. X allows 280 characters, or up to 25,000 when the account has X Premium: check has_x_premium on that account from list_social_accounts, keep the full caption if it is true, and write a shorter X caption if it is false.
- After creating a post, report the post ID, accounts, and time. After a post was due, check `list_post_results` and report per-platform success or the platform's error verbatim.
- To add an Instagram, Facebook, TikTok, YouTube, X, LinkedIn, Threads, Pinterest or Bluesky account (the user's own or a client's): call `request_connect_link` with the platform and, for a client, an `external_ref`; send the link to whoever owns the account; once they say it is done, `list_social_accounts` shows it. Google Business is connected in the dashboard.

## 2. Media

- Public URL to a file: pass it via `media_urls` on `create_post`, or `upload_media` with `url` to get a reusable `media_id`.
- File on the user's device (phone or laptop, any size up to 500MB): call `request_upload_link`, send the user the link, wait for them to say it is uploaded, then `list_media` (newest first) and take one `media_id` per file they uploaded. Several files at once is a carousel.
- Base64 via `upload_media` `data` only for files under 3MB. JPEG, PNG, MP4, MOV, PDF. HEIC is rejected.
- Local file of any size, when the agent can run commands (Claude Code, Cowork, Codex, Cursor): `upload_media` with `size_bytes`, `mime_type` and `name` returns a `media_id` and a presigned `upload_url`; PUT the file to it (e.g. with curl), then use the `media_id`. Up to 500MB.
- ChatGPT, a file in the conversation (attached by the user or an image ChatGPT generated): pass it to `upload_media` as `file`; ChatGPT hands over the file itself, no manual upload. If it fails, fall back to `request_upload_link`.
- A `media_id` lives until the last post using it has published, then the file is deleted. Reusing one across posts that are all scheduled is fine; for a post created after those have gone out, upload the file again.

## 3. Platform rules

- X (Twitter): Text, up to 4 images or 1 video. 280 characters, or up to 25,000 with X Premium (has_x_premium on the account): without Premium, give X its own shorter caption when the main one is longer. Links are stripped from the tweet body. Put the link in the first comment instead. For a multi-tweet thread, put the follow-up tweets in platform_configurations.twitter.thread (an array).
- Instagram: 1 to 10 images or videos required. Reels, feed posts and Stories. First comment supported. A Story is exactly one file. Needs a professional (business or creator) account.
- TikTok: 1 video, or one or more images. Several images in one post publish as a photo carousel. Ask for a TikTok draft to finish in the app and add a sound before it goes live.
- YouTube: Exactly 1 video required. Give it a title. Tags go in platform_configurations.youtube.tags. Shorts are just vertical videos.
- LinkedIn: Text, up to 20 images, 1 video, or 1 PDF. A PDF becomes a native document carousel. Supports a first comment (linkedin.first_comment), a good place for a link.
- Facebook: Text, images or video. Page posts and Page Stories. First comment supported. A custom video thumbnail goes in platform_configurations.facebook.thumbnail (a media id).
- Threads: Text, up to 20 images or videos. First comment supported. For a multi-post thread, put the follow-up posts in platform_configurations.threads.thread (an array).
- Pinterest: 1 to 5 images or 1 video required. Carousel images must share the same aspect ratio. Add a title and a destination link.
- Bluesky: Text, up to 4 images or 1 video. Plain and simple.
- Google Business: Text or a single image. No video.

## 4. Tools (16)

- `list_social_accounts`: List all connected social media accounts with IDs, platforms, and usernames. Params: None
- `request_connect_link`: Get a link that connects a new Instagram, Facebook, TikTok, YouTube, X, LinkedIn, Threads, Pinterest or Bluesky account without opening the dashboard. Send it to whoever owns the account (you or a client); they approve on the platform and are sent back. Tag the accounts with your own reference. Params: platform, external_ref?, return_url?, expires_in?
- `create_post`: Create, schedule or publish a post to one or many accounts. Use scheduled_at for a time, use_queue for the next free slot, is_draft to save without publishing. Several images to TikTok make a photo carousel; per-platform captions go in platform_configurations. Params: caption, social_accounts, scheduled_at?, use_queue?, media?, media_urls?, is_draft?, platform_configurations?
- `list_posts`: List your posts with optional filters by platform or status. Params: platform?, status?, limit?, offset?
- `get_post`: Get full details of a single post by ID. Params: id
- `update_post`: Update a scheduled or draft post's caption, schedule, accounts, or media. Params: id, caption?, scheduled_at?, social_accounts?, media?, media_urls?
- `delete_post`: Delete a scheduled or draft post. Published posts cannot be deleted. Params: id
- `list_analytics`: Get post analytics: views, likes, comments, shares. Filter by platform, timeframe or media type (video / TikTok slideshow). Params: platform?, timeframe?, media_type?, limit?, offset?
- `get_analytics_daily`: Per-day analytics snapshots and gains (views, likes, comments, shares) for a single post. Params: id (from list_analytics)
- `sync_analytics`: Trigger a fresh sync of analytics data from all connected platforms. Params: None
- `list_post_results`: Check per-platform posting results: success or failure with the platform's error details. Params: post_id?, limit?, offset?
- `upload_media`: Upload media from a public URL, as base64 bytes (3MB cap), get a presigned upload URL for a local file of any size (agents that can run commands PUT it directly), or in ChatGPT take a file straight from the conversation. Returns a reusable media_id, deleted once the last post using it has published. JPEG, PNG, MP4, MOV, PDF. Params: url? | (data + mime_type) | (size_bytes + mime_type + name) | file (ChatGPT), name?
- `request_upload_link`: Get a 24-hour upload page for files on the user's device. They drop one or many files in from any browser and each lands in the media library. Then list_media, newest first, to attach them. Params: None
- `list_media`: List uploaded media files with IDs, URLs, and types. Params: limit?, offset?
- `preview_media`: See a small preview of an uploaded image so you can tell photos apart. Images only. Params: id
- `delete_media`: Delete an uploaded media file (only if not used by any post). Params: id

## 5. Things the user may ask, and what to do

- See your accounts: "List my connected social accounts."
- Publish right now: "Post this to my X account now: [text]"
- Schedule for a time: "Schedule this to Instagram and LinkedIn for Friday at noon: [text]"
- Use your queue: "Add this to my next free queue slot on Threads: [text]"
- Draft for review: "Write three versions of this for X, LinkedIn and Threads and save them as drafts. Do not publish."
- Image from a URL: "Upload the image at [URL] and post it to Instagram with the caption [text]"
- Anything on your device: "Get me an upload link. I have 8 photos for a carousel."
- Link on X: "Post this to X and put the link in the first comment: [text] [URL]"
- TikTok with a sound: "Send this video to my TikTok drafts so I can add a sound before it goes out."
- Check the queue: "What do I have scheduled this week, and on which accounts?"
- Check a result: "Did my last post publish everywhere? Show the result per platform."
- Read analytics: "Which of my posts got the most views in the last 30 days?"

Human guide: https://www.post-bridge.com/chatgpt. Full MCP docs: https://www.post-bridge.com/mcp/docs. REST API: https://api.post-bridge.com/reference.