Schedule social media from any chat app
posterly is the publish layer. OpenClaw is the chat-app layer. Install the skill, set POSTERLY_API_KEY once, and schedule from WhatsApp, Telegram, Slack, or Discord. Prefer MCP when the runtime supports it; otherwise use REST with the same key.
Hero prompt
On WhatsApp: list my posterly accounts, draft a LinkedIn and Instagram post for tomorrow morning, show me the captions, and only schedule after I reply yes.
Preview what is copied
# posterly for OpenClaw
posterly is the publish layer. OpenClaw is the chat-app layer. Install the skill, set POSTERLY_API_KEY, and schedule from WhatsApp, Telegram, Slack, or Discord after the user approves.
posterly publishes to 18 platforms: Instagram, Facebook, TikTok, X, LinkedIn, YouTube, Pinterest, Threads, Google Business, Telegram, Bluesky, Discord, Slack, Mastodon, Dev.to, Hashnode, WordPress, Lemmy.
## Connect
ClawHub listing: https://clawhub.ai/awpthorp/posterly. Run this in your OpenClaw workspace, then start a new session:
Skill-first:
npx clawhub@0.23.3 install posterly
export POSTERLY_API_KEY=pst_live_your_key_here
The same key works for MCP and REST. Prefer MCP when the OpenClaw runtime can use it. Hosted URL: https://www.poster.ly/api/mcp.
Do not publish unattended from a heartbeat until the user has approved the caption, account, media, and schedule.
## Are we connected yet?
1. Call `whoami` (no params). Confirm the user, scopes, and workspaces.
2. Call `list_accounts` (`workspace_id` optional). If none are connected, stop and send the user to connect social accounts in posterly. Do not invent account IDs.
3. Prefer `validate_post` before `create_post`. Show the preview. Wait for a clear yes.
4. Only then call `create_post` with `confirm: true`. Never publish or schedule live without that approval.
5. Prefer `scheduled_at` (ISO 8601 UTC) or `find_available_slot` (`account_ids`, `timezone`, `count`). Do not publish immediately unless the user asks.
## Rules
- posterly is the publish layer. This client is the chat or agent layer.
- Never collect card details, posterly passwords, or social-network passwords. Send the user to https://www.poster.ly/agents/signup or https://www.poster.ly/dashboard/api.
- Point to https://www.poster.ly/mcp for the rest of the 61 hosted HTTP MCP tools (64 on the local stdio package).
- After a post is created, send the View in posterly link. Avoid raw JSON dumps unless the user asks to debug.
## Media (honest)
Chat attachments never reach MCP. The paperclip in this chat does not give posterly the file.
The ~4MB limit is the **Vercel request body** on posterly API routes (`/api/mcp`, `POST /api/v1/media/upload`). It is not an MCP protocol cap and not the plan storage cap. Base64 inflates files, so hosted `upload_media` is small images only (relay cap 5MB decoded).
- Public HTTPS URL: `upload_media` with `url` (optional `filename`, `content_type`) or pass `media_url` / `media_urls` on `validate_post` / `create_post`. Server fetch: about 5MB relay, 60MB hard cap. Large R2/S3 URLs fail with `remote_media_too_large`.
- Hosted `upload_media`: required `filename` + `base64_data`. Optional `content_type`. Hits the 4MB Vercel body. JPEG, PNG, GIF, WebP, MP4, MOV, WebM. HEIC is unsupported.
- Laptop file in ChatGPT web, Claude.ai, or Gemini web: `create_media_drop` (optional `filename`, optional `max_files`, 1 to 20, default 10). Send the user `drop_url` (`https://www.poster.ly/drop/<token>`). They open it with no dashboard login and drop up to 20 files per link (JPEG, PNG, GIF, WebP, MP4, MOV, WebM, or PDF up to 50MB for LinkedIn document posts; HEIC is not accepted). Then `list_media` (`drop_session_id`) and pass `public_url` to `validate_post` / `create_post`. This is not the chat paperclip.
- Larger files, when this client can HTTP PUT: `create_signed_upload` (`filename`, `content_type`, `size`, or `files` for 1 to 20 files in one call), PUT the raw bytes of each file to its `upload_url` (object storage, not a posterly API route) with the returned headers (send the returned `Content-Type` exactly: pinning is available per request with `pin_content_type: true`, and posterly may turn it on by default in the future), then pass `public_url` to `create_post`. That PUT does not hit the 4MB body. Plan video caps: Starter 500MB, Pro 750MB, Power 1GB, Agency 4GB. A PDF (up to 50MB) also works: create the post with `post_type` `document`, `media_url` set to its `public_url`, and a `document_title` in `settings` (LinkedIn only).
- Stdio `upload_media` also accepts `file_path` when the user gives a real local filesystem path. The local server reads the disk and uses signed upload for large files, so this does not hit the Vercel 4MB body. Never guess paths. Chat attachments are not a file_path.
## Starter tools
- `whoami` (none): Call first. Returns the authenticated user, API key scopes, and workspaces.
- `list_accounts` workspace_id?: Connected social accounts. Stop if this is empty and send the user to connect accounts in posterly.
- `validate_post` account_id or username+platform, caption, scheduled_at?, media_url?, media_urls?, post_type?, workspace_id?: Dry run. Does not create a post. Use this before showing a preview.
- `create_post` same as validate_post, plus confirm: true (required): Destructive write. Refuse unless the user clearly approved caption, account, media, and schedule.
- `upload_media` filename, base64_data (hosted), or url. content_type optional. Stdio also accepts file_path.: Hosted path is base64 with a decoded file of 5MB or less. With url, posterly fetches a public HTTPS URL into storage (localhost and private IPs are blocked). Chat paperclip files never arrive here.
- `create_signed_upload` filename, content_type, size, or files (1 to 20): Bypasses the Vercel ~4MB API body. Returns upload_url (object storage) and public_url. PUT raw bytes to upload_url, then pass public_url to create_post. Pass files to get up to 20 slots in one call (one per file, failed files reported in place, slots expire in 15 minutes). Use this when the client can PUT (Cursor, Claude Code, Codex).
- `create_media_drop` filename?, max_files?: Creates a no-login page at https://www.poster.ly/drop/<token> that takes up to 20 files (max_files, default 10). Send drop_url to the user. ChatGPT web, Claude.ai, and Gemini web laptop files use this, then list_media. Not the chat paperclip.
- `list_media` limit?, drop_session_id?: Newest media assets. After create_media_drop, pass drop_session_id and use public_url on validate_post / create_post.
- `find_available_slot` account_ids?, timezone?, workspace_id?, count?: Always pass timezone explicitly (IANA, e.g. Europe/London). Respects a 1-hour gap.
- `generate_captions` platforms (required), brief?, tone?, count?, mode?, source_caption?: Returns caption options only. It does not schedule or publish.
- `list_posts` status?, platform?, account_id?, workspace_id?, limit?: Upcoming or recent posts. status is scheduled, published, failed, or draft.
## Example prompts
- On WhatsApp: list my posterly accounts, then draft a LinkedIn and Instagram post for tomorrow morning. Show me the captions and wait.
- Find the next free slot, validate_post both drafts, and only schedule after I reply yes.
- I will paste a public image URL. Fetch it, write three caption options, and ask before scheduling.
- Set a weekday morning check: draft posts from ~/content/pending, show me, and wait for approval. Never publish unattended.
- If MCP is available, prefer whoami and list_accounts. If not, use REST with the same POSTERLY_API_KEY.
- After I approve, create_post with confirm true and send the dashboard link.
- Chat attachments in WhatsApp or Telegram are not MCP uploads. Ask for a public URL, a local file_path on the daemon machine, or a signed upload.
## Links
- Human landing: https://www.poster.ly/openclaw
- MCP hub: https://www.poster.ly/mcp
- OpenClaw guide: https://www.poster.ly/guides/openclaw-guide
- AI agents: https://www.poster.ly/agents
- Agent signup: https://www.poster.ly/agents/signup
Skill-first. The same POSTERLY_API_KEY works for the skill, MCP, and REST. Chat attachments in WhatsApp or Telegram are not MCP uploads.
What it looks like in chat
Draft, validate, then approve. Your AI never publishes until you say so.
your AI · connected to posterly MCP
MCPNever posts without approval · validate_post before create_post
View in posterlyWorks with Claude, ChatGPT, Gemini, Cursor, OpenClaw, Hermes, Grok Bot, Muse, Poke, Manus, Cue, and any MCP client.
Get started in seconds
Three steps to schedule posts from any chat app.
Install the skill
# Install the posterly skill
npx clawhub@0.23.3 install posterly
Run this in your OpenClaw workspace, then start a new session. View the published skill on ClawHub.
Set your API key
# One key works for the skill, MCP, and REST API
export POSTERLY_API_KEY=your_api_key
Starter + API is $10/month in one subscription. Get Starter + API
Message OpenClaw from any chat app
You:
Post "Just launched our new AI features!" to my LinkedIn and Twitter tomorrow at 9am
OpenClaw:
Done! Posts scheduled:
- LinkedIn: scheduled 9:00 AM
- X (Twitter): scheduled 9:00 AM
Post IDs: #1247, #1248
Skill first, then MCP or REST
The same POSTERLY_API_KEY works for the skill, hosted HTTP MCP, and REST. Prefer MCP when the runtime supports it. Chat attachments in WhatsApp or Telegram never reach MCP.
Skill install
Install from ClawHub in your OpenClaw workspace, then start a new session to load the skill.
# Install the posterly skill
npx clawhub@0.23.3 install posterly
# One key works for the skill, MCP, and REST API
export POSTERLY_API_KEY=pst_live_your_key_hereMCP fallback
If the runtime supports MCP, add the hosted endpoint or local stdio with the same key.
POST https://www.poster.ly/api/mcp
Authorization: Bearer pst_live_your_key_here
Content-Type: application/json
{ "jsonrpc": "2.0", "id": 1, "method": "tools/list" }Example prompts
- On WhatsApp: list my posterly accounts, then draft a LinkedIn and Instagram post for tomorrow morning. Show me the captions and wait.
- Find the next free slot, validate_post both drafts, and only schedule after I reply yes.
- I will paste a public image URL. Fetch it, write three caption options, and ask before scheduling.
- Set a weekday morning check: draft posts from ~/content/pending, show me, and wait for approval. Never publish unattended.
- If MCP is available, prefer whoami and list_accounts. If not, use REST with the same POSTERLY_API_KEY.
- After I approve, create_post with confirm true and send the dashboard link.
- Chat attachments in WhatsApp or Telegram are not MCP uploads. Ask for a public URL, a local file_path on the daemon machine, or a signed upload.
Message from anywhere
OpenClaw runs as a local daemon, message it from any chat app you already use.
How the skill works
OpenClaw reads the SKILL.md file and learns how to talk to posterly without you hand-wiring every action yourself.
Install from GitHub with one command
Prefer posterly MCP when your OpenClaw runtime supports MCP
Fall back to posterly REST API when MCP is unavailable
Use the same POSTERLY_API_KEY for the skill, MCP, and REST API
Skills are loaded on-demand, keeping the agent context clean
Works with any LLM backend: Claude, GPT, Gemini, Llama, and more
Proactive automation with cron jobs
Set up recurring tasks. OpenClaw checks for new content and posts on a schedule.
// openclaw.json (heartbeat)
{
"heartbeat": [{
"cron": "0 9 * * 1-5",
"prompt": "Check ~/content/pending
for new posts. Upload any media,
then schedule to Twitter, LinkedIn,
and Instagram for today at noon."
}]
}
Post to 18 platforms
All platforms accessible from a single chat message.
Browse every platform MCP server for the tools, limits, and connection steps on each network.
Related setup guides
OpenClaw is one route into the same API, MCP, and skill layer.
MCP setup guide
The hub for hosted HTTP MCP, local stdio, OAuth metadata, and the full tool list.
OpenClaw guide (long read)
Chat apps, heartbeat cron, MCP vs REST, and safety checks before publishing.
Hermes integration
The same SKILL.md pattern on Hermes.
Poke integration
Text-message MCP using the hosted endpoint.
Claude setup
Custom connector plus Claude Code.
AI agents overview
How posterly connects to any agent that speaks MCP or REST, plus the agent signup flow.
Pricing
One Stripe subscription: your plan plus API & MCP. Charged now, no free trial.
API, MCP & Agent Access
Starter $7 + API $3, charged now. No free trial on this path.
- OpenClaw skill + MCP server + REST API
- 61 hosted HTTP MCP tools covering 97 actions for status checks, scoped API keys, brands, schemas, connect sessions, account/post lifecycle, scheduling, support, media, analytics, subscription management, activity & webhooks
- 100 create-post requests/hour plus separate media/read limits
- All 18 supported platforms
Frequently asked questions
Everything about running the posterly skill on OpenClaw.
What is OpenClaw?+
OpenClaw is an open-source, self-hosted gateway that connects an LLM to your favourite chat apps (WhatsApp, Telegram, Slack, Discord, and more). It runs on your own machine or in Docker. Skills give the agent abilities. The posterly skill lets it read brand data and schedule posts on your behalf.
Do I need to know how to code?+
No. Install the skill with one command, paste your posterly API key, and start sending messages. The skill includes natural-language prompts so you can say "schedule this to LinkedIn tomorrow at 9am" instead of writing API calls.
Can OpenClaw post on a schedule automatically?+
Yes. OpenClaw supports cron jobs through its heartbeat config. Tell the agent to check a folder, generate captions, and schedule across LinkedIn, Twitter, and Instagram every weekday morning, all without you touching anything. Examples and the openclaw.json format are above.
Which social platforms can I post to?+
All 18 production posterly platforms: Instagram, X (Twitter), LinkedIn, TikTok, Facebook, Threads, Pinterest, YouTube, Google Business Profile, Telegram, Bluesky, Discord, Slack, Mastodon, Dev.to, Hashnode, WordPress, and Lemmy. The skill supports every post type the dashboard supports.
How is OpenClaw different from Zapier or n8n?+
Zapier and n8n are rule-based: you wire triggers and actions in advance. OpenClaw is a conversational agent: you describe what you want in natural language and it figures out the steps. For social media scheduling the difference is huge, OpenClaw can write the caption, pick the image, choose the platform, and schedule the post in one prompt.
Does the skill use MCP or the REST API?+
Both. When your OpenClaw runtime supports Model Context Protocol (MCP), the skill calls the posterly MCP server directly for lower-latency tool use. When MCP is unavailable the skill falls back to the public REST API. Same API key works for both.
Can OpenClaw post a WhatsApp attachment?+
Not through MCP. Chat attachments never reach MCP. Use a public URL, a real file_path on the daemon machine, hosted upload_media (base64, 5MB or less), or create_signed_upload then PUT.
What does it cost?+
Starter + API starts at $10/month in one subscription; Agency + API is $78/month. That covers MCP, REST API, and the OpenClaw skill, 61 hosted HTTP MCP tools, 100 create-post requests per hour plus separate media/read limits, and all 18 platforms.
Is there a free trial?+
The Starter + API signup charges immediately and has no free trial. The main posterly app has a separate trial, which does not include API or MCP access.
Which LLMs does the skill work with?+
The skill is LLM-agnostic. It runs the same way under Claude, GPT-4, GPT-5, Gemini, Llama, or any model OpenClaw supports. The SKILL.md file teaches the model how to use posterly, no model-specific code required.
Ready to schedule posts from your chat app?
Install the posterly skill for OpenClaw and start posting in minutes.
Get Starter + API · $10/mo