posterly
Claude custom connector + Claude Code + Desktop

Schedule social posts from Claude

posterly is the publish layer. Claude is the chat layer. Add posterly as a custom connector on claude.ai, or install local stdio in Claude Desktop and Claude Code, then schedule across 18 platforms.

Hero prompt

Using posterly, list my connected accounts, then draft one caption for LinkedIn, X, and Instagram announcing our launch. Find the next free slot in Europe/London, run validate_post for each, show me the drafts, and wait for my yes before create_post with confirm true.

Get Starter + API · $10/moCreate API key
Preview what is copied
# posterly for Claude

posterly is the publish layer. Claude is the chat layer. Add a custom connector on claude.ai, or local stdio in Claude Desktop and Claude Code.

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

claude.ai: Customize, Connectors, Add custom connector, paste https://www.poster.ly/api/mcp. Free plans can add one custom connector. Writes run after user approval.

Claude Code: `claude mcp add --transport http posterly https://www.poster.ly/api/mcp` or stdio `claude mcp add --scope user -e POSTERLY_API_KEY=pst_live_your_key_here posterly -- npx -y posterly-mcp-server@latest`.

Claude Desktop: claude_desktop_config.json with the npx stdio block.

This is a custom connector you add yourself. Do not look for a directory listing.

Stdio file_path uploads work in Claude Desktop and Claude Code, not on claude.ai. Chat attachments never reach MCP.

## 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

- Using posterly, run whoami and list_accounts. Which LinkedIn and Instagram accounts can I post to?
- Draft a LinkedIn, X, and Instagram launch post. Find the next free slot in Europe/London, run validate_post for each, and wait for my approval.
- Write three caption options for this product update with generate_captions. Do not schedule anything yet.
- List scheduled posts for this week and suggest one gap I could fill on LinkedIn.
- After I approve, create_post the LinkedIn draft with confirm true and send me the View in posterly link.
- I have a public image URL. upload_media_from_url, then validate_post an Instagram image post for tomorrow 9:00 Europe/London. Wait for my yes.
- I have a video on my laptop. Call create_media_drop, send me the /drop/ link, wait, then list_media and validate_post. Do not use the paperclip.
- Do not publish live. Prefer scheduled_at or find_available_slot unless I explicitly ask to post now.

## Links

- Human landing: https://www.poster.ly/claude
- MCP hub: https://www.poster.ly/mcp
- Claude guide: https://www.poster.ly/guides/claude-guide
- AI agents: https://www.poster.ly/agents
- Agent signup: https://www.poster.ly/agents/signup

Custom connectors work on Free through Enterprise. Free is limited to one custom connector. Writes run after you approve the tool call. Chat attachments never reach posterly. Laptop files go through create_media_drop then list_media. This is a custom connector you add yourself.

What it looks like in chat

Draft, validate, then approve. Your AI never publishes until you say so.

your AI · connected to posterly MCP

Draft 3 LinkedIn posts for next week about our new MCP signup flow. Don't schedule until I approve.

Assistant

Three short captions in your brand voice, via generate_captions. Next I will call validate_post, then wait.

  1. 1 · Tue 9:00

    Your AI can now schedule social posts. You still approve every one.

  2. 2 · Wed 9:00

    MCP signup is live. Connect Claude, ChatGPT, or Grok Bot in a few minutes.

  3. 3 · Thu 9:00

    Validate first, then publish. That is the whole workflow.

whoamivalidate_postcreate_post
Approval requiredschedule · gated

Schedule 3 posts · Tue to Thu 9:00 Asia/Dubai

LinkedIn @Acme

Waiting for approval. Nothing will be scheduled until you approve.

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 Claude connected in three steps

Create a posterly API key, add the hosted URL as a custom connector (or local stdio in Desktop and Claude Code), then verify with whoami.

1

Enable API and MCP access

Buy Starter + API in one checkout, then create an API key in Dashboard, API and MCP.

Open API dashboard
2

Add a custom connector

On claude.ai: Customize, Connectors, Add custom connector, paste https://www.poster.ly/api/mcp. Claude Code and Desktop can also run local stdio with npx.

MCP hub
3

Approve writes, then schedule

Ask Claude to run whoami and list_accounts. Prefer validate_post. Claude asks before writes. Only create_post after you approve.

Claude walkthrough

What to paste into Claude

claude.ai, Cowork, and Claude in Chrome are remote-only. Claude Desktop and Claude Code can run the npm stdio package locally.

Fields

Server URL (claude.ai)

https://www.poster.ly/api/mcp

