posterly
Schedule and publish social media posts across 18 platforms from AI agents through 72 hosted MCP tools.
What it can do
- Get Mcp Status: Report the hosted posterly MCP server version, latest npm version for local app clients, MCP endpoint health, API auth health, and update guidance.
- Whoami: Return the authenticated user, API key scopes, and accessible workspaces. Call this first to confirm auth before any other tool.
- Create Api Key: Create a new posterly API key for the authenticated user. SECRET-CREATING WRITE: only use after explicit user confirmation. The new key can only request scopes already present on the c
What data it sees
Do you need an account
No: the server works without sign-in
Schedule and publish social media posts across 18 platforms from AI agents through 72 hosted MCP tools. Includes dry-run validation, OAuth 2.1, and Bearer API-key authentication.
How to connect
How to connect posterly to Claude
The server address to paste into Claude settings:
https://posterly--awpthorp.run.tools
- Open Claude (claude.ai or the desktop app).
- Go to Settings → Connectors.
- Click Add custom connector.
- Paste the server address copied below into Remote MCP server URL and click Add.
- In a chat, click + → Connectors and switch the new connector on.
Custom connectors are available on Free, Pro, Max, Team and Enterprise plans (Free is limited to one). On Team and Enterprise an organization Owner adds the connector first under Organization settings → Connectors.
Authorization
After you click Add, a sign-in window for the service opens. Sign in with your own account and approve access. Claude never sees your password.
How to connect posterly to ChatGPT
The server address to paste into ChatGPT settings:
https://posterly--awpthorp.run.tools
- Open ChatGPT in a browser (chatgpt.com). A Plus, Pro, Business, Enterprise or Edu plan is required.
- Turn on developer mode once: Settings → Apps → Advanced settings → Developer mode.
- Open Settings → Connectors and click Create.
- Fill in the form: Name (anything), Description (one line about what the service does), MCP server URL (copy it below).
- Under Authentication choose OAuth if the service requires sign-in, otherwise None. Click Create.
- In a new chat open + → Apps/Connectors and enable the connector.
OpenAI has renamed this section before (Connectors → Apps/Plugins). If the label differs, search settings for "developer mode". On Business/Enterprise workspaces an admin must allow custom connectors first.
Authorization
On first use ChatGPT opens the service's sign-in window. Sign in and approve access.
How to connect posterly to Cursor
The server address to paste into Cursor settings:
https://posterly--awpthorp.run.tools
Fastest: click Open in Cursor below and confirm the prompt.
Manually:
- In Cursor open Settings → Cursor Settings → MCP and click Add new global MCP server.
- Paste the JSON copied below into
~/.cursor/mcp.json(per project:.cursor/mcp.jsonin the repo root). - Save the file. The server appears in the MCP list; authorize it there if asked.
Authorization
If the service needs sign-in, an authorize button appears next to the server in the MCP list.
Server tool list (60)
Raw names from tools/list. Only developers need these.
| get_mcp_status | Report the hosted posterly MCP server version, latest npm version for local app clients, MCP endpoint health, API auth health, and update guidance. |
| whoami | Return the authenticated user, API key scopes, and accessible workspaces. Call this first to confirm auth before any other tool. |
| create_api_key | Create a new posterly API key for the authenticated user. SECRET-CREATING WRITE: only use after explicit user confirmation. The new key can only request scopes already present on the calling dashboard-created API key; OAuth and managed assistant tokens cannot mint keys. |
| delete_api_key | Revoke a posterly API key owned by the authenticated user. DESTRUCTIVE: show the user the exact key ID/prefix/name if available and get explicit confirmation before calling. Cannot revoke the key currently authenticating this request, OAuth-issued keys, or managed assistant keys. |
| list_accounts | List connected social media accounts. Returns platform, username, account ID, and workspace ID for each. |
| disconnect_account | Disconnect a connected social account from posterly. DESTRUCTIVE and IRREVERSIBLE: this removes the account connection, emits account.disconnected webhooks, and may transfer Instagram scheduled posts to a replacement account. Always call list_accounts first, show the user the exact account/platform/workspace, and get explicit confirmation before calling. |
| get_connect_link | List dashboard handoff links/readiness for connecting accounts, or get one platform connection URL. For a guided user flow with pollable status, call create_connect_session next. |
| create_connect_session | Create a short-lived dashboard handoff session for connecting a social account. Open connect_session.connect_url for the user, then poll get_connect_session so you can narrate progress. |
| get_connect_session | Poll a connect session created by create_connect_session. Read status_message to tell the user what is happening; stop when status is connected, failed, cancelled, or expired. |
| list_oauth_clients | List self-serve OAuth developer clients owned by the user. These are public PKCE clients for third-party app integrations. |
| create_oauth_client | Create a public OAuth 2.1 + PKCE developer client. WRITE: confirm app name, redirect URIs, and scopes with the user before calling. |
| update_oauth_client | Update a self-serve OAuth developer client. WRITE: confirm changed redirect URIs, scopes, and active state before calling. |
| delete_oauth_client | Delete a self-serve OAuth developer client. DESTRUCTIVE: prevents new authorizations for that client_id; existing access tokens remain revocable as API keys. |
| list_platforms | List posterly platform integrations and their posting capabilities, content limits, media limits, settings schemas, helper tools, and analytics support. |
| get_platform_schema | Get the platform schema for a platform or a specific connected account. Use this before creating posts with platform-specific settings. |
| trigger_platform_helper | Run a platform helper for account-specific discovery, such as pinterest.boards, tiktok.creator_info, linkedin.recent_mentions, or x.quota. |
| list_brands | List brands/clients the caller can access. Returns each brand ID, name, workspace ID, source, and how many social accounts are assigned to it. |
| get_brand | Get one brand/client by ID. Returns its workspace, source, linked legacy brand group if present, and the number of social accounts assigned to it. |
| list_brand_accounts | List the connected social accounts assigned to a brand/client. Use this when the user refers to a brand rather than a raw account handle. |
| get_brand_profile | Get the extended brand profile for a brand/client. Returns voice/tone guidance, audience, keywords, dos and don’ts, visual notes, and other saved brand context. |
| get_learned_voice | Get the voice posterly has learned from a connected account’s real published captions (the "learned captions" shown on the dashboard). Returns a narrative summary, voice traits, style guidelines, and observed posting habits. Keyed by social account ID (from list_accounts or list_brand_accounts). Returns nothing until the account has enough published posts. Read-only; never overwrites the saved brand profile. |
| get_performance_profile | Get the performance profile posterly has derived for a connected account from the last 90 days of per-post analytics. Returns coaching stats (format, timing, caption-length patterns), an engagement-rate trend, and a narrative summary. Keyed by social account ID (from list_accounts). Returns performance_profile: null with a reason (insufficient_data, platform_not_measurable) when there is no profile yet. Read-only; requires a Pro plan or higher. |
| get_post_insights | List per-post feedback insights from the posterly performance feedback loop: for recently published posts, the performance tier (great/good/mixed/poor), a diagnosis, a suggested next action, metrics, and the baseline it was compared against. Filter by account_id, post_id, and checkpoint (1h, 6h, 24h, 72h, 7d). Read-only; requires a Pro plan or higher. |
| list_post_suggestions | List proactive post suggestions: evidence-based weekly drafts posterly writes in each account's learned voice, each with a rationale tying it back to what has performed well. Filter by account_id and status (pending, scheduled, dismissed; default pending). Read-only; requires a Pro plan or higher. Use dismiss_suggestion to hide one. |
| dismiss_suggestion | Dismiss a proactive post suggestion so it stops appearing. WRITE: confirm the exact suggestion with the user first. Never dismisses a suggestion that was already turned into a scheduled post. |
| list_posts | List upcoming or recent posts. Filter by status (scheduled, published, failed, draft), platform, account_id, or workspace_id. |
| get_post | Get details of a specific post by ID. Returns caption, status, scheduled time, media, and platform info. |
| get_post_missing | Inspect whether a post is missing required content, media, account, platform settings, or metadata before it can publish. Use this to repair failed or imported posts. |
| ask_support | Ask posterly Support AI an authenticated question using posterly docs plus read-only account/post diagnostics for the caller workspace. Requires API auth and accounts:read + posts:read scopes. Human tickets are never opened on the first answer; ticket creation requires a follow-up in a continued conversation with an assistant answer plus request_human=true and confirm_escalation=true after explicit user confirmation. |
| find_available_slot | Find available time slots for posting. Respects a 1-hour gap between posts and preferred hours. Always pass timezone explicitly (default is America/New_York). |
| submit_agent_feedback | Submit bounded private operational telemetry after a concrete posterly workflow outcome. This is non-destructive to product content but writes a private feedback event. Never include API keys, prompts, captions, media URLs, personal data, or fabricated outcomes. Requires an authenticated bearer API key and paid API add-on. |
| validate_post | Validate and normalize one post without creating it. This is non-destructive: it does not create records, copy remote media, consume post-item/storage quota, reserve X quota, emit webhooks, or enqueue publication. Third-party media may return remote_media_not_materialized because live create performs storage copy and final byte validation. Use this before showing the final preview and asking for confirmation to call create_post. |
| create_post | Schedule or immediately publish one social media post. DESTRUCTIVE WRITE that creates content on the user's connected social account. Always confirm caption + scheduled_at + account_id/workspace with the user before calling. Third-party media URLs are copied into Posterly storage before the post is saved; short-lived signed URLs must still be live when this tool runs. For multiple posts, prefer create_posts_batch after confirming every item. |
| create_posts_batch | Create 1-25 scheduled or immediate social posts in one API request. DESTRUCTIVE WRITE: show the user every post's account/platform, caption or thread text, scheduled time, media, settings, and workspace, then get explicit confirmation for the whole batch before calling. Third-party media URLs are copied into Posterly storage before each post is saved. Partial success is possible; failed items return their array index. |
| update_post | Update a scheduled or draft post. DESTRUCTIVE WRITE - overwrites the existing post's caption/media/schedule. Cannot edit published posts. Show the user a side-by-side of CURRENT vs PROPOSED before calling. |
| update_post_status | Pause, resume/schedule, or move a post back to draft. DESTRUCTIVE WRITE: changes whether content will publish. Always fetch with get_post first, show the current status and proposed status/scheduled_at, and get explicit confirmation before calling. |
| update_post_release_id | Set or repair an external release_id and optional group_id on a post. WRITE: call get_post first, show the target post and release/group IDs, then pass confirm=true only after explicit confirmation. |
| delete_post | Delete a scheduled or draft post. DESTRUCTIVE and IRREVERSIBLE. Cannot delete published posts. Always fetch with get_post first and confirm what will be deleted before calling. |
| delete_post_group | Delete every draft/scheduled/failed/paused post matching a caller-defined group_id, post_group_id, api_group_id, or release_id. DESTRUCTIVE: inspect the group first, list affected posts, and pass confirm=true only after explicit confirmation. |
| get_x_posting_quota | Get managed X posting quota, usage, remaining posts, URL-blocking status, and add-on plan info for a workspace. |
| upload_media | Upload a small image or video to posterly storage via base64. Returns a URL usable with create_post. Supports JPEG, PNG, GIF, WebP, MP4, MOV, WebM. Keep decoded files <=5MB on this relay path; for larger files, use create_signed_upload and PUT the raw bytes to the returned upload_url. Counts against the user's storage quota but does not publish anywhere - that's create_post's job. |
| upload_media_from_url | Fetch an image or video from a public HTTPS URL into posterly storage. Returns a URL usable with create_post. SSRF protections block localhost/private IP targets. |
| create_signed_upload | Create a signed upload URL for a larger image or video. Upload the binary to upload_url; the API validates actual bytes before storage, then public_url can be used with create_post. |
| get_video_options | List read-only Veo video generation options, input modes, durations, resolutions, aspect ratios, and credit-cost estimates. Does not generate video or spend credits. |
| run_video_function | Run a read-only Veo video helper function before generation, such as list_input_modes, estimate_cost, or validate_request. Does not generate video or spend credits. |
| generate_video | Queue a Veo AI video generation job. COSTS VEO CREDITS - confirm prompt, model, duration, resolution, aspect ratio, audio choice, and credit cost with the user before calling. Poll get_video_job for status and final video_url. |
| get_video_job | Get one Veo video job by ID, or list recent video jobs when job_id is omitted. Use after generate_video to poll for completed video_url. |
| generate_captions | Generate or adapt AI caption suggestions for one or more social platforms. Uses AI Caption Assist quota and returns options only; it does not create, draft, schedule, or publish posts. |
| generate_image | Generate an AI image via posterly's Nano Banana (Gemini) integration. Returns a URL usable with create_post. COSTS CREDITS - confirm subject + style + aspect_ratio with the user before calling. |
| get_account_analytics | Get daily analytics snapshots and a period summary for a connected social account. Supports Instagram, Facebook Pages, LinkedIn, Google Business Profile, Pinterest, YouTube, and Threads. Uses API-provided display_metrics for platform-native dashboard labels. presentation controls output: compact for Telegram/mobile, table for Markdown clients, json for custom chart/card renderers. |
| get_post_analytics | Get per-post engagement metrics (likes, comments, reach, impressions, saves, shares, plays) for a connected account. Supports Instagram, Facebook Pages, LinkedIn, Google Business Profile, Pinterest, YouTube, and Threads. Most recent posts first. presentation controls output: compact for Telegram/mobile, table for Markdown clients, json for custom chart/card renderers. |
| list_google_business_reviews | List Google Business Profile reviews for one location/account or every accessible GBP location. Supports rating and unanswered-only filters. |
| get_google_business_review_link | Get the direct public Google review link for a connected Google Business Profile location. Requires account_id or location_id. Returns reviewLink plus the Google Place ID (ChIJ...); that Place ID is output only and must NOT be passed back as location_id to other tools. |
| audit_google_business_profile | Run a live local-profile audit for a connected Google Business Profile location, including completeness, categories, media, attributes, reviews, and recommendations. |
| suggest_google_business_review_reply | Generate short, brand-aware AI reply suggestions for a Google review. Uses the AI Caption Assist allowance; does not post the reply. |
| reply_google_business_review | Post or update the owner reply on a Google Business Profile review. WRITE: show the review, location, and exact reply text to the user, then pass confirm=true only after explicit confirmation. |
| delete_google_business_review_reply | Delete the owner reply from a Google Business Profile review. DESTRUCTIVE: confirm the review and location with the user, then pass confirm=true only after explicit confirmation. |
| list_google_business_media | List the photos and videos on a Google Business Profile gallery (the media shown on Maps and Search) for one location/account or every accessible GBP location. This is separate from media attached to a post. Returns each item's resource name, category, format, and attribution. |
| add_google_business_media | Add a photo or video to a Google Business Profile gallery (the media shown on Maps and Search). Provide a public https source_url first by uploading via upload_media_from_url or upload_media. COVER and PROFILE are single-slot and replace the existing one. WRITE: show the location, category, and media URL to the user, then pass confirm=true only after explicit confirmation. |
| delete_google_business_media | Remove a photo or video from a Google Business Profile gallery. Get media_name from list_google_business_media. This permanently deletes the item from the public profile. DESTRUCTIVE: show the exact media item and location to the user, then pass confirm=true only after explicit confirmation. |