MCP App Store
by KeenEthics

Overview

Postproxy is a social media publishing and engagement tool: it connects your social media accounts so you can publish and schedule posts, and handle comments and direct messages, from chat. Draft a post once and send it to Instagram, Facebook, TikTok, LinkedIn, YouTube, X, Threads, Pinterest, Bluesky, Telegram, and Google Business, with per-platform options such as Reels, Stories, carousels, video titles, and threads. Add posts to posting queues, save drafts, edit or reschedule scheduled posts, and check delivery status with links to the published posts. Postproxy also brings your engagement into the conversation: get a summary of what was published and what is waiting on you, read and reply to comments, answer direct messages on Instagram, Facebook, Telegram, Bluesky, and WhatsApp, reply to Google Business reviews, and look at post and profile stats over time. Google Business tools let you update hours, attributes, menus, services, and photos for your locations, and WhatsApp tools manage message templates, groups, and the business profile. Built for marketers, agencies, founders, and community managers who run several brands or clients; profile groups keep each brand's accounts separate. You need a Postproxy account with at least one connected social profile. Postproxy only accesses the profile groups and profiles your signed-in account can reach. Publishing, replying, messaging, and deleting act on your real social accounts, so Postproxy asks you to confirm before it does them. Some features depend on what each social network allows: for example, not every network supports comments, direct messages, or stats.

Tools

auth_status

ChatGPT
Check authentication status, API configuration, and workspace information

comments_create

ChatGPT
Create a comment or reply on a published post. The comment is published to the platform asynchronously. Supported on Instagram, Facebook, Threads, YouTube, and LinkedIn.

comments_delete

ChatGPT
Delete a comment from the platform asynchronously. Supported on Instagram, Facebook, YouTube, and LinkedIn. Not supported on Threads.

comments_edit

ChatGPT
Edit the text of a comment you published, asynchronously. Supported on Facebook and YouTube only. Returns { accepted: true }; the result arrives via comment.edited / comment.edit_failed webhooks.

comments_get

ChatGPT
Get a single comment with its replies

comments_hide

ChatGPT
Hide a comment on the platform asynchronously. Supported on Instagram, Facebook, and Threads.

comments_like

ChatGPT
Like a comment on the platform asynchronously. Currently only supported on Facebook.

comments_list

ChatGPT
List comments on a published post. Returns paginated top-level comments with nested replies. Optionally filter by when PostProxy received the comment with from/to. Not all platforms support comments.

comments_unhide

ChatGPT
Unhide a previously hidden comment on the platform asynchronously. Supported on Instagram, Facebook, and Threads.

comments_unlike

ChatGPT
Remove a like from a comment on the platform asynchronously. Currently only supported on Facebook.

dm_chat_archive

ChatGPT
Archive (mute) a chat. Bluesky only — calls Bluesky's muteConvo. Returns the chat with archived: true.

dm_chat_create

ChatGPT
Find or create a chat for a participant on a DM-capable profile (idempotent — returns the existing chat if one already exists). Use before sending a message to a participant the profile has not yet messaged. On WhatsApp, placement_id (the phone number id from profiles_placements) is required and participant_external_id is the recipient's phone number in international format (digits only, no +); a new WhatsApp conversation must open with an approved template via dm_message_send.

dm_chat_get

ChatGPT
Get a single chat by Postproxy hashid or by the platform's external_conversation_id.

dm_chat_mark_read

ChatGPT
Mark a chat as read. On WhatsApp this sends the read receipt (blue ticks) for the newest inbound message to the participant; on other networks it only stamps metadata.read_at locally. Returns the chat.

dm_chat_unarchive

ChatGPT
Unarchive (unmute) a chat. Bluesky only — calls Bluesky's unmuteConvo. Returns the chat with archived: false.

dm_chats_list

ChatGPT
List direct-message chats (conversations) for a DM-capable profile, ordered by most recent activity. Supported on Facebook (Messenger), Instagram, Telegram, Bluesky, and WhatsApp. WhatsApp chats carry external_placement_id (the phone number), group (true for group chats) and within_messaging_window.

dm_comment_private_reply