Customize, then Connectors, then Add custom connector. Free plans can add one custom connector.

Auth

OAuth, or Authorization: Bearer pst_live_your_key_here

Writes are allowed after you approve the tool call in Claude.

Claude Code

claude mcp add --transport http posterly https://www.poster.ly/api/mcp

Or stdio: claude mcp add --scope user -e POSTERLY_API_KEY=pst_live_your_key_here posterly -- npx -y posterly-mcp-server@latest

claude.ai custom connector

Remote HTTP. The server must be on the public internet. This is the same hosted endpoint ChatGPT and Cursor use.

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" }

Team and Enterprise owners add connectors in Organisation settings before members can use them.

Claude Code and Desktop

Local stdio for Desktop (claude_desktop_config.json) and Claude Code. HTTP also works in Claude Code.

claude mcp add --transport http posterly https://www.poster.ly/api/mcp

claude mcp add --scope user -e POSTERLY_API_KEY=pst_live_your_key_here posterly -- npx -y posterly-mcp-server@latest

If Claude Code says posterly was not added, run claude mcp remove posterly, then add it again with --scope user.

What Claude can do once connected

Start with these tools. The rest of the 86 hosted HTTP MCP tools live on the MCP hub. Prefer validate_post, then wait for a clear yes before create_post with confirm true.

Starter tools

whoamilist_accountsvalidate_postcreate_postupload_mediaupload_media_from_urlcreate_signed_uploadcreate_media_droplist_mediafind_available_slotgenerate_captionslist_posts
  • 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.
See all MCP tools

Example prompts

  • Using posterly, run whoami and list_accounts. Which LinkedIn and Instagram accounts can I post to?
  • Draft a LinkedIn, X, and Instagram launch post. Find the next free slot in Europe/London, run validate_post for each, and wait for my approval.
  • Write three caption options for this product update with generate_captions. Do not schedule anything yet.
  • List scheduled posts for this week and suggest one gap I could fill on LinkedIn.
  • After I approve, create_post the LinkedIn draft with confirm true and send me the View in posterly link.
  • I have a public image URL. upload_media_from_url, then validate_post an Instagram image post for tomorrow 9:00 Europe/London. Wait for my yes.
  • I have a video on my laptop. Call create_media_drop, send me the /drop/ link, wait, then list_media and validate_post. Do not use the paperclip.
  • Do not publish live. Prefer scheduled_at or find_available_slot unless I explicitly ask to post now.

Post to 18 platforms

Claude can schedule through posterly to every supported social platform.

InstagramFacebookTikTokXLinkedInYouTubePinterestThreadsGoogle BusinessTelegramBlueskyDiscordSlackMastodonDev.toHashnodeWordPressLemmy

Related setup guides

Claude is one route into the same API and MCP layer. These pages pair well with it.

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.

  • Claude custom connector on the hosted HTTP endpoint
  • Claude Code and Desktop stdio via npx posterly-mcp-server
  • Same key for MCP and REST
  • 86 hosted HTTP MCP tools for status checks, scoped API keys, schemas, scheduling, support, media, brands, analytics, webhooks, OAuth, connect sessions, subscription management, and GBP
  • 100 create-post requests/hour plus separate media/read limits
  • All 18 supported platforms
Get Starter + API · $10/mo

Claude questions

How do I connect posterly to Claude?+

On claude.ai open Customize, Connectors, Add custom connector, and paste https://www.poster.ly/api/mcp. In Claude Code use claude mcp add --transport http, or local stdio with npx. Claude Desktop uses claude_desktop_config.json.

Does the Free plan work?+

Yes. Custom connectors are available on Free through Enterprise. Free is limited to one custom connector.

Can Claude write posts?+

Yes, after you approve the tool call. Prefer validate_post first, then create_post with confirm true only when you clearly say yes.

Can I attach a laptop video in Claude and have posterly post it?+

No. Chat attachments never reach MCP. Ask Claude to call create_media_drop, open the https://www.poster.ly/drop/<token> link, drop the file there, then let it call list_media. Claude Code / Desktop can still use file_path or create_signed_upload then PUT.

Is posterly listed as an official Claude connector?+

No. This is a custom connector you add yourself.

What can Claude schedule?+

All 18 posterly platforms: Instagram, Facebook, TikTok, X, LinkedIn, YouTube, Pinterest, Threads, Google Business, Telegram, Bluesky, Discord, Slack, Mastodon, Dev.to, Hashnode, WordPress, Lemmy.

Ready to connect Claude?

Pay for Starter + API in one checkout, create a key, then add the custom connector or local stdio config.