Configured tool · write
publish_video
Submit finished media for immediate or UTC-scheduled execution using the current-source publish_video contract.
Human and agent roles
Configured boundary
Configured workspace
Current-source reference, not a verified release or hosted contract. The pinned @postdom/mcp@0.4.0 release is unchanged: inspect your connected tools before copying surface, title or description. The corrected source adapter forwards ordered media in synthetic contract tests; this is not proof of a published npm release, hosted deployment or provider publication. Do not attempt MCP carousels until the connected implementation is verified to include the adapter fix and support the intended destinations. Approval depends on account policy and eligible plan authorization. This call cannot approve itself, expand trust, or establish human consent. It is marked destructive because permitted requests can cause irreversible external publication.
This page documents current source and known adapter limits. For local setup, an owner, admin or member creates a workspace key in Connect → Agents → Advanced: Use a workspace key. A key or discovered schema does not verify publication.
Callable schema
Input fields
Field names match the configured tool schema. Runtime-only constraints are labeled separately from schema validation.
account_idsRequiredstring[]Exact connected destination identifiers returned by list_accounts.
video_urlOptionalURLFinished video already available at an accepted URL; not an image URL.
media_handleOptionalpd_media_…Postdom-owned video or image verified through get_media.
mediaOptionalobject[]Ordered items, each with exactly one media_url or media_handle. The corrected source adapter validates and forwards this list without sorting it. Synthetic tests are not release or provider-publication evidence; verify the connected implementation before use.
captionRequiredstringCaption passed to each destination adapter.
intentRequiredstringThe calling agent's reason for this execution.
agent_identityOptionalstringCaller identity when the configured client does not supply one.
surfaceOptionalRecord<string, string>For example instagram: reel or story for video, feed for images/carousels; facebook: reel, feed or story; youtube: short or long_form. Omit for the media-dependent default.
titleOptionalstringYouTube-only title override.
descriptionOptionalstringYouTube-only description.
publish_atOptionaldatetimeExact execution time. Omit it for an unscheduled request.
plan_idOptionalUUIDApproved plan proposed as the authorization boundary.
idempotency_keyOptionalstringCaller-supplied replay key. The adapter generates a UUID when omitted.
Synthetic values
Example call
Identifiers and values are examples. They do not represent a connected workspace or accepted media source.
publish_video({
account_ids: ["acct_example_ig", "acct_example_yt"],
video_url: "https://media.example.invalid/launch.mp4",
caption: "Three moves that changed our launch",
intent: "Execute the approved launch schedule",
publish_at: "2026-09-03T09:00:00Z",
plan_id: "11111111-1111-4111-8111-111111111111"
})Configured behavior
Current-source surfaces and adapter defaults
The surface map selects supported destinations; it is not an arbitrary platform-settings object. Omit surface and the media determines the default. Account capabilities and media validation still apply. Fixed consent or disclosure flags do not prove a human preview or express consent: review the actual media, audience and disclosures, and stop if the defaults do not fit.
Private review
The video adapter sets SELF_ONLY, disables comments, duet and stitch, and sends fixed consent and AI-made flags. Those flags do not establish the human's express consent or the truth of the disclosure.
Reel, Story or image feed
Video supports reel or story; feed is for images and carousels. A single video explicitly targeted to feed is refused. The video default is a Reel with AI disclosure and no Instagram visibility field.
Short or long-form video
surface.youtube accepts short or long_form. The video adapter uses private visibility, not made for kids and synthetic-media disclosure. Optional title overrides the caption-derived title; description is YouTube-only metadata. These settings still need human review.
No settings sent
The adapter sends no LinkedIn settings at all. The Posts API requires a visibility value, so LinkedIn sets one on the account's behalf; Postdom neither chooses nor reads it. There is no AI-disclosure field on this destination, so none is sent.
Reel, feed or Story
surface.facebook accepts reel, feed or story, subject to media validation. The video default is a Reel; the current-source surface input can override it. The adapter sends no Facebook AI-disclosure field.
No settings sent
The adapter sends no X settings at all. X exposes no visibility field on the publishing path and no AI-disclosure field, so nothing is chosen on the account's behalf and nothing is disclosed.
Public Profile required
The current destination catalog supports story, not Spotlight. A Public Profile is required; connecting an ordinary personal account is not sufficient.
No settings sent
The adapter sends no Threads settings. Meta's posting endpoint exposes no visibility field and no AI-disclosure field, so nothing is chosen on the account's behalf and no disclosure accompanies the post. A Threads profile is public or private and the post inherits that from the account, so the audience control exists one level up rather than not at all.
No settings sent
The adapter sends no Bluesky settings, and here that means there is nothing to send: an app.bsky.feed.post carries no visibility field, so every post is public. Reply gating lives in separate threadgate and postgate records rather than in the post, and Postdom writes neither. Connecting uses an app password rather than an authorisation redirect.
Observed API record
Return shape
Returns the initial post response. Its fields vary with draft, approval, scheduled, or publishing state.
id · statusidentity · post state- Created post identifier and exact current state.
scheduled_fordatetime | null- Resolved schedule. Null does not imply an exact execution time.
plan_idUUID | null | optional- Present on scheduled, publishing, and approval responses. Draft responses omit it.
plan_authorizationobject | null | optional- Present on scheduled, publishing, and approval responses. Draft responses omit it.
version · request_hashreview metadata- Returned on human-review and draft paths.
approval_schemestring | optional- Present on approval responses and identifies the immutable-request approval scheme.
messagestring- Human handoff detail on draft or approval paths.
Stop conditions
Agent handoff
draftHand to a human
A human can publish now or schedule the draft.
requires_approvalWait for review
No provider request has been made at this state.
scheduled · publishingRead the post
Use get_publish to follow the post and destination states.
not_appliedPreserve the reason
Return the exact authorization reason without widening the request.