posterly
OpenClaw Skill

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.

Get Starter + API · $10/moAll AI integrations
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

Skill-first:
npx skills add awpthorp/posterly-agent
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 86 hosted HTTP MCP tools (89 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_from_url` (`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 or Claude.ai: `create_media_drop` (optional `filename`, optional `max_files`, default 10). Send the user `drop_url` (`https://www.poster.ly/drop/<token>`). They open it with no dashboard login and drop the file. 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`), PUT the raw bytes to the returned `upload_url` (object storage, not a posterly API route) with the returned headers, 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.
- 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). content_type optional. Stdio also accepts file_path.: Hosted path is base64 with a decoded file of 5MB or less. Chat paperclip files never arrive here.
- `upload_media_from_url` url (required), filename?, content_type?: Fetch a public HTTPS URL into posterly storage. Localhost and private IPs are blocked.
- `create_signed_upload` filename, content_type, size: 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. 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>. Send drop_url to the user. ChatGPT web and Claude.ai 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

Never posts without approval · validate_post before create_post

View in posterly

Works with Claude, Cursor, ChatGPT, OpenClaw, Hermes, Grok Bot, Poke, and any MCP client.

Get started in seconds

Three steps to schedule posts from any chat app.

1

Install the skill

# Install the posterly skill

npx skills add awpthorp/posterly-agent

2

Set your API key

# One key works for the skill, MCP, and REST API

export POSTERLY_API_KEY=your_api_key

API access requires a paid posterly plan plus the $3/mo add-on. Sign up

3

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

One command. OpenClaw reads SKILL.md and learns the posterly workflow.

# Install the posterly skill
npx skills add awpthorp/posterly-agent

# One key works for the skill, MCP, and REST API
export POSTERLY_API_KEY=pst_live_your_key_here

MCP 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.

WhatsAppTelegramSlackDiscordSignaliMessageGoogle ChatTeamsMatrix

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.

InstagramFacebookTikTokXLinkedInYouTubePinterestThreadsGoogle BusinessTelegramBlueskyDiscordSlackMastodonDev.toHashnodeWordPressLemmy

Related setup guides

OpenClaw is one route into the same API, MCP, and skill layer.

Pricing

One Stripe subscription: your plan plus API & MCP. Charged now, no free trial.

API, MCP & Agent Access

$10/month

Starter $7 + API $3, charged now. No free trial on this path.

  • OpenClaw skill + MCP server + REST API
  • 86 hosted HTTP MCP tools 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
Get Starter + API · $10/mo

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?+

API and agent access starts at $3/month on individual plans, with Agency API at $29/month. That covers MCP, REST API, and the OpenClaw skill, 86 hosted HTTP MCP tools, 100 create-post requests per hour plus separate media/read limits, and all 18 platforms.

Is there a free trial?+

Yes. Every new posterly account starts with a 7-day free trial of the main posterly app. API and MCP access require an active paid posterly subscription plus the API add-on.

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