ChatGPT
Send a DM to the author of a comment, in reply to that comment (Meta 'Private Replies'). Bypasses the 24h window (comments up to 7 days old) and creates/reuses a chat automatically. One private reply per comment, ever. Instagram and Facebook (Page comments) only. Supports the same quick_replies / buttons / card interactive elements as dm_message_send; media attachments are not available on private replies.

dm_message_edit

ChatGPT
Edit a previously-sent outbound message on the platform. Telegram only — Facebook and Instagram do not expose outbound edits, so Meta quick_replies and buttons cannot be changed after sending. Provide body (new text/caption) and/or reply_markup (pass {} to clear the keyboard); at least one is required.

dm_message_get

ChatGPT
Get a single message by Postproxy hashid or by the platform's external_id. Outbound messages echo the quick_replies / buttons / card they were sent with; an inbound message created by a tap carries tapped_action: {kind, payload, title}.

dm_message_react

ChatGPT
Add a reaction from your business account to a message. Facebook Messenger, Instagram Direct and WhatsApp (not Telegram or Bluesky). On WhatsApp pass emoji — any unicode emoji — and reaction names are ignored. A second react replaces the previous one.

dm_message_send

ChatGPT
Send an outbound direct message. Provide EXACTLY ONE of body (text), media (a single attachment), or — on WhatsApp — template, interactive, location or contacts. The message is queued and delivered asynchronously (returns status: pending). Outside Meta's 24h messaging window, a human agent replying to the participant's own inquiry can pass tag: HUMAN_AGENT (Facebook/Instagram only) — never for promotional or automated content. On WhatsApp the window is re-opened only by sending an approved template (or a text with category: utility); free-form sends outside it return 422. reply_markup is Telegram-only; reply_to_external_id works on Telegram and WhatsApp; quick_replies, buttons and card are the Facebook/Instagram interactive primitives and are rejected elsewhere — WhatsApp uses interactive (Meta-shaped) instead.

dm_message_unreact

ChatGPT
Remove your business account's reaction from a message. Facebook Messenger, Instagram Direct and WhatsApp only.

dm_messages_list

ChatGPT
List messages in a chat, most recent first. Optionally filter by direction or status. Inbound messages created by a tap on an interactive element you sent (quick reply, button postback, Instagram ice breaker, Telegram callback query) carry tapped_action: {kind, payload, title} — read the payload from there instead of digging through platform_data.

google_business_attributes_available

ChatGPT
List which attributes a location can actually set, with their value types. Valid attributes depend on the primary category and region, so ALWAYS call this before google_business_attributes_update. Two modes: by location (the default — omit region_code and language_code, Google takes them from the listing) or by category_name (then region_code is required).

google_business_attributes_get

ChatGPT
Read the attributes currently set on a Google Business Profile location (payments, accessibility, service options, social links). Note Google omits the attributes key entirely when none are set rather than returning an empty array.

google_business_attributes_update

ChatGPT
Set attributes on a Google Business Profile location. Value shape depends on the attribute's valueType from google_business_attributes_available: BOOL uses "values": [true], URL uses "uriValues": [{ "uri": "..." }], ENUM uses "repeatedEnumValue": { "setValues": ["TOKEN"] }. attribute_mask defaults to exactly the names you send, so untouched attributes are preserved.

google_business_categories_list

ChatGPT
Resolve Google business category resource names (e.g. 'categories/gcid:software_company') for a region. Category patches need these resource names, not display names, and the available set differs per country. Use filter to search by display name rather than paging thousands of results.

google_business_food_menus_get

ChatGPT
Read food menus for a Google Business Profile location. Restaurant-like categories only — other locations return 422 with FAILED_PRECONDITION, which is expected rather than an error to retry.

google_business_food_menus_update

ChatGPT
Replace the food menus on a Google Business Profile location. Full replacement, not a merge. Structure is menu -> sections -> items; every label carries a languageCode and prices need currencyCode and units. Requires metadata.canHaveFoodMenus on the location, otherwise 422.

google_business_hours_update

ChatGPT
Set opening hours on a Google Business Profile location. Times accept either "09:00"/"09:00:00" strings or Google's { hours, minutes } objects. Read current hours from google_business_location_get — each block you name in fields is replaced entirely.

google_business_location_get

