All posts

How to schedule social media posts with Claude, ChatGPT, Cursor or Codex

Connect an AI assistant to overads over MCP and it can draft and schedule posts for X, LinkedIn, Bluesky, Mastodon and Pinterest. Which apps sign in and which need a key, what each request becomes, and how to fix a refused post.

overads team10 min readPublished
Title card on a dark, misty photograph: the overads wordmark, the label Social publishing, and the headline How to schedule social media posts with Claude, ChatGPT, Cursor or Codex

TL;DR

  • Add the overads MCP server to Claude, sign in to overads and approve, then ask Claude to schedule a post. ChatGPT and Claude Code sign in the same way; Cursor and Codex use a workspace API key. Posts go to X, LinkedIn, Bluesky, Mastodon and Pinterest.
  • The assistant calls create_post. With no scheduledAt the post is saved as a draft; with one it is queued; with requireApproval set it waits until a teammate approves it in overads, and no API call can approve it.
  • The overads workspace must be on the Pro or Scale plan, and only a workspace owner or admin can approve a sign-in. Each signed-in connection works in one workspace and shows its permissions as checkboxes you can untick.
  • For ChatGPT, OpenAI's help center says full MCP support, including write actions such as creating a post, is rolling out in beta to Business, Enterprise and Edu plans on the web, as read on October 8, 2026.

What you need before you start

Scheduling social media posts from Claude through overads needs four things: an overads workspace on the Pro or Scale plan, at least one connected social account, an AI app that supports remote MCP servers, and the right to connect that app. The overads MCP server lives at https://api.overads.io/public/v1/mcp and uses the Streamable HTTP transport, according to the overads MCP server docs.

  1. Connect the accounts in overads first. The assistant can only post to connections that already exist in the workspace, and it reads them with the list_connections tool.
  2. Check the plan. Free workspaces cannot connect to the MCP server, by signing in or with a key.
  3. Check your role. Only a workspace owner or admin can approve a sign-in for that workspace; other workspaces show dimmed on the approval screen.
  4. Check the AI app's own plan. Anthropic and OpenAI each decide which of their plans can add a custom MCP server, as the sections below set out.

If MCP is new to you, the guide to what an MCP server is explains the protocol and how it differs from an API.

Two ways to connect: sign in or an API key

The overads MCP server accepts two kinds of credential: a signed-in connection, made by approving the app on an overads screen, or a workspace API key sent in the Authorization header. The sign-in route follows the MCP authorization specification, which builds on OAuth 2.1 and makes authorization optional for MCP servers. overads' public setup document lists Claude, ChatGPT and Claude Code as sign-in clients, and Claude Code, Claude Desktop, Cursor, VS Code, Codex and Windsurf as API key clients.

How each AI app connects to the overads MCP server, as documented on October 8, 2026
AppRoute to overadsWhere you add itWhat the vendor's docs say
Claude (web, desktop, mobile)Sign inA custom connector with the server URLCustom connectors are on Free, Pro, Max, Team and Enterprise; Free is limited to one
ChatGPTSign inA custom MCP server with OAuth, on the webFull MCP with write actions is in beta for Business, Enterprise and Edu; write actions ask for confirmation by default
Claude CodeSign in or API keyOne terminal commandTokens are stored and refreshed automatically; the default scope is the current project
CursorAPI key.cursor/mcp.json or ~/.cursor/mcp.jsonA remote server takes a url and a headers object
CodexAPI key~/.codex/config.tomlA remote server takes url, plus http_headers or bearer_token_env_var

A signed-in connection and a key reach the same tools, filtered by the permissions each one carries. The differences are practical:

  • A signed-in connection never puts a secret in a file. The assistant holds an access token that overads issues for one hour and renews it, and a connection left unused for 90 days ends on its own.
  • A signed-in connection reaches the MCP server only. It cannot call the overads REST API, manage webhooks or manage workspaces.
  • The approval screen is never remembered. Every new connection shows it again, with one checkbox per permission, all ticked to start with.
  • An API key is the route for every other client, for automation tools and for your own code. It sits in the client's settings file until you revoke it.

Connect Claude or ChatGPT by signing in

Claude and ChatGPT connect to overads by adding the server URL as a custom connector and signing in to overads when the app asks. No key is copied or pasted.

In Claude:

  1. Open the connectors settings and choose to add a custom connector. Anthropic's custom connector guide gives the current menu path, which on October 8, 2026 started at Customize, then Connectors.
  2. Name it overads and paste https://api.overads.io/public/v1/mcp as the remote MCP server URL. Leave the OAuth client ID and secret empty.
  3. Add, then connect. Sign in to overads in the window that opens, pick the workspace, untick any permission the assistant should not have, and approve.

Anthropic's guide says a custom connector works across claude.ai, Claude Desktop and the mobile apps, and that the connection originates from Anthropic's servers rather than your own device.

