Tutorials

Draft and Schedule Threads With an OpenAI dots Plugin for X Posting

Taras Shynkarenko
Taras Shynkarenko
•Updated: •7 min read
How to use an OpenAI dots plugin for X postingHow to use an OpenAI dots plugin for X posting

TL;DR, Quick Answer

7 min read

OpenAI names no X plugin for dots, so the route is the AdaptlyPost MCP server added in ChatGPT developer mode. The X field is twitterConnectionIds with platform TWITTER, a thread is a bulk call of timed posts, and a lapsed X connection fails on the day. On ChatGPT Pro the dot reads only, which still makes it a good morning watchman for failed X posts.

Drafting the thread is the easy part of an OpenAI dots plugin for X posting. What goes wrong is narrower: one field name the dot guesses from the brand, a thread that has no native object in the API, and an X connection that lapses between booking and publishing. Dots launched on 29 September 2026, and this guide covers the X half of the setup.

The short version: add the AdaptlyPost MCP server to ChatGPT using the pillar setup, then tell your dot that X is TWITTER with twitterConnectionIds, that a thread is a spaced set of posts, and that every X post starts as a draft for your approval.

How does a dot post to X?

A dot posts to X through a plugin, and as of 29 September 2026 OpenAI names no X plugin in its dots material, so the working route is AdaptlyPost's MCP server added in developer mode. The integrations OpenAI does name in its dots examples are Gmail, Google Drive, GitHub, Slack and DoorDash.

A dot also has its own Chrome browser and can sign in to x.com. OpenAI's secure sign-in pauses the model while you log in, and "your dot's context does not retain credentials". The browser route still gives you no schedule, no per-platform error and no retry, and it breaks the week X moves a button. The full setup, OAuth sign-in and Custom Rules sit in the pillar guide.

Can a dot on ChatGPT Pro post to X?

A dot on ChatGPT Pro cannot schedule or publish X posts through a custom MCP server, according to OpenAI's August 2026 help article, which limits Pro to "read/fetch permissions in developer mode." Full MCP goes to Business and Enterprise workspaces, and dots reach Business customers on Business Premium.

Pro still has an X job. Reads work, so a Pro dot checks your X connection status, lists what is queued for today and reports yesterday's failures. OpenAI has not documented how ChatGPT classifies each MCP tool, so run the pillar's read-only test and then one draft request to see where your account stands.

Which field does the dot send for X?

The dot sends twitterConnectionIds with the platform value TWITTER, because the AdaptlyPost spec kept the field name from before the rebrand. The spec re-fetched on 29 September 2026 still defines twitterConnectionIds and no xConnectionIds. The Grok bot template post explains why the name stayed.

An MCP client reads the create_post tool schema, which lists the real field, so a dot starts better placed than an agent reasoning from the brand name. Pin it anyway. The handle comes from list_accounts, which returns each connection's platform, username and status.

What the dot must send for X
What a model guesses
  • xConnectionIds
  • platforms: [X]
  • Neither exists in the spec, so X is never targeted
What the spec defines
  • twitterConnectionIds
  • platforms: [TWITTER]
  • The post lands on the timeline
The right column matches the AdaptlyPost spec as fetched on 29 September 2026.

Put these rules in each task you give the dot rather than trusting it to remember them. OpenAI says a dot forms its own memories, and you cannot view or edit individual dot memories. A rule you can't read is a rule you can't fix.

Rules for X through the AdaptlyPost plugin:
- X is platform TWITTER. Send the connection ID in twitterConnectionIds.
- Call list_accounts first and read the X username back to me.
- Create single X posts with saveAsDraft: true. I publish drafts myself.
- A thread is one bulk_schedule_posts call, one post per part, two minutes
  apart. Bulk posts cannot be drafts, so show me every part and wait for
  my yes before you call it.
- After anything publishes, call list_post_results and give me the postUrl.

A paper wall calendar with dates marked, illustrating a thread booked as a series of posts spaced over time.

Can a dot schedule an X thread?

A dot schedules an X thread as a sequence of timed posts through bulk_schedule_posts, spaced by scheduledAt. AdaptlyPost has no thread object, so nothing chains the parts as replies. Tell the dot that before it promises a reply chain.

The bulk call takes 1 to 100 posts. platforms, timezone and twitterConnectionIds sit once at the top, and each entry in posts carries its own contentType, text and scheduledAt.

{
  "platforms": ["TWITTER"],
  "twitterConnectionIds": ["<id from list_accounts>"],
  "timezone": "Europe/Kyiv",
  "posts": [
    { "contentType": "TEXT", "text": "1/ ...", "scheduledAt": "2026-10-01T09:00:00" },
    { "contentType": "TEXT", "text": "2/ ...", "scheduledAt": "2026-10-01T09:02:00" },
    { "contentType": "TEXT", "text": "3/ ...", "scheduledAt": "2026-10-01T09:04:00" }
  ]
}

Bulk scheduling books posts rather than drafting them, so it is the moment Custom Rules matter most. Keep AdaptlyPost on "Ask before taking action" and the dot shows you the whole thread before the call goes out. That matches OpenAI's own launch example, a dot that "drafts social posts for your approval".

A thread that needs changing after booking comes off the calendar part by part. unschedule_post turns a scheduled post back into an undated draft, and update_post edits the text or time of a scheduled or draft post. Both are writes, so on ChatGPT Pro you make the change in AdaptlyPost and let the dot confirm it with list_posts.

The approval path for an X thread
Dot drafts the parts
You read every part
You say yes
bulk_schedule_posts books them
Posts go out two minutes apart
Bulk posts cannot be drafts, so your yes is the only gate before booking.

How do X, Bluesky and Mastodon share one request?

X, Bluesky and Mastodon share a request by adding one connection ID array each, because the spec defines no config block for any of the three. X takes twitterConnectionIds, Bluesky blueskyConnectionIds and Mastodon mastodonConnectionIds.

AdaptlyPost
AdaptlyPost

Start 7-Day FREE Trial

All-platform analytics

Social Inbox

AI-powered assistant

Use platformTexts to give each network its own version of the text rather than one string clipped to the tightest limit. The spec sets no maximum length on text, so an X Premium account gets its long post and X applies whatever limit the account carries. mediaAltTexts goes to X, Bluesky and Mastodon in the same order as mediaUrls, so ask the dot to write alt text for every image. That is one post across networks from one sentence.

A person working at a laptop on a desk, standing in for the morning check of X connections and failed posts.

What breaks on X with a dot?

An X connection that lapses after you booked a post breaks it on the day, not at booking time. AdaptlyPost marks the account unauthorized when X rejects the stored token, and posts to it are refused with a 400 until you reconnect it in the dashboard. The REST API fires an account.unauthorized webhook, and as of 29 September 2026 OpenAI has not documented a dot receiving it.

A dot recurring task covers the gap with reads alone, so it runs on ChatGPT Pro:

Every weekday at 8am: call list_accounts and tell me if any X account is
unauthorized. Then list today's scheduled X posts and yesterday's failed
ones with the error from list_post_results. Change nothing.

Two more X failures are worth naming. Video goes up before the post, and X itself takes video through an initialize, append and finalize sequence that runs longer than an image. AdaptlyPost counts rate limits per key and returns Retry-After on a 429, and the MCP server tells the agent to wait for it rather than loop.

Frequently Asked Questions

Can a dot post to X without AdaptlyPost?

A dot can sign in to x.com in its own browser, and OpenAI's secure sign-in keeps the password out of the dot's context. That route has no schedule, no per-platform result and no retry. For anything timed, a plugin against a published API is the better trade.

Does the dot post to X without asking me?

A dot set to "Ask before taking action" for AdaptlyPost asks first. OpenAI says dots seek authorization before sending a message, and drafting "doesn't give it permission to send", but it does not say whether an X post counts. Drafting with saveAsDraft: true adds a second gate in AdaptlyPost.

Can the dot read my X mentions or replies?

The AdaptlyPost plugin does not read X mentions or replies. It publishes, schedules and reports per-platform results, and the spec defines no endpoint for a mentions timeline. Social listening needs a separate tool.

How many X posts can one call schedule?

bulk_schedule_posts takes 1 to 100 posts in one call. Each post carries its own scheduledAt, so a 100-part queue spaced across a week is still one request. X's own posting limits apply after that.

Which X account does the dot post as?

The dot posts as the connection whose ID it puts in twitterConnectionIds, not as whoever signed in to the plugin. Make it call list_accounts and read the X username back before the first post. Posting as the wrong handle is the X mistake that is hardest to walk back.

How is this different from the Muse and Grok routes?

Meta's Muse builds a custom connector from the OpenAPI spec, covered in the Meta Muse connector guide for X. A Grok bot installs from a share link with the API knowledge already inside. A dot calls the hosted MCP server, so it reads the tool list itself and signs in with OAuth.

Does AdaptlyPost chain X thread parts as replies?

AdaptlyPost has no thread object, so nothing chains the parts as replies. A dot books each part as its own timed post through bulk_schedule_posts, spaced by scheduledAt. Tell the dot this before it promises a reply chain.

What happens if my X connection expires before a scheduled post?

AdaptlyPost marks the account unauthorized when X rejects the stored token, and posts to it are refused with a 400 until you reconnect it in the dashboard. The REST API fires an account.unauthorized webhook, but OpenAI has not documented a dot receiving it. A weekday morning task that calls list_accounts catches the lapse.

Can I edit an X thread after the dot schedules it?

You can edit it part by part. unschedule_post turns a scheduled post back into an undated draft, and update_post changes the text or time. Both are writes, so on ChatGPT Pro you make the change in AdaptlyPost and let the dot confirm it with list_posts.

Can one dot request post to X and Bluesky together?

A dot can post to both in one request by adding blueskyConnectionIds next to twitterConnectionIds. Use platformTexts to give each network its own version of the text instead of one string clipped to the tightest limit.

AdaptlyPost
AdaptlyPost

Start 7-Day FREE Trial

All-platform analytics

Social Inbox

AI-powered assistant

Start a 7-day AdaptlyPost trial, connect X, and follow the dots setup guide. API access is included on Creator at $19 a month, Pro at $39 and Enterprise at $89, and the X post scheduler covers the same queue without an agent.

Sources: OpenAI's dots launch post, dots safety post, getting started help, dots user docs, the MCP help article (updated August 2026), AdaptlyPost's agent setup docs and the AdaptlyPost OpenAPI spec. Checked 29 September 2026.

Was This Article Helpful?

Let us know what you think!

See us more often in Google

One click marks AdaptlyPost as a preferred source, so our articles sit higher in your Top Stories, AI Mode, and AI Overviews.

Before you go...

AdaptlyPost

AdaptlyPost

Schedule your content across all platforms

Manage all your social media accounts in one place with AdaptlyPost.

All-platform analytics

Social Inbox

AI-powered assistant

Related Articles