ChatGPT
Read a Google Business Profile location — name, description, website, phones, categories, address, hours, service area, service items, and metadata. This is the business listing itself, not posts published to it. Read this before any google_business_*_update: Google's updates are field-masked, so you patch back objects you fetched here.

google_business_location_update

ChatGPT
Update fields on a Google Business Profile location. fields names exactly what you're replacing — anything named there but missing from the payload is CLEARED, and nested objects are replaced wholesale, not merged. Read with google_business_location_get first. Hours and the service list have their own tools.

google_business_media_create

ChatGPT
Add a photo or video to a Google Business Profile location. Google downloads the file from media_url itself — there is no upload step, so the URL must be publicly reachable https (not a short-lived signed URL, not localhost). Images need at least 250x250 and at most 5MB. Use category COVER or LOGO only when you intend to change the profile header or logo.

google_business_media_delete

ChatGPT
Permanently remove a photo or video from a Google Business Profile location. media_name is the full resource name from google_business_media_list and must belong to this location.

google_business_media_list

ChatGPT
List the photos and videos on a Google Business Profile location. These are profile photos, distinct from media attached to a local post.

google_business_place_action_types_available

ChatGPT
List the place_action_type values Google accepts for a Google Business Profile location. Depends on the location's categories and setup; check this first when google_business_place_action_link_create fails with 'Request contains an invalid argument'.

google_business_service_list_get

ChatGPT
Read the services offered by a Google Business Profile location. Editable only when the location's metadata.canModifyServiceList is true.

google_business_service_list_update

ChatGPT
Replace the service list on a Google Business Profile location. This is a full replacement, not a merge — send the complete list. Items are either { structuredServiceItem: { serviceTypeId } } using a serviceTypeId from the location's category, or { freeFormServiceItem: { category, label: { displayName, languageCode } } }. Fails with 422 when metadata.canModifyServiceList is false.

history_list

ChatGPT
List recent post jobs. Each entry includes the full content, created_at, scheduled_at (null if not scheduled), draft flag, internal status, and the platforms the post targets with their status and published URLs

instagram_available_audio

ChatGPT
Search Meta's music and original-sound library for audio a reel can use as its soundtrack. Without search_query, returns trending audio. Items use Meta's field names: audio_id, audio_type, title, duration_in_ms, on_platform_audio_preview_link, download_url (temporary preview, expires in ~1.5 days); music items add display_artist and cover_artwork_thumbnail_uri, original sounds add ig_username and profile_picture_url. Pass the chosen audio_id to post_publish under platforms.instagram with format 'reel'. Only works for Instagram profiles connected through Facebook Login — Instagram Login profiles get 422 (reconnect with profile_groups_initialize_connection onboarding 'facebook'). Only audio authorized for third-party use is returned, so the catalog can differ from the Instagram app.

post_delete

ChatGPT
Delete a post from the database. By default does NOT remove from social media platforms. Pass delete_on_platform=true to also remove from all published platforms before DB deletion.

post_delete_on_platform

ChatGPT
Delete a published post from social media platforms WITHOUT removing it from the database. Async via background job. Optionally narrow scope by post_profile_id (covers entire thread for that profile), profile_id, or network. With no scope, deletes from all published platforms. Supported: Facebook, Threads, X (Twitter), LinkedIn, Pinterest, YouTube. NOT supported: Instagram, TikTok.

post_publish

ChatGPT
Publish a post to specified social media profiles. Supports text content, media attachments, scheduling, drafts, threads (X and Threads only), and platform-specific customization via the 'platforms' parameter.

post_publish_draft

ChatGPT
Publish a draft post. Only posts with draft status can be published using this endpoint

post_stats

ChatGPT
Get stats snapshots for one or more posts. Returns all matching snapshots so you can see trends over time. Supports filtering by profiles/networks and timespan.

post_status

ChatGPT
Get status of a post by post ID. Returns the full content, scheduled_at (null if not scheduled), created_at, draft flag, internal status, per-platform status with published URLs, and media details

post_update

ChatGPT
Update an existing post. Only drafts or scheduled posts (more than 5 min before publish) can be updated. Only send fields you want to change — omitted fields are left unchanged.

profile_comments_create

