Prepare a Request
Read the workspace brief, select connected accounts and propose a caption or bounded publishing plan. Your agent supplies the judgment; Postdom supplies the tools.
Bring your agent. Keep control of publishing.
Postdom’s social media MCP server connects your AI agent to your social accounts so it can submit finished videos you supply, schedule them and check each publishing result. You control the review mode and account limits. Start with one account, explicitly choose Post review (L1), and review the first request before expanding the workflow.
You bring the agent and the finished video. Postdom does not generate video, manage an inbox, or promise audience growth.
Read the workspace brief, select connected accounts and propose a caption or bounded publishing plan. Your agent supplies the judgment; Postdom supplies the tools.
Submit your finished video for human review, or act within an already authorized plan or account policy. The agent cannot approve its own work or expand its authority.
Read the post’s status and each destination’s outcome. Fetch available performance evidence without converting a missing value into zero.
This pinned helper workflow fits builders who already have an MCP-compatible agent and a finished video to publish. It does not generate that video or replace an all-network social suite. The wider current source also supports image and carousel workflows; those newer inputs are not demonstrated by this release-specific video guide. Discover the tools on your actual connection before relying on them.
Current Postdom destinations: TikTok, Instagram Reels, YouTube Shorts, LinkedIn, Facebook Reels, X, Snapchat Stories, Threads and Bluesky. Check the format, audience and disclosure limits of the connection you choose; the released convenience tool does not expose every option of the HTTP API.
Keep the brief, publishing request and follow-up in your agent’s task, while a person controls what it may send. A useful first test is a finished launch video for one connected account: ask the agent to prepare the request, review it in Postdom, then ask what actually happened. A returned post ID makes that last question answerable without asking the agent to guess.
MCP is the tool connection, not the content strategy. Use this page for publishing through your existing agent. Use the scheduling API if you need explicit request fields in your own application, or the agency workflow for separate client workspaces.

Willow Studio and the gray test video are fictional fixture data. This screenshot demonstrates the review interface; no approval or social publication was completed.
Postdom’s permanent Free plan includes one connected account and 10 successful destination-publishes per month. New workspaces start with a 14-day complimentary Growth trial without a card; without a paid subscription or another qualifying entitlement, the workspace falls back to Free after the trial.
Paid self-serve plans start at $49 per workspace per month with monthly billing. Their publishing overage is $0.20 per successful destination-publish above the plan allowance; Free stops at its cap. One video successfully published to three destinations uses three units. Your external AI agent or model provider may charge separately. Your own agent does not spend Postdom Chat’s AI-action allowance.

