Connect your accounts once. Everything after that is one composer, one queue, one place to look when something breaks.
OAuth into every network once. Tokens refresh themselves in the background.
Workspaces keep each brand's channels, drafts and queue cleanly separated.
Write it once, then tune per-platform copy, crops and hashtags without retyping.
Publish immediately or drop it in a recurring slot. Retries are automatic.
Every post is verified live and links back. Failures alert you instead of going silent.
PostWharf ships a CLI, a REST API and an MCP server. Point Claude at your workspace and it can draft, schedule and publish without you opening a tab.
However you trigger a post — terminal, script, agent or dashboard — it lands in the same queue with the same delivery guarantees.
One key per workspace. Upload media, create posts, target any set of channels, read back the live URL.
POST /v1/posts { "text": "…", "channels": ["x_kevin","li_rm"] }
Drops straight into Claude Code. Your agent sees your channels as tools and posts with your approval.
claude mcp add wharf -- wharf mcp
Pipe a caption from anywhere. Good for cron, good for a Studio export hook, good for muscle memory.
wharf post --all-brands \ --media clip.mp4 --at "tue 9am"
The part every scheduler gets wrong. Each post is re-checked after publish, and a failure pings you.
wharf status --since 7d
✓ 41 live ⚠ 1 retrying ✗ 0 failedText, image, carousel and video — including Reels, Shorts and TikTok — from the same composer.