ChatGPT
Reply to an existing profile comment (Google Business review). Top-level comments are NOT allowed — you can only reply to a review that already exists. parent_id is required. Response is returned immediately with status 'pending'; a background job then publishes to Google and updates status to 'published' or 'failed'.

profile_comments_delete

ChatGPT
Delete your reply to a profile comment. Only your own reply is removed — the underlying review is NOT deleted (Google does not allow businesses to delete reviews). Returns {accepted: true} while the delete is dispatched asynchronously.

profile_comments_get

ChatGPT
Get a single profile comment (review or your reply) by Postproxy hashid or the platform's external_id (e.g. 'accounts/.../locations/.../reviews/...').

profile_comments_list

ChatGPT
List profile-scoped comments. Currently surfaces Google Business reviews (reviews live on a location, not a post, so they cannot be reached via comments_list). Each item may include nested replies. Reviews sync from Google twice daily (06:00 and 18:00 UTC).

profile_groups_initialize_connection

ChatGPT
Generate a URL to connect a new social media profile to a profile group (initiates the OAuth/connect flow). The returned URL should be opened by the user to complete the connection. For whatsapp, optionally pass onboarding ('api' or 'business_app'); when omitted the connect page asks the user where their number lives. For instagram, optionally pass onboarding 'facebook' to connect through Facebook Login (an Instagram professional account linked to a Facebook Page the user manages) instead of the default Instagram Login. Bluesky and Telegram need credentials, so they are connected in the Postproxy web app rather than here.

profile_groups_list

ChatGPT
List all profile groups accessible with your API key. Profile groups are organizational containers (e.g. per brand or client) that hold related social media profiles. Use the returned group id to filter profiles_list by profile_group_id.

profiles_list

ChatGPT
List all available social media profiles for posting. Optionally filter by profile_group_id.

profiles_placements

ChatGPT
List available placements for a profile. For Facebook: business pages. For LinkedIn: personal profile and organizations. For Pinterest: boards. For Telegram: channels the bot can post to. For Google Business: locations (returned as full resource paths 'accounts/X/locations/Y' to pass as location_id). For WhatsApp: the phone numbers on the Business Account — the placement id is the phone_number_id every whatsapp_* tool and dm_chat_create take, and metadata carries display_phone_number, quality_rating, messaging_limit_tier, name_status, platform_type. Available for facebook, linkedin, pinterest, telegram, google_business and whatsapp profiles.

profiles_stats

ChatGPT
Get the follower/engagement timeseries for a profile. Returns daily snapshots (captured every ~23h). placement_id is required for facebook, linkedin, telegram, and google_business profiles (get it from profiles_placements); omit for other networks. Fields in records[].stats are platform-native and not normalized. For google_business the series is per location: impressions, website clicks, call clicks, direction requests and conversations — there is no follower count.

queues_create

ChatGPT
Create a new posting queue with weekly timeslots. Use profiles.list to find the profile_group_id.

queues_delete

ChatGPT
Delete a posting queue. Posts in the queue will have their queue reference removed but will not be deleted.

queues_get

ChatGPT
Get details of a single posting queue including its timeslots and post count

queues_list

ChatGPT
List all posting queues. Queues automatically schedule posts into recurring weekly timeslots with priority-based ordering.

queues_next_slot

ChatGPT
Get the next available timeslot for a queue

queues_update

ChatGPT
Update a queue's settings, timeslots, or pause/unpause it. Changes to timezone or timeslots trigger rearrangement of all queued posts.

summary_get