Choose the connection your client supports. A local stdio server runs on your computer; a remote HTTP connector runs against a hosted endpoint. An operating prompt does not create either connection.
Choose your path: Claude Code, Codex CLI and Cursor can launch a local MCP server. ChatGPT needs a supported remote connection; its project instructions cannot run the local command. Claude Desktop has separate local configuration, while claude.ai uses a remote connector. Client eligibility and authentication must be checked in that client.
| Connection | Address or Command | What to Check |
|---|---|---|
| Local stdio | npx -y @postdom/mcp@0.4.0 | Node.js 22+, private workspace key and a client that launches local servers. The release-specific example below uses this path. |
| Remote HTTP | https://api.postdom.com/mcp | Streamable HTTP client; workspace Bearer key or supported OAuth flow. Current implementation supports these methods; a completed authenticated connector flow was not tested for this guide. |
Do not use /mcp as POSTDOM_API_URL: the local helper’s REST base is https://api.postdom.com/v1. For a remote connection, use your client’s supported connector setup and inspect its actual tool list. Do not paste a key into chat or assume that an OAuth prompt proves the connection completed.
Create your Postdom workspace. Open Social accounts to authorize the account you own or manage, then open Agents to configure your agent connection. For the local package, have an owner or admin choose Advanced: Use a workspace key → Create agent key under Connect → Agents. Keep the key in private client settings or a protected environment. Never put it in chat, an operating brief or a repository.
The local package is @postdom/mcp@0.4.0 and requires Node.js 22 or newer. A client that can launch a local stdio MCP server runs the command below. Its settings format varies by client: follow the dedicated Claude Code, Codex or Cursor setup guide.
{
"mcpServers": {
"postdom": {
"command": "npx",
"args": [
"-y",
"@postdom/mcp@0.4.0"
],
"env": {
"POSTDOM_API_KEY": "REPLACE_IN_PRIVATE_CLIENT_SETTINGS"
}
}
}
}The package defaults to https://api.postdom.com/v1. The example omits an API URL override. Check your client’s connection status and confirm the expected 14 tools for this pinned release before asking it to act. The current source contract has 15; do not mistake that for the inventory of the older published package.
Claude Code’s MCP setup reference explains its local-server settings. This is setup guidance, not a claim that we tested your editor, account authorization or a live publish.
AGENTS.md, CLAUDE.md and Cursor’s .cursor/rules/postdom.mdc describe how the agent should work. They are not the MCP connection settings. Add the brief below only after the connection works. ChatGPT project instructions alone cannot launch this local server; Postdom and ChatGPT covers what the brief does there and what it does not.
The linked Codex and Cursor guides distinguish the pinned release from current source. Their client-specific configuration is a separate reference, not evidence of authenticated access or a completed provider publication.
Checked 21 September 2026: @postdom/mcp@0.4.0 exposed 14 tools in a real local stdio discovery test. The current source contract also contains list_posts; this pinned release does not. Use get_publish with a known post ID rather than asking this package to list the queue.
Read readiness, brand guidance, weekly evidence and learning before proposing a post.
get_workspace_statusget_briefget_digestget_learningFind connected accounts or hand social authorization back to a human.
list_accountsconnect_accountReserve an upload and check whether the supplied file is stored.
upload_mediaget_mediaRequest a post or bounded plan, then read its state; submission is not approval or publication.
publish_videosubmit_planget_planget_publishInspect available results and compare posts without inventing missing metrics.
get_performanceget_best_postsAn integrity-verified copy of the published package was initialized through MCP, and its actual tool list was read. Its upload request advertised and serialized content_type, size_bytes, platforms, width_pixels, height_pixels, duration_seconds to a synthetic loopback fixture.
No real workspace, OAuth login, provider upload or authenticated publication was performed in that check. Tool discovery proves availability in that package, not provider acceptance or compatibility with every MCP client. Verify your own client’s discovered tools after connecting.
For the evolving current contract and its separate transport status, use the availability reference. Do not assume local package, source and hosted endpoint versions are interchangeable.
Use a YouTube account for this example. A human explicitly selects L1 Post review before the agent submits anything. Do not assume that L1 is the account default. Confirm the account’s current policy and the exact caption, media and audience together.
Use only the Postdom connection I configured. Do not print credentials.
Read get_workspace_status, list_accounts and get_brief first. Stop if the workspace is paused, connections are locked, the account is disconnected, or policy is unclear.
I will explicitly set the selected account to L1 Post review before this request. Confirm the returned policy; do not assume a new account starts in L1.
Use only my selected providerAccountId and the finished video I supply. Show me the caption, account and all MCP defaults before submitting. Do not generate or upload a replacement video.
YouTube sends visibility: private, madeForKids: false and containsSyntheticMedia: true; its title comes from the caption's first line. TikTok sends privacy_level: SELF_ONLY, video_made_with_ai: true, content_preview_confirmed: true, express_consent_given: true, and allow_comment, allow_duet and allow_stitch: false. Instagram sends contentType: reel and isAiGenerated: true, with no equivalent private default. LinkedIn is sent no settings at all: the Posts API requires a visibility value, so the publishing provider chooses one on the account's behalf, and Postdom neither chooses nor reads it. LinkedIn exposes no AI-disclosure field, so no disclosure is sent for it. Facebook is sent contentType: reel and nothing else, and exposes no AI-disclosure field on this path. X, Snapchat and Threads are sent no settings at all and expose no AI-disclosure field either; Snapchat additionally requires a Public Profile on the account before it can publish, Threads takes its audience from whether the profile is public or private rather than from anything sent with the post, and Bluesky posts are public because the post record has no visibility field at all.
These are submitted assertions, not evidence that human preview or consent happened. Require my actual preview of the supplied video and express consent before a TikTok request. Ask me to confirm that the audience and AI-disclosure settings truthfully fit this video for every selected destination. Stop if confirmation is absent or a setting is incompatible; the tool exposes no overrides for these settings. Do not infer consent from permission to call a tool.
After I authorize submission, call publish_video once with those exact inputs and a stable idempotency_key. Submission is not my approval to publish.
If the result requires approval, return its post ID and stop for human review. Never approve it yourself or change policy.
After human approval, use get_publish to check the same post ID. Use bounded backoff, and hand me the ID if my agreed waiting budget expires. Report each destination’s result; never call partial success complete.
Read get_performance only when appropriate. Preserve missing snapshots, null values and availability reasons. Do not resubmit or widen the audience without fresh human direction.get_workspace_status({})
list_accounts({})
get_brief({})Stop if connections are locked, the workspace is paused or the chosen account is not connected. If authorization is needed, connect_account can start a handoff, but a human completes the social login. Do not claim success until the account appears in list_accounts.
{
"id": "internal-example-id",
"providerAccountId": "example-youtube-account",
"platform": "youtube",
"handle": "example-channel",
"status": "connected"
}Use providerAccountId in account_ids, not the separate internal id. Keep the returned brief and follow its brand guidance. Ask the human before changing the selected account or supplied video.
Check before copying: this YouTube example uses private visibility, not-made-for-kids and synthetic-media declarations with no helper overrides. A human must confirm those defaults truthfully fit the video. For TikTok, actual human preview and express consent are required; the tool’s fixed flags do not establish either. Stop if confirmation is missing or any default conflicts. Post approval and tool-call permission are separate from consent.
publish_video({
"account_ids": [
"example-youtube-account"
],
"video_url": "https://media.example.test/approved-demo.mp4",
"caption": "A closer look at the demo\nThe finished walkthrough, reviewed by our team.",
"intent": "Request human review of this supplied demo for the selected YouTube account",
"idempotency_key": "demo-review-request-001"
})The example URL is a placeholder, not a working video. For a stored handle, replace video_url with media_handle; supply exactly one. Omitted publish_at means this example does not request a future slot. For scheduling, agree the time with the human and supply its UTC timestamp; approval must still happen in time.
{
"id": "11111111-1111-4111-8111-111111111111",
"status": "requires_approval",
"message": "No provider request was made. Approve this exact immutable request."
}Keep the returned post ID and hand it to the human. requires_approval means the request needs review; it is not a published video. The human reviews the exact immutable post through Postdom’s human approval workflow. Granting an agent permission to call a tool is not the same as approving the post.
get_publish({ "post_id": "11111111-1111-4111-8111-111111111111" })
// Once publication has an outcome:
get_performance({ "post_id": "11111111-1111-4111-8111-111111111111" })Agree a waiting budget and use bounded backoff for status reads. Return the ID and current state if that budget ends. A stable idempotency_key identifies the original request; do not replace it to work around a pending response or reuse it for changed content. After an uncertain response, reconcile the original request before creating another.
Verification scope: the released package’s local stdio startup, tool discovery and one upload_media reservation call were exercised against a local fixture API. The publishing example is separately checked against the current source client with mocked responses, not a publish call through the released package. No real workspace, OAuth login, provider upload or authenticated publication was performed. Responses here are illustrative excerpts, not real analytics or publication evidence.
Read get_publish for post status. Check individual destination results too: a mixed outcome needs a different response from complete success.
| Post status | Next action |
|---|---|
draft | A human must choose whether and when to publish the draft. |
requires_approval | Return the post ID. A human must review the exact post before it can proceed. |
changes_requested | Read the feedback and return to the human; do not treat an edit as approval. |
rejected | Stop. Do not submit the rejected work under a new ID. |
missed_approval | The approval deadline passed. Ask the human to choose a new time or publish now explicitly. |
missed_schedule | The scheduled slot was missed. Ask the human how to recover; do not silently backfill. |
scheduled | Check get_publish later with bounded backoff. Scheduled does not mean published. |
publishing | Check the same post again within the agreed waiting budget; do not create a duplicate. |
published | Inspect each destination result, then read get_performance. Publication does not guarantee metrics are ready. |
partial | Some destinations succeeded. Report every result and ask the human about recovery; do not replay successful destinations. |
failed | Preserve the error and post ID. Ask the human to resolve the cause before another attempt. |
blocked | Stopped by policy before submission. Preserve the reason; a fresh request and authorization are required, not an automatic retry. |
unknown | The provider may have received this run. Preserve its ID and evidence; do not retry while its outcome is being reconciled. |
Performance is a separate read. An empty snapshot list is not zero views. Preserve null, the metric’s availability state and any reason. An estimable metric may still be null; a delayed state does not promise that a value will arrive. Use the destination metric availability reference before comparing accounts.
A plan is authorization for bounded work, not evidence that its posts published. Under L2, propose it with submit_plan, including the agreed accounts, time window, post allowance, objective and returned brief_version. Read get_plan; only approved lets the agent proceed within that plan’s remaining bounds. Attach its plan_id to the subsequent publish request.
requires_approval: Wait for human plan approval.approved: Use only its authorized accounts, time window and post allowance; check policy again.changes_requested: Return the requested changes to the human.rejected: Stop this plan.expired: Stop; its authorization window has ended.cancelled: Stop; its authorization was withdrawn.The human does. Workspace credentials do not let an agent approve work, create keys, change account policy, or resolve a human-only exception.
The agent creates a draft. A human chooses whether and when it publishes.
Each agent post waits for exact human approval before provider handoff.
Posts flow only inside one approved plan covering the accounts, UTC window, and post maximum.
Posts flow only inside the account's saved daily cap, visibility allowlist, and quiet hours.
The human can pause agent activity, revoke its key or change the account’s authority. Keep the first run on a deliberately chosen review setting; a prompt asking for caution is not a substitute for saved policy.
A social media MCP server exposes publishing and account operations as tools an AI client can call. Postdom’s connection lets your external agent read workspace context, submit supplied videos under human-controlled authority and inspect outcomes. A prompt by itself does not connect those tools.
This MCP workflow uses your existing external agent and finished video. Postdom also has its own Chat interface; the two paths are distinct. Postdom supplies publishing and outcome tools for TikTok, Instagram Reels, YouTube Shorts, LinkedIn, Facebook Reels, X, Snapchat Stories, Threads and Bluesky; it does not generate the video.
@postdom/mcp@0.4.0 exposed 14 tools in our 21 September 2026 local stdio check. It does not include list_posts, which exists in the newer source contract. This is release-specific evidence, not an authenticated hosted-service or client compatibility test.
Postdom has a permanent Free plan with one connected account and 10 successful destination-publishes per month, blocked at the cap. New workspaces start with a 14-day complimentary Growth trial without a card and fall back to Free unless a paid subscription or another qualifying entitlement applies. Your external agent provider may charge separately.
Only within the authority a human configures. L1 requires review of each post; L2 uses a human-approved bounded plan; L3 permits publishing within saved account policy. L0 keeps publication manual. An agent cannot grant itself approval or change these settings.
The released MCP tool sets YouTube to private with madeForKids: false and containsSyntheticMedia: true. TikTok uses privacy_level: SELF_ONLY and video_made_with_ai: true; allow_comment, allow_duet and allow_stitch are false. It also sends content_preview_confirmed: true and express_consent_given: true. Those flags assert preview and consent; they do not prove either happened. Require actual human preview and express consent before a TikTok request. Instagram uses contentType: reel and isAiGenerated: true, with no equivalent private default. LinkedIn receives no settings: the publishing provider chooses its required visibility value, which Postdom neither chooses nor reads, and it exposes no AI-disclosure field, so none is sent. A human must confirm the audience and AI-disclosure settings fit the supplied video. Stop without confirmation or if a setting is incompatible: the tool exposes no overrides. Permission to call a tool is not consent or post approval, and an accepted request does not prove publication.
No. Instructions do not create a tool connection. ChatGPT project instructions can hold an operating brief, but live calls require a supported remote MCP connection. The local npx example is for clients that can launch a stdio MCP server, not ChatGPT project instructions.
Prepare the finished video, choose the account and set its review policy. Then configure the connection and adapt the first-run brief above.
Implementation sources: released MCP package, released MCP code: arguments and destination defaults, run outcomes. Use the pinned version above; package README examples can lag the release. Local protocol evidence and current service capabilities are identified separately on this page.