Blog

How to schedule LinkedIn, X and YouTube posts from Claude

Let Claude write the Drafts, keep scheduling a separate step you ask for, and confirm every delete in your browser.

You want to type "post my new video to LinkedIn and X tomorrow at 9" into Claude and have it happen. Claude can do that once you connect a scheduler to it as an MCP server: the server gives Claude tools, and Claude calls them for you. What matters is what each tool is allowed to do. In the MCP server we run, an agent creates Drafts, schedules only as a separate call when you ask for it, and cannot delete anything until you click a button in your own browser.

Connecting Claude

A remote MCP server is a URL. In Claude you add it under Settings, Connectors, as a custom connector, and sign in through OAuth in the window that opens. Claude never sees a password or an API key: it gets a token for one account, which you can revoke. ChatGPT, Cursor and Claude Code connect to the same URL with their own steps, and those steps change as the clients change, so we keep them current on our agents page rather than here.

Once connected, Claude reads the server's instructions and its list of tools. The rest of this Article is about how those tools are cut.

One tool that publishes

The shortest design is a single tool: caption, files, Channels, time, done. Claude calls it and the post is queued.

Its cost is that the only check between Claude and your audience is the client's approval prompt. Every major client offers "always allow" on that prompt, and the MCP specification tells clients to treat a tool's destructiveHint as untrusted. After one click on "always allow", a misread request goes out to LinkedIn, X and YouTube with nobody looking at it.

A Draft first, then a schedule call

We split the job. create_post only ever makes a Draft, and its description tells the agent so:

'create_post',
{
  title: 'Create Draft',
  description:
    "Creates a Draft Post, marked as created by this Agent, for the Creator to review on the site. It is never scheduled or published. ...",

Scheduling is its own tool, schedule_post, and the server's instructions, which every agent reads when it connects, say when to use it:

Posts are created as Drafts, which the Creator reviews on the site; nothing is sent until a Post is scheduled, which is a separate, deliberate step. Schedule only when the Creator asks for it.

So "draft a post about the launch" leaves a Draft you can open, edit and reorder before anything happens. "Schedule it for tomorrow at 9" is a second call, and the client asks you about that call on its own.

The schedule call runs the same checks as the web app. It refuses, with the reason, a Post with blocking Violations, a Paused Channel, or a day where your X fair use or YouTube upload quota is full. Its reply names the Channels, the local time and the time zone, and the instructions tell the agent to relay that sentence to you, so you read back what was scheduled in plain words.

The cost is an extra turn in the conversation. Be clear about where the line is held, too: the split between drafting and scheduling is enforced by the tools and the agent's instructions, and the client's approval prompt is still what stops an agent that schedules without being asked. The split makes that mistake a visible, separate call instead of a side effect of drafting.

Times in your time zone

A time an agent passes is a local wall-clock time plus an IANA zone, never a UTC offset it worked out itself:

at: scheduleLocalRequestSchema.shape.at.describe(
  'When to publish, as the local date and time YYYY-MM-DDTHH:MM in timeZone with no offset, or now to publish at once.',
),

"Tomorrow at 9" becomes 2026-10-29T09:00 in Europe/Copenhagen, and the server does the conversion, including daylight saving changes. When the agent is unsure of your zone, the instructions tell it to ask you.

Deletes are confirmed in your browser

Deleting is where an approval prompt is weakest, because a deleted Campaign takes every Draft and Scheduled Post in it, and nothing brings them back. Our delete tools do not delete. They create a Delete request:

const ASKS = `Nothing is deleted yet: this creates a delete request, which the Creator confirms or cancels on Postflare.ai within ${LIFETIME}. Give the Creator the url and the summary, then read the outcome with get_delete_request.`

The request lives 10 minutes and answers a link. The link opens a page that needs your browser session, lists what would go, and deletes only when you click. The API refuses a direct delete from every agent. We rejected two alternatives: trusting the client's approval prompt, which "always allow" skips, and asking for a typed confirmation, which the server cannot prove a person gave. The cost is that deleting through an agent always needs a browser at hand.

From a script

The same rules apply in a terminal. The CLI installs from npm, signs in with a code you approve in the browser, and every command takes --json, so a script or an agent that runs commands can parse the result:

npm install --global postflareai
postflare login

Creating a Draft and scheduling it are two commands, as they are two tools:

post [--caption <text>] [--channel <id>]... [--time-zone <zone>] [--plan <YYYY-MM-DDTHH:MM>] [--campaign <id|name>] [--file <path>] [--json]
schedule <post-id> <YYYY-MM-DDTHH:MM|now> [--time-zone <zone>] [--version <version>] [--json]

A release script can create the Draft with post --json, read the id from the output, and stop there for you to review, or call schedule right away.

When one publishing tool is the better choice

If nobody reviews the posts anyway, for example a pipeline that announces every release from CI, the Draft step protects nothing and costs a call. A single publish tool is simpler there. The two-step design still covers that case, since a script can call schedule with now straight after post, but it is the case where the split earns the least.

Postflare.ai

Postflare.ai runs this MCP server and CLI for posting one video, image or text post to YouTube, LinkedIn and X at the same time. Agents can do everything about posting that you can do in the web app, with the same limits, and they are included in every plan. Connect Claude, ChatGPT, Cursor or the CLI, or see the plans.