ChatGPT
Answer "what's the status?" in one call. Returns an activity snapshot for a time window: posts published and failed (plus what's scheduled next), engagement totals summed from each post's latest stats snapshot, comments and reviews received, and DM volume — each broken down per network. Also returns what's still waiting on you: comments and reviews with no reply from you, and DM chats whose newest message is inbound (with how many are about to run out of their 24h messaging window). Prefer this over calling history_list / comments_list / dm_chats_list separately. Two quirks worth knowing: engagement is lifetime-to-date for posts published in the window rather than engagement earned during it, and the awaiting_reply counts describe current state so they don't change with the window (they look back 30 days, returned as window.backlog_from). Post counts are posts — a post sent to three networks counts once — while by_platform counts per-network deliveries. engagement is null when insights are off for the account, dms when DMs are.

upload_create

ChatGPT
Create a temporary file upload URL for sandboxed environments. Returns a key, an upload_url, and expires_in (seconds). Flow: (1) call this tool, (2) POST the raw file bytes to the returned upload_url (valid for expires_in seconds), which responds with {"url": "https://..."}, (3) pass that returned url in the media array of post_publish (or post_update). The upload host is tmpfiles.postproxy.dev — that domain must be whitelisted/allowlisted in the sandbox's network egress rules for the upload to succeed. Only use this when running against the remote (hosted) MCP server: if you are running the local (stdio) MCP server, do NOT use this — instead pass local file paths directly in the media array, which uploads them via multipart.

whatsapp_blocked_user_status

ChatGPT
Check whether one phone number is currently blocked on a WhatsApp phone number.

whatsapp_blocked_users_list

ChatGPT
List the phone numbers (wa_id) blocked on a WhatsApp phone number, paginated with limit / after (next_cursor in the response).

whatsapp_business_profile_get

ChatGPT
Read the public business profile shown in WhatsApp for a phone number: about, address, description, email, websites, vertical and profile_picture_url.

whatsapp_business_profile_photo_update

ChatGPT
Replace the profile photo of a phone number. Pass either url (a public https image) or data (base64, with content_type). JPEG or PNG, at most 5MB.

whatsapp_business_profile_update

ChatGPT
Update the public business profile of a phone number. Send only the fields to change; at least one is required. about max 139 chars, description max 512, websites at most 2 entries. The profile photo has its own tool.

whatsapp_conversion_event_send

ChatGPT
Report a conversion (LeadSubmitted, Purchase, AddToCart, InitiateCheckout, ViewContent) for a conversation that started from a Click-to-WhatsApp ad, so Meta can attribute it. Identify the conversation by chat_id or phone; it must carry a captured ctwa_clid (422 otherwise). event_id must be unique per event. email and external_id are SHA-256 hashed before sending. Pass test_code to route the event to Meta's test-events view.

whatsapp_dataset_create

ChatGPT
Create a Conversions API dataset on the WhatsApp Business Account so Click-to-WhatsApp ad conversions can be reported. Idempotent: returns the existing dataset with created: false.

whatsapp_dataset_get

ChatGPT
Read the Conversions API dataset id attached to the WhatsApp Business Account (null when none). Needed for whatsapp_conversion_event_send.

whatsapp_display_name_get

ChatGPT
Read the verified display name of a phone number and its review status (name_status), plus any pending new_name_status.

whatsapp_display_name_request_change

ChatGPT
Submit a new display name for Meta review. The current name stays until Meta approves; the outcome arrives on the placement.name_status_updated webhook.

whatsapp_group_create

ChatGPT
Create a WhatsApp group administered by the phone number. Returns the group id and invite_link. Add members with whatsapp_group_participants_add or share the invite link.

whatsapp_group_delete

ChatGPT
Delete a WhatsApp group the phone number administers.

whatsapp_group_get

ChatGPT
Read a WhatsApp group: subject, description, join_approval_mode, invite_link, participants, participant_count, created_at, is_suspended.

whatsapp_group_join_requests_approve

ChatGPT
Approve pending join requests for the given phone numbers.

whatsapp_group_join_requests_list

ChatGPT
List pending join requests on a WhatsApp group with join_approval_mode approval_required.

whatsapp_group_join_requests_reject

ChatGPT
Reject pending join requests for the given phone numbers.

whatsapp_group_participants_add

ChatGPT
Add up to 8 phone numbers to a WhatsApp group (a group holds 8 participants).

whatsapp_group_participants_remove

ChatGPT
Remove phone numbers from a WhatsApp group.

whatsapp_group_update

ChatGPT
Change a WhatsApp group's subject, description and/or join_approval_mode. At least one is required.

whatsapp_groups_list

ChatGPT
List the WhatsApp groups a phone number administers (Groups API — Cloud API numbers only; coexistence numbers can't use it). Paginated with limit / after.

whatsapp_number_info

ChatGPT
Read the live state of a WhatsApp phone number from Meta: display_phone_number, verified_name, name_status, quality_rating, messaging_limit_tier, throughput, status, platform_type (CLOUD_API vs a coexistence number still in the WhatsApp Business app), plus the Business Account's review and verification status.

whatsapp_template_create

ChatGPT
Submit a new WhatsApp message template to Meta for review. Either pass components (custom template: HEADER / BODY / FOOTER / BUTTONS in Meta's shape, with example values for any {{n}} placeholders) or library_template_name to instantiate one of Meta's pre-approved library templates (approved instantly). name must be lowercase letters, digits and underscores; category is UTILITY, MARKETING or AUTHENTICATION. Custom templates come back PENDING — watch the message_template.status_updated webhook or re-list with refresh.

whatsapp_template_delete

ChatGPT
Delete a WhatsApp template on Meta and in Postproxy. With language, only that language variant is deleted; addressing by name without language deletes every language of that name. Deleted template names can't be reused for 30 days on Meta.

whatsapp_template_get

ChatGPT
Get one WhatsApp message template with its components (header, body, footer, buttons), status, category, parameter_format and variable_count.

whatsapp_template_library_get

ChatGPT
Look up a pre-approved template in Meta's template library by name (e.g. order_confirmation, delivery_update) to see the inputs it needs before creating it with whatsapp_template_create + library_template_name.

whatsapp_template_update

ChatGPT
Update a WhatsApp template's components and/or message_send_ttl_seconds. Editing components sends the template back through Meta review (status returns to PENDING). At least one of components / message_send_ttl_seconds is required.

whatsapp_templates_list

ChatGPT
List the message templates on a WhatsApp Business Account (the profile) as Postproxy has them synced from Meta. Filter by name, language or status (APPROVED, PENDING, REJECTED, PAUSED, DISABLED). Pass refresh: true to pull Meta's current list first. Only APPROVED templates can be sent; each entry's variable_count is how many values dm_message_send's template.variables must carry.

whatsapp_username_delete

ChatGPT
Release the WhatsApp username set on a phone number.

whatsapp_username_get

ChatGPT
Read the WhatsApp username (wa.me/username handle) set on a phone number, if any, and its status.

whatsapp_username_set

ChatGPT
Claim or change the WhatsApp username of a phone number. Letters, digits, periods and underscores, must contain a letter, no leading / trailing / consecutive periods. Pass transfer_action: force_transfer to move a username already held by another number in the same business.

whatsapp_username_suggestions

ChatGPT
Get Meta's available username suggestions for a phone number.

whatsapp_users_block

ChatGPT
Block up to 1000 phone numbers on a WhatsApp phone number so they can no longer message it. Returns succeeded and failed lists.

whatsapp_users_unblock

ChatGPT
Unblock up to 1000 previously blocked phone numbers on a WhatsApp phone number. Returns succeeded and failed lists.

auth_status

Claude

comments_create

Claude

comments_delete

Claude

comments_get

Claude

comments_hide

Claude

comments_like

Claude

comments_list

Claude

comments_unhide

Claude

comments_unlike

Claude

dm_chat_archive

Claude

dm_chat_create

Claude

dm_chat_get

Claude

dm_chat_unarchive

Claude

dm_chats_list

Claude

dm_comment_private_reply

Claude

dm_message_edit

Claude

dm_message_get

Claude

dm_message_react

Claude

dm_message_send

Claude

dm_message_unreact

Claude

dm_messages_list

Claude

history_list

Claude

post_delete

Claude

post_delete_on_platform

Claude

post_publish

Claude

post_publish_draft

Claude

post_stats

Claude

post_status

Claude

post_update

Claude

profile_comments_create

Claude

profile_comments_delete

Claude

profile_comments_get

Claude

profile_comments_list

Claude

profile_groups_initialize_connection

Claude

profile_groups_list

Claude

profiles_list

Claude

profiles_placements

Claude

profiles_stats

Claude

queues_create

Claude

queues_delete

Claude

queues_get

Claude

queues_list

Claude

queues_next_slot

Claude

queues_update

Claude

upload_create

Claude

Capabilities

Writes

Example Prompts

Click any prompt to copy it.

Similar Apps