In ChatGPT:

  1. Follow OpenAI's guide to adding a custom MCP server, which on October 8, 2026 started from ChatGPT Plugins, then Add custom MCP server, on ChatGPT for the web.
  2. Enter the same server URL and choose OAuth as the authentication.
  3. Accept OpenAI's risk warning, sign in to overads, pick the workspace and approve.

Creating a post is a write action. OpenAI's help article on developer mode and MCP apps says full MCP support with write actions is rolling out in beta to Business, Enterprise and Edu plans, and that MCP apps are not available on mobile. On a Business plan, the same article says only admins and owners can use developer mode. Check your plan there before relying on ChatGPT to schedule.

Connect Claude Code, Cursor or Codex

Claude Code can connect to overads by signing in or with a key, while Cursor and Codex are documented by overads with a workspace API key. To sign in from Claude Code, add the server and then authenticate from inside a session:

claude mcp add --transport http overads --scope user https://api.overads.io/public/v1/mcp

Then run /mcp, pick overads and choose Authenticate. The overads approval page opens in your browser. Because Claude Code returns the sign-in to a program on your computer, the page shows a caution; approve only a sign-in you started yourself. Anthropic's Claude Code MCP docs say a server added without --scope loads in the current project only, so --scope user makes overads available in every project.

For a key, create one in overads under Settings, on the API keys and MCP page. A key that only needs to schedule text posts needs connections:read, posts:read and posts:write; add media:write if the assistant should upload images or video. In Cursor, the Cursor MCP docs place the server in .cursor/mcp.json for one project or ~/.cursor/mcp.json for all of them:

{
  "mcpServers": {
    "overads": {
      "url": "https://api.overads.io/public/v1/mcp",
      "headers": { "Authorization": "Bearer sk_live_YOUR_KEY" }
    }
  }
}

In Codex, the server goes in ~/.codex/config.toml. The Codex MCP docs also accept bearer_token_env_var, which reads the token from an environment variable so the key stays out of the file:

[mcp_servers.overads]
url = "https://api.overads.io/public/v1/mcp"
bearer_token_env_var = "OVERADS_API_KEY"

overads documents the http_headers form for Codex; the environment variable form is Codex's own option and was not tested for this article. Codex's docs say the ChatGPT desktop app, the Codex CLI and the IDE extension share this configuration.

Drafts, schedules and approvals: what each request becomes

The overads create_post tool turns a request into a draft, a scheduled post or a post held for approval, depending on three fields. The MCP tools reference documents them: content (1 to 10,000 characters), connectionIds (1 to 20 connections) and the optional scheduledAt, requireApproval, variants and platformSettings.

What overads does with a create_post request, from the overads docs and code
The assistant sendsWhat overads does
No scheduledAtSaves a draft. A person, or a later update_post call, sets the time.
A scheduledAt in the futureQueues the post for that time.
A scheduledAt up to 5 minutes in the pastMoves it to now and adds a SCHEDULED_TIME_COERCED warning.
A scheduledAt further in the pastRefuses it with SCHEDULED_TIME_IN_PAST.
requireApproval: trueQueues the post as pending. It does not publish until a member approves it in the app.
Any post, in a workspace that requires approvalThe call succeeds, the post is pending, and the result carries an APPROVAL_REQUIRED warning.

Three habits keep a scheduling session predictable. First, tell the assistant your time zone: scheduledAt is ISO 8601 with a time zone, and the scheduling and approvals guide recommends sending UTC. Second, ask for requireApproval on anything public until the setup has run cleanly for a while. Third, ask for a draft when you only want copy; a draft never publishes.

A prompt that works in any of the apps above: "List my overads connections. Draft a LinkedIn post and a Bluesky post announcing our webinar, schedule both for Tuesday at 09:00 Europe/London, and set requireApproval." The assistant calls list_connections, then create_post with a per-network version in variants. Every write tool also accepts an idempotencyKey, so a retried call with the same key returns the first result instead of creating a second post.

Approval stays with people. There is no MCP tool or API call that approves a post, so a model that is wrong about the copy or the time leaves a pending post, not a published one. The guide to human in the loop AI for marketing covers when to loosen that.

Which channels a post can reach

A post scheduled through the overads MCP server can publish to X, LinkedIn, Bluesky, Mastodon and Pinterest, the five channels live in overads Publish on October 8, 2026. Instagram and Facebook are built and await Meta's approval, and Threads, YouTube and TikTok are in review, so an assistant cannot publish to any of them through overads today.

Each network keeps its own limits, and overads checks them when the post is created or edited, not at the scheduled minute. X counts 280 characters the way X counts them, with every link counted as 23; LinkedIn allows 3,000; Bluesky counts 300 graphemes; Mastodon uses 500 by default or the instance's own limit. The social media character limits table has the full list. To send one message in a different length to each network, use the variants field described in the cross-platform posting guide.

Pinterest needs two extra things: a board, passed as platformSettings.pinterest.boardId, and one image or one video. The Pinterest platform page lists the other optional settings, such as a title and a link.

Troubleshooting a refused post

A refused overads post comes back to the assistant with a code that names the problem, so the fix is usually one change to the request. Channel-limit refusals answer when the post is created, with a sentence naming the cap. The full list is in the overads error catalogue.

Common refusals when scheduling over the overads MCP server
What the assistant seesWhat it meansWhat to change
Unknown tool: create_postThe connection or key lacks posts:write. overads answers the same way for a tool that is out of scope, switched off or missing.Reconnect with Create and publish posts ticked, or use a key with posts:write.
TOO_LONGThe text is over a network's limit.Shorten it, or add a shorter version in variants.
BOARD_REQUIREDA scheduled Pinterest post has no board.Add platformSettings.pinterest.boardId.
MEDIA_REQUIREDThe network needs an image or a video, as Pinterest does.Attach media with mediaUrls or mediaIds.
SCHEDULED_TIME_IN_PASTThe time is more than 5 minutes ago.Send a future time, in UTC or with an offset.
CONNECTION_EXPIREDThe social account's own sign-in has lapsed.Reconnect the account in the overads app.
POST_NOT_EDITABLEThe post is already publishing, published or cancelled.Create a new post instead of editing.
APPROVAL_REQUIREDA warning, not a failure: the post is waiting for a member.Approve it in the overads app.

A connection that suddenly stops working has usually been ended on the overads side. Changing or resetting your overads password, signing out everywhere, leaving the workspace, or an owner pressing Disconnect under Connected apps all end it, and a workspace that moves to the Free plan has its calls refused. Sign in again, or ask an owner or admin to.

Where overads fits

overads fits a team that wants Claude, ChatGPT or a code editor to draft and schedule posts while a person keeps the final say. It is not the right tool for every scheduling job:

  • overads publishes to X, LinkedIn, Bluesky, Mastodon and Pinterest only. For Instagram, Facebook, Threads, YouTube or TikTok today, a scheduler with those channels live fits better.
  • The MCP server needs a Pro or Scale workspace, and ChatGPT's write actions depend on the ChatGPT plan, so a team on free plans on both sides cannot use this route.
  • Sign-in is documented for Claude, ChatGPT and Claude Code only. Cursor, Codex and other clients use an API key.
  • The assistant cannot approve posts. A team that wants fully unattended posting should look at overads Workflows, which start out asking for approval and can be raised to post on their own inside a publishing window and a daily limit.
  • The ad tools on the same server only read. They report on Meta, Google and Snapchat ad accounts and cannot change a campaign.

A team that schedules without an AI assistant does not need MCP at all: the overads composer, or any scheduler, is fewer steps.

Frequently asked questions

Can the assistant approve its own posts?

No. overads has no API call or MCP tool that approves a post. A member approves it in the overads app, and a request to publish a pending post now is refused with APPROVAL_REQUIRED.

Can one connection post for several clients?

A signed-in connection works in the one workspace picked on the approval screen, and an API key belongs to one workspace. For a second client workspace, connect again or create a second key.

Does this work from Perplexity or Gemini?

overads does not list Perplexity or Gemini among its documented clients today. Any app that speaks Streamable HTTP and can send a custom Authorization header can use the API key route.

What does connecting cost?

On the overads side the workspace must be on the Pro or Scale plan; Free workspaces cannot connect by either route. The AI app's own plan is billed by its vendor, and ChatGPT's write actions depend on the ChatGPT plan.

Sources

  1. Authorization (specification 2025-06-18). Model Context Protocol. Accessed Oct 8, 2026.
  2. Connect Claude Code to tools via MCP. Anthropic. Accessed Oct 8, 2026.
  3. Getting started with custom connectors using remote MCP. Anthropic. Accessed Oct 8, 2026.
  4. Developer mode and MCP apps in ChatGPT. OpenAI. Accessed Oct 8, 2026.
  5. Add custom MCP server. OpenAI. Accessed Oct 8, 2026.
  6. Model Context Protocol (Codex). OpenAI. Accessed Oct 8, 2026.
  7. Model Context Protocol (MCP). Cursor. Accessed Oct 8, 2026.
  8. MCP setup document. overads. Accessed Oct 8, 2026.
  9. MCP server. overads. Accessed Oct 8, 2026.
  10. MCP tools. overads. Accessed Oct 8, 2026.
  11. Scheduling and approvals. overads. Accessed Oct 8, 2026.

Drafted with AI assistance, then checked against primary sources and the product itself by the overads team.

Let your assistant draft, and keep a person on send

Connect X, LinkedIn, Bluesky, Mastodon or Pinterest to overads, then sign in from Claude, ChatGPT or Claude Code, or add a workspace API key to Cursor or Codex. Every post can wait for a teammate's approval.

Start free