Schedule social posts from ChatGPT
posterly is the publish layer. ChatGPT is the chat layer. Add the hosted MCP endpoint as a custom app, then ask ChatGPT to draft, validate, and schedule posts across 18 platforms.
Hero prompt
Using posterly, list my connected accounts, then draft one caption for LinkedIn, X, and Instagram announcing our launch. Find the next free slot in Europe/London, run validate_post for each, show me the drafts, and wait for my yes before create_post with confirm true.
Preview what is copied
# posterly for ChatGPT
posterly is the publish layer. ChatGPT is the chat layer. Connect the hosted MCP endpoint as a custom app, then schedule across 18 platforms after the user approves.
posterly publishes to 18 platforms: Instagram, Facebook, TikTok, X, LinkedIn, YouTube, Pinterest, Threads, Google Business, Telegram, Bluesky, Discord, Slack, Mastodon, Dev.to, Hashnode, WordPress, Lemmy.
## Connect
ChatGPT web: Developer Mode, create a custom MCP app, server URL https://www.poster.ly/api/mcp. Auth is OAuth or Bearer. Write actions need Business, Enterprise, or Edu. Pro custom MCP is read and fetch only. Web only. No mobile MCP.
Codex: `codex mcp add posterly --env POSTERLY_API_KEY=pst_live_your_key_here -- npx -y posterly-mcp-server@latest` or `codex mcp add posterly --url https://www.poster.ly/api/mcp`. Config: ~/.codex/config.toml.
This is a custom app you add yourself. Do not look for a directory listing.
Stdio file_path uploads work in Codex only, not in ChatGPT web. Chat attachments never reach MCP.
## Are we connected yet?
1. Call `whoami` (no params). Confirm the user, scopes, and workspaces.
2. Call `list_accounts` (`workspace_id` optional). If none are connected, stop and send the user to connect social accounts in posterly. Do not invent account IDs.
3. Prefer `validate_post` before `create_post`. Show the preview. Wait for a clear yes.
4. Only then call `create_post` with `confirm: true`. Never publish or schedule live without that approval.
5. Prefer `scheduled_at` (ISO 8601 UTC) or `find_available_slot` (`account_ids`, `timezone`, `count`). Do not publish immediately unless the user asks.
## Rules
- posterly is the publish layer. This client is the chat or agent layer.
- Never collect card details, posterly passwords, or social-network passwords. Send the user to https://www.poster.ly/agents/signup or https://www.poster.ly/dashboard/api.
- Point to https://www.poster.ly/mcp for the rest of the 86 hosted HTTP MCP tools (89 on the local stdio package).
- After a post is created, send the View in posterly link. Avoid raw JSON dumps unless the user asks to debug.
## Media (honest)
Chat attachments never reach MCP. The paperclip in this chat does not give posterly the file.
The ~4MB limit is the **Vercel request body** on posterly API routes (`/api/mcp`, `POST /api/v1/media/upload`). It is not an MCP protocol cap and not the plan storage cap. Base64 inflates files, so hosted `upload_media` is small images only (relay cap 5MB decoded).
- Public HTTPS URL: `upload_media_from_url` (`url`, optional `filename`, `content_type`) or pass `media_url` / `media_urls` on `validate_post` / `create_post`. Server fetch: about 5MB relay, 60MB hard cap. Large R2/S3 URLs fail with `remote_media_too_large`.
- Hosted `upload_media`: required `filename` + `base64_data`. Optional `content_type`. Hits the 4MB Vercel body. JPEG, PNG, GIF, WebP, MP4, MOV, WebM. HEIC is unsupported.
- Laptop file in ChatGPT web or Claude.ai: `create_media_drop` (optional `filename`, optional `max_files`, default 10). Send the user `drop_url` (`https://www.poster.ly/drop/<token>`). They open it with no dashboard login and drop the file. Then `list_media` (`drop_session_id`) and pass `public_url` to `validate_post` / `create_post`. This is not the chat paperclip.
- Larger files, when this client can HTTP PUT: `create_signed_upload` (`filename`, `content_type`, `size`), PUT the raw bytes to the returned `upload_url` (object storage, not a posterly API route) with the returned headers, then pass `public_url` to `create_post`. That PUT does not hit the 4MB body. Plan video caps: Starter 500MB, Pro 750MB, Power 1GB, Agency 4GB.
- Stdio `upload_media` also accepts `file_path` when the user gives a real local filesystem path. The local server reads the disk and uses signed upload for large files, so this does not hit the Vercel 4MB body. Never guess paths. Chat attachments are not a file_path.
## Starter tools
- `whoami` (none): Call first. Returns the authenticated user, API key scopes, and workspaces.
- `list_accounts` workspace_id?: Connected social accounts. Stop if this is empty and send the user to connect accounts in posterly.
- `validate_post` account_id or username+platform, caption, scheduled_at?, media_url?, media_urls?, post_type?, workspace_id?: Dry run. Does not create a post. Use this before showing a preview.
- `create_post` same as validate_post, plus confirm: true (required): Destructive write. Refuse unless the user clearly approved caption, account, media, and schedule.
- `upload_media` filename, base64_data (hosted). content_type optional. Stdio also accepts file_path.: Hosted path is base64 with a decoded file of 5MB or less. Chat paperclip files never arrive here.
- `upload_media_from_url` url (required), filename?, content_type?: Fetch a public HTTPS URL into posterly storage. Localhost and private IPs are blocked.
- `create_signed_upload` filename, content_type, size: Bypasses the Vercel ~4MB API body. Returns upload_url (object storage) and public_url. PUT raw bytes to upload_url, then pass public_url to create_post. Use this when the client can PUT (Cursor, Claude Code, Codex).
- `create_media_drop` filename?, max_files?: Creates a no-login page at https://www.poster.ly/drop/<token>. Send drop_url to the user. ChatGPT web and Claude.ai laptop files use this, then list_media. Not the chat paperclip.
- `list_media` limit?, drop_session_id?: Newest media assets. After create_media_drop, pass drop_session_id and use public_url on validate_post / create_post.
- `find_available_slot` account_ids?, timezone?, workspace_id?, count?: Always pass timezone explicitly (IANA, e.g. Europe/London). Respects a 1-hour gap.
- `generate_captions` platforms (required), brief?, tone?, count?, mode?, source_caption?: Returns caption options only. It does not schedule or publish.
- `list_posts` status?, platform?, account_id?, workspace_id?, limit?: Upcoming or recent posts. status is scheduled, published, failed, or draft.
## Example prompts
- Using posterly, run whoami, then list_accounts. Tell me which LinkedIn, X, and Instagram accounts are connected.
- Draft one caption for LinkedIn, X, and Instagram about our product launch. Show me the three drafts and wait.
- Find the next free slot in Europe/London for my LinkedIn account, then run validate_post for a text post. Do not create_post yet.
- Turn this blog URL into three scheduled posts (LinkedIn, X, Instagram). validate_post each one, then wait for my yes before create_post with confirm true.
- List my last 10 scheduled posts and summarise what is already on the calendar this week.
- Generate three caption options for LinkedIn with generate_captions, then help me pick one. Do not publish.
- Schedule the approved LinkedIn caption for the next free Europe/London slot. Use create_post with confirm true only after I say yes.
- I have a video on my laptop. Call create_media_drop, send me the /drop/ link, wait, then list_media and validate_post. Do not use the paperclip.
## Links
- Human landing: https://www.poster.ly/chatgpt
- MCP hub: https://www.poster.ly/mcp
- ChatGPT guide: https://www.poster.ly/guides/chatgpt-guide
- AI agents: https://www.poster.ly/agents
- Agent signup: https://www.poster.ly/agents/signup
Custom MCP write actions need ChatGPT Business, Enterprise, or Edu on the web. Pro custom MCP is read and fetch only. There is no mobile MCP. Codex can use local stdio. Chat attachments never reach posterly. Laptop files go through create_media_drop then list_media.
What it looks like in chat
Draft, validate, then approve. Your AI never publishes until you say so.
your AI · connected to posterly MCP
MCPAssistant
Three short captions in your brand voice, via generate_captions. Next I will call validate_post, then wait.
1 · Tue 9:00
Your AI can now schedule social posts. You still approve every one.
2 · Wed 9:00
MCP signup is live. Connect Claude, ChatGPT, or Grok Bot in a few minutes.
3 · Thu 9:00
Validate first, then publish. That is the whole workflow.
Schedule 3 posts · Tue to Thu 9:00 Asia/Dubai
LinkedIn @Acme
Waiting for approval. Nothing will be scheduled until you approve.
Never posts without approval · validate_post before create_post
View in posterlyWorks with Claude, Cursor, ChatGPT, OpenClaw, Hermes, Grok Bot, Poke, and any MCP client.
Get ChatGPT connected in three steps
Create a posterly API key, add a custom MCP app in ChatGPT Developer Mode, then verify with whoami. Full tables stay on the MCP hub and the ChatGPT guide.
Enable API and MCP access
Buy Starter + API in one checkout, then create an API key in Dashboard, API and MCP. Keys start with pst_live_.
Open API dashboardAdd a custom MCP app
In ChatGPT on the web, turn on Developer Mode and create a custom app. Paste https://www.poster.ly/api/mcp. Auth is OAuth or a Bearer API key. Write actions need Business, Enterprise, or Edu.
MCP hubVerify, then schedule
Ask ChatGPT to run whoami and list_accounts. Prefer validate_post, then wait for a clear yes before create_post with confirm true.
ChatGPT walkthroughWhat to paste into ChatGPT
ChatGPT web talks to remote MCP only. Do not paste an npx stdio config into ChatGPT. Codex is the stdio exception.
Fields
Server URL
https://www.poster.ly/api/mcpHosted posterly MCP endpoint. JSON-RPC 2.0 over HTTPS. No SSE in v1.
Auth
OAuth, or Authorization: Bearer pst_live_your_key_hereOAuth uses posterly Dynamic Client Registration. A raw key works if the app form allows a Bearer header.
Writes
Business / Enterprise / EduPro custom MCP is read and fetch only. Web only. No mobile MCP.
Hosted HTTP MCP
This is what ChatGPT web calls. Same endpoint as Claude, Cursor, Grok Bot, and Poke.
POST https://www.poster.ly/api/mcp
Authorization: Bearer pst_live_your_key_here
Content-Type: application/json
{ "jsonrpc": "2.0", "id": 1, "method": "tools/list" }GET /api/mcp returns server info without auth. Discovery lives at /.well-known/mcp/server-card.json.
Codex (stdio or HTTP)
Codex CLI, the IDE extension, and the Codex tab share ~/.codex/config.toml. This is the ChatGPT surface that can run local stdio.
codex mcp add posterly --env POSTERLY_API_KEY=pst_live_your_key_here -- npx -y posterly-mcp-server@latest
codex mcp add posterly --url https://www.poster.ly/api/mcp
codex mcp listStdio exposes 89 tools, including file_path uploads. ChatGPT web cannot use that path.
What ChatGPT can do once connected
Start with these tools. The rest of the 86 hosted HTTP MCP tools live on the MCP hub. Prefer validate_post, then wait for a clear yes before create_post with confirm true.
Starter tools
whoamilist_accountsvalidate_postcreate_postupload_mediaupload_media_from_urlcreate_signed_uploadcreate_media_droplist_mediafind_available_slotgenerate_captionslist_postswhoami(none): Call first. Returns the authenticated user, API key scopes, and workspaces.list_accountsworkspace_id?: Connected social accounts. Stop if this is empty and send the user to connect accounts in posterly.validate_postaccount_id or username+platform, caption, scheduled_at?, media_url?, media_urls?, post_type?, workspace_id?: Dry run. Does not create a post. Use this before showing a preview.create_postsame as validate_post, plus confirm: true (required): Destructive write. Refuse unless the user clearly approved caption, account, media, and schedule.upload_mediafilename, base64_data (hosted). content_type optional. Stdio also accepts file_path.: Hosted path is base64 with a decoded file of 5MB or less. Chat paperclip files never arrive here.upload_media_from_urlurl (required), filename?, content_type?: Fetch a public HTTPS URL into posterly storage. Localhost and private IPs are blocked.create_signed_uploadfilename, content_type, size: Bypasses the Vercel ~4MB API body. Returns upload_url (object storage) and public_url. PUT raw bytes to upload_url, then pass public_url to create_post. Use this when the client can PUT (Cursor, Claude Code, Codex).create_media_dropfilename?, max_files?: Creates a no-login page at https://www.poster.ly/drop/<token>. Send drop_url to the user. ChatGPT web and Claude.ai laptop files use this, then list_media. Not the chat paperclip.list_medialimit?, drop_session_id?: Newest media assets. After create_media_drop, pass drop_session_id and use public_url on validate_post / create_post.find_available_slotaccount_ids?, timezone?, workspace_id?, count?: Always pass timezone explicitly (IANA, e.g. Europe/London). Respects a 1-hour gap.generate_captionsplatforms (required), brief?, tone?, count?, mode?, source_caption?: Returns caption options only. It does not schedule or publish.list_postsstatus?, platform?, account_id?, workspace_id?, limit?: Upcoming or recent posts. status is scheduled, published, failed, or draft.
Example prompts
- Using posterly, run whoami, then list_accounts. Tell me which LinkedIn, X, and Instagram accounts are connected.
- Draft one caption for LinkedIn, X, and Instagram about our product launch. Show me the three drafts and wait.
- Find the next free slot in Europe/London for my LinkedIn account, then run validate_post for a text post. Do not create_post yet.
- Turn this blog URL into three scheduled posts (LinkedIn, X, Instagram). validate_post each one, then wait for my yes before create_post with confirm true.
- List my last 10 scheduled posts and summarise what is already on the calendar this week.
- Generate three caption options for LinkedIn with generate_captions, then help me pick one. Do not publish.
- Schedule the approved LinkedIn caption for the next free Europe/London slot. Use create_post with confirm true only after I say yes.
- I have a video on my laptop. Call create_media_drop, send me the /drop/ link, wait, then list_media and validate_post. Do not use the paperclip.
Post to 18 platforms
ChatGPT can schedule through posterly to every supported social platform.
Related setup guides
ChatGPT is one route into the same API and MCP layer. These pages pair well with it.
MCP setup guide
The hub for hosted HTTP MCP, local stdio, OAuth metadata, and the full tool list.
ChatGPT guide (long read)
Developer Mode, Pro vs Business writes, Codex stdio, and worked scheduling prompts.
AI agents overview
How posterly connects to any agent that speaks MCP or REST, plus the agent signup flow.
Agent signup
Paid Starter + API onboarding. The agent never collects card details or passwords.
Claude setup
The same hosted endpoint as a Claude custom connector, plus Claude Code and Desktop.
Cursor setup
Local stdio in Cursor Desktop, hosted HTTP for Cloud Agents.
Pricing
One Stripe subscription: your plan plus API & MCP. Charged now, no free trial.
API, MCP & Agent Access
Starter $7 + API $3, charged now. No free trial on this path.
- ChatGPT custom MCP on the hosted HTTP endpoint
- Codex stdio via npx posterly-mcp-server
- Same key for MCP and REST
- 86 hosted HTTP MCP tools for status checks, scoped API keys, schemas, scheduling, support, media, brands, analytics, webhooks, OAuth, connect sessions, subscription management, and GBP
- 100 create-post requests/hour plus separate media/read limits
- All 18 supported platforms
ChatGPT questions
How do I connect posterly to ChatGPT?+
On ChatGPT web, enable Developer Mode and create a custom MCP app. Set the server URL to https://www.poster.ly/api/mcp and authenticate with OAuth or a Bearer posterly API key. Then ask ChatGPT to run whoami.
Can ChatGPT Pro schedule posts?+
Pro custom MCP is read and fetch only. create_post and other writes need ChatGPT Business, Enterprise, or Edu. Codex can write through local stdio with your posterly key.
Does this work on the ChatGPT mobile app?+
No. Custom MCP is web only. There is no mobile MCP.
Can I drop a laptop video onto the ChatGPT paperclip and have posterly post it?+
No. Chat attachments never reach MCP. Ask ChatGPT to call create_media_drop, open the https://www.poster.ly/drop/<token> link, drop the file there, then let it call list_media. Codex / Cursor / Claude Code can still use file_path or create_signed_upload then PUT.
Is posterly a one-click ChatGPT app?+
No. This is a custom MCP app you add yourself. There is no directory listing to click.
What can ChatGPT schedule?+
All 18 posterly platforms: Instagram, Facebook, TikTok, X, LinkedIn, YouTube, Pinterest, Threads, Google Business, Telegram, Bluesky, Discord, Slack, Mastodon, Dev.to, Hashnode, WordPress, Lemmy.
Ready to connect ChatGPT?
Pay for Starter + API in one checkout, create a key, then add the custom MCP app in ChatGPT web or